-- Dialogo de nuevo comic (pedir tamaño)
-- Varios controles avanzados sobre cairo, como viñeta, globo, texto,
- etc
<toolitem name="OpenTool" action="OpenFileTool"/>
<toolitem name="SaveTool" action="SaveFileTool"/>
<separator/>
+ <toolitem name="newpage" action="NewPage"/>
+ <toolitem name="newframe" action="NewFrame"/>
</placeholder>
</toolbar>
</ui>
static int NWINDOWS = 0;
TboWindow *
-tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll,
+tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll, GtkWidget *status,
GtkWidget *vbox, Comic *comic)
{
TboWindow *tbo;
tbo->dw_scroll = dw_scroll;
list = gtk_container_get_children (GTK_CONTAINER (dw_scroll));
tbo->drawing = GTK_WIDGET (list->data);
+ tbo->status = status;
tbo->vbox = vbox;
tbo->comic = comic;
GtkWidget *toolbar;
GtkWidget *scrolled;
GtkWidget *darea;
+ GtkWidget *status;
GtkUIManager *manager;
comic = tbo_comic_new ("Untitled", width, height);
gtk_window_set_title (GTK_WINDOW (window), comic->title);
scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
darea = get_drawing_area (width, height);
gtk_container_add (GTK_CONTAINER (scrolled), darea);
- tbo = tbo_window_new (window, scrolled, container, comic);
+ status = gtk_statusbar_new ();
+
+ tbo = tbo_window_new (window, scrolled, status, container, comic);
+
+ // ui-drawing.c (expose, motion and click)
+ darea_connect_signals (tbo);
g_signal_connect (window, "delete-event", G_CALLBACK (tbo_window_free_cb), tbo);
gtk_box_pack_start (GTK_BOX (container), toolbar, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER (container), scrolled);
+ gtk_box_pack_start (GTK_BOX (container), status, FALSE, FALSE, 0);
+
gtk_widget_show_all (window);
return tbo;
typedef struct
{
-GtkWidget *window;
-GtkWidget *dw_scroll;
-GtkWidget *drawing;
-GtkWidget *vbox;
-Comic *comic;
+ GtkWidget *window;
+ GtkWidget *dw_scroll;
+ GtkWidget *drawing;
+ GtkWidget *status;
+ GtkWidget *vbox;
+ Comic *comic;
+
} TboWindow;
-TboWindow *tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll, GtkWidget *vbox, Comic *comic);
+TboWindow *tbo_window_new (GtkWidget *window, GtkWidget *dw_scroll, GtkWidget *status, GtkWidget *vbox, Comic *comic);
void tbo_window_free (TboWindow *tbo);
gboolean tbo_window_free_cb (GtkWidget *widget, GdkEventExpose *event, TboWindow *tbo);
GdkPixbuf *create_pixbuf (const gchar * filename);
gboolean
on_expose_cb(GtkWidget *widget,
GdkEventExpose *event,
- gpointer data)
+ TboWindow *tbo)
{
cairo_t *cr;
int width, height;
char *text = "TBO rulz!";
cairo_text_extents_t extents;
- int *size = (int *) data;
- width = size[0];
- height = size[1];
+ width = tbo->comic->width;
+ height = tbo->comic->height;
cr = gdk_cairo_create(GTK_LAYOUT (widget)->bin_window);
cairo_set_source_rgb(cr, 1, 1, 1);
- cairo_rectangle(cr, 0, 0, size[0], size[1]);
+ cairo_rectangle(cr, 0, 0, width+2, height+2);
cairo_fill(cr);
cairo_set_source_rgb(cr, 0, 0, 0);
- cairo_rectangle (cr, 0, 0, size[0], size[1]);
+ cairo_rectangle (cr, 1, 1, width, height);
cairo_stroke (cr);
cairo_set_source_rgb(cr, 0, 0, 0);
}
gboolean
-on_move_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer data)
+on_move_cb (GtkWidget *widget,
+ GdkEventMotion *event,
+ TboWindow *tbo)
{
- //printf ("move\n");
+ char buffer[100];
+ snprintf (buffer, 100, "move %dx%d", (int)event->x, (int)event->y);
+ gtk_statusbar_push (GTK_STATUSBAR (tbo->status), 0, buffer);
return FALSE;
}
gboolean
-on_click_cb (GtkWidget *widget,
- GdkEventExpose *event,
- gpointer data)
+on_click_cb (GtkWidget *widget,
+ GdkEventButton *event,
+ TboWindow *tbo)
{
- printf ("click\n");
return FALSE;
}
{
GtkWidget *drawing;
- static int size[2];
-
- size[0] = width;
- size[1] = height;
drawing = gtk_layout_new(NULL, NULL);
- gtk_layout_set_size(GTK_LAYOUT (drawing), size[0], size[1]);
+ gtk_layout_set_size(GTK_LAYOUT (drawing), width, height);
- g_signal_connect(drawing, "expose-event",
- G_CALLBACK (on_expose_cb), (gpointer) size);
+ return drawing;
+}
+
+void
+darea_connect_signals (TboWindow *tbo)
+{
+ GtkWidget *drawing;
+ drawing = tbo->drawing;
gtk_widget_add_events (drawing, GDK_BUTTON_PRESS_MASK |
GDK_POINTER_MOTION_MASK);
+ g_signal_connect(drawing, "expose-event",
+ G_CALLBACK (on_expose_cb), tbo);
+
g_signal_connect (drawing, "button_press_event",
- G_CALLBACK (on_click_cb), NULL);
+ G_CALLBACK (on_click_cb), tbo);
g_signal_connect (drawing, "motion_notify_event",
- G_CALLBACK (on_move_cb), (gpointer) size);
-
- return drawing;
+ G_CALLBACK (on_move_cb), tbo);
}
#include <gtk/gtk.h>
#include <cairo.h>
+#include "tbo-window.h"
-gboolean on_expose_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data);
-gboolean on_move_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data);
-gboolean on_click_cb(GtkWidget *widget, GdkEventExpose *event, gpointer data);
+gboolean on_expose_cb(GtkWidget *widget, GdkEventExpose *event, TboWindow *tbo);
+gboolean on_move_cb(GtkWidget *widget, GdkEventMotion *event, TboWindow *tbo);
+gboolean on_click_cb(GtkWidget *widget, GdkEventButton *event, TboWindow *tbo);
+void darea_connect_signals (TboWindow *tbo);
GtkWidget * get_drawing_area (int width, int height);
#endif
static const GtkActionEntry tbo_tools_entries [] = {
{ "NewFileTool", GTK_STOCK_NEW, "_New", "<control>N",
- "Create a new file",
+ "New Comic",
G_CALLBACK (tbo_comic_new_dialog) },
{ "OpenFileTool", GTK_STOCK_OPEN, "_Open", "<control>O",
- "Open a new file",
+ "Open comic",
G_CALLBACK (toolbar_handler) },
{ "SaveFileTool", GTK_STOCK_SAVE, "_Save", "<control>S",
"Save current document",
G_CALLBACK (toolbar_handler) },
+
+ { "NewPage", GTK_STOCK_ADD, "New Page", "<control>P",
+ "New page",
+ G_CALLBACK (toolbar_handler) },
+
+ { "NewFrame", GTK_STOCK_DND_MULTIPLE, "New _Frame", "<control>F",
+ "New Frame",
+ G_CALLBACK (toolbar_handler) },
};
GtkWidget *generate_toolbar (TboWindow *window){