From cbf439223bb0015d82779d5675fbd058025624c9 Mon Sep 17 00:00:00 2001 From: Pietro Gagliardi Date: Tue, 1 Apr 2014 21:24:20 -0400 Subject: [PATCH] Changed the font loading on Windows to always load the control font unless a flag to not load any font is set; when menus and statusbars are added, they need special casing. This also means the preferred size calculations reads controlFont directly (it will need the same change). --- prefsize_windows.go | 2 +- sysdata_windows.go | 19 ++++++------------- todo.md | 2 +- 3 files changed, 8 insertions(+), 15 deletions(-) diff --git a/prefsize_windows.go b/prefsize_windows.go index 9a16f8d..68b54b9 100644 --- a/prefsize_windows.go +++ b/prefsize_windows.go @@ -82,7 +82,7 @@ func (s *sysData) preferredSize() (width int, height int) { dc = _HANDLE(r1) r1, _, err = _selectObject.Call( uintptr(dc), - uintptr(unsafe.Pointer(*classTypes[s.ctype].font))) + uintptr(controlFont)) if r1 == 0 { // failure panic(fmt.Errorf("error loading control font into device context for preferred size calculation: %v", err)) } diff --git a/sysdata_windows.go b/sysdata_windows.go index 6093f12..15249cd 100644 --- a/sysdata_windows.go +++ b/sysdata_windows.go @@ -29,7 +29,7 @@ type classData struct { xstyle uint32 mkid bool altStyle uint32 - font *_HANDLE + doNotLoadFont bool appendMsg uintptr insertBeforeMsg uintptr deleteMsg uintptr @@ -47,25 +47,23 @@ var classTypes = [nctypes]*classData{ register: registerStdWndClass, style: _WS_OVERLAPPEDWINDOW, xstyle: 0, + doNotLoadFont: true, }, c_button: &classData{ name: "BUTTON", style: _BS_PUSHBUTTON | controlstyle, xstyle: 0 | controlxstyle, - font: &controlFont, }, c_checkbox: &classData{ name: "BUTTON", style: _BS_AUTOCHECKBOX | controlstyle, xstyle: 0 | controlxstyle, - font: &controlFont, }, c_combobox: &classData{ name: "COMBOBOX", style: _CBS_DROPDOWNLIST | _WS_VSCROLL | controlstyle, xstyle: 0 | controlxstyle, altStyle: _CBS_DROPDOWN | _CBS_AUTOHSCROLL | _WS_VSCROLL | controlstyle, - font: &controlFont, appendMsg: _CB_ADDSTRING, insertBeforeMsg: _CB_INSERTSTRING, deleteMsg: _CB_DELETESTRING, @@ -79,13 +77,11 @@ var classTypes = [nctypes]*classData{ style: _ES_AUTOHSCROLL | _WS_BORDER | controlstyle, xstyle: 0 | controlxstyle, altStyle: _ES_PASSWORD | _ES_AUTOHSCROLL | _WS_BORDER | controlstyle, - font: &controlFont, }, c_label: &classData{ name: "STATIC", style: _SS_NOPREFIX | controlstyle, xstyle: 0 | controlxstyle, - font: &controlFont, }, c_listbox: &classData{ name: "LISTBOX", @@ -94,7 +90,6 @@ var classTypes = [nctypes]*classData{ style: _LBS_NOTIFY | _WS_BORDER | _WS_VSCROLL | controlstyle, xstyle: 0 | controlxstyle, altStyle: _LBS_EXTENDEDSEL | _LBS_NOTIFY | _WS_BORDER | _WS_VSCROLL | controlstyle, - font: &controlFont, appendMsg: _LB_ADDSTRING, insertBeforeMsg: _LB_INSERTSTRING, deleteMsg: _LB_DELETESTRING, @@ -107,13 +102,13 @@ var classTypes = [nctypes]*classData{ name: _PROGRESS_CLASS, style: _PBS_SMOOTH | controlstyle, xstyle: 0 | controlxstyle, - font: &controlFont, + doNotLoadFont: true, }, c_area: &classData{ register: registerAreaWndClass, style: areastyle, xstyle: areaxstyle, - font: &controlFont, + doNotLoadFont: true, }, } @@ -182,20 +177,18 @@ func (s *sysData) make(window *sysData) (err error) { return fmt.Errorf("error actually creating window/control: %v", r.err) } s.hwnd = _HWND(r.ret) - if ct.font != nil { + if !ct.doNotLoadFont { uitask <- &uimsg{ call: _sendMessage, p: []uintptr{ uintptr(s.hwnd), uintptr(_WM_SETFONT), - uintptr(_WPARAM(*ct.font)), + uintptr(_WPARAM(controlFont)), uintptr(_LPARAM(_TRUE)), }, ret: ret, } <-ret - } else if s.ctype != c_window { - panic(fmt.Errorf("internal ui package error: control type %d does not have a font (needed for preferred size calculations)", s.ctype)) } return nil } diff --git a/todo.md b/todo.md index 8d11830..d874243 100644 --- a/todo.md +++ b/todo.md @@ -36,7 +36,7 @@ important things: - NSComboBox scans the entered text to see if it matches one of the items and returns the index of that item if it does; find out how to suppress this so that it returns -1 unless the item was chosen from the list (like the other platforms) - some Cocoa controls don't seem to resize correctly: Buttons have space around the edges and don't satisfy stretchiness - make sure GTK+ documentation version point differences (x in 4.3.x) don't matter -- LineEdit heights on Windows seem too big; either that or LineEdit and Button text is not vertically centered properly +- LineEdit heights on Windows seem too big; either that or LineEdit, Button, and Label text is not vertically centered properly - are Checkboxes too small? - Cocoa has similar margining issues (like Comboboxes having margins) - sometimes the size of the drop-down part of a Combobox becomes 0 or 1 or some other impossibly small value on Windows