summaryrefslogtreecommitdiff
path: root/prev/window_windows.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2015-12-11 20:37:59 -0500
committerPietro Gagliardi <[email protected]>2015-12-11 20:37:59 -0500
commitf8e3f12ab02b528f2a05a4f713d7af7ea8e44b42 (patch)
tree82dedf4d37f0f6d31e88ebb2ca1ce6499dead261 /prev/window_windows.go
parente34c561ed5bedeb180437ec165882b98d70d38c1 (diff)
LET'S GET THIS FINAL REWRITE EVER STARTED
Diffstat (limited to 'prev/window_windows.go')
-rw-r--r--prev/window_windows.go103
1 files changed, 103 insertions, 0 deletions
diff --git a/prev/window_windows.go b/prev/window_windows.go
new file mode 100644
index 0000000..85a8c83
--- /dev/null
+++ b/prev/window_windows.go
@@ -0,0 +1,103 @@
+// 12 july 2014
+
+package ui
+
+import (
+ "fmt"
+ "syscall"
+ "unsafe"
+)
+
+// #include "winapi_windows.h"
+import "C"
+
+type window struct {
+ hwnd C.HWND
+ shownbefore bool
+
+ closing *event
+
+ child Control
+ margined bool
+}
+
+func makeWindowWindowClass() error {
+ var errmsg *C.char
+
+ err := C.makeWindowWindowClass(&errmsg)
+ if err != 0 || errmsg != nil {
+ return fmt.Errorf("%s: %v", C.GoString(errmsg), syscall.Errno(err))
+ }
+ return nil
+}
+
+func newWindow(title string, width int, height int, control Control) *window {
+ w := &window{
+ closing: newEvent(),
+ child: control,
+ }
+ w.hwnd = C.newWindow(toUTF16(title), C.int(width), C.int(height), unsafe.Pointer(w))
+ hresult := C.EnableThemeDialogTexture(w.hwnd, C.ETDT_ENABLE|C.ETDT_USETABTEXTURE)
+ if hresult != C.S_OK {
+ panic(fmt.Errorf("error setting tab background texture on Window; HRESULT: 0x%X", hresult))
+ }
+ w.child.setParent(&controlParent{w.hwnd})
+ return w
+}
+
+func (w *window) Title() string {
+ return getWindowText(w.hwnd)
+}
+
+func (w *window) SetTitle(title string) {
+ C.setWindowText(w.hwnd, toUTF16(title))
+}
+
+func (w *window) Show() {
+ if !w.shownbefore {
+ C.ShowWindow(w.hwnd, C.nCmdShow)
+ C.updateWindow(w.hwnd)
+ w.shownbefore = true
+ } else {
+ C.ShowWindow(w.hwnd, C.SW_SHOW)
+ }
+}
+
+func (w *window) Hide() {
+ C.ShowWindow(w.hwnd, C.SW_HIDE)
+}
+
+func (w *window) Close() {
+ C.windowClose(w.hwnd)
+}
+
+func (w *window) OnClosing(e func() bool) {
+ w.closing.setbool(e)
+}
+
+func (w *window) Margined() bool {
+ return w.margined
+}
+
+func (w *window) SetMargined(margined bool) {
+ w.margined = margined
+}
+
+//export windowResize
+func windowResize(data unsafe.Pointer, r *C.RECT) {
+ w := (*window)(data)
+ d := beginResize(w.hwnd)
+ if w.margined {
+ marginRectDLU(r, marginDialogUnits, marginDialogUnits, marginDialogUnits, marginDialogUnits, d)
+ }
+ w.child.resize(int(r.left), int (r.top), int(r.right - r.left), int(r.bottom - r.top), d)
+}
+
+//export windowClosing
+func windowClosing(data unsafe.Pointer) {
+ w := (*window)(data)
+ close := w.closing.fire()
+ if close {
+ C.windowClose(w.hwnd)
+ }
+}