summaryrefslogtreecommitdiff
path: root/src/gui/pictureframe.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/pictureframe.c')
-rw-r--r--src/gui/pictureframe.c90
1 files changed, 79 insertions, 11 deletions
diff --git a/src/gui/pictureframe.c b/src/gui/pictureframe.c
index 543ba4c..e4081a7 100644
--- a/src/gui/pictureframe.c
+++ b/src/gui/pictureframe.c
@@ -1,29 +1,98 @@
1#include <assert.h> 1#include <assert.h>
2#include <gui/pictureframe.h> 2#include <gui/pictureframe.h>
3#include <MLV/MLV_all.h> 3#include <MLV/MLV_all.h>
4#include <common/time.h>
4 5
5CartesianVector pictureframe_origin_split(const CartesianMapping *cartesianMapping) { 6CartesianVector pictureframe_origin_split(const CartesianMapping *cartesianMapping) {
6 7 return cartesianMapping->origin;
7} 8}
8 9
9CartesianVector pictureframe_target_split(const CartesianMapping *cartesianMapping) { 10CartesianVector pictureframe_target_split(const CartesianMapping *cartesianMapping) {
10 11 return cartesianMapping->target;
11} 12}
12 13
13void pictureframe_print(Component *parameterSelf) { 14void pictureframe_print(Component *parameterSelf) {
14 PictureFrame *self = (PictureFrame *) parameterSelf; 15 PictureFrame *self = (PictureFrame *) parameterSelf;
15 /*DEBUG*/ 16 MLV_draw_image(self->canvas->mlv, self->component.x_pos, self->component.y_pos);
16 MLV_draw_filled_rectangle(self->component.x_pos, self->component.y_pos, self->component.width, self->component.height, 17 TriangleMap *p = self->morphing->first;
17 MLV_COLOR_RED); 18 CartesianVector p1;
18 /**/ 19 CartesianVector p2;
20 CartesianVector p3;
21 CartesianVector pointToPrint1;
22 CartesianVector pointToPrint2;
23 CartesianVector pointToPrint3;
24 while(p != NULL){
25 p1 = self->cartesianMappingDivision(&(p->vertices[0]));
26 p2 = self->cartesianMappingDivision(&(p->vertices[1]));
27 p3 = self->cartesianMappingDivision(&(p->vertices[2]));
28
29 pointToPrint1 = pictureframe_conversion_to_picture(p1.x,p1.y,self);
30 pointToPrint2 = pictureframe_conversion_to_picture(p2.x,p2.y,self);
31 pointToPrint3 = pictureframe_conversion_to_picture(p3.x,p3.y,self);
32
33 MLV_draw_filled_circle(pointToPrint1.x,pointToPrint1.y,2,MLV_COLOR_RED);
34 MLV_draw_filled_circle(pointToPrint2.x,pointToPrint2.y,2,MLV_COLOR_RED);
35 MLV_draw_filled_circle(pointToPrint3.x,pointToPrint3.y,2,MLV_COLOR_RED);
36
37 MLV_draw_line(pointToPrint1.x,pointToPrint1.y,pointToPrint2.x,pointToPrint2.y,MLV_COLOR_RED);
38 MLV_draw_line(pointToPrint1.x,pointToPrint1.y,pointToPrint3.x,pointToPrint3.y,MLV_COLOR_RED);
39 MLV_draw_line(pointToPrint3.x,pointToPrint3.y,pointToPrint2.x,pointToPrint2.y,MLV_COLOR_RED);
40 p = p->next;
41 }
42}
43
44bool pictureframe_is_selected(int x, int y, PictureFrame *pictureFrame) {
45 assert(x >= 0);
46 assert(y >= 0);
47 assert(pictureFrame != NULL);
48 int x1 = pictureFrame->component.x_pos;
49 int y1 = pictureFrame->component.y_pos;
50 int x2 = pictureFrame->component.x_pos + pictureFrame->component.width;
51 int y2 = pictureFrame->component.y_pos + pictureFrame->component.height;
52 if (x >= x1 && x <= x2 && y >= y1 && y <= y2) {
53 return true;
54 }
55 return false;
56}
57
58CartesianVector pictureframe_conversion_to_origin(int x, int y, PictureFrame *pictureFrame) {
59 CartesianVector vector;
60 vector.x = x - pictureFrame->component.x_pos;
61 vector.y = y - pictureFrame->component.y_pos;
62 return vector;
63}
64
65CartesianVector pictureframe_conversion_to_picture(int x, int y, PictureFrame *pictureFrame) {
66 CartesianVector vector;
67 vector.x = x + pictureFrame->component.x_pos;
68 vector.y = y + pictureFrame->component.y_pos;
69 return vector;
70}
71
72void pictureframe_click_handler_origin(int x_pos, int y_pos, Component *parameterSelf) {
73 PictureFrame *self = (PictureFrame *) parameterSelf;
74 if (pictureframe_is_selected(x_pos, y_pos, self) && mode == INSERT_ORIGIN) {
75 CartesianVector vector = pictureframe_conversion_to_origin(x_pos,y_pos,self);
76 MLV_draw_filled_circle(x_pos,y_pos,2,MLV_COLOR_BLUE);
77 savedPoint = vector;
78 MLV_actualise_window();
79 mode = INSERT_TARGET;
80 }
19} 81}
20 82
21void pictureframe_click_handler(int x_pos, int y_pos, Component *parameterSelf) { 83void pictureframe_click_handler_target(int x_pos, int y_pos, Component *parameterSelf) {
22 printf("ClickHandler pictureframe activated \n"); 84 PictureFrame *self = (PictureFrame *) parameterSelf;
85 if (pictureframe_is_selected(x_pos, y_pos, self) && mode == INSERT_TARGET) {
86 CartesianVector vector = pictureframe_conversion_to_origin(x_pos,y_pos,self);
87 printf("(%d,%d) | (%d,%d)\n",savedPoint.x,savedPoint.y,vector.x,vector.y);
88 morphing_add_constraint(self->morphing,savedPoint,vector);
89 printf("OK\n");
90 mode = PRINTING;
91 }
23} 92}
24 93
25void pictureframe_init(PictureFrame *pictureFrame, int width, int height, int x_pos, int y_pos, 94void pictureframe_init(PictureFrame *pictureFrame, int width, int height, int x_pos, int y_pos,
26 CartesianMappingDivision cartesianMappingDivision, Morphing *morphing, Canvas *canvas) { 95 CartesianMappingDivision cartesianMappingDivision, Morphing *morphing, Canvas *canvas,ClickHandler clickHandler) {
27 assert(pictureFrame != NULL); 96 assert(pictureFrame != NULL);
28 assert(width > 0); 97 assert(width > 0);
29 assert(height > 0); 98 assert(height > 0);
@@ -36,9 +105,8 @@ void pictureframe_init(PictureFrame *pictureFrame, int width, int height, int x_
36 pictureFrame->component.height = height; 105 pictureFrame->component.height = height;
37 pictureFrame->component.x_pos = x_pos; 106 pictureFrame->component.x_pos = x_pos;
38 pictureFrame->component.y_pos = y_pos; 107 pictureFrame->component.y_pos = y_pos;
39 pictureFrame->component.activated = true;
40 pictureFrame->component.print_method = pictureframe_print; 108 pictureFrame->component.print_method = pictureframe_print;
41 pictureFrame->component.click_handler = pictureframe_click_handler; 109 pictureFrame->component.click_handler = clickHandler;
42 pictureFrame->morphing = morphing; 110 pictureFrame->morphing = morphing;
43 pictureFrame->canvas = canvas; 111 pictureFrame->canvas = canvas;
44 pictureFrame->cartesianMappingDivision = cartesianMappingDivision; 112 pictureFrame->cartesianMappingDivision = cartesianMappingDivision;