diff options
| author | trustable-code <krauter.simon@arcor.de> | 2019-08-17 13:51:26 +0200 |
|---|---|---|
| committer | trustable-code <krauter.simon@arcor.de> | 2019-08-17 13:51:26 +0200 |
| commit | eeae283cf8e45fa77fd13a23f3f91159398a22f0 (patch) | |
| tree | 21a68f60e1c43b7e98c739f52d5a04d00c29347a /src | |
| parent | cd14cb3f5bbf87a9660091207bdf1e714bdc34cf (diff) | |
| download | NiGui-eeae283cf8e45fa77fd13a23f3f91159398a22f0.tar.gz NiGui-eeae283cf8e45fa77fd13a23f3f91159398a22f0.zip | |
Implement bold font option for controls and canvas
Diffstat (limited to 'src')
| -rwxr-xr-x | src/nigui.nim | 25 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/gtk3.nim | 2 | ||||
| -rwxr-xr-x | src/nigui/private/gtk3/platform_impl.nim | 30 | ||||
| -rwxr-xr-x | src/nigui/private/windows/platform_impl.nim | 22 | ||||
| -rwxr-xr-x | src/nigui/private/windows/windows.nim | 2 |
5 files changed, 68 insertions, 13 deletions
diff --git a/src/nigui.nim b/src/nigui.nim index f142671..3810446 100755 --- a/src/nigui.nim +++ b/src/nigui.nim @@ -184,6 +184,7 @@ type fScrollableWidth, fScrollableHeight: int fFontFamily: string fFontSize: float + fFontBold: bool fTextColor: Color fBackgroundColor: Color fUseDefaultFontFamily: bool @@ -208,6 +209,7 @@ type fHeight: int fFontFamily: string fFontSize: float + fFontBold: bool fTextColor: Color fLineColor: Color fLineWidth: float @@ -444,6 +446,9 @@ method `fontFamily=`*(canvas: Canvas, fontFamily: string) method fontSize*(canvas: Canvas): float method `fontSize=`*(canvas: Canvas, fontSize: float) +method fontBold*(canvas: Canvas): bool +method `fontBold=`*(canvas: Canvas, fontBold: bool) + method textColor*(canvas: Canvas): Color method `textColor=`*(canvas: Canvas, color: Color) @@ -701,6 +706,10 @@ method `fontSize=`*(control: Control, fontSize: float) method setFontSize*(control: Control, fontSize: float) method resetFontSize*(control: Control) +method fontBold*(control: Control): bool +method `fontBold=`*(control: Control, fontBold: bool) +method setFontBold*(control: Control, fontBold: bool) + method backgroundColor*(control: Control): Color method `backgroundColor=`*(control: Control, color: Color) method setBackgroundColor*(control: Control, color: Color) @@ -1115,6 +1124,10 @@ method fontSize(canvas: Canvas): float = canvas.fFontSize method `fontSize=`(canvas: Canvas, fontSize: float) = canvas.fFontSize = fontSize +method fontBold(canvas: Canvas): bool = canvas.fFontBold + +method `fontBold=`(canvas: Canvas, fontBold: bool) = canvas.fFontBold = fontBold + method textColor(canvas: Canvas): Color = canvas.fTextColor method `textColor=`(canvas: Canvas, color: Color) = canvas.fTextColor = color @@ -1663,6 +1676,16 @@ method resetFontSize(control: Control) = control.fUseDefaultFontSize = true control.triggerRelayoutIfModeIsAuto() +method fontBold(control: Control): bool = control.fFontBold + +method `fontBold=`(control: Control, fontBold: bool) = + control.setFontBold(fontBold) + control.triggerRelayoutIfModeIsAuto() + +method setFontBold(control: Control, fontBold: bool) = + control.fFontBold = fontBold + # should be extended by ControlImpl + method backgroundColor(control: Control): Color = control.fBackgroundColor method `backgroundColor=`(control: Control, color: Color) = @@ -2287,7 +2310,7 @@ method naturalHeight(button: Button): int = button.getTextLineHeight() * button. method enabled(button: Button): bool = button.fEnabled method `enabled=`(button: Button, enabled: bool) = discard - # has to be implemented by NativeTextBox + # has to be implemented by NativeButton method handleKeyDownEvent*(button: Button, event: KeyboardEvent) = if event.key == Key_Return or event.key == Key_Space: diff --git a/src/nigui/private/gtk3/gtk3.nim b/src/nigui/private/gtk3/gtk3.nim index 292bb09..e23c941 100755 --- a/src/nigui/private/gtk3/gtk3.nim +++ b/src/nigui/private/gtk3/gtk3.nim @@ -482,7 +482,7 @@ proc pango_layout_set_font_description*(layout, desc: pointer) {.importc: "pango proc pango_font_description_new*(): pointer {.importc: "pango_font_description_new", libgtk3.} proc pango_font_description_set_family*(desc: pointer, family: cstring) {.importc: "pango_font_description_set_family", libgtk3.} proc pango_font_description_set_size*(desc: pointer, size: cint) {.importc: "pango_font_description_set_size", libgtk3.} -proc pango_font_description_set_weight*(desc: pointer, size: cint) {.importc: "pango_font_description_set_weight", libgtk3.} +proc pango_font_description_set_weight*(desc: pointer, weight: cint) {.importc: "pango_font_description_set_weight", libgtk3.} # proc pango_font_description_get_size*(desc: pointer): cint {.importc: "pango_font_description_get_size", libgtk3.} # proc pango_layout_set_markup*(layout: pointer, markup: cstring, length: cint) {.importc: "pango_layout_set_markup", libgtk3.} # proc pango_layout_new*(context: pointer): pointer {.importc: "pango_layout_new", libgtk3.} diff --git a/src/nigui/private/gtk3/platform_impl.nim b/src/nigui/private/gtk3/platform_impl.nim index 593e8a4..e8a2649 100755 --- a/src/nigui/private/gtk3/platform_impl.nim +++ b/src/nigui/private/gtk3/platform_impl.nim @@ -262,6 +262,15 @@ proc pSetDragDest(widget: pointer) = target.info = 0 gtk_drag_dest_set(widget, GTK_DEST_DEFAULT_ALL, target.addr, 1, GDK_ACTION_COPY) +proc pCreateFont(fontFamily: string, fontSize: float, fontBold: bool): pointer = + result = pango_font_description_new() + pango_font_description_set_family(result, fontFamily) + pango_font_description_set_size(result, cint(fontSize * pFontSizeFactor)) + if fontBold: + pango_font_description_set_weight(result, 700) + else: + pango_font_description_set_weight(result, 400) + # ---------------------------------------------------------------------------------------- # App Procedures @@ -413,15 +422,14 @@ proc stop(timer: var Timer) = discard g_source_remove(timerEntry.timerInternalId) timer = cast[Timer](inactiveTimer) + # ---------------------------------------------------------------------------------------- # Canvas # ---------------------------------------------------------------------------------------- proc pUpdateFont(canvas: Canvas) = let canvasImpl = cast[CanvasImpl](canvas) - canvasImpl.fFont = pango_font_description_new() - pango_font_description_set_family(canvasImpl.fFont, canvas.fontFamily) - pango_font_description_set_size(canvasImpl.fFont, cint(canvas.fontSize * pFontSizeFactor)) + canvasImpl.fFont = pCreateFont(canvas.fontFamily, canvas.fontSize, canvas.fontBold) method drawText(canvas: Canvas, text: string, x, y = 0) = let canvasImpl = cast[CanvasImpl](canvas) @@ -579,6 +587,10 @@ method `fontSize=`(canvas: CanvasImpl, fontSize: float) = procCall canvas.Canvas.`fontSize=`(fontSize) canvas.fFont = nil +method `fontBold=`(canvas: CanvasImpl, fontBold: bool) = + procCall canvas.Canvas.`fontBold=`(fontBold) + canvas.fFont = nil + method getTextLineWidth(canvas: CanvasImpl, text: string): int = if canvas.fCairoContext == nil: raiseError("Canvas is not in drawing state.") @@ -847,9 +859,7 @@ proc pControlScollYSignal(adjustment: pointer, data: pointer) {.cdecl.} = control.forceRedraw() proc pUpdateFont(control: ControlImpl) = - var font = pango_font_description_new() - pango_font_description_set_family(font, control.fontFamily) - pango_font_description_set_size(font, cint(control.fontSize * pFontSizeFactor)) + var font = pCreateFont(control.fontFamily, control.fontSize, control.fontBold) gtk_widget_modify_font(control.fHandle, font) var rgba: GdkRGBA control.textColor.pColorToGdkRGBA(rgba) @@ -1023,6 +1033,10 @@ method setFontSize(control: ControlImpl, fontSize: float) = procCall control.Control.setFontSize(fontSize) control.pUpdateFont() +method setFontBold(control: ControlImpl, fontBold: bool) = + procCall control.Control.setFontBold(fontBold) + control.pUpdateFont() + method setTextColor(control: ControlImpl, color: Color) = procCall control.Control.setTextColor(color) control.pUpdateFont() @@ -1045,9 +1059,7 @@ method getTextLineHeight(control: ControlImpl): int = var layout = gtk_widget_create_pango_layout(control.fHandle, "a") # Because the widget's font size is not always regarded, we have to set the font here again: - var font = pango_font_description_new() - pango_font_description_set_family(font, control.fontFamily) - pango_font_description_set_size(font, cint(control.fontSize * pFontSizeFactor)) + var font = pCreateFont(control.fontFamily, control.fontSize, control.fontBold) pango_layout_set_font_description(layout, font) var width: cint = 0 diff --git a/src/nigui/private/windows/platform_impl.nim b/src/nigui/private/windows/platform_impl.nim index fba9f65..e9b8e22 100755 --- a/src/nigui/private/windows/platform_impl.nim +++ b/src/nigui/private/windows/platform_impl.nim @@ -562,7 +562,12 @@ proc pUpdateFont(canvas: Canvas) = if canvasImpl.fFont == nil: var fontFamily: pointer pCheckGdiplusStatus(GdipCreateFontFamilyFromName(canvas.fontFamily.pUtf8ToUtf16(), nil, fontFamily)) - pCheckGdiplusStatus(GdipCreateFont(fontFamily, canvas.fontSize, 0, UnitPixel, canvasImpl.fFont)) + let style: int32 = + if canvas.fontBold: + FontStyleBold + else: + FontStyleRegular + pCheckGdiplusStatus(GdipCreateFont(fontFamily, canvas.fontSize, style, UnitPixel, canvasImpl.fFont)) pCheckGdiplusStatus(GdipDeleteFontFamily(fontFamily)) proc pDeleteFont(canvas: CanvasImpl) = @@ -694,6 +699,10 @@ method `fontSize=`(canvas: CanvasImpl, fontSize: float) = procCall canvas.Canvas.`fontSize=`(fontSize) canvas.pDeleteFont() +method `fontBold=`(canvas: CanvasImpl, fontBold: bool) = + procCall canvas.Canvas.`fontBold=`(fontBold) + canvas.pDeleteFont() + method `textColor=`(canvas: CanvasImpl, color: Color) = procCall canvas.Canvas.`textColor=`(color) canvas.pDeleteFontBrush() @@ -1022,7 +1031,12 @@ method forceRedraw(control: ControlImpl) = discard InvalidateRect(control.fHandl proc pUpdateFont(control: ControlImpl) = if control.fFont != nil: discard DeleteObject(control.fFont) - control.fFont = CreateFontA(control.fontSize.int32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, control.fontFamily) + let fontWeight: int32 = + if control.fontBold: + 700 + else: + 400 + control.fFont = CreateFontA(control.fontSize.int32, 0, 0, 0, fontWeight, 0, 0, 0, 0, 0, 0, 0, 0, control.fontFamily) discard SendMessageA(control.fHandle, WM_SETFONT, control.fFont, cast[pointer](true)) method setFontFamily(control: ControlImpl, fontFamily: string) = @@ -1033,6 +1047,10 @@ method setFontSize(control: ControlImpl, fontSize: float) = procCall control.Control.setFontSize(fontSize) control.pUpdateFont() +method setFontBold(control: ControlImpl, fontBold: bool) = + procCall control.Control.setFontBold(fontBold) + control.pUpdateFont() + # method `setBackgroundColor=`(control: ControlImpl, color: Color) = # procCall control.Control.setBackgroundColor(color) # var brush = CreateSolidBrush(color.pColorToRGB32()) diff --git a/src/nigui/private/windows/windows.nim b/src/nigui/private/windows/windows.nim index 638c701..fb797e2 100755 --- a/src/nigui/private/windows/windows.nim +++ b/src/nigui/private/windows/windows.nim @@ -193,6 +193,8 @@ const PROCESS_DPI_UNAWARE* = 0 PROCESS_SYSTEM_DPI_AWARE* = 1 PROCESS_PER_MONITOR_DPI_AWARE* = 2 + FontStyleRegular* = 0 + FontStyleBold* = 1 # ---------------------------------------------------------------------------------------- |
