Checking in nim version
This commit is contained in:
parent
4d5ad1a562
commit
44ffba0aa4
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1,3 @@
|
||||
/cosmic-text/
|
||||
/__pycache__/
|
||||
/nim-version/fide
|
||||
|
1
nim-version/.nimble
Normal file
1
nim-version/.nimble
Normal file
@ -0,0 +1 @@
|
||||
require "sdl2"
|
124
nim-version/fide.nim
Normal file
124
nim-version/fide.nim
Normal file
@ -0,0 +1,124 @@
|
||||
import os
|
||||
import std/strformat
|
||||
import std/strutils
|
||||
import sdl2
|
||||
import sdl2/ttf
|
||||
|
||||
const
|
||||
WindowWidth = 900
|
||||
WindowHeight = 900
|
||||
OSWinX: cint = 1940
|
||||
OSWinY: cint = 50
|
||||
LineHeight = 20
|
||||
|
||||
type
|
||||
Cursor = object
|
||||
width: float
|
||||
height: float
|
||||
line_num: int = 0
|
||||
col: int = 0
|
||||
want_col: int = 0
|
||||
|
||||
Buffer = object
|
||||
lines: seq[string]
|
||||
cursor: Cursor
|
||||
|
||||
func bufferNew(text: string, cursor: Cursor): Buffer =
|
||||
return Buffer(lines: text.split("\n"), cursor: cursor)
|
||||
|
||||
type SDLException = object of Defect
|
||||
|
||||
template sdlFailIf(condition: typed, reason: string) =
|
||||
if condition: raise SDLException.newException(
|
||||
reason & ", SDL error " & $getError()
|
||||
)
|
||||
|
||||
proc main =
|
||||
sdlFailIf(not sdl2.init(INIT_VIDEO or INIT_TIMER or INIT_EVENTS)):
|
||||
"SDL2 initialization failed"
|
||||
defer: sdl2.quit()
|
||||
|
||||
let window = createWindow(
|
||||
title = "TODE",
|
||||
x = OSWinX,
|
||||
y = OSWinY,
|
||||
w = WindowWidth,
|
||||
h = WindowHeight,
|
||||
flags = SDL_WINDOW_SHOWN or SDL_WINDOW_RESIZABLE
|
||||
)
|
||||
|
||||
sdlFailIf window.isNil: "window could not be created"
|
||||
defer: window.destroy()
|
||||
|
||||
let renderer = createRenderer(
|
||||
window = window,
|
||||
index = -1,
|
||||
flags = Renderer_Accelerated or Renderer_PresentVsync or Renderer_TargetTexture
|
||||
)
|
||||
sdlFailIf renderer.isNil: "renderer could not be created"
|
||||
defer: renderer.destroy()
|
||||
|
||||
sdlFailIf(not ttfInit()): "SDL_TTF initialization failed"
|
||||
defer: ttfQuit()
|
||||
|
||||
let font = ttf.openFont("liberation-sans.ttf", 18)
|
||||
sdlFailIf font.isNil: "font could not be created"
|
||||
|
||||
sdlFailIf(not setHint("SDL_RENDER_SCALE_QUALITY", "2")):
|
||||
"Linear texture filtering could not be enabled"
|
||||
|
||||
var
|
||||
running = true
|
||||
dt: float32
|
||||
counter: uint64
|
||||
previousCounter: uint64
|
||||
|
||||
let
|
||||
textFile = readFile("../../gux/test.c")
|
||||
cursor = Cursor(width: 8, height: LineHeight)
|
||||
buffer = bufferNew(textFile, cursor)
|
||||
|
||||
counter = getPerformanceCounter()
|
||||
|
||||
while running:
|
||||
previousCounter = counter
|
||||
counter = getPerformanceCounter()
|
||||
|
||||
dt = (counter - previousCounter).float / getPerformanceFrequency().float
|
||||
|
||||
var event = defaultEvent
|
||||
|
||||
while pollEvent(event):
|
||||
case event.kind
|
||||
of QuitEvent:
|
||||
running = false
|
||||
break
|
||||
of KeyDown:
|
||||
discard
|
||||
of KeyUp:
|
||||
discard
|
||||
else:
|
||||
discard
|
||||
|
||||
renderer.setDrawColor 255, 255, 255, 255 # black
|
||||
renderer.clear()
|
||||
|
||||
for i, line in buffer.lines:
|
||||
let
|
||||
textColor = color(0, 0, 0, 0)
|
||||
surface = ttf.renderTextBlended(font, line, textColor)
|
||||
texture = renderer.createTextureFromSurface(surface)
|
||||
|
||||
sdlFailIf surface.isNil: "Could not render text surface"
|
||||
# var r = rect(0, cint(i * 20), surface.w, surface.h)
|
||||
# echo "W ", *surface.w "H ", *surface.h
|
||||
|
||||
var r = rect(0, cint(i * 20), 100, 20)
|
||||
renderer.copy texture, nil, addr r
|
||||
|
||||
surface.freeSurface
|
||||
defer: texture.destroy
|
||||
|
||||
renderer.present()
|
||||
|
||||
main()
|
BIN
nim-version/liberation-sans.ttf
Normal file
BIN
nim-version/liberation-sans.ttf
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user