func (wb *WindowBase) dialogBaseUnitsToPixels(dlus Size) (pixels Size) { // FIXME: Cache dialog base units on font change. base := wb.dialogBaseUnits() return Size{ int(win.MulDiv(int32(dlus.Width), int32(base.Width), 4)), int(win.MulDiv(int32(dlus.Height), int32(base.Height), 8)), } }
func newFontFromLOGFONT(lf *win.LOGFONT, dpi int) (*Font, error) { if lf == nil { return nil, newError("lf cannot be nil") } family := win.UTF16PtrToString(&lf.LfFaceName[0]) pointSize := int(win.MulDiv(lf.LfHeight, 72, int32(dpi))) if pointSize < 0 { pointSize = -pointSize } var style FontStyle if lf.LfWeight > win.FW_NORMAL { style |= FontBold } if lf.LfItalic == win.TRUE { style |= FontItalic } if lf.LfUnderline == win.TRUE { style |= FontUnderline } if lf.LfStrikeOut == win.TRUE { style |= FontStrikeOut } return NewFont(family, pointSize, style) }
func (f *Font) createForDPI(dpi int) win.HFONT { var lf win.LOGFONT lf.LfHeight = -win.MulDiv(int32(f.pointSize), int32(dpi), 72) if f.style&FontBold > 0 { lf.LfWeight = win.FW_BOLD } else { lf.LfWeight = win.FW_NORMAL } if f.style&FontItalic > 0 { lf.LfItalic = 1 } if f.style&FontUnderline > 0 { lf.LfUnderline = 1 } if f.style&FontStrikeOut > 0 { lf.LfStrikeOut = 1 } lf.LfCharSet = win.DEFAULT_CHARSET lf.LfOutPrecision = win.OUT_TT_PRECIS lf.LfClipPrecision = win.CLIP_DEFAULT_PRECIS lf.LfQuality = win.CLEARTYPE_QUALITY lf.LfPitchAndFamily = win.VARIABLE_PITCH | win.FF_SWISS src := syscall.StringToUTF16(f.family) dest := lf.LfFaceName[:] copy(dest, src) return win.CreateFontIndirect(&lf) }