mirror of https://github.com/GNOME/gimp.git
handle allocation > requisition for the gradient preview.
* libgimp/gimpgradientmenu.c: handle allocation > requisition for the gradient preview.
This commit is contained in:
parent
224633fef3
commit
8fd6576149
|
@ -65,6 +65,10 @@ static void gimp_gradient_select_widget_clicked (GtkWidget *widget,
|
||||||
GradientSelect *gradient_sel);
|
GradientSelect *gradient_sel);
|
||||||
static void gimp_gradient_select_widget_destroy (GtkWidget *widget,
|
static void gimp_gradient_select_widget_destroy (GtkWidget *widget,
|
||||||
GradientSelect *gradient_sel);
|
GradientSelect *gradient_sel);
|
||||||
|
static void gimp_gradient_select_preview_size_allocate
|
||||||
|
(GtkWidget *widget,
|
||||||
|
GtkAllocation *allocation,
|
||||||
|
GradientSelect *gradient_sel);
|
||||||
static void gimp_gradient_select_preview_expose (GtkWidget *preview,
|
static void gimp_gradient_select_preview_expose (GtkWidget *preview,
|
||||||
GdkEventExpose *event,
|
GdkEventExpose *event,
|
||||||
GradientSelect *gradient_sel);
|
GradientSelect *gradient_sel);
|
||||||
|
@ -108,6 +112,8 @@ gimp_gradient_select_widget_new (const gchar *title,
|
||||||
|
|
||||||
gradient_sel->button = gtk_button_new ();
|
gradient_sel->button = gtk_button_new ();
|
||||||
|
|
||||||
|
gradient_sel->gradient_name = g_strdup (gradient_name);
|
||||||
|
|
||||||
g_signal_connect (gradient_sel->button, "clicked",
|
g_signal_connect (gradient_sel->button, "clicked",
|
||||||
G_CALLBACK (gimp_gradient_select_widget_clicked),
|
G_CALLBACK (gimp_gradient_select_widget_clicked),
|
||||||
gradient_sel);
|
gradient_sel);
|
||||||
|
@ -121,18 +127,14 @@ gimp_gradient_select_widget_new (const gchar *title,
|
||||||
gradient_sel->preview);
|
gradient_sel->preview);
|
||||||
gtk_widget_show (gradient_sel->preview);
|
gtk_widget_show (gradient_sel->preview);
|
||||||
|
|
||||||
|
g_signal_connect (gradient_sel->preview, "size_allocate",
|
||||||
|
G_CALLBACK (gimp_gradient_select_preview_size_allocate),
|
||||||
|
gradient_sel);
|
||||||
|
|
||||||
g_signal_connect (gradient_sel->preview, "expose_event",
|
g_signal_connect (gradient_sel->preview, "expose_event",
|
||||||
G_CALLBACK (gimp_gradient_select_preview_expose),
|
G_CALLBACK (gimp_gradient_select_preview_expose),
|
||||||
gradient_sel);
|
gradient_sel);
|
||||||
|
|
||||||
/* Do initial gradient setup */
|
|
||||||
gradient_sel->gradient_name =
|
|
||||||
gimp_gradients_get_gradient_data (gradient_name,
|
|
||||||
gradient_sel->sample_size,
|
|
||||||
gradient_sel->reverse,
|
|
||||||
&gradient_sel->width,
|
|
||||||
&gradient_sel->gradient_data);
|
|
||||||
|
|
||||||
g_object_set_data (G_OBJECT (gradient_sel->button),
|
g_object_set_data (G_OBJECT (gradient_sel->button),
|
||||||
GRADIENT_SELECT_DATA_KEY, gradient_sel);
|
GRADIENT_SELECT_DATA_KEY, gradient_sel);
|
||||||
|
|
||||||
|
@ -278,6 +280,34 @@ gimp_gradient_select_widget_destroy (GtkWidget *widget,
|
||||||
g_free (gradient_sel);
|
g_free (gradient_sel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_gradient_select_preview_size_allocate (GtkWidget *widget,
|
||||||
|
GtkAllocation *allocation,
|
||||||
|
GradientSelect *gradient_sel)
|
||||||
|
{
|
||||||
|
gchar *name;
|
||||||
|
gdouble *data;
|
||||||
|
gint width;
|
||||||
|
|
||||||
|
name = gimp_gradients_get_gradient_data (gradient_sel->gradient_name,
|
||||||
|
allocation->width,
|
||||||
|
gradient_sel->reverse,
|
||||||
|
&width,
|
||||||
|
&data);
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
gradient_sel->sample_size = allocation->width;
|
||||||
|
gradient_sel->width = width;
|
||||||
|
|
||||||
|
g_free (gradient_sel->gradient_name);
|
||||||
|
gradient_sel->gradient_name = name;
|
||||||
|
|
||||||
|
g_free (gradient_sel->gradient_data);
|
||||||
|
gradient_sel->gradient_data = data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_gradient_select_preview_expose (GtkWidget *widget,
|
gimp_gradient_select_preview_expose (GtkWidget *widget,
|
||||||
GdkEventExpose *event,
|
GdkEventExpose *event,
|
||||||
|
@ -290,8 +320,10 @@ gimp_gradient_select_preview_expose (GtkWidget *widget,
|
||||||
guchar *odd;
|
guchar *odd;
|
||||||
gint x, y;
|
gint x, y;
|
||||||
|
|
||||||
/* Draw the gradient */
|
|
||||||
src = gradient_sel->gradient_data;
|
src = gradient_sel->gradient_data;
|
||||||
|
if (! src)
|
||||||
|
return;
|
||||||
|
|
||||||
p0 = even = g_malloc (gradient_sel->width * 3);
|
p0 = even = g_malloc (gradient_sel->width * 3);
|
||||||
p1 = odd = g_malloc (gradient_sel->width * 3);
|
p1 = odd = g_malloc (gradient_sel->width * 3);
|
||||||
|
|
||||||
|
@ -334,7 +366,7 @@ gimp_gradient_select_preview_expose (GtkWidget *widget,
|
||||||
event->area.x, y,
|
event->area.x, y,
|
||||||
event->area.width, 1,
|
event->area.width, 1,
|
||||||
GDK_RGB_DITHER_MAX,
|
GDK_RGB_DITHER_MAX,
|
||||||
buf + event->area.x,
|
buf + event->area.x * 3,
|
||||||
gradient_sel->width * 3,
|
gradient_sel->width * 3,
|
||||||
- event->area.x, - y);
|
- event->area.x, - y);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue