Nodesnim
The Nim GUI/2D framework based on OpenGL and SDL2.
[](https://github.com/ellerbrock/open-source-badges/)
[](https://github.com/Ethosa/yukiko/blob/master/nim-lang.svg)
[](https://github.com/Ethosa/nodesnim/blob/master/LICENSE)
[](https://wakatime.com/badge/github/Ethosa/nodesnim)
[](https://github.com/Ethosa/nodesnim/actions)
Latest version - 0.0.3
Stable version - 0.0.2
## Install
1. Install this repo
- `nimble install nodesnim` or `nimble install https://github.com/Ethosa/nodesnim.git`
2. Download OpenGL, SDL2_image, SDL2_mixer and freeglut Runtime binaries for your OS
- [SDL2](https://www.libsdl.org/download-2.0.php)
- [SDL2_image](https://www.libsdl.org/projects/SDL_image/)
- [SDL2_mixer](https://www.libsdl.org/projects/SDL_mixer/)
3. Put Runtime binaries in the `.nimble/bin/` folder
## Features
- Godot-like node system.
- Simple usage
```nim
import nodesnim
Window("Hello, world!")
var
scene_obj: SceneObj
scene = Scene("Main", scene_obj)
label_obj: LabelObj
hello = Label(label_obj)
hello.setText("Hello, world!")
hello.setSizeAnchor(1, 1)
hello.setTextAlign(0.5, 0.5, 0.5, 0.5)
scene.addChild(hello)
addMainScene(scene)
windowLaunch()
```
## Now available
This section contains links to documentation for all nodes.
|Core |Default nodes |Control nodes |2D Nodes |
|:--: |:--: |:--: | :--: |
|[Anchor][Anchor] |[Node][Node] |[Control][Control] |[Node2D][Node2D] |
|[Color][Color] |[Canvas][Canvas] |[ColorRect][ColorRect] |[Sprite][Sprite] |
|[ColorText][clrtext]|[Scene][Scene] |[TextureRect][TextureRect] |[AnimatedSprite][asprite] |
|[Enums][Enums] |[AudioStreamPlayer][aplay]|[Label][Label] |[YSort][YSort] |
|[Exceptions][except]| |[Button][Button] |[CollisionShape2D][cshape2d]|
|[Image][Image] | |[EditText][EditText] |[Camera2D][Camera2D] |
|[Input][Input] | |[RichLabel][RichLabel] | |
|[Rect2][Rect2] | |[RichEditText][RichEditText] | |
|[Vector2][Vector2] | |[Box][Box] | |
|[Circle2][Circle2] | |[HBox][HBox] | |
|[Polygon2][Polygon2]| |[VBox][VBox] | |
|[AudioStream][astrm]| |[GridBox][GridBox] | |
|[Animation][anim] | |[Scroll][Scroll] | |
| | |[ProgressBar][ProgressBar] | |
| | |[Slider][Slider] | |
| | |[VProgressBar][VProgressBar] | |
| | |[VSlider][VSlider] | |
| | |[Popup][Popup] | |
| | |[TextureButton][TextureButton] | |
| | |[TextureProgressBar][tprogress]| |
| | |[Counter][Counter] | |
| | |[Switch][Switch] | |
## Debug mode
For use debug mode you should compile with `-d:debug` or `--define:debug`, e.g. `nim c -r -d:debug main.nim`.
## Export
Use the [`Nim compiler user guide`](https://nim-lang.org/docs/nimc.html#dynliboverride) for export to the other OS.
- CrossPlatform export for Windows (tested on Windows 7 x64 and Windows 10 x64)
- `nim c -d:mingw -d:release --opt:speed --noNimblePath file.nim`
- put Runtime binaries in the folder with the program.
## Screenshots
[](https://github.com/Ethosa/nodesnim/blob/master/examples/hello_world)
[](https://github.com/Ethosa/nodesnim/blob/master/examples/calculator)
[](https://github.com/Ethosa/nodesnim/blob/master/examples/novel)
[](https://github.com/Ethosa/nodesnim/blob/master/examples/snake)
[](https://github.com/Ethosa/nodesnim/blob/master/examples/screensaver)
## F.A.Q
*Q*: Where can I see examples?
*A*: You can see this in the [`tests`](https://github.com/Ethosa/nodesnim/blob/master/tests) or [`examples`](https://github.com/Ethosa/nodesnim/blob/master/examples) folder.
*Q*: Where can I read the docs?
*A*: You can read docs [here](https://ethosa.github.io/nodesnim/nodesnim.html)
[Anchor]:https://ethosa.github.io/nodesnim/nodesnim/core/anchor.html
[Color]:https://ethosa.github.io/nodesnim/nodesnim/core/color.html
[clrtext]:https://ethosa.github.io/nodesnim/nodesnim/core/color_text.html
[Enums]:https://ethosa.github.io/nodesnim/nodesnim/core/enums.html
[except]:https://ethosa.github.io/nodesnim/nodesnim/core/exceptions.html
[Image]:https://ethosa.github.io/nodesnim/nodesnim/core/image.html
[Input]:https://ethosa.github.io/nodesnim/nodesnim/core/input.html
[Rect2]:https://ethosa.github.io/nodesnim/nodesnim/core/rect2.html
[Vector2]:https://ethosa.github.io/nodesnim/nodesnim/core/vector2.html
[Circle2]:https://ethosa.github.io/nodesnim/nodesnim/core/circle2.html
[Polygon2]:https://ethosa.github.io/nodesnim/nodesnim/core/polygon2.html
[astrm]:https://ethosa.github.io/nodesnim/nodesnim/core/audio_stream.html
[anim]:https://ethosa.github.io/nodesnim/nodesnim/core/animation.html
[Node]:https://ethosa.github.io/nodesnim/nodesnim/nodes/node.html
[Canvas]:https://ethosa.github.io/nodesnim/nodesnim/nodes/canvas.html
[Scene]:https://ethosa.github.io/nodesnim/nodesnim/nodes/scene.html
[aplay]:https://ethosa.github.io/nodesnim/nodesnim/nodes/audio_stream_player.html
[Control]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/control.html
[ColorRect]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/color_rect.html
[TextureRect]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_rect.html
[Label]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/label.html
[Button]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/button.html
[EditText]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/edittext.html
[RichLabel]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/rich_label.html
[RichEditText]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/rich_edit_text.html
[Box]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/box.html
[HBox]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/hbox.html
[VBox]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vbox.html
[GridBox]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/grid_box.html
[Scroll]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/scroll.html
[ProgressBar]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/progress_bar.html
[Slider]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/slider.html
[VProgressBar]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vprogress_bar.html
[VSlider]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/vslider.html
[Popup]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/popup.html
[TextureButton]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_button.html
[tprogress]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/texture_progress_bar.html
[Counter]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/counter.html
[Switch]:https://ethosa.github.io/nodesnim/nodesnim/nodescontrol/switch.html
[Node2D]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/node2d.html
[Sprite]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/sprite.html
[asprite]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/animated_sprite.html
[YSort]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/ysort.html
[cshape2d]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/collision_shape2d.html
[KinematicBody2D]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/kinematic_body2d.html
[Camera2D]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/camera2d.html
[Node2D]:https://ethosa.github.io/nodesnim/nodesnim/nodes2d/node2d.html