summaryrefslogtreecommitdiff
path: root/src/nigui/private/gtk3
diff options
context:
space:
mode:
Diffstat (limited to 'src/nigui/private/gtk3')
-rwxr-xr-xsrc/nigui/private/gtk3/gtk3.nim2
-rwxr-xr-xsrc/nigui/private/gtk3/platform_impl.nim30
2 files changed, 22 insertions, 10 deletions
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