summaryrefslogtreecommitdiff
path: root/prefsize_windows.go
diff options
context:
space:
mode:
authorPietro Gagliardi <[email protected]>2014-06-10 11:23:00 -0400
committerPietro Gagliardi <[email protected]>2014-06-10 11:23:00 -0400
commit6e7f15c8e072b70130c9e9d5230b66f5685656ce (patch)
tree7523d5b79f3bdca3a7f82c6b13a6bbc4be775a06 /prefsize_windows.go
parent09e3fcd9cb86f712ce4004c445609e09152c0955 (diff)
More go fmt.
Diffstat (limited to 'prefsize_windows.go')
-rw-r--r--prefsize_windows.go129
1 files changed, 64 insertions, 65 deletions
diff --git a/prefsize_windows.go b/prefsize_windows.go
index d6a41d9..8b29e2f 100644
--- a/prefsize_windows.go
+++ b/prefsize_windows.go
@@ -4,7 +4,6 @@ package ui
import (
"fmt"
-// "syscall"
"unsafe"
)
@@ -20,64 +19,64 @@ import (
// As we are left with incomplete data, an arbitrary size will be chosen
const (
- defaultWidth = 100 // 2 * preferred width of buttons
+ defaultWidth = 100 // 2 * preferred width of buttons
)
type dlgunits struct {
- width int
- height int
- longest bool // TODO actually use this
- getsize uintptr
- area bool // use area sizes instead
+ width int
+ height int
+ longest bool // TODO actually use this
+ getsize uintptr
+ area bool // use area sizes instead
}
var stdDlgSizes = [nctypes]dlgunits{
- c_button: dlgunits{
- width: 50,
- height: 14,
- getsize: _BCM_GETIDEALSIZE,
+ c_button: dlgunits{
+ width: 50,
+ height: 14,
+ getsize: _BCM_GETIDEALSIZE,
},
- c_checkbox: dlgunits{
+ c_checkbox: dlgunits{
// widtdh is not defined here so assume longest
- longest: true,
- height: 10,
+ longest: true,
+ height: 10,
},
- c_combobox: dlgunits{
+ c_combobox: dlgunits{
// technically the height of a combobox has to include the drop-down list (this is a historical accident: originally comboboxes weren't drop-down)
// but since we're forcing Common Controls version 6, we can take advantage of one of its mechanisms to automatically fix this mistake (bad practice but whatever)
// see also: http://blogs.msdn.com/b/oldnewthing/archive/2006/03/10/548537.aspx
// note that the Microsoft guidelines pages don't take the list size into account
- longest: true,
- height: 12, // from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx; the page linked above says 14
+ longest: true,
+ height: 12, // from http://msdn.microsoft.com/en-us/library/windows/desktop/bb226818%28v=vs.85%29.aspx; the page linked above says 14
},
- c_lineedit: dlgunits{
- longest: true,
- height: 14,
+ c_lineedit: dlgunits{
+ longest: true,
+ height: 14,
},
- c_label: dlgunits{
- longest: true,
- height: 8,
+ c_label: dlgunits{
+ longest: true,
+ height: 8,
},
- c_listbox: dlgunits{
- longest: true,
+ c_listbox: dlgunits{
+ longest: true,
// height is not clearly defined here ("an integral number of items (3 items minimum)") so just use a three-line edit control
- height: 14 + 10 + 10,
+ height: 14 + 10 + 10,
},
- c_progressbar: dlgunits{
- width: 237, // the first reference says 107 also works; TODO decide which to use
- height: 8,
+ c_progressbar: dlgunits{
+ width: 237, // the first reference says 107 also works; TODO decide which to use
+ height: 8,
},
- c_area: dlgunits{
- area: true,
+ c_area: dlgunits{
+ area: true,
},
}
var (
- _selectObject = gdi32.NewProc("SelectObject")
- _getDC = user32.NewProc("GetDC")
+ _selectObject = gdi32.NewProc("SelectObject")
+ _getDC = user32.NewProc("GetDC")
_getTextExtentPoint32 = gdi32.NewProc("GetTextExtentPoint32W")
- _getTextMetrics = gdi32.NewProc("GetTextMetricsW")
- _releaseDC = user32.NewProc("ReleaseDC")
+ _getTextMetrics = gdi32.NewProc("GetTextMetricsW")
+ _releaseDC = user32.NewProc("ReleaseDC")
)
// This function runs on uitask; call the functions directly.
@@ -95,7 +94,7 @@ func (s *sysData) preferredSize() (width int, height int) {
msg,
uintptr(0),
uintptr(unsafe.Pointer(&size)))
- if r1 != uintptr(_FALSE) { // success
+ if r1 != uintptr(_FALSE) { // success
return int(size.cx), int(size.cy)
}
// otherwise the message approach failed, so fall back to the regular approach
@@ -107,28 +106,28 @@ func (s *sysData) preferredSize() (width int, height int) {
var baseX, baseY int
r1, _, err := _getDC.Call(uintptr(s.hwnd))
- if r1 == 0 { // failure
+ if r1 == 0 { // failure
panic(fmt.Errorf("error getting DC for preferred size calculations: %v", err))
}
dc = _HANDLE(r1)
r1, _, err = _selectObject.Call(
uintptr(dc),
uintptr(controlFont))
- if r1 == 0 { // failure
+ if r1 == 0 { // failure
panic(fmt.Errorf("error loading control font into device context for preferred size calculation: %v", err))
}
r1, _, err = _getTextMetrics.Call(
uintptr(dc),
uintptr(unsafe.Pointer(&tm)))
- if r1 == 0 { // failure
+ if r1 == 0 { // failure
panic(fmt.Errorf("error getting text metrics for preferred size calculations: %v", err))
}
- baseX = int(tm.tmAveCharWidth) // TODO not optimal; third reference has better way
+ baseX = int(tm.tmAveCharWidth) // TODO not optimal; third reference has better way
baseY = int(tm.tmHeight)
r1, _, err = _releaseDC.Call(
uintptr(s.hwnd),
uintptr(dc))
- if r1 == 0 { // failure
+ if r1 == 0 { // failure
panic(fmt.Errorf("error releasing DC for preferred size calculations: %v", err))
}
@@ -138,8 +137,8 @@ func (s *sysData) preferredSize() (width int, height int) {
width = defaultWidth
}
height = stdDlgSizes[s.ctype].height
- width = muldiv(width, baseX, 4) // equivalent to right of rect
- height = muldiv(height, baseY, 8) // equivalent to bottom of rect
+ width = muldiv(width, baseX, 4) // equivalent to right of rect
+ height = muldiv(height, baseY, 8) // equivalent to bottom of rect
return width, height
}
@@ -158,29 +157,29 @@ func muldiv(ma int, mb int, div int) int {
}
type _SIZE struct {
- cx int32 // originally LONG
- cy int32
+ cx int32 // originally LONG
+ cy int32
}
type _TEXTMETRICS struct {
- tmHeight int32
- tmAscent int32
- tmDescent int32
- tmInternalLeading int32
- tmExternalLeading int32
- tmAveCharWidth int32
- tmMaxCharWidth int32
- tmWeight int32
- tmOverhang int32
- tmDigitizedAspectX int32
- tmDigitizedAspectY int32
- tmFirstChar uint16
- tmLastChar uint16
- tmDefaultChar uint16
- tmBreakChar uint16
- tmItalic byte
- tmUnderlined byte
- tmStruckOut byte
- tmPitchAndFamily byte
- tmCharSet byte
+ tmHeight int32
+ tmAscent int32
+ tmDescent int32
+ tmInternalLeading int32
+ tmExternalLeading int32
+ tmAveCharWidth int32
+ tmMaxCharWidth int32
+ tmWeight int32
+ tmOverhang int32
+ tmDigitizedAspectX int32
+ tmDigitizedAspectY int32
+ tmFirstChar uint16
+ tmLastChar uint16
+ tmDefaultChar uint16
+ tmBreakChar uint16
+ tmItalic byte
+ tmUnderlined byte
+ tmStruckOut byte
+ tmPitchAndFamily byte
+ tmCharSet byte
}