Noah Petherbridge
f18dcf9c2c
* Increase the default window size from 800x600 to 1024x768. * Move the drawing canvas in EditorMode to inside the EditorUI where it can be better managed with the other widgets it shares the screen with. * Slightly fix Frame packing bug (with East orientation) that was causing right-aligned statusbar items to be partially cropped off-screen. Moved a couple statusbar labels in EditorMode to the right. * Add `Parent()` and `Adopt()` methods to widgets for when they're managed by containers like the Frame. * Add utility functions to UI toolkit for computing a widget's Absolute Position and Absolute Rect, by crawling all parent widgets and summing them up. * Add `lib/debugging` package with useful stack tracing utilities. * Add `make guitest` to launch the program into the GUI Test. The command line flag is: `doodle -guitest` * Console: add a `close` command which returns to the MainScene. * Initialize the font cache directory (~/.cache/doodle/fonts) but don't extract the fonts there yet.
39 lines
741 B
Go
39 lines
741 B
Go
package ui
|
|
|
|
import "git.kirsle.net/apps/doodle/render"
|
|
|
|
// AbsolutePosition computes a widget's absolute X,Y position on the
|
|
// window on screen by crawling its parent widget tree.
|
|
func AbsolutePosition(w Widget) render.Point {
|
|
abs := w.Point()
|
|
|
|
var (
|
|
node = w
|
|
ok bool
|
|
)
|
|
|
|
for {
|
|
node, ok = node.Parent()
|
|
if !ok { // reached the top of the tree
|
|
return abs
|
|
}
|
|
|
|
abs.Add(node.Point())
|
|
}
|
|
}
|
|
|
|
// AbsoluteRect returns a Rect() offset with the absolute position.
|
|
func AbsoluteRect(w Widget) render.Rect {
|
|
var (
|
|
P = AbsolutePosition(w)
|
|
R = w.Rect()
|
|
)
|
|
return render.Rect{
|
|
X: P.X,
|
|
Y: P.Y,
|
|
W: R.W + P.X,
|
|
H: R.H, // TODO: the Canvas in EditMode lets you draw pixels
|
|
// below the status bar if we do `+ R.Y` here.
|
|
}
|
|
}
|