summaryrefslogtreecommitdiff
path: root/gtk/gtkhsv.c
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.van.berkom@gmail.com>2010-08-30 14:56:28 +0900
committerTristan Van Berkom <tristan.van.berkom@gmail.com>2010-08-30 14:56:28 +0900
commit54d44a9bd04cfbed8426614fc69c027a46f41a14 (patch)
tree34bdf65a6e8d5d6d4016154345d1d803ba0da379 /gtk/gtkhsv.c
parentb3b22c31b997fb85b3319b392a1a69407703184c (diff)
parent67194ed77b153eb5a7eb6c596f3c20e274b7787a (diff)
downloadgtk+-native-layout.tar.gz
Merge branch 'master' into native-layoutnative-layout
Conflicts: gtk/gtkplug.c gtk/gtkscrolledwindow.c
Diffstat (limited to 'gtk/gtkhsv.c')
-rw-r--r--gtk/gtkhsv.c176
1 files changed, 101 insertions, 75 deletions
diff --git a/gtk/gtkhsv.c b/gtk/gtkhsv.c
index c8758b297c..9d936a0062 100644
--- a/gtk/gtkhsv.c
+++ b/gtk/gtkhsv.c
@@ -56,7 +56,7 @@ typedef enum {
} DragMode;
/* Private part of the GtkHSV structure */
-struct _GtkHSVPriv
+struct _GtkHSVPrivate
{
/* Color value */
double h;
@@ -195,16 +195,16 @@ gtk_hsv_class_init (GtkHSVClass *class)
"move", 1,
G_TYPE_ENUM, GTK_DIR_LEFT);
- g_type_class_add_private (gobject_class, sizeof (GtkHSVPriv));
+ g_type_class_add_private (gobject_class, sizeof (GtkHSVPrivate));
}
/* Object initialization function for the HSV color selector */
static void
gtk_hsv_init (GtkHSV *hsv)
{
- GtkHSVPriv *priv;
+ GtkHSVPrivate *priv;
- priv = G_TYPE_INSTANCE_GET_PRIVATE (hsv, GTK_TYPE_HSV, GtkHSVPriv);
+ priv = G_TYPE_INSTANCE_GET_PRIVATE (hsv, GTK_TYPE_HSV, GtkHSVPrivate);
hsv->priv = priv;
@@ -235,7 +235,7 @@ static void
gtk_hsv_map (GtkWidget *widget)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
GTK_WIDGET_CLASS (gtk_hsv_parent_class)->map (widget);
@@ -248,7 +248,7 @@ static void
gtk_hsv_unmap (GtkWidget *widget)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
gdk_window_hide (priv->window);
@@ -260,7 +260,8 @@ static void
gtk_hsv_realize (GtkWidget *widget)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+ GtkAllocation allocation;
GdkWindow *parent_window;
GdkWindowAttr attr;
int attr_mask;
@@ -268,12 +269,14 @@ gtk_hsv_realize (GtkWidget *widget)
gtk_widget_set_realized (widget, TRUE);
/* Create window */
-
+
+ gtk_widget_get_allocation (widget, &allocation);
+
attr.window_type = GDK_WINDOW_CHILD;
- attr.x = widget->allocation.x;
- attr.y = widget->allocation.y;
- attr.width = widget->allocation.width;
- attr.height = widget->allocation.height;
+ attr.x = allocation.x;
+ attr.y = allocation.y;
+ attr.width = allocation.width;
+ attr.height = allocation.height;
attr.wclass = GDK_INPUT_ONLY;
attr.event_mask = gtk_widget_get_events (widget);
attr.event_mask |= (GDK_KEY_PRESS_MASK
@@ -282,18 +285,16 @@ gtk_hsv_realize (GtkWidget *widget)
| GDK_POINTER_MOTION_MASK
| GDK_ENTER_NOTIFY_MASK
| GDK_LEAVE_NOTIFY_MASK);
-
attr_mask = GDK_WA_X | GDK_WA_Y;
-
+
parent_window = gtk_widget_get_parent_window (widget);
-
- widget->window = parent_window;
- g_object_ref (widget->window);
-
+ gtk_widget_set_window (widget, parent_window);
+ g_object_ref (parent_window);
+
priv->window = gdk_window_new (parent_window, &attr, attr_mask);
gdk_window_set_user_data (priv->window, hsv);
-
- widget->style = gtk_style_attach (widget->style, widget->window);
+
+ gtk_widget_style_attach (widget);
}
/* Unrealize handler for the HSV color selector */
@@ -301,7 +302,7 @@ static void
gtk_hsv_unrealize (GtkWidget *widget)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
gdk_window_set_user_data (priv->window, NULL);
gdk_window_destroy (priv->window);
@@ -316,7 +317,7 @@ gtk_hsv_size_request (GtkWidget *widget,
GtkRequisition *requisition)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
gint focus_width;
gint focus_pad;
@@ -335,10 +336,10 @@ gtk_hsv_size_allocate (GtkWidget *widget,
GtkAllocation *allocation)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+
+ gtk_widget_set_allocation (widget, allocation);
- widget->allocation = *allocation;
-
if (gtk_widget_get_realized (widget))
gdk_window_move_resize (priv->window,
allocation->x,
@@ -510,14 +511,18 @@ compute_triangle (GtkHSV *hsv,
gint *vx,
gint *vy)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+ GtkAllocation allocation;
+ GtkWidget *widget = GTK_WIDGET (hsv);
gdouble center_x;
gdouble center_y;
gdouble inner, outer;
gdouble angle;
- center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
- center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
outer = priv->size / 2.0;
inner = outer - priv->ring_width;
angle = priv->h * 2.0 * G_PI;
@@ -536,14 +541,18 @@ is_in_ring (GtkHSV *hsv,
gdouble x,
gdouble y)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+ GtkAllocation allocation;
+ GtkWidget *widget = GTK_WIDGET (hsv);
gdouble dx, dy, dist;
gdouble center_x;
gdouble center_y;
gdouble inner, outer;
- center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
- center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
outer = priv->size / 2.0;
inner = outer - priv->ring_width;
@@ -562,14 +571,18 @@ compute_sv (GtkHSV *hsv,
gdouble *s,
gdouble *v)
{
+ GtkWidget *widget = GTK_WIDGET (hsv);
+ GtkAllocation allocation;
int ihx, ihy, isx, isy, ivx, ivy;
double hx, hy, sx, sy, vx, vy;
double center_x;
double center_y;
+ gtk_widget_get_allocation (widget, &allocation);
+
compute_triangle (hsv, &ihx, &ihy, &isx, &isy, &ivx, &ivy);
- center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
- center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
hx = ihx - center_x;
hy = center_y - ihy;
sx = isx - center_x;
@@ -665,13 +678,17 @@ compute_v (GtkHSV *hsv,
gdouble x,
gdouble y)
{
+ GtkAllocation allocation;
+ GtkWidget *widget = GTK_WIDGET (hsv);
double center_x;
double center_y;
double dx, dy;
double angle;
- center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
- center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
dx = x - center_x;
dy = center_y - y;
@@ -688,7 +705,7 @@ static void
set_cross_grab (GtkHSV *hsv,
guint32 time)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
GdkCursor *cursor;
cursor = gdk_cursor_new_for_display (gtk_widget_get_display (GTK_WIDGET (hsv)),
@@ -708,7 +725,7 @@ gtk_hsv_grab_broken (GtkWidget *widget,
GdkEventGrabBroken *event)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
priv->mode = DRAG_NONE;
@@ -721,7 +738,7 @@ gtk_hsv_button_press (GtkWidget *widget,
GdkEventButton *event)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
double x, y;
if (priv->mode != DRAG_NONE || event->button != 1)
@@ -771,7 +788,7 @@ gtk_hsv_button_release (GtkWidget *widget,
GdkEventButton *event)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
DragMode mode;
gdouble x, y;
@@ -809,7 +826,7 @@ gtk_hsv_motion (GtkWidget *widget,
GdkEventMotion *event)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
GdkModifierType mods;
double x, y;
@@ -851,7 +868,8 @@ paint_ring (GtkHSV *hsv,
gint width,
gint height)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+ GtkAllocation allocation;
GtkWidget *widget = GTK_WIDGET (hsv);
int xx, yy;
gdouble dx, dy, dist;
@@ -872,11 +890,11 @@ paint_ring (GtkHSV *hsv,
"focus-line-width", &focus_width,
"focus-padding", &focus_pad,
NULL);
-
- priv = hsv->priv;
- center_x = widget->allocation.width / 2.0;
- center_y = widget->allocation.height / 2.0;
+ gtk_widget_get_allocation (widget, &allocation);
+
+ center_x = allocation.width / 2.0;
+ center_y = allocation.height / 2.0;
outer = priv->size / 2.0;
inner = outer - priv->ring_width;
@@ -1002,7 +1020,7 @@ paint_triangle (GtkHSV *hsv,
gint width,
gint height)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
GtkWidget *widget = GTK_WIDGET (hsv);
gint hx, hy, sx, sy, vx, vy; /* HSV vertices */
gint x1, y1, r1, g1, b1; /* First vertex in scanline order */
@@ -1182,6 +1200,7 @@ paint_triangle (GtkHSV *hsv,
if (gtk_widget_has_focus (widget) &&
!priv->focus_on_ring)
{
+ GtkAllocation allocation;
gint focus_width;
gint focus_pad;
@@ -1189,16 +1208,18 @@ paint_triangle (GtkHSV *hsv,
"focus-line-width", &focus_width,
"focus-padding", &focus_pad,
NULL);
-
- gtk_paint_focus (widget->style, widget->window,
+
+ gtk_widget_get_allocation (widget, &allocation);
+
+ gtk_paint_focus (gtk_widget_get_style (widget),
+ gtk_widget_get_window (widget),
gtk_widget_get_state (widget),
NULL, widget, detail,
- widget->allocation.x + xx - FOCUS_RADIUS - focus_width - focus_pad,
- widget->allocation.y + yy - FOCUS_RADIUS - focus_width - focus_pad,
+ allocation.x + xx - FOCUS_RADIUS - focus_width - focus_pad,
+ allocation.y + yy - FOCUS_RADIUS - focus_width - focus_pad,
2 * (FOCUS_RADIUS + focus_width + focus_pad),
2 * (FOCUS_RADIUS + focus_width + focus_pad));
}
-
}
/* Paints the contents of the HSV color selector */
@@ -1220,38 +1241,43 @@ gtk_hsv_expose (GtkWidget *widget,
GdkEventExpose *event)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
+ GtkAllocation allocation;
GdkRectangle rect, dest;
+ GdkWindow *window;
cairo_t *cr;
- if (!(event->window == widget->window && gtk_widget_is_drawable (widget)))
+ window = gtk_widget_get_window (widget);
+
+ if (!(event->window == window && gtk_widget_is_drawable (widget)))
return FALSE;
- rect.x = widget->allocation.x;
- rect.y = widget->allocation.y;
- rect.width = widget->allocation.width;
- rect.height = widget->allocation.height;
-
+ gtk_widget_get_allocation (widget, &allocation);
+
+ rect.x = allocation.x;
+ rect.y = allocation.y;
+ rect.width = allocation.width;
+ rect.height = allocation.height;
+
if (!gdk_rectangle_intersect (&event->area, &rect, &dest))
return FALSE;
-
- cr = gdk_cairo_create (widget->window);
- cairo_translate (cr, widget->allocation.x, widget->allocation.y);
+ cr = gdk_cairo_create (window);
+
+ cairo_translate (cr, allocation.x, allocation.y);
paint (hsv, cr,
- dest.x - widget->allocation.x,
- dest.y - widget->allocation.y,
+ dest.x - allocation.x,
+ dest.y - allocation.y,
dest.width, dest.height);
cairo_destroy (cr);
if (gtk_widget_has_focus (widget) && priv->focus_on_ring)
- gtk_paint_focus (widget->style, widget->window,
+ gtk_paint_focus (gtk_widget_get_style (widget),
+ window,
gtk_widget_get_state (widget),
&event->area, widget, NULL,
- widget->allocation.x,
- widget->allocation.y,
- widget->allocation.width,
- widget->allocation.height);
+ allocation.x, allocation.y,
+ allocation.width, allocation.height);
return FALSE;
}
@@ -1261,7 +1287,7 @@ gtk_hsv_focus (GtkWidget *widget,
GtkDirectionType dir)
{
GtkHSV *hsv = GTK_HSV (widget);
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
if (!gtk_widget_has_focus (widget))
{
@@ -1345,7 +1371,7 @@ gtk_hsv_set_color (GtkHSV *hsv,
gdouble s,
gdouble v)
{
- GtkHSVPriv *priv;
+ GtkHSVPrivate *priv;
g_return_if_fail (GTK_IS_HSV (hsv));
g_return_if_fail (h >= 0.0 && h <= 1.0);
@@ -1381,7 +1407,7 @@ gtk_hsv_get_color (GtkHSV *hsv,
double *s,
double *v)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
g_return_if_fail (GTK_IS_HSV (hsv));
@@ -1412,7 +1438,7 @@ gtk_hsv_set_metrics (GtkHSV *hsv,
gint size,
gint ring_width)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
int same_size;
g_return_if_fail (GTK_IS_HSV (hsv));
@@ -1448,7 +1474,7 @@ gtk_hsv_get_metrics (GtkHSV *hsv,
gint *size,
gint *ring_width)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
g_return_if_fail (GTK_IS_HSV (hsv));
@@ -1479,7 +1505,7 @@ gtk_hsv_get_metrics (GtkHSV *hsv,
gboolean
gtk_hsv_is_adjusting (GtkHSV *hsv)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
g_return_val_if_fail (GTK_IS_HSV (hsv), FALSE);
@@ -1570,7 +1596,7 @@ static void
gtk_hsv_move (GtkHSV *hsv,
GtkDirectionType dir)
{
- GtkHSVPriv *priv = hsv->priv;
+ GtkHSVPrivate *priv = hsv->priv;
gdouble hue, sat, val;
gint hx, hy, sx, sy, vx, vy; /* HSV vertices */
gint x, y; /* position in triangle */