nim-nanovg/examples/demo.nim
Joey Yakimowich-Payne 386e04dc49 Use generated icons
2020-09-17 20:25:07 -06:00

90 lines
2.3 KiB
Nim

import os
import nanovg
import glfw, glew
import perf
import common
import icons
proc frameBufferSize*(window: ptr Window): tuple[w, h: int32] =
var fbWidth, fbHeight: cint
window.getFramebufferSize(fbWidth.addr, fbHeight.addr)
return (w: fbWidth, h: fbHeight)
proc size*(window: ptr Window): tuple[w, h: int32] =
var width, height: cint
window.getWindowSize(width.addr, height.addr)
return (w: width, h: height)
proc main =
let
fps = newGraph(RenderStyle.FPS, "Frame Time")
cpuGraph = newGraph(RenderStyle.MS, "CPU Time")
initHint(CONTEXT_VERSION_MAJOR, 3)
initHint(CONTEXT_VERSION_MINOR, 2)
when defined(macosx):
initHint(OPENGL_FORWARD_COMPAT, 1)
initHint(OPENGL_PROFILE, OPENGL_CORE_PROFILE)
discard glfw.init()
windowHint(CONTEXT_VERSION_MAJOR, 3)
windowHint(CONTEXT_VERSION_MINOR, 2)
when defined(macosx):
windowHint(OPENGL_FORWARD_COMPAT, 1)
windowHint(OPENGL_PROFILE, OPENGL_CORE_PROFILE)
var w = createWindow(800, 600, "Minimal Nim-GLFW Example", nil, nil)
w.makeContextCurrent()
swapInterval(0)
setTime(0)
discard glew.init()
let vg = nanovg.newContext()
vg.loadFont(currentSourceDir()/"resources/Roboto-Regular.ttf", "sans")
vg.loadFont(currentSourceDir()/"resources/Roboto-Bold.ttf", "sans-bold")
vg.loadFont(currentSourceDir()/"resources/fa.ttf", "fa")
var prevt = getTime()
while not w.windowShouldClose().bool:
let t = getTime()
let dt = t - prevt
prevt = t
let fbSize = w.frameBufferSize()
glViewPort(0, 0, fbSize.w, fbSize.h)
glCullFace(GL_BACK)
glFrontFace(GL_CCW)
glClearColor(0.3, 0.3, 0.32, 1.0)
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT)
vg.withFrame(w):
let x = vg.glyphPositions("Some仮名thing is up", 0, 0)
vg.drawWindow("Title", 50, 50, 300, 400)
vg.drawLabel("Hello!", 10, 10, 280, 20)
vg.drawButton(Icon.Trash, "Delete", 100, 200, 160, 28, rgba(128, 16, 8, 255))
vg.drawButton(Icon.Trash, "Deleter", 100, 250, 160, 28, rgba(12, 130, 80, 255))
vg.drawButton("Testing", 100, 300)
vg.render(fps, 5, 5)
vg.render(cpuGraph, 210, 5)
w.swapBuffers()
pollEvents()
let cpuTime = glfw.getTime() - t
fps.update(dt)
cpuGraph.update(cpuTime)
waitEvents()
w.destroyWindow()
vg.delete()
glfw.terminate()
main()