Added a test OnKeyPressed callback to window, made Viewport class, tweaks

This commit is contained in:
2026-08-21 23:28:39 -04:00
parent 056df4ef4a
commit 2d845caa7a
11 changed files with 78 additions and 42 deletions
+4 -4
View File
@@ -1,6 +1,6 @@
project('worldbuilder', ['c', 'vala'], project('worldbuilder', ['c', 'vala'],
version: '0.1.0', version: '0.1.0',
meson_version: '>= 1.0.0', meson_version: '>= 1.0.0',
default_options: [ 'warning_level=2', 'werror=false', ], default_options: [ 'warning_level=2', 'werror=false', ],
) )
@@ -29,7 +29,7 @@ subdir('src')
subdir('po') subdir('po')
gnome.post_install( gnome.post_install(
glib_compile_schemas: true, glib_compile_schemas: true,
gtk_update_icon_cache: true, gtk_update_icon_cache: true,
update_desktop_database: true, update_desktop_database: true,
) )
+13 -13
View File
@@ -2,21 +2,21 @@ namespace Worldbuilder.Core
{ {
public class Camera : Object public class Camera : Object
{ {
/** /**
* The position of the camera * The position of the camera
*/ */
public Vector3 position { get; set; } public Vector3 position { get; set; }
/** /**
* The direction the camera is facing. * The direction the camera is facing.
*/ */
public Vector3 direction { get; set; } public Vector3 direction { get; set; }
public Camera (Vector3 position = Vector3 (), Vector3 direction = Vector3 (0, 0, -1)) public Camera (Vector3 position = Vector3 (), Vector3 direction = Vector3 (0, 0, -1))
{ {
this.position = position; this.position = position;
this.direction = direction; this.direction = direction;
}
} }
}
} }
-14
View File
@@ -2,20 +2,6 @@ namespace Worldbuilder.Core
{ {
public class Mesh : Object public class Mesh : Object
{ {
public struct Point
{
public Vector3 v;
public Vector2 uv;
public Vector3 n;
public Point (Vector3 v = Vector3(), Vector2 uv = Vector2(), Vector3 n = Vector3())
{
this.v = v;
this.uv = uv;
this.n = n;
}
}
public struct Face public struct Face
{ {
public Point p[3]; public Point p[3];
+1 -1
View File
@@ -98,7 +98,7 @@ namespace Worldbuilder.Core
float z = data.parse_float (); float z = data.parse_float ();
normals += Vector3 (x, y, z).normalized (); normals += Vector3 (x, y, z).normalized ();
} else if (data.skip_symbol ("f")) { // face } else if (data.skip_symbol ("f")) { // face
Mesh.Point points[3]; Point points[3];
int npoints = 0; int npoints = 0;
while (!data.at_end_of_line) { while (!data.at_end_of_line) {
+17
View File
@@ -0,0 +1,17 @@
namespace Worldbuilder.Core
{
public struct Point
{
public Vector3 v;
public Vector2 uv;
public Vector3 n;
public Point (Vector3 v = Vector3(), Vector2 uv = Vector2(), Vector3 n = Vector3())
{
this.v = v;
this.uv = uv;
this.n = n;
}
}
}
+3 -1
View File
@@ -2,10 +2,12 @@ worldbuilder_sources = [
'main.vala', 'main.vala',
'application.vala', 'application.vala',
'window.vala', 'window.vala',
'viewport.vala',
'core/point.vala',
'core/vector2.vala',
'core/vector3.vala', 'core/vector3.vala',
'core/matrix4x4.vala', 'core/matrix4x4.vala',
'core/vector2.vala',
'core/camera.vala', 'core/camera.vala',
'core/mesh.vala', 'core/mesh.vala',
'core/texture2d.vala', 'core/texture2d.vala',
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"/>
<template class="WorldbuilderViewport" parent="GtkGLArea">
<property name="hexpand">true</property>
<property name="vexpand">true</property>
</template>
</interface>
+10
View File
@@ -0,0 +1,10 @@
using Gtk;
namespace Worldbuilder
{
[GtkTemplate(ui = "/com/brodybrooks/WorldBuilder/viewport.ui")]
public class Viewport : Gtk.GLArea
{
}
}
+7 -4
View File
@@ -10,6 +10,12 @@
<property name="default-width">1280</property> <property name="default-width">1280</property>
<property name="default-height">720</property> <property name="default-height">720</property>
<child>
<object class="GtkEventControllerKey">
<signal name="key-pressed" handler="OnKeyPressed"/>
</object>
</child>
<property name="content"> <property name="content">
<object class="AdwOverlaySplitView" id="split_view"> <object class="AdwOverlaySplitView" id="split_view">
<property name="sidebar-width-fraction">0.25</property> <property name="sidebar-width-fraction">0.25</property>
@@ -69,10 +75,7 @@
</child> </child>
<child> <child>
<object class="GtkGLArea" id="draw_area"> <object class="WorldbuilderViewport" id="viewport"/>
<property name="hexpand">true</property>
<property name="vexpand">true</property>
</object>
</child> </child>
</object> </object>
</property> </property>
+13 -4
View File
@@ -22,22 +22,31 @@ namespace Worldbuilder {
[GtkTemplate(ui = "/com/brodybrooks/WorldBuilder/window.ui")] [GtkTemplate(ui = "/com/brodybrooks/WorldBuilder/window.ui")]
public class Window : Adw.ApplicationWindow { public class Window : Adw.ApplicationWindow {
[GtkChild] [GtkChild]
private unowned Gtk.GLArea draw_area; private unowned Viewport viewport;
private SceneRenderer renderer; private SceneRenderer renderer;
public Window(Gtk.Application app) { public Window(Gtk.Application app) {
Object(application: app); Object(application: app);
viewport.set_has_depth_buffer (true);
renderer = new SceneRenderer(); renderer = new SceneRenderer();
draw_area.realize.connect(renderer.Setup); viewport.realize.connect(renderer.Setup);
draw_area.render.connect(renderer.Render); viewport.render.connect(renderer.Render);
draw_area.resize.connect(renderer.OnResize); viewport.resize.connect(renderer.OnResize);
} }
~Window() ~Window()
{ {
print("Closing!!\n"); print("Closing!!\n");
} }
[GtkCallback]
private bool OnKeyPressed(Gtk.EventControllerKey controller, uint keyval, uint keycode, Gdk.ModifierType mod_state)
{
print("Key pressed!\n");
return true;
}
} }
} }
+1
View File
@@ -2,6 +2,7 @@
<gresources> <gresources>
<gresource prefix="/com/brodybrooks/WorldBuilder"> <gresource prefix="/com/brodybrooks/WorldBuilder">
<file preprocess="xml-stripblanks">window.ui</file> <file preprocess="xml-stripblanks">window.ui</file>
<file preprocess="xml-stripblanks">viewport.ui</file>
<file preprocess="xml-stripblanks">shortcuts-dialog.ui</file> <file preprocess="xml-stripblanks">shortcuts-dialog.ui</file>
</gresource> </gresource>