#include <msp/gl/meshbuilder.h>
#include <msp/gl/renderer.h>
+#include <msp/gltk/graphic.h>
#include <msp/gltk/part.h>
#include "clockwidget.h"
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);
}
Geometry::Angle<float> angle = Geometry::Angle<float>::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);