gboolean clone_obj_cb (GtkWidget *widget, gpointer data) { tbo_object *obj = selector_tool_get_selected_obj (); Frame *frame = selector_tool_get_selected_frame (); Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic); if (!get_frame_view () && frame) { Frame *cloned_frame = tbo_frame_clone (frame); cloned_frame->x += 10; cloned_frame->y -= 10; tbo_page_add_frame (page, cloned_frame); set_selected (cloned_frame, (TboWindow*)data); } else if (obj && get_frame_view ()) { tbo_object *cloned_obj = obj->clone (obj); cloned_obj->x += 10; cloned_obj->y -= 10; tbo_frame_add_obj (frame, cloned_obj); set_selected_obj (cloned_obj, (TboWindow*)data); } update_drawing ((TboWindow *)data); return FALSE; }
gboolean delete_obj_cb (GtkWidget *widget, gpointer data) { TboWindow *tbo = (TboWindow *)data; tbo_object *obj = selector_tool_get_selected_obj (); Frame *frame = selector_tool_get_selected_frame (); Page *page = tbo_comic_get_current_page (((TboWindow*)data)->comic); if (obj && get_frame_view ()) { tbo_frame_del_obj (frame, obj); set_selected_obj (NULL, tbo); } else if (!get_frame_view () && frame) { tbo_page_del_frame (page, frame); set_selected (NULL, tbo); } update_drawing ((TboWindow *)data); return FALSE; }
void frame_tool_on_release (GtkWidget *widget, GdkEventButton *event, TboWindow *tbo) { int w, h; w = (int)fabs (event->x - N_FRAME_X); h = (int)fabs (event->y - N_FRAME_Y); if (w != 0 && h != 0) { tbo_page_new_frame (tbo_comic_get_current_page (tbo->comic), min (N_FRAME_X, event->x), min (N_FRAME_Y, event->y), w, h); } N_FRAME_X = -1; N_FRAME_Y = -1; if (TMP_FRAME) tbo_frame_free (TMP_FRAME); TMP_FRAME = NULL; }
void tbo_drawing_draw (TboDrawing *self, cairo_t *cr) { Frame *frame; GList *frame_list; Page *page; int w, h; w = self->comic->width; h = self->comic->height; // white background if (tbo_drawing_get_current_frame (self)) cairo_set_source_rgb(cr, 0, 0, 0); else cairo_set_source_rgb(cr, 1, 1, 1); cairo_rectangle(cr, 0, 0, w*self->zoom, h*self->zoom); cairo_fill(cr); cairo_scale (cr, self->zoom, self->zoom); page = tbo_comic_get_current_page (self->comic); if (!self->current_frame) { for (frame_list = tbo_page_get_frames (page); frame_list; frame_list = frame_list->next) { // draw each frame frame = (Frame *)frame_list->data; tbo_frame_draw (frame, cr); } } else { tbo_frame_draw_scaled (self->current_frame, cr, w, h); } }