summaryrefslogtreecommitdiff
path: root/prefsize_windows.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-04-13 13:00:07 -0400
committerPietro Gagliardi <[email protected]>2014-04-13 13:00:07 -0400
commit6c265dd54daf4567ec9d2cc23834279a4a690393 (patch)
tree808565c27565026cf1cce7c3beca3ec2cd61b1c6 /prefsize_windows.go
parent417bdb89492dc1eb2ca53535fd9891e3cb5bb7d7 (diff)
Rolled back the Windows horizontally scrolling Listbox changes because I can't seem to get it to work on Mac OS X (and keeping that code there is inefficient); removed the guarantee of horizontal scrollbars in Listbox and made that a future plan. Both the Windows and the non-working Mac OS X code is in unmigrated/hscrolllistbox.go (and the unmigrated/ folder will be renamed shortly).
Diffstat (limited to 'prefsize_windows.go')
-rw-r--r--prefsize_windows.go121
1 files changed, 0 insertions, 121 deletions
diff --git a/prefsize_windows.go b/prefsize_windows.go
index 07a633f..850fdb5 100644
--- a/prefsize_windows.go
+++ b/prefsize_windows.go
@@ -150,127 +150,6 @@ func muldiv(ma int, mb int, div int) int {
return int(int32(r1))
}
-// List Boxes do not dynamically handle horizontal scrollbars.
-// We have to manually handle this ourselves.
-// TODO make this run on the main thread when we switch to uitask taking function literals
-// TODO this is inefficient; some caching would be nice
-func recalcListboxWidth(hwnd _HWND) {
- var size _SIZE
-
- ret := make(chan uiret)
- defer close(ret)
- uitask <- &uimsg{
- call: _sendMessage,
- p: []uintptr{
- uintptr(hwnd),
- uintptr(_LB_GETCOUNT),
- uintptr(0),
- uintptr(0),
- },
- ret: ret,
- }
- r := <-ret
- if r.ret == uintptr(_LB_ERR) { // failure
- panic(fmt.Errorf("error getting number of items for Listbox width calculations: %v", r.err))
- }
- n := int(r.ret)
- uitask <- &uimsg{
- call: _getWindowDC,
- p: []uintptr{uintptr(hwnd)},
- ret: ret,
- }
- r = <-ret
- if r.ret == 0 { // failure
- panic(fmt.Errorf("error getting DC for Listbox width calculations: %v", r.err))
- }
- dc := _HANDLE(r.ret)
- uitask <- &uimsg{
- call: _selectObject,
- p: []uintptr{
- uintptr(dc),
- uintptr(controlFont),
- },
- ret: ret,
- }
- r = <-ret
- if r.ret == 0 { // failure
- panic(fmt.Errorf("error loading control font into device context for Listbox width calculation: %v", r.err))
- }
- hextent := uintptr(0)
- for i := 0; i < n; i++ {
- uitask <- &uimsg{
- call: _sendMessage,
- p: []uintptr{
- uintptr(hwnd),
- uintptr(_LB_GETTEXTLEN),
- uintptr(_WPARAM(i)),
- uintptr(0),
- },
- ret: ret,
- }
- r := <-ret
- if r.ret == uintptr(_LB_ERR) {
- panic("UI library internal error: LB_ERR from LB_GETTEXTLEN in what we know is a valid listbox index (came from LB_GETSELITEMS)")
- }
- str := make([]uint16, r.ret)
- uitask <- &uimsg{
- call: _sendMessage,
- p: []uintptr{
- uintptr(hwnd),
- uintptr(_LB_GETTEXT),
- uintptr(_WPARAM(i)),
- uintptr(_LPARAM(unsafe.Pointer(&str[0]))),
- },
- ret: ret,
- }
- r = <-ret
- if r.ret == uintptr(_LB_ERR) {
- panic("UI library internal error: LB_ERR from LB_GETTEXT in what we know is a valid listbox index (came from LB_GETSELITEMS)")
- }
- // r.ret is still the length of the string; this time without the null terminator
- uitask <- &uimsg{
- call: _getTextExtentPoint32,
- p: []uintptr{
- uintptr(dc),
- uintptr(unsafe.Pointer(&str[0])),
- r.ret,
- uintptr(unsafe.Pointer(&size)),
- },
- ret: ret,
- }
- r = <-ret
- if r.ret == 0 { // failure
- panic(fmt.Errorf("error getting width of item %d text for Listbox width calculation: %v", i, r.err))
- }
- if hextent < uintptr(size.cx) {
- hextent = uintptr(size.cx)
- }
- }
- uitask <- &uimsg{
- call: _releaseDC,
- p: []uintptr{
- uintptr(hwnd),
- uintptr(dc),
- },
- ret: ret,
- }
- r = <-ret
- if r.ret == 0 { // failure
- panic(fmt.Errorf("error releasing DC for Listbox width calculations: %v", r.err))
- }
- uitask <- &uimsg{
- call: _sendMessage,
- p: []uintptr{
- uintptr(hwnd),
- uintptr(_LB_SETHORIZONTALEXTENT),
- hextent,
- uintptr(0),
- },
- ret: ret,
- }
- <-ret
-}
-
type _SIZE struct {
cx int32 // originally LONG
cy int32