From: Mikko Rasa Date: Sat, 4 Apr 2015 13:52:05 +0000 (+0300) Subject: Better graphics for the clock X-Git-Url: http://git.tdb.fi/?p=r2c2.git;a=commitdiff_plain;h=fa87851948ddc1908cfe6833aef08f582a7fb8fc Better graphics for the clock --- diff --git a/data/clock.png b/data/clock.png new file mode 100644 index 0000000..009bda4 Binary files /dev/null and b/data/clock.png differ diff --git a/data/r2c2.res b/data/r2c2.res index fb67321..9a00dd6 100644 --- a/data/r2c2.res +++ b/data/r2c2.res @@ -752,8 +752,42 @@ style "toggle-lever" }; }; +graphic "clock_face" +{ + texture "clock.png"; + slice 0 0 200 200; +}; + +graphic "clock_hour" +{ + texture "clock.png"; + slice 202 0 10 63; +}; + +graphic "clock_minute" +{ + texture "clock.png"; + slice 204 65 6 99; +}; + style "clock" { - part "hourhand"; - part "minutehand"; + part + { + graphic NORMAL "clock_face"; + align 0.5 0.5; + fill 0.0 0.0; + }; + + part "hourhand" + { + graphic NORMAL "clock_hour"; + align 0.5 0.159; + }; + + part "minutehand" + { + graphic NORMAL "clock_minute"; + align 0.5 0.101; + }; }; diff --git a/gui.blend b/gui.blend index 0755f2e..b6efd69 100644 Binary files a/gui.blend and b/gui.blend differ diff --git a/source/engineer/clockwidget.cpp b/source/engineer/clockwidget.cpp index 31f5c39..5e00591 100644 --- a/source/engineer/clockwidget.cpp +++ b/source/engineer/clockwidget.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include "clockwidget.h" @@ -8,32 +9,24 @@ using namespace Msp; ClockWidget::ClockWidget(R2C2::Clock &c): clock(c), - hour_hand((GL::VERTEX2, GL::COLOR4_UBYTE)), - minute_hand((GL::VERTEX2, GL::COLOR4_UBYTE)) + hour_hand((GL::VERTEX2, GL::TEXCOORD2, GL::COLOR4_UBYTE)), + minute_hand((GL::VERTEX2, GL::TEXCOORD2, GL::COLOR4_UBYTE)) { } -void ClockWidget::autosize_special(const GLtk::Part &, GLtk::Geometry &ageom) const -{ - ageom.w = max(ageom.w, 200U); - ageom.h = max(ageom.h, 200U); -} - void ClockWidget::rebuild_special(const GLtk::Part &part) { if(part.get_name()=="hourhand" || part.get_name()=="minutehand") { bool minute = (part.get_name()=="minutehand"); GL::Mesh &mesh = (minute ? minute_hand : hour_hand); - float length = min(geom.w, geom.h)*(minute ? 0.5f : 0.35f); - float width = length*(minute ? 0.05f : 0.1f); + + const GLtk::Graphic *graphic = part.get_graphic(state); + const GLtk::Alignment &align = part.get_alignment(); + mesh.clear(); GL::MeshBuilder bld(mesh); - bld.color(0.0f, 0.0f, 0.0f); - bld.begin(GL::TRIANGLES); - bld.vertex(width, -width); - bld.vertex(0.0f, length); - bld.vertex(-width, -width); - bld.end(); + bld.matrix() *= GL::Matrix::translation(GL::Vector3(graphic->get_width()*-align.x, graphic->get_height()*-align.y, 0)); + graphic->build(graphic->get_width(), graphic->get_height(), bld); part_cache.insert_special(part); } @@ -50,7 +43,6 @@ void ClockWidget::render_special(const GLtk::Part &part, GL::Renderer &renderer) Geometry::Angle angle = Geometry::Angle::from_turns(orientation); GL::Renderer::Push push(renderer); - renderer.set_texture(0); renderer.matrix_stack() *= GL::Matrix::translation(GL::Vector3(geom.w*0.5f, geom.h*0.5f, 0.0f)); renderer.matrix_stack() *= GL::Matrix::rotation(angle, GL::Vector3(0, 0, -1)); mesh.draw(renderer); diff --git a/source/engineer/clockwidget.h b/source/engineer/clockwidget.h index 10c62bc..e822b89 100644 --- a/source/engineer/clockwidget.h +++ b/source/engineer/clockwidget.h @@ -17,7 +17,6 @@ public: virtual const char *get_class() const { return "clock"; } private: - virtual void autosize_special(const Msp::GLtk::Part &, Msp::GLtk::Geometry &) const; virtual void rebuild_special(const Msp::GLtk::Part &); virtual void render_special(const Msp::GLtk::Part &, Msp::GL::Renderer &) const; };