1a1839b37bac2e2e27ebe3a8378943eb7697c4ab
[tbo.git] / src / tbo-object.c
1 #include <gtk/gtk.h>
2 #include <cairo.h>
3 #include <stdio.h>
4 #include "ui-drawing.h"
5 #include "tbo-types.h"
6 #include "tbo-object.h"
7 #include "svgimage.h"
8 #include "textobj.h"
9
10 void
11 tbo_object_flipv (tbo_object *self)
12 {
13     if (self->flipv)
14         self->flipv = FALSE;
15     else
16         self->flipv = TRUE;
17 }
18
19 void
20 tbo_object_fliph (tbo_object *self)
21 {
22     if (self->fliph)
23         self->fliph = FALSE;
24     else
25         self->fliph = TRUE;
26 }
27
28 void
29 tbo_object_get_flip_matrix (tbo_object *self, cairo_matrix_t *mx)
30 {
31     cairo_matrix_t flipv = {1, 0, 0, 1, 0, 0};
32     cairo_matrix_t fliph = {1, 0, 0, 1, 0, 0};
33
34     if (self->flipv)
35     {
36         cairo_matrix_init (&flipv, 1, 0, 0, -1, 0, self->height);
37     }
38     if (self->fliph)
39     {
40         cairo_matrix_init (&fliph, -1, 0, 0, 1, self->width, 0);
41     }
42
43     cairo_matrix_multiply (mx, &flipv, &fliph);
44 }
45
46 void
47 tbo_object_order_down (tbo_object *self)
48 {
49     Frame *frame = get_frame_view ();
50     GList *list = g_list_find (frame->objects, self);
51     GList *prev = g_list_previous (list);
52     tbo_object *tmp;
53     if (prev)
54     {
55         tmp = (tbo_object*)list->data;
56         list->data = prev->data;
57         prev->data = tmp;
58     }
59 }
60
61 void
62 tbo_object_order_up (tbo_object *self)
63 {
64     Frame *frame = get_frame_view ();
65     GList *list = g_list_find (frame->objects, self);
66     GList *next = g_list_next (list);
67     tbo_object *tmp;
68     if (next)
69     {
70         tmp = (tbo_object*)list->data;
71         list->data = next->data;
72         next->data = tmp;
73     }
74 }
75
76 void
77 tbo_object_move (tbo_object *self, enum MOVE_OPT type)
78 {
79     switch (type)
80     {
81         case MOVE_UP:
82             self->y -= MOVING_OFFSET;
83             break;
84         case MOVE_DOWN:
85             self->y += MOVING_OFFSET;
86             break;
87         case MOVE_LEFT:
88             self->x -= MOVING_OFFSET;
89             break;
90         case MOVE_RIGHT:
91             self->x += MOVING_OFFSET;
92             break;
93         default:
94             break;
95     }
96 }
97
98 void
99 tbo_object_save (tbo_object *self, FILE *file)
100 {
101     self->save (self, file);
102 }