diff options
Diffstat (limited to 'area.go')
| -rw-r--r-- | area.go | 156 |
1 files changed, 0 insertions, 156 deletions
diff --git a/area.go b/area.go deleted file mode 100644 index 358a391..0000000 --- a/area.go +++ /dev/null @@ -1,156 +0,0 @@ -// 16 december 2015 - -package ui - -import ( - "unsafe" -) - -// #include "ui.h" -import "C" - -// no need to lock this; only the GUI thread can access it -var areas = make(map[*C.uiArea]*Area) - -// Area is a Control that represents a blank canvas that a program -// can draw on as it wishes. Areas also receive keyboard and mouse -// events, and programs can react to those as they see fit. Drawing -// and event handling are handled through an instance of a type -// that implements AreaHandler that every Area has; see AreaHandler -// for details. -// -// There are two types of areas. Non-scrolling areas are rectangular -// and have no scrollbars. Programs can draw on and get mouse -// events from any point in the Area, and the size of the Area is -// decided by package ui itself, according to the layout of controls -// in the Window the Area is located in and the size of said Window. -// There is no way to query the Area's size or be notified when its -// size changes; instead, you are given the area size as part of the -// draw and mouse event handlers, for use solely within those -// handlers. -// -// Scrolling areas have horziontal and vertical scrollbars. The amount -// that can be scrolled is determined by the area's size, which is -// decided by the programmer (both when creating the Area and by -// a call to SetSize). Only a portion of the Area is visible at any time; -// drawing and mouse events are automatically adjusted to match -// what portion is visible, so you do not have to worry about scrolling -// in your event handlers. AreaHandler has more information. -// -// The internal coordinate system of an Area is points, which are -// floating-point and device-independent. For more details, see -// AreaHandler. The size of a scrolling Area must be an exact integer -// number of points (that is, you cannot have an Area that is 32.5 -// points tall) and thus the parameters to NewScrollingArea and -// SetSize are ints. All other instances of points in parameters and -// structures (including sizes of drawn objects) are float64s. -type Area struct { - c *C.uiControl - a *C.uiArea - - ah *C.uiAreaHandler - - scrolling bool -} - -// NewArea creates a new non-scrolling Area. -func NewArea(handler AreaHandler) *Area { - a := new(Area) - a.scrolling = false - a.ah = registerAreaHandler(handler) - - a.a = C.uiNewArea(a.ah) - a.c = (*C.uiControl)(unsafe.Pointer(a.a)) - - areas[a.a] = a - - return a -} - -// NewScrollingArea creates a new scrolling Area of the given size, -// in points. -func NewScrollingArea(handler AreaHandler, width int, height int) *Area { - a := new(Area) - a.scrolling = true - a.ah = registerAreaHandler(handler) - - a.a = C.uiNewScrollingArea(a.ah, C.intmax_t(width), C.intmax_t(height)) - a.c = (*C.uiControl)(unsafe.Pointer(a.a)) - - areas[a.a] = a - - return a -} - -// Destroy destroys the Area. -func (a *Area) Destroy() { - delete(areas, a.a) - C.uiControlDestroy(a.c) - unregisterAreaHandler(a.ah) -} - -// LibuiControl returns the libui uiControl pointer that backs -// the Area. This is only used by package ui itself and should -// not be called by programs. -func (a *Area) LibuiControl() uintptr { - return uintptr(unsafe.Pointer(a.c)) -} - -// Handle returns the OS-level handle associated with this Area. -// On Windows this is an HWND of a libui-internal class. -// On GTK+ this is a pointer to a GtkScrolledWindow with a -// GtkViewport as its child. The child of the viewport is the -// GtkDrawingArea that provides the Area itself. -// On OS X this is a pointer to a NSScrollView whose document view -// is the NSView that provides the Area itself. -func (a *Area) Handle() uintptr { - return uintptr(C.uiControlHandle(a.c)) -} - -// Show shows the Area. -func (a *Area) Show() { - C.uiControlShow(a.c) -} - -// Hide hides the Area. -func (a *Area) Hide() { - C.uiControlHide(a.c) -} - -// Enable enables the Area. -func (a *Area) Enable() { - C.uiControlEnable(a.c) -} - -// Disable disables the Area. -func (a *Area) Disable() { - C.uiControlDisable(a.c) -} - -// SetSize sets the size of a scrolling Area to the given size, in points. -// SetSize panics if called on a non-scrolling Area. -func (a *Area) SetSize(width int, height int) { - if !a.scrolling { - panic("attempt to call SetSize on non-scrolling Area") - } - C.uiAreaSetSize(a.a, C.intmax_t(width), C.intmax_t(height)) -} - -// QueueRedrawAll queues the entire Area for redraw. -// The Area is not redrawn before this function returns; it is -// redrawn when next possible. -func (a *Area) QueueRedrawAll() { - C.uiAreaQueueRedrawAll(a.a) -} - -// ScrollTo scrolls the Area to show the given rectangle; what this -// means is implementation-defined, but you can safely assume -// that as much of the given rectangle as possible will be visible -// after this call. (TODO verify this on OS X) ScrollTo panics if called -// on a non-scrolling Area. -func (a *Area) ScrollTo(x float64, y float64, width float64, height float64) { - if !a.scrolling { - panic("attempt to call ScrollTo on non-scrolling Area") - } - C.uiAreaScrollTo(a.a, C.double(x), C.double(y), C.double(width), C.double(height)) -} |
