Skip to content

Commit ed878bc

Browse files
committed
Add load=proc and setWindowBounds.
1 parent da2eead commit ed878bc

File tree

5 files changed

+40
-2
lines changed

5 files changed

+40
-2
lines changed

src/fidget/htmlbackend.nim

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -421,7 +421,7 @@ proc drawStart() =
421421
422422
canvas.style.display = "block"
423423
canvas.style.position = "absolute"
424-
canvas.style.zIndex = -1
424+
canvas.style.zIndex = "-1"
425425
canvas.style.left = cstring($scrollBox.x & "px")
426426
canvas.style.top = cstring($scrollBox.y & "px")
427427
canvas.style.width = cstring($width & "px")
@@ -481,10 +481,11 @@ proc refresh*() =
481481
requestedFrame = true
482482
discard dom.window.requestAnimationFrame(requestHardRedraw)
483483
484-
proc startFidget*(draw: proc(), w = 0, h = 0) =
484+
proc startFidget*(draw: proc(), load: proc(), w = 0, h = 0) =
485485
## Start the HTML backend
486486
## NOTE: returns instantly!
487487
drawMain = draw
488+
loadMain = load
488489
489490
dom.window.addEventListener "load", proc(event: Event) =
490491
## called when html page loads and JS can start running
@@ -637,6 +638,9 @@ proc startFidget*(draw: proc(), w = 0, h = 0) =
637638
hardRedraw()
638639
forceTextReLayout = false
639640
641+
if loadMain != nil:
642+
loadMain()
643+
640644
proc openBrowser*(url: string) =
641645
## Opens a URL in a browser
642646
discard dom.window.open(url, "_blank")
@@ -690,6 +694,10 @@ proc loadGoogleFontUrl*(url: string) =
690694
link.setAttribute("rel", "stylesheet")
691695
document.head.appendChild(link)
692696
697+
proc setWindowBounds*(min, max: Vec2) =
698+
## setWindowBounds does not work in JS mode.
699+
discard
700+
693701
proc httpGet*(url: string): HttpCall =
694702
if url notin httpCalls:
695703
result = HttpCall()

src/fidget/internal.nim

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
var
22
drawMain*: proc()
33
tickMain*: proc()
4+
loadMain*: proc()

src/fidget/opengl/base.nim

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,9 @@ proc releaseMouse*() =
400400
proc hideMouse*() =
401401
setInputMode(window, CURSOR, CURSOR_HIDDEN)
402402

403+
proc setWindowBounds*(min, max: Vec2) =
404+
window.setWindowSizeLimits(min.x.cint, min.y.cint, max.x.cint, max.y.cint)
405+
403406
proc takeScreenshot*(
404407
frame = rect(0, 0, windowFrame.x, windowFrame.y)
405408
): flippy.Image =

src/fidget/openglbackend.nim

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,9 @@ proc setupFidget(
339339

340340
useDepthBuffer(false)
341341

342+
if loadMain != nil:
343+
loadMain()
344+
342345
proc asyncPoll() =
343346
when not defined(emscripten) and not defined(fidgetNoAsync):
344347
var haveCalls = false
@@ -352,6 +355,7 @@ proc asyncPoll() =
352355
proc startFidget*(
353356
draw: proc(),
354357
tick: proc() = nil,
358+
load: proc() = nil,
355359
fullscreen = false,
356360
w: Positive = 1280,
357361
h: Positive = 800,
@@ -367,6 +371,7 @@ proc startFidget*(
367371
windowSize = vec2(w.float32, h.float32)
368372
drawMain = draw
369373
tickMain = tick
374+
loadMain = load
370375
setupFidget(openglVersion, msaa, mainLoopMode, pixelate, pixelScale)
371376
mouse.pixelScale = pixelScale
372377
when defined(emscripten):
@@ -394,6 +399,9 @@ proc setTitle*(title: string) =
394399
setWindowTitle(title)
395400
refresh()
396401

402+
proc setWindowBounds*(min, max: Vec2) =
403+
base.setWindowBounds(min, max)
404+
397405
proc getUrl*(): string =
398406
windowUrl
399407

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
## This shows how to set window bounds, so that window can't be resized smaller
2+
## or larger by the user.
3+
## Note: setWindowBounds does not work in JS mode.
4+
5+
import fidget, vmath
6+
7+
proc loadMain() =
8+
setWindowBounds(vec2(200, 200), vec2(300, 300))
9+
10+
proc drawMain() =
11+
frame "main":
12+
box 0, 0, 620, 140
13+
for i in 0 .. 4:
14+
group "block":
15+
box 20 + i * 120, 20, 100, 100
16+
fill "#2B9FEA"
17+
18+
startFidget(draw=drawMain, load=loadMain, w = 300, h = 300)

0 commit comments

Comments
 (0)