()
| 225 | } |
| 226 | |
| 227 | func (sv *ScrollView) updateScrollBars() { |
| 228 | size := sv.SizePixels() |
| 229 | compositeSize := sv.composite.SizePixels() |
| 230 | |
| 231 | var si win.SCROLLINFO |
| 232 | si.CbSize = uint32(unsafe.Sizeof(si)) |
| 233 | si.FMask = win.SIF_PAGE | win.SIF_RANGE |
| 234 | |
| 235 | newCompositeBounds := Rectangle{Width: compositeSize.Width, Height: compositeSize.Height} |
| 236 | |
| 237 | if size != compositeSize { |
| 238 | dpi := uint32(sv.DPI()) |
| 239 | |
| 240 | vsbw := int(win.GetSystemMetricsForDpi(win.SM_CXVSCROLL, dpi)) |
| 241 | hsbh := int(win.GetSystemMetricsForDpi(win.SM_CYHSCROLL, dpi)) |
| 242 | |
| 243 | if size.Width < compositeSize.Width && size.Height < compositeSize.Height { |
| 244 | size.Width -= vsbw |
| 245 | size.Height -= hsbh |
| 246 | } |
| 247 | } |
| 248 | |
| 249 | si.NMax = int32(compositeSize.Width - 1) |
| 250 | si.NPage = uint32(size.Width) |
| 251 | win.SetScrollInfo(sv.hWnd, win.SB_HORZ, &si, false) |
| 252 | newCompositeBounds.X = sv.scroll(win.SB_HORZ, win.SB_THUMBPOSITION) |
| 253 | |
| 254 | si.NMax = int32(compositeSize.Height - 1) |
| 255 | si.NPage = uint32(size.Height) |
| 256 | win.SetScrollInfo(sv.hWnd, win.SB_VERT, &si, false) |
| 257 | newCompositeBounds.Y = sv.scroll(win.SB_VERT, win.SB_THUMBPOSITION) |
| 258 | |
| 259 | sv.composite.SetBoundsPixels(newCompositeBounds) |
| 260 | } |
| 261 | |
| 262 | // scroll scrolls and returns new position in native pixels. |
| 263 | func (sv *ScrollView) scroll(sb int32, cmd uint16) int { |
no test coverage detected