diff --git a/camelia.nim b/camelia.nim index 0ac6915..02d521a 100644 --- a/camelia.nim +++ b/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) ##################################################