summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortrustable-code <krauter.simon@arcor.de>2019-08-17 13:51:26 +0200
committertrustable-code <krauter.simon@arcor.de>2019-08-17 13:51:26 +0200
commiteeae283cf8e45fa77fd13a23f3f91159398a22f0 (patch)
tree21a68f60e1c43b7e98c739f52d5a04d00c29347a /src
parentcd14cb3f5bbf87a9660091207bdf1e714bdc34cf (diff)
downloadNiGui-eeae283cf8e45fa77fd13a23f3f91159398a22f0.tar.gz
NiGui-eeae283cf8e45fa77fd13a23f3f91159398a22f0.zip
Implement bold font option for controls and canvas
Diffstat (limited to 'src')
-rwxr-xr-xsrc/nigui.nim25
-rwxr-xr-xsrc/nigui/private/gtk3/gtk3.nim2
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim30
-rwxr-xr-xsrc/nigui/private/windows/platform_impl.nim22
-rwxr-xr-xsrc/nigui/private/windows/windows.nim2
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
# ----------------------------------------------------------------------------------------