replaced the number label with a big Cairo-drawn number below the color

2007-11-14  Michael Natterer  <mitch@gimp.org>

	* app/widgets/gimpcolorframe.[ch]: replaced the number label with
	a big Cairo-drawn number below the color value labels.


svn path=/trunk/; revision=24155
This commit is contained in:
Michael Natterer 2007-11-14 14:33:23 +00:00 committed by Michael Natterer
parent 77c400e776
commit 614932021c
2 changed files with 114 additions and 31 deletions

View File

@ -1,3 +1,8 @@
2007-11-14 Michael Natterer <mitch@gimp.org>
* app/widgets/gimpcolorframe.[ch]: replaced the number label with
a big Cairo-drawn number below the color value labels.
2007-11-14 Michael Natterer <mitch@gimp.org>
* app/widgets/gimppaletteview.[ch]: port to Cairo drawing.

View File

@ -45,17 +45,24 @@ enum
/* local function prototypes */
static void gimp_color_frame_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_color_frame_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_color_frame_menu_callback (GtkWidget *widget,
GimpColorFrame *frame);
static void gimp_color_frame_update (GimpColorFrame *frame);
static void gimp_color_frame_finalize (GObject *object);
static void gimp_color_frame_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec);
static void gimp_color_frame_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec);
static void gimp_color_frame_style_set (GtkWidget *widget,
GtkStyle *prev_style);
static gboolean gimp_color_frame_expose (GtkWidget *widget,
GdkEventExpose *eevent);
static void gimp_color_frame_menu_callback (GtkWidget *widget,
GimpColorFrame *frame);
static void gimp_color_frame_update (GimpColorFrame *frame);
G_DEFINE_TYPE (GimpColorFrame, gimp_color_frame, GIMP_TYPE_FRAME)
@ -66,11 +73,16 @@ G_DEFINE_TYPE (GimpColorFrame, gimp_color_frame, GIMP_TYPE_FRAME)
static void
gimp_color_frame_class_init (GimpColorFrameClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = gimp_color_frame_finalize;
object_class->get_property = gimp_color_frame_get_property;
object_class->set_property = gimp_color_frame_set_property;
widget_class->style_set = gimp_color_frame_style_set;
widget_class->expose_event = gimp_color_frame_expose;
g_object_class_install_property (object_class, PROP_MODE,
g_param_spec_enum ("mode",
NULL, NULL,
@ -102,7 +114,6 @@ gimp_color_frame_init (GimpColorFrame *frame)
{
GtkWidget *vbox;
GtkWidget *vbox2;
GtkWidget *hbox;
gint i;
frame->sample_valid = FALSE;
@ -122,17 +133,6 @@ gimp_color_frame_init (GimpColorFrame *frame)
gtk_container_add (GTK_CONTAINER (frame), vbox);
gtk_widget_show (vbox);
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
frame->number_label = gtk_label_new ("0");
gimp_label_set_attributes (GTK_LABEL (frame->number_label),
PANGO_ATTR_WEIGHT, PANGO_WEIGHT_BOLD,
-1);
gtk_misc_set_alignment (GTK_MISC (frame->number_label), 0.0, 0.5);
gtk_box_pack_start (GTK_BOX (hbox), frame->number_label, FALSE, FALSE, 0);
frame->color_area =
g_object_new (GIMP_TYPE_COLOR_AREA,
"color", &frame->color,
@ -141,8 +141,7 @@ gimp_color_frame_init (GimpColorFrame *frame)
"draw-border", TRUE,
"height-request", 20,
NULL);
gtk_box_pack_end (GTK_BOX (hbox), frame->color_area, TRUE, TRUE, 0);
gtk_box_pack_start (GTK_BOX (vbox), frame->color_area, FALSE, FALSE, 0);
vbox2 = gtk_vbox_new (TRUE, 2);
gtk_box_pack_start (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0);
@ -150,6 +149,8 @@ gimp_color_frame_init (GimpColorFrame *frame)
for (i = 0; i < GIMP_COLOR_FRAME_ROWS; i++)
{
GtkWidget *hbox;
hbox = gtk_hbox_new (FALSE, 6);
gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0);
gtk_widget_show (hbox);
@ -169,6 +170,20 @@ gimp_color_frame_init (GimpColorFrame *frame)
}
}
static void
gimp_color_frame_finalize (GObject *object)
{
GimpColorFrame *frame = GIMP_COLOR_FRAME (object);
if (frame->number_layout)
{
g_object_unref (frame->number_layout);
frame->number_layout = NULL;
}
G_OBJECT_CLASS (parent_class)->finalize (object);
}
static void
gimp_color_frame_get_property (GObject *object,
guint property_id,
@ -233,6 +248,72 @@ gimp_color_frame_set_property (GObject *object,
}
}
static void
gimp_color_frame_style_set (GtkWidget *widget,
GtkStyle *prev_style)
{
GimpColorFrame *frame = GIMP_COLOR_FRAME (widget);
if (GTK_WIDGET_CLASS (parent_class)->style_set)
GTK_WIDGET_CLASS (parent_class)->style_set (widget, prev_style);
if (frame->number_layout)
{
g_object_unref (frame->number_layout);
frame->number_layout = NULL;
}
}
static gboolean
gimp_color_frame_expose (GtkWidget *widget,
GdkEventExpose *eevent)
{
GimpColorFrame *frame = GIMP_COLOR_FRAME (widget);
if (frame->has_number)
{
cairo_t *cr;
gchar buf[8];
gint w, h;
gdouble scale;
cr = gdk_cairo_create (widget->window);
gdk_cairo_set_source_color (cr, &widget->style->light[GTK_STATE_NORMAL]);
g_snprintf (buf, sizeof (buf), "%d", frame->number);
if (! frame->number_layout)
frame->number_layout = gtk_widget_create_pango_layout (widget, NULL);
pango_layout_set_text (frame->number_layout, buf, -1);
pango_layout_get_pixel_size (frame->number_layout, &w, &h);
scale = ((gdouble) (widget->allocation.height -
frame->menu->allocation.height -
frame->color_area->allocation.height) /
(gdouble) h);
cairo_scale (cr, scale, scale);
cairo_move_to (cr,
(widget->allocation.x +
widget->allocation.width / 2.0) / scale - w / 2.0,
(widget->allocation.y +
widget->allocation.height / 2.0 +
frame->menu->allocation.height / 2.0 +
frame->color_area->allocation.height / 2.0) / scale - h / 2.0);
pango_cairo_show_layout (cr, frame->number_layout);
cairo_fill (cr);
cairo_destroy (cr);
}
return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, eevent);
}
/* public functions */
/**
* gimp_color_frame_new:
*
@ -276,7 +357,7 @@ gimp_color_frame_set_has_number (GimpColorFrame *frame,
{
frame->has_number = has_number ? TRUE : FALSE;
g_object_set (frame->number_label, "visible", frame->has_number, NULL);
gtk_widget_queue_draw (GTK_WIDGET (frame));
g_object_notify (G_OBJECT (frame), "has-number");
}
@ -290,12 +371,9 @@ gimp_color_frame_set_number (GimpColorFrame *frame,
if (number != frame->number)
{
gchar str[8];
frame->number = number;
g_snprintf (str, sizeof (str), "%d", number);
gtk_label_set_text (GTK_LABEL (frame->number_label), str);
gtk_widget_queue_draw (GTK_WIDGET (frame));
g_object_notify (G_OBJECT (frame), "number");
}