diff options
| author | Pietro Gagliardi <[email protected]> | 2015-12-11 20:37:59 -0500 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2015-12-11 20:37:59 -0500 |
| commit | f8e3f12ab02b528f2a05a4f713d7af7ea8e44b42 (patch) | |
| tree | 82dedf4d37f0f6d31e88ebb2ca1ce6499dead261 /prev/window_windows.go | |
| parent | e34c561ed5bedeb180437ec165882b98d70d38c1 (diff) | |
LET'S GET THIS FINAL REWRITE EVER STARTED
Diffstat (limited to 'prev/window_windows.go')
| -rw-r--r-- | prev/window_windows.go | 103 |
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) + } +} |
