pmc/rectangle.cc
changeset 42 83b8151b966d
child 43 cf8c1b5127b2
new file mode 100644
--- /dev/null
+++ b/pmc/rectangle.cc
@@ -0,0 +1,80 @@
+/**
+ * test/demos/pmc/rectangle.cc
+ * Copyright (C) 2008 Markus Broeker
+ */
+
+#include <rectangle.h>
+#include <cstdio>
+
+Rectangle::Rectangle (Surface * s)
+{
+    P[0] = new Vector (0, 0);
+    P[1] = new Vector (0, 100);
+    P[2] = new Vector (100, 100);
+    P[3] = new Vector (0, 100);
+
+    anker = Vector (0, 0);
+
+    surface = s;
+}
+
+Rectangle::Rectangle (Surface * s, Vector p1, Vector p2, Vector p3, Vector p4)
+{
+    P[0] = new Vector (p1);
+    P[1] = new Vector (p2);
+    P[2] = new Vector (p3);
+    P[3] = new Vector (p4);
+
+    anker = Vector (0, 0);
+
+    surface = s;
+}
+
+Rectangle::~Rectangle ()
+{
+    for (int i = 0; i < 4; i++) {
+#ifdef DEBUG
+        fprintf (stderr, "Removing P[%d]: ", i);
+#endif
+        delete P[i];
+    }
+}
+
+void Rectangle::move (Vector location)
+{
+    if ((anker.X () + location.X ()) < 0)
+        return;
+    if ((anker.Y () + location.Y ()) < 0)
+        return;
+
+    if ((anker.X () + location.X ()) >= surface->getWidth ())
+        return;
+    if ((anker.Y () + location.Y ()) >= surface->getHeight ())
+        return;
+
+    for (int i = 0; i < 4; i++) {
+        *P[i] = *P[i] + location;
+    }
+
+    anker = Vector (P[0]->X (), P[0]->Y ());
+}
+
+void Rectangle::show ()
+{
+    int i;
+
+    for (i = 0; i < 4; i++) {
+        fprintf (stderr, "[%d] ", i);
+        P[i]->vector ();
+        if ((i + 1) % 4 != 0)
+            fprintf (stderr, ", ");
+        else
+            fprintf (stderr, "\n");
+    }
+
+    surface->drawLine (P[0]->X (), P[0]->Y (), P[1]->X (), P[1]->Y ());
+    surface->drawLine (P[3]->X (), P[3]->Y (), P[2]->X (), P[2]->Y ());
+
+    surface->drawLine (P[2]->X (), P[2]->Y (), P[1]->X (), P[1]->Y ());
+    surface->drawLine (P[3]->X (), P[3]->Y (), P[0]->X (), P[0]->Y ());
+}