summaryrefslogtreecommitdiff
path: root/redo/control_windows.go
diff options
context:
space:
mode:
Diffstat (limited to 'redo/control_windows.go')
-rw-r--r--redo/control_windows.go51
1 files changed, 21 insertions, 30 deletions
diff --git a/redo/control_windows.go b/redo/control_windows.go
index ac3297e..ac57527 100644
--- a/redo/control_windows.go
+++ b/redo/control_windows.go
@@ -6,46 +6,30 @@ package ui
import "C"
type controlPrivate interface {
- // TODO
+ hwnd() C.HWND
Control
}
-type controlbase struct {
- hwnd C.HWND
- parent C.HWND // for Tab and Group
- textlen C.LONG
-}
-
type controlParent struct {
hwnd C.HWND
}
-func newControl(class C.LPWSTR, style C.DWORD, extstyle C.DWORD) *controlbase {
- c := new(controlbase)
- // TODO rename to newWidget
- c.hwnd = C.newWidget(class, style, extstyle)
- return c
-}
-
-// TODO for maximum correctness these shouldn't take controlbases... but then the amount of duplicated code would skyrocket
-
-func basesetParent(c *controlbase, p *controlParent) {
- C.controlSetParent(c.hwnd, p.hwnd)
- c.parent = p.hwnd
+func basesetParent(c controlPrivate, p *controlParent) {
+ C.controlSetParent(c.hwnd(), p.hwnd)
}
-func basecontainerShow(c *controlbase) {
- C.ShowWindow(c.hwnd, C.SW_SHOW)
+func basecontainerShow(c controlPrivate) {
+ C.ShowWindow(c.hwnd(), C.SW_SHOW)
}
-func basecontainerHide(c *controlbase) {
- C.ShowWindow(c.hwnd, C.SW_HIDE)
+func basecontainerHide(c controlPrivate) {
+ C.ShowWindow(c.hwnd(), C.SW_HIDE)
}
// don't specify basepreferredSize; it is custom on ALL controls
-func basecommitResize(c *controlbase, a *allocation, d *sizing) {
- C.moveWindow(c.hwnd, C.int(a.x), C.int(a.y), C.int(a.width), C.int(a.height))
+func basecommitResize(c controlPrivate, a *allocation, d *sizing) {
+ C.moveWindow(c.hwnd(), C.int(a.x), C.int(a.y), C.int(a.width), C.int(a.height))
}
func basegetAuxResizeInfo(c controlPrivate, d *sizing) {
@@ -54,12 +38,19 @@ func basegetAuxResizeInfo(c controlPrivate, d *sizing) {
// these are provided for convenience
-func (c *controlbase) text() string {
- return getWindowText(c.hwnd)
+type textableControl interface {
+ controlPrivate
+ textlen() C.LONG
+ settextlen(C.LONG)
+}
+
+func baseText(c textableControl) string {
+ return getWindowText(c.hwnd())
}
-func (c *controlbase) setText(text string) {
+func baseSetText(c textableControl, text string) {
+ hwnd := c.hwnd()
t := toUTF16(text)
- C.setWindowText(c.hwnd, t)
- c.textlen = C.controlTextLength(c.hwnd, t)
+ C.setWindowText(hwnd, t)
+ c.settextlen(C.controlTextLength(hwnd, t))
}