Defined tbo object base as gobject
authordanigm <dani@danigm.net>
Sat, 14 Aug 2010 11:29:19 +0000 (13:29 +0200)
committerdanigm <dani@danigm.net>
Sat, 14 Aug 2010 11:29:19 +0000 (13:29 +0200)
src/tbo-object-base.c [new file with mode: 0644]
src/tbo-object-base.h [new file with mode: 0644]

diff --git a/src/tbo-object-base.c b/src/tbo-object-base.c
new file mode 100644 (file)
index 0000000..32e7540
--- /dev/null
@@ -0,0 +1,188 @@
+/*
+ * This file is part of TBO, a gnome comic editor
+ * Copyright (C) 2010  Daniel Garcia Moreno <dani@danigm.net>
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include <glib.h>
+#include <cairo.h>
+#include <stdio.h>
+#include <ui-drawing.h>
+#include "tbo-types.h"
+#include "tbo-object-base.h"
+
+G_DEFINE_TYPE (TboObjectBase, tbo_object_base, G_TYPE_OBJECT);
+
+static void draw (TboObjectBase *, Frame *, cairo_t *);
+static void save (TboObjectBase *, FILE *);
+static TboObjectBase * clone (TboObjectBase *);
+
+static void
+draw (TboObjectBase *self, Frame *frame, cairo_t *cr)
+{
+}
+
+static void
+save (TboObjectBase *self, FILE *file)
+{
+}
+
+static TboObjectBase *
+clone (TboObjectBase *self)
+{
+    return NULL;
+}
+
+/* init methods */
+
+static void
+tbo_object_base_init (TboObjectBase *self)
+{
+    self->x = 0;
+    self->y = 0;
+    self->width = 0;
+    self->height = 0;
+    self->angle = 0.0;
+    self->flipv = FALSE;
+    self->fliph = FALSE;
+}
+
+static void
+tbo_object_base_class_init (TboObjectBaseClass *klass)
+{
+    klass->draw = draw;
+    klass->save = save;
+    klass->clone = clone;
+}
+
+/* object functions */
+
+GObject *
+tbo_object_base_new ()
+{
+    GObject *tbo_object;
+    tbo_object = g_object_new (TBO_TYPE_OBJECT_BASE, NULL);
+    return tbo_object;
+}
+
+void
+tbo_object_base_flipv (TboObjectBase *self)
+{
+    if (self->flipv)
+        self->flipv = FALSE;
+    else
+        self->flipv = TRUE;
+}
+
+void
+tbo_object_base_fliph (TboObjectBase *self)
+{
+    if (self->fliph)
+        self->fliph = FALSE;
+    else
+        self->fliph = TRUE;
+}
+
+void
+tbo_object_base_get_flip_matrix (TboObjectBase *self, cairo_matrix_t *mx)
+{
+    cairo_matrix_t flipv = {1, 0, 0, 1, 0, 0};
+    cairo_matrix_t fliph = {1, 0, 0, 1, 0, 0};
+
+    if (self->flipv)
+    {
+        cairo_matrix_init (&flipv, 1, 0, 0, -1, 0, self->height);
+    }
+    if (self->fliph)
+    {
+        cairo_matrix_init (&fliph, -1, 0, 0, 1, self->width, 0);
+    }
+
+    cairo_matrix_multiply (mx, &flipv, &fliph);
+}
+
+void
+tbo_object_base_order_down (TboObjectBase *self)
+{
+    Frame *frame = get_frame_view ();
+    GList *list = g_list_find (frame->objects, self);
+    GList *prev = g_list_previous (list);
+    TboObjectBase *tmp;
+    if (prev)
+    {
+        tmp = TBO_OBJECT_BASE (list->data);
+        list->data = prev->data;
+        prev->data = tmp;
+    }
+}
+
+void
+tbo_object_base_order_up (TboObjectBase *self)
+{
+    Frame *frame = get_frame_view ();
+    GList *list = g_list_find (frame->objects, self);
+    GList *next = g_list_next (list);
+    TboObjectBase *tmp;
+    if (next)
+    {
+        tmp = TBO_OBJECT_BASE (list->data);
+        list->data = next->data;
+        next->data = tmp;
+    }
+}
+
+void
+tbo_object_base_move (TboObjectBase *self, enum MOVE_OPT type)
+{
+    switch (type)
+    {
+        case MOVE_UP:
+            self->y -= MOVING_OFFSET;
+            break;
+        case MOVE_DOWN:
+            self->y += MOVING_OFFSET;
+            break;
+        case MOVE_LEFT:
+            self->x -= MOVING_OFFSET;
+            break;
+        case MOVE_RIGHT:
+            self->x += MOVING_OFFSET;
+            break;
+        default:
+            break;
+    }
+}
+
+void
+tbo_object_base_resize (TboObjectBase *self, enum RESIZE_OPT type)
+{
+    switch (type)
+    {
+        case RESIZE_LESS:
+            if (self->width > 10 && self->height > 10)
+            {
+                self->width *= 0.95;
+                self->height *= 0.95;
+            }
+            break;
+        case RESIZE_GREATER:
+            self->width *= 1.05;
+            self->height *= 1.05;
+            break;
+        default:
+            break;
+    }
+}
diff --git a/src/tbo-object-base.h b/src/tbo-object-base.h
new file mode 100644 (file)
index 0000000..3e039b2
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * This file is part of TBO, a gnome comic editor
+ * Copyright (C) 2010  Daniel Garcia Moreno <dani@danigm.net>
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#ifndef __TBO_OBJECT_BASE_H__
+#define __TBO_OBJECT_BASE_H__
+
+#define MOVING_OFFSET 10
+
+#include <glib-object.h>
+#include <tbo-types.h>
+#include <cairo.h>
+#include <stdio.h>
+
+#define TBO_TYPE_OBJECT_BASE            (tbo_object_base_get_type ())
+#define TBO_OBJECT_BASE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), TBO_TYPE_OBJECT_BASE, TboObjectBase))
+#define TBO_IS_OBJECT_BASE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TBO_TYPE_OBJECT_BASE))
+#define TBO_OBJECT_BASE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), TBO_TYPE_OBJECT_BASE, TboObjectBaseClass))
+#define TBO_IS_OBJECT_BASE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TBO_TYPE_OBJECT_BASE))
+#define TBO_OBJECT_BASE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), TBO_TYPE_OBJECT_BASE, TboObjectBaseClass))
+
+typedef struct _TboObjectBase      TboObjectBase;
+typedef struct _TboObjectBaseClass TboObjectBaseClass;
+
+struct _TboObjectBase
+{
+    GObject parent_instance;
+
+    /* instance members */
+    gint x;
+    gint y;
+    gint width;
+    gint height;
+    gdouble angle;
+    gboolean flipv;
+    gboolean fliph;
+};
+
+struct _TboObjectBaseClass
+{
+    GObjectClass parent_class;
+
+    /* class members */
+    void (*draw) (TboObjectBase *, Frame *, cairo_t *);
+    void (*save) (TboObjectBase *, FILE *);
+    TboObjectBase * (*clone) (TboObjectBase *);
+};
+
+/* used by TBO_TYPE_OBJECT_BASE */
+GType tbo_object_base_get_type (void);
+
+/*
+ * Method definitions.
+ */
+
+enum MOVE_OPT
+{
+    MOVE_UP,
+    MOVE_DOWN,
+    MOVE_LEFT,
+    MOVE_RIGHT,
+};
+
+enum RESIZE_OPT
+{
+    RESIZE_LESS,
+    RESIZE_GREATER,
+};
+
+GObject * tbo_object_base_new ();
+void tbo_object_base_flipv (TboObjectBase *self);
+void tbo_object_base_fliph (TboObjectBase *self);
+void tbo_object_base_get_flip_matrix (TboObjectBase *self, cairo_matrix_t *mx);
+void tbo_object_base_order_down (TboObjectBase *self);
+void tbo_object_base_order_up (TboObjectBase *self);
+void tbo_object_base_move (TboObjectBase *self, enum MOVE_OPT type);
+void tbo_object_base_resize (TboObjectBase *self, enum RESIZE_OPT type);
+
+#endif /* __TBO_OBJECT_BASE_H__ */
+