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)
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;
}
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);
}
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;
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);
}
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;
+}
+#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;
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;
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)
{
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);
}