/*
- Copyright (C) 2007 Paul Davis
- Author: Dave Robillard
+ Copyright (C) 2007 Paul Davis
+ Author: David Robillard
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
Diamond::Diamond(Group& group, double height)
: Polygon(group)
+ , _x (0)
+ , _y (0)
+ , _h (height)
{
- set_height(height);
+ points = gnome_canvas_points_new (4);
+ move_to (0, 0);
+}
+
+Diamond::~Diamond ()
+{
+ gnome_canvas_points_free (points);
}
void
-Diamond::set_height(double height)
+Diamond::set_height (double height)
{
- Points points;
- points.push_back(Point(0, height*2.0));
- points.push_back(Point(height, height));
- points.push_back(Point(0, 0));
- points.push_back(Point(-height, height));
- property_points() = points;
+ _h = height;
+ move_to (_x, _y);
}
+void
+Diamond::move_to (double x, double y)
+{
+ _x = x;
+ _y = y;
+
+ points->coords[0] = _x;
+ points->coords[1] = _y + (_h * 2.0);
+
+ points->coords[2] = _x + _h;
+ points->coords[3] = _y + _h;
+
+ points->coords[4] = _x;
+ points->coords[5] = _y;
+
+ points->coords[6] = _x - _h;
+ points->coords[7] = _y + _h;
+
+ g_object_set (gobj(), "points", points, NULL);
+}
+
+void
+Diamond::move_by (double dx, double dy)
+{
+ points->coords[0] += dx;
+ points->coords[1] += dy;
+
+ points->coords[2] += dx;
+ points->coords[3] += dy;
+
+ points->coords[4] += dx;
+ points->coords[5] += dy;
+
+ points->coords[6] += dx;
+ points->coords[7] += dy;
+
+ g_object_set (gobj(), "points", points, NULL);
+}