Color de fondo en viƱetas
authordanigm <danigm>
Sun, 28 Feb 2010 11:15:48 +0000 (11:15 +0000)
committerdanigm <danigm@aa302d1f-72b1-406a-902b-8593ca2b2744>
Sun, 28 Feb 2010 11:15:48 +0000 (11:15 +0000)
git-svn-id: https://forja.rediris.es/svn/cusl4-tbo@71 aa302d1f-72b1-406a-902b-8593ca2b2744

src/frame.c
src/frame.h
src/selector-tool.c
src/tbo-types.h
src/textobj.c

index ca20e47..f0ae223 100644 (file)
@@ -8,6 +8,7 @@
 static int BASE_X = 0;
 static int BASE_Y = 0;
 static float SCALE_FACTOR = 0;
+static Color BASE_COLOR = {1, 1, 1};
 
 void
 tbo_frame_set_scale_factor (Frame *frame, int width, int height)
@@ -54,6 +55,11 @@ tbo_frame_new (int x, int y,
     new_frame->y = y;
     new_frame->width = width;
     new_frame->height = height;
+    new_frame->border = TRUE;
+    new_frame->color = malloc (sizeof (Color));
+    new_frame->color->r = BASE_COLOR.r;
+    new_frame->color->g = BASE_COLOR.g;
+    new_frame->color->b = BASE_COLOR.b;
 
     return new_frame;
 }
@@ -66,11 +72,12 @@ free_objects (gpointer data,
     obj->free (obj);
 }
 
-void 
+void
 tbo_frame_free (Frame *frame)
 {
     g_list_foreach (g_list_first (frame->objects), free_objects, NULL);
     g_list_free (frame->objects);
+    free (frame->color);
     free (frame);
 }
 
@@ -91,15 +98,19 @@ tbo_frame_draw_complete (Frame *frame, cairo_t *cr,
         float border_r, float border_g, float border_b,
         int line_width)
 {
-    cairo_set_line_width (cr, line_width);
     cairo_set_source_rgb(cr, fill_r, fill_g, fill_b);
     cairo_rectangle(cr, frame->x, frame->y,
             frame->width, frame->height);
     cairo_fill(cr);
-    cairo_set_source_rgb(cr, border_r, border_g, border_b);
-    cairo_rectangle (cr, frame->x, frame->y,
-            frame->width, frame->height);
-    cairo_stroke (cr);
+
+    cairo_set_line_width (cr, line_width);
+    if (frame->border)
+    {
+        cairo_set_source_rgb(cr, border_r, border_g, border_b);
+        cairo_rectangle (cr, frame->x, frame->y,
+                frame->width, frame->height);
+        cairo_stroke (cr);
+    }
 
     void **crframe = malloc (sizeof(void*)*2);
     crframe[0] = (void*)cr;
@@ -110,11 +121,14 @@ tbo_frame_draw_complete (Frame *frame, cairo_t *cr,
     free (crframe);
 }
 
-void tbo_frame_draw (Frame *frame, cairo_t *cr)
+void
+tbo_frame_draw (Frame *frame, cairo_t *cr)
 {
+    Color border = {0, 0, 0};
+    Color *fill = frame->color;
     tbo_frame_draw_complete (frame, cr,
-            1, 1, 1,
-            0, 0, 0,
+            fill->r, fill->g, fill->b,
+            border.r, border.g, border.b,
             4);
 }
 
@@ -241,3 +255,14 @@ tbo_frame_del_obj (Frame *frame, tbo_object *obj)
     frame->objects = g_list_remove (g_list_first (frame->objects), obj);
     obj->free (obj);
 }
+
+void
+tbo_frame_set_color (Frame *frame, GdkColor *color)
+{
+    frame->color->r = color->red / 65535.0;
+    frame->color->g = color->green / 65535.0;
+    frame->color->b = color->blue / 65535.0;
+    BASE_COLOR.r = frame->color->r;
+    BASE_COLOR.g = frame->color->g;
+    BASE_COLOR.b = frame->color->b;
+}
index 491cf2e..029dfd7 100644 (file)
@@ -23,6 +23,7 @@ void tbo_frame_get_obj_relative (tbo_object *obj, int *x, int *y, int *w, int *h
 float tbo_frame_get_scale_factor ();
 int tbo_frame_get_base_y (int y);
 int tbo_frame_get_base_x (int x);
+void tbo_frame_set_color (Frame *frame, GdkColor *color);
 
 #endif
 
index c53912f..0053c72 100644 (file)
@@ -1,3 +1,4 @@
+#include <glib/gi18n.h>
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #include <cairo.h>
 
 #define R_SIZE 10
 
-typedef struct
-{
-    double r;
-    double g;
-    double b;
-} Color;
-
 static Frame *SELECTED = NULL;
 static tbo_object *OBJ = NULL;
 static int START_X=0, START_Y=0;
@@ -52,6 +46,30 @@ update_selected_cb (GtkSpinButton *widget, TboWindow *tbo)
     return FALSE;
 }
 
+gboolean
+update_color_cb (GtkColorButton *button, TboWindow *tbo)
+{
+    if (RESIZING || CLICKED || SELECTED == NULL)
+        return FALSE;
+
+    GdkColor color = {0,0,0};
+    gtk_color_button_get_color (button, &color);
+    tbo_frame_set_color (SELECTED, &color);
+    update_drawing (tbo);
+    return FALSE;
+}
+
+gboolean
+update_border_cb (GtkToggleButton *button, TboWindow *tbo)
+{
+    if (RESIZING || CLICKED || SELECTED == NULL)
+        return FALSE;
+
+    SELECTED->border = !SELECTED->border;
+    update_drawing (tbo);
+    return FALSE;
+}
+
 GtkWidget *add_spin_with_label (GtkWidget *toolarea, const char *string, int value)
 {
         GtkWidget *label;
@@ -85,6 +103,11 @@ void
 update_tool_area (TboWindow *tbo)
 {
     GtkWidget *toolarea = tbo->toolarea;
+    GtkWidget *hpanel;
+    GtkWidget *label;
+    GtkWidget *color;
+    GtkWidget *border;
+    GdkColor gdk_color = {0, 0, 0};
 
     if (!SPIN_X)
     {
@@ -99,6 +122,25 @@ update_tool_area (TboWindow *tbo)
         g_signal_connect (SPIN_W, "value-changed", G_CALLBACK (update_selected_cb), tbo);
         g_signal_connect (SPIN_H, "value-changed", G_CALLBACK (update_selected_cb), tbo);
 
+        hpanel = gtk_hbox_new (FALSE, 0);
+        label = gtk_label_new (_("Color: "));
+        gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
+        color = gtk_color_button_new ();
+        gdk_color.red = SELECTED->color->r * 65535;
+        gdk_color.green = SELECTED->color->g * 65535;
+        gdk_color.blue = SELECTED->color->b * 65535;
+        gtk_color_button_set_color (GTK_COLOR_BUTTON (color), &gdk_color);
+
+        gtk_box_pack_start (GTK_BOX (hpanel), label, TRUE, TRUE, 5);
+        gtk_box_pack_start (GTK_BOX (hpanel), color, TRUE, TRUE, 5);
+        gtk_box_pack_start (GTK_BOX (toolarea), hpanel, FALSE, FALSE, 5);
+        g_signal_connect (color, "color-set", G_CALLBACK (update_color_cb), tbo);
+
+        border = gtk_check_button_new_with_label (_("border"));
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (border), SELECTED->border);
+        gtk_box_pack_start (GTK_BOX (toolarea), border, FALSE, FALSE, 5);
+        g_signal_connect (border, "toggled", G_CALLBACK (update_border_cb), tbo);
+
         gtk_widget_show_all (toolarea);
     }
 
index 406f53e..638930d 100644 (file)
@@ -6,6 +6,13 @@
 
 typedef struct
 {
+    double r;
+    double g;
+    double b;
+} Color;
+
+typedef struct
+{
     char *title;
     int width;
     int height;
@@ -26,6 +33,8 @@ typedef struct
     int y;
     int width;
     int height;
+    gboolean border;
+    Color *color;
     GList *objects;
 
 } Frame;
index 7388cd6..c9586a0 100644 (file)
@@ -7,13 +7,6 @@
 
 typedef struct
 {
-    double r;
-    double g;
-    double b;
-} Color;
-
-typedef struct
-{
     GString *text;
     PangoFontDescription *description;
     Color *font_color;