24
24
#include <libxml/parser.h>
28
29
#include "gcompris/gcompris.h"
30
#include "gcompris/pixbuf_util.h"
30
32
#define SOUNDLISTFILE PACKAGE
31
#define IMG_DATA_SET PACKAGE_DATA_DIR "/dataset/mrpatate.xml"
32
33
#define FILE_SELECTOR_ROOT "drawings"
34
35
/* Represent the drawing area */
177
178
static void start_board (GcomprisBoard *agcomprisBoard);
178
179
static void pause_board (gboolean pause);
179
180
static void end_board (void);
180
static gint key_press(guint keyval);
181
static gint key_press(guint keyval, gchar *commit_str, gchar *preedit_str);
181
182
static gboolean is_our_board (GcomprisBoard *gcomprisBoard);
182
183
static void config(void);
190
191
static void display_tool_selector(GnomeCanvasGroup *parent);
191
192
static void display_drawing_area(GnomeCanvasGroup *parent);
192
193
static void display_grid(gboolean status);
193
static gint color_event(GnomeCanvasItem *item, GdkEvent *event, gchar *color);
194
194
static gint ext_color_event(GnomeCanvasItem *item, GdkEvent *event, gpointer color_rgba);
195
195
static void set_current_tool(GnomeCanvasItem *item, gint tool);
196
196
static gint tool_event(GnomeCanvasItem *item, GdkEvent *event, gint tool);
201
201
static void highlight_color_item(GnomeCanvasItem *item);
202
202
static guint get_tool_cursor(ToolList tool);
203
203
static guint get_resize_cursor(AnchorType anchor);
204
static void realign_to_grid(GnomeCanvasItem *item);
205
204
static void snap_to_grid(double *x, double *y);
206
205
static void image_selected(gchar *image);
207
static void load_drawing(gchar *file);
208
static void save_drawing(gchar *file);
206
static void load_drawing(gchar *file, gchar *type);
207
static void save_drawing(gchar *file, gchar *type);
210
209
/* Description of this plugin */
211
210
static BoardPlugin menu_bp =
215
N_("A simple vector drawing tool"),
216
N_("Creative board where you can draw freely"),
214
"A simple vector drawing tool",
215
"Creative board where you can draw freely",
217
216
"Bruno Coudoin <bruno.coudoin@free.fr>",
263
260
if(agcomprisBoard!=NULL)
265
264
gcomprisBoard=agcomprisBoard;
267
gcompris_set_background(gnome_canvas_root(gcomprisBoard->canvas), "draw/draw-bg.jpg");
266
/* disable im_context */
267
gcomprisBoard->disable_im_context = TRUE;
269
img = gc_skin_image_get("gcompris-bg.jpg");
270
gc_set_background(gnome_canvas_root(gcomprisBoard->canvas),
270
275
/* set initial values for this level */
271
276
gcomprisBoard->level = 1;
272
277
gcomprisBoard->maxlevel=1;
275
280
gcomprisBoard->number_of_sublevel=0;
276
281
gcomprisBoard->sublevel = 0;
325
gcompris_file_selector_load(gcomprisBoard, FILE_SELECTOR_ROOT, load_drawing);
330
gc_selector_file_load(gcomprisBoard, FILE_SELECTOR_ROOT, "", load_drawing);
328
gcompris_file_selector_save(gcomprisBoard, FILE_SELECTOR_ROOT, save_drawing);
333
gc_selector_file_save(gcomprisBoard, FILE_SELECTOR_ROOT, "", save_drawing);
330
335
case GDK_Shift_L:
331
336
case GDK_Shift_R:
655
630
gtk_signal_connect(GTK_OBJECT(item), "event",
656
631
(GtkSignalFunc) tool_event,
632
GINT_TO_POINTER(TOOL_SAVE) );
660
635
currentTool = TOOL_SAVE;
663
638
for( toolIndex = 1 ; toolIndex < NUMBER_OF_TOOL ; toolIndex++)
665
640
y += (toolIndex%2 == 0 ? SELECTOR_VERTICAL_SPACING : 0);
666
pixmap = gcompris_load_pixmap(tool_pixmap_name[(2*toolIndex) + PIXMAP_OFF]);
641
pixmap = gc_pixmap_load(tool_pixmap_name[(2*toolIndex) + PIXMAP_OFF]);
694
669
gtk_signal_connect(GTK_OBJECT(item), "event",
695
670
(GtkSignalFunc) tool_event,
671
GINT_TO_POINTER(toolIndex));
780
* Given an object, realign it to the grid
782
* FIXME: Does not work yet as expected
784
static void realign_to_grid(GnomeCanvasItem *item)
789
double x1, y1, x2, y2;
790
double xsnap1, ysnap1;
792
gnome_canvas_item_get_bounds (item,
800
snap_to_grid(&xsnap1, &ysnap1);
802
// Realign our object on the grid
803
gnome_canvas_item_move(item,
810
755
* Given a pair (x,y) rewrite them so that (x,y) is on a grid node
811
756
* Do nothing if grid_step is 0
935
gcompris_file_selector_load(gcomprisBoard, FILE_SELECTOR_ROOT, load_drawing);
880
// gc_selector_file_load(gcomprisBoard, FILE_SELECTOR_ROOT, "", load_drawing);
938
gcompris_file_selector_save(gcomprisBoard, FILE_SELECTOR_ROOT, save_drawing);
883
// gc_selector_file_save(gcomprisBoard, FILE_SELECTOR_ROOT, "", save_drawing);
941
886
display_grid((grid_step==0 ? TRUE : FALSE));
945
gcompris_images_selector_start(gcomprisBoard, IMG_DATA_SET, image_selected);
890
gc_selector_images_start(gcomprisBoard, "dataset", image_selected);
949
894
if(selected_anchors_item)
1854
1798
// This is an image
1855
1799
x = (drawing_area_x2-drawing_area_x1)/2;
1856
1800
y = (drawing_area_y2-drawing_area_y1)/2;
1857
pixmap = gcompris_load_pixmap(imagename);
1801
pixmap = gc_pixmap_load(imagename);
1858
1802
item = gnome_canvas_item_new (GNOME_CANVAS_GROUP(item_root_item),
1859
1803
gnome_canvas_pixbuf_get_type (),
1860
1804
"pixbuf", pixmap,
1946
1890
item = gnome_canvas_item_new (GNOME_CANVAS_GROUP(item_root_item),
1947
1891
gnome_canvas_text_get_type (),
1949
"font", gcompris_skin_font_board_big_bold,
1893
"font", gc_skin_font_board_big_bold,
1950
1894
"x", (double) x,
1951
1895
"y", (double) y,
1952
1896
"anchor", GTK_ANCHOR_CENTER,
2033
1977
fleur = gdk_cursor_new(get_resize_cursor(anchor));
2035
gnome_canvas_item_grab(item,
1979
gc_canvas_item_grab(item,
2036
1980
GDK_POINTER_MOTION_MASK |
2037
1981
GDK_BUTTON_RELEASE_MASK,
2055
1999
case GDK_BUTTON_RELEASE:
2058
gnome_canvas_item_ungrab(item, event->button.time);
2002
gc_canvas_item_ungrab(item, event->button.time);
2059
2003
dragging = FALSE;
2060
2004
draggingItem = NULL;
2063
2007
case GDK_ENTER_NOTIFY:
2064
gcompris_set_cursor(get_resize_cursor(anchor));
2008
gc_cursor_set(get_resize_cursor(anchor));
2067
2011
case GDK_LEAVE_NOTIFY:
2068
gcompris_set_cursor(get_tool_cursor(currentTool));
2012
gc_cursor_set(get_tool_cursor(currentTool));
2071
2015
case GDK_MOTION_NOTIFY:
2151
2095
* Callback for the drawing load
2153
static void load_drawing(gchar *file)
2097
static void load_drawing(gchar *file, gchar *type)
2155
printf("callback in draw, load_drawing got image %s\n", file);
2157
/* Delete the current drawing */
2158
/* WARNING: We should have a YES/NO Dialog box */
2159
gtk_object_destroy (GTK_OBJECT(draw_root_item));
2161
gnome_canvas_item_new (GNOME_CANVAS_GROUP(shape_root_item),
2162
gnome_canvas_group_get_type (),
2168
gcompris_svg_restore(FILE_SELECTOR_ROOT, file, GNOME_CANVAS_GROUP(draw_root_item));
2170
/* For each item we need to recreate the anchors */
2171
g_list_foreach(GNOME_CANVAS_GROUP(draw_root_item)->item_list, (GFunc) recreate_item, NULL);
2173
/* Set current_tool */
2174
set_current_tool(selectionToolItem, TOOL_SELECT);
2179
2103
* Callback for the drawing save
2181
static void save_drawing(gchar *file)
2105
static void save_drawing(gchar *file, gchar *type)
2183
printf("callback in draw, save_drawing got image %s\n", file);
2184
gcompris_svg_save(FILE_SELECTOR_ROOT, file, draw_root_item, BOARDWIDTH, BOARDHEIGHT, 0);
2225
2148
fleur = gdk_cursor_new(GDK_FLEUR);
2227
gnome_canvas_item_grab(item,
2150
gc_canvas_item_grab(item,
2228
2151
GDK_POINTER_MOTION_MASK |
2229
2152
GDK_BUTTON_RELEASE_MASK,
2270
2193
case TOOL_ROTATE_CW:
2271
item_rotate_relative(anchorsItem->rootitem, 10);
2194
gc_item_rotate_relative(anchorsItem->rootitem, 10);
2272
2195
reset_anchors_bounded(anchorsItem);
2275
2198
case TOOL_ROTATE_CCW:
2276
item_rotate_relative(anchorsItem->rootitem, -10);
2199
gc_item_rotate_relative(anchorsItem->rootitem, -10);
2277
2200
reset_anchors_bounded(anchorsItem);
2313
2236
switch(currentTool) {
2314
2237
/* Perform the reverse operation when it makes sense */
2315
2238
case TOOL_ROTATE_CW:
2316
item_rotate_relative(anchorsItem->rootitem, -10);
2239
gc_item_rotate_relative(anchorsItem->rootitem, -10);
2317
2240
reset_anchors_bounded(anchorsItem);
2319
2242
case TOOL_ROTATE_CCW:
2320
item_rotate_relative(anchorsItem->rootitem, 10);
2243
gc_item_rotate_relative(anchorsItem->rootitem, 10);
2321
2244
reset_anchors_bounded(anchorsItem);
2323
2246
case TOOL_RAISE:
2361
2284
case TOOL_DELETE:
2362
2285
case TOOL_FILL:
2363
2286
case TOOL_TEXT:
2364
gcompris_set_cursor(get_tool_cursor(currentTool));
2287
gc_cursor_set(get_tool_cursor(currentTool));
2366
2289
case TOOL_SELECT:
2367
gcompris_set_cursor(GDK_FLEUR);
2290
gc_cursor_set(GDK_FLEUR);
2373
2296
case GDK_LEAVE_NOTIFY:
2374
gcompris_set_cursor(get_tool_cursor(currentTool));
2297
gc_cursor_set(get_tool_cursor(currentTool));
2377
2300
case GDK_MOTION_NOTIFY: