From f2d3942f8a91194b3c89d5863925ec05def5920b Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Sun, 27 Jul 2014 09:28:35 -0400 Subject: [PATCH] add Widget module --- runtime/lib/widget.rb | 33 +++++++++++++++++++++++++++++++++ runtime/lib/window.rb | 2 ++ runtime/main.rb | 1 + src/Widget.cc | 23 +++++++++++++++++++++++ src/Widget.h | 6 ++++++ src/main.cc | 2 ++ 6 files changed, 67 insertions(+) create mode 100644 runtime/lib/widget.rb create mode 100644 src/Widget.cc create mode 100644 src/Widget.h diff --git a/runtime/lib/widget.rb b/runtime/lib/widget.rb new file mode 100644 index 0000000..ac775c3 --- /dev/null +++ b/runtime/lib/widget.rb @@ -0,0 +1,33 @@ +module Widget + def initialize + @x = 0 + @y = 0 + @width = 0 + @height = 0 + end + + def children + [] + end + + def resize(x, y, width, height) + @x = x + @y = y + @width = width + @height = height + end + + def draw + if @x > 0 and @y > 0 + render_begin + render + children.each do |child| + child.draw + end + render_end + end + end + + def render_end + end +end diff --git a/runtime/lib/window.rb b/runtime/lib/window.rb index c5f2a3c..40bb356 100644 --- a/runtime/lib/window.rb +++ b/runtime/lib/window.rb @@ -1,6 +1,8 @@ require "set" class Window + include Widget + @windows = Set.new class << self diff --git a/runtime/main.rb b/runtime/main.rb index bbfffeb..4d423dd 100644 --- a/runtime/main.rb +++ b/runtime/main.rb @@ -5,6 +5,7 @@ end def load_lib_files require "gl_program" require "runtime" + require "widget" require "window" end diff --git a/src/Widget.cc b/src/Widget.cc new file mode 100644 index 0000000..8674d1f --- /dev/null +++ b/src/Widget.cc @@ -0,0 +1,23 @@ +#include "Widget.h" +#include "ruby.h" +#include "gl3w.h" + +static VALUE ruby_class; + +static VALUE Widget_render_begin(VALUE self) +{ + int x = FIX2INT(rb_iv_get(self, "@x")); + int y = FIX2INT(rb_iv_get(self, "@y")); + int width = FIX2INT(rb_iv_get(self, "@width")); + int height = FIX2INT(rb_iv_get(self, "@height")); + + glViewport(x, y, width, height); + + return Qnil; +} + +void Widget_Init() +{ + ruby_class = rb_define_module("Widget"); + rb_define_method(ruby_class, "render_begin", (VALUE(*)(...))Widget_render_begin, 0); +} diff --git a/src/Widget.h b/src/Widget.h new file mode 100644 index 0000000..77ae89f --- /dev/null +++ b/src/Widget.h @@ -0,0 +1,6 @@ +#ifndef WIDGET_H +#define WIDGET_H + +void Widget_Init(); + +#endif diff --git a/src/main.cc b/src/main.cc index 3634b99..f22c041 100644 --- a/src/main.cc +++ b/src/main.cc @@ -4,6 +4,7 @@ #include "Font.h" #include "GLProgram.h" #include "GLShader.h" +#include "Widget.h" #include "Window.h" using namespace std; @@ -55,6 +56,7 @@ static int bootstrap() Font_Init(); GLProgram_Init(); GLShader_Init(); + Widget_Init(); Window_Init(); rb_eval_string_protect(