implemented mutex widget

master
cynic 3 years ago
parent 5179470d8f
commit d37458c083
  1. 25
      camelia.nim

@ -69,16 +69,19 @@ proc easyText(r: RendererPtr, re: var Rect, label: string): void =
surf.freeSurface()
tex.destroy()
proc drawButton(c: var camelia, r: RendererPtr, label: string, action: () -> void): void =
proc drawButton(c: var camelia, r: RendererPtr, label: string, action: () -> void, rightSide: int = -1): void =
r.setDrawColorUnpacked(FOREGROUND_COLOR)
c.verticalTracker += VERTICAL_PADDING
let textWidth = FONT_DEFAULT.textSize(label).w
var re: Rect = (x: LEFTWARD_ORIGIN, y: c.verticalTracker.cint, w: (TEXT_VERT_DILATION*TEXT_REFIT*textWidth.float).cint, h: (TEXT_REFIT*TEXT_RESOLUTION.float).cint).Rect
if isMouseInRect(c, re):
var modRe = re
if rightSide != -1:
modRe.w = rightSide.cint
if isMouseInRect(c, modRe):
r.setDrawColorUnpacked(HIGHLIGHT_COLOR)
if c.mouse.buttons == 1:
action()
r.fillRect(re)
r.fillRect(modRe)
r.easyText(re, label)
proc drawToggle(c: var camelia, r: RendererPtr, label: string, value: var bool): void =
@ -96,7 +99,18 @@ proc drawToggle(c: var camelia, r: RendererPtr, label: string, value: var bool):
var textRe: Rect = (x: LEFTWARD_ORIGIN+(TEXT_REFIT*TEXT_RESOLUTION.float).cint, y: c.verticalTracker.cint, w: (TEXT_VERT_DILATION*TEXT_REFIT*textWidth.float).cint, h: (TEXT_REFIT*TEXT_RESOLUTION.float).cint).Rect
r.easyText(textRe, label)
proc drawMutex(c: var camelia, r: RendererPtr, label: string, entries: seq[string]): void =
proc drawMutex(c: var camelia, r: RendererPtr, label: string, entries: seq[string], value: var int): void =
r.setDrawColorUnpacked(FOREGROUND_COLOR)
c.verticalTracker += VERTICAL_PADDING
let textWidth = FONT_DEFAULT.textSize(label).w
var re: Rect = (x: LEFTWARD_ORIGIN, y: c.verticalTracker.cint, w: (TEXT_VERT_DILATION*TEXT_REFIT*textWidth.float).cint, h: (TEXT_REFIT*TEXT_RESOLUTION.float).cint).Rect
r.easyText(re, label)
for ent_idx, ent in entries:
var temp: bool = false
c.verticalTracker -= VERTICAL_PADDING-(TEXT_REFIT*TEXT_RESOLUTION.float).int
c.drawButton(r, entries[ent_idx], () => (temp = true), rightSide = (TEXT_VERT_DILATION*TEXT_REFIT*textWidth.float).int)
if temp:
value = ent_idx
discard
proc render*(c: var camelia, r: RendererPtr): void =
@ -113,5 +127,8 @@ proc render*(c: var camelia, r: RendererPtr): void =
var a {.global.}: bool = false
c.drawToggle(r, fmt"toggle test ({$a})", a)
c.drawButton(r, "button test (reset toggle to false)", () => (a = false))
var b {.global.}: int = 0
let choices: seq[string] = @["ayy", "bee", "cee"]
c.drawMutex(r, fmt"mutex test ({choices[b]})", choices, b)
##################################################

Loading…
Cancel
Save