]> Pileus Git - ~andy/gtk/commitdiff
Bug 547270 – Make GtkHSV public
authorMichael Natterer <mitch@imendio.com>
Mon, 11 Aug 2008 19:57:38 +0000 (19:57 +0000)
committerMichael Natterer <mitch@src.gnome.org>
Mon, 11 Aug 2008 19:57:38 +0000 (19:57 +0000)
2008-08-11  Michael Natterer  <mitch@imendio.com>

Bug 547270 – Make GtkHSV public

* gtk/Makefile.am
* gtk/gtk.h: install gtkhsv.h as public header (its symbols were
always public anyway).

* gtk/gtkhsv.h: add single-include guards, add class struct padding,
seal the instance member, cleanup.

* gtk/gtkhsv.c: center the widget in its allocation,
add "Since: 2.14", cleanup.

svn path=/trunk/; revision=21078

ChangeLog
gtk/Makefile.am
gtk/gtk.h
gtk/gtkhsv.c
gtk/gtkhsv.h

index 9de907049724b286a7172d607c5308b163d2ce10..4da2de8af3f8efb635ec4d49b8b38639743b1f75 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2008-08-11  Michael Natterer  <mitch@imendio.com>
+
+       Bug 547270 – Make GtkHSV public
+
+       * gtk/Makefile.am
+       * gtk/gtk.h: install gtkhsv.h as public header (its symbols were
+       always public anyway).
+
+       * gtk/gtkhsv.h: add single-include guards, add class struct padding,
+       seal the instance member, cleanup.
+
+       * gtk/gtkhsv.c: center the widget in its allocation,
+       add "Since: 2.14", cleanup.
+
 2008-08-11  Torsten Schoenfeld  <kaffeetisch@gmx.de>
 
        * gtk/gtkcalendar.h: Fix the Since: tag of GtkCalendarDetailFunc
index 70854ea296f2f9451cece79c018cac966389aeaf..8d4330132ef6ad4d6394a17e49f28a7fb7627873 100644 (file)
@@ -212,6 +212,7 @@ gtk_public_h_sources =          \
        gtkhscale.h             \
        gtkhscrollbar.h         \
        gtkhseparator.h         \
+       gtkhsv.h                \
        gtkiconfactory.h        \
        gtkicontheme.h          \
        gtkiconview.h           \
@@ -354,7 +355,6 @@ gtk_private_h_sources =             \
        gtkfilechooserutils.h   \
        gtkfilesystem.h         \
        gtkfilesystemmodel.h    \
-       gtkhsv.h                \
        gtkiconcache.h          \
        gtkintl.h               \
        gtkkeyhash.h            \
index c3d7a4d1971724540e5b29e3588e3f7f1548a71b..624a3a462f8bf86bd48fda10d0a4d558219c69b3 100644 (file)
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
 #include <gtk/gtkhscale.h>
 #include <gtk/gtkhscrollbar.h>
 #include <gtk/gtkhseparator.h>
+#include <gtk/gtkhsv.h>
 #include <gtk/gtkiconfactory.h>
 #include <gtk/gtkicontheme.h>
 #include <gtk/gtkiconview.h>
index 18340a94893e6f3f8c5967c233e3b5a1b9c40f8b..03d8e82e8fa325fbe66f66c7b9c52558ca65dba8 100644 (file)
  * Boston, MA 02111-1307, USA.
  */
 
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
 #include "config.h"
+
 #include <math.h>
 #include <string.h>
-#include "gtkhsv.h"
+
 #include "gdk/gdkkeysyms.h"
+
+#include "gtkhsv.h"
 #include "gtkbindings.h"
-#include "gtkcontainer.h"
 #include "gtkmarshalers.h"
 #include "gtkintl.h"
 #include "gtkalias.h"
 
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
- */
-
 /* Default width/height */
 #define DEFAULT_SIZE 100
 
@@ -537,23 +539,25 @@ compute_triangle (GtkHSV *hsv,
                  gint   *vy)
 {
   HSVPrivate *priv;
-  gdouble center;
+  gdouble center_x;
+  gdouble center_y;
   gdouble inner, outer;
   gdouble angle;
-  
+
   priv = hsv->priv;
-  
-  center = GTK_WIDGET (hsv)->requisition.width / 2.0;
+
+  center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
+  center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
   outer = priv->size / 2.0;
   inner = outer - priv->ring_width;
   angle = priv->h * 2.0 * G_PI;
-  
-  *hx = floor (center + cos (angle) * inner + 0.5);
-  *hy = floor (center - sin (angle) * inner + 0.5);
-  *sx = floor (center + cos (angle + 2.0 * G_PI / 3.0) * inner + 0.5);
-  *sy = floor (center - sin (angle + 2.0 * G_PI / 3.0) * inner + 0.5);
-  *vx = floor (center + cos (angle + 4.0 * G_PI / 3.0) * inner + 0.5);
-  *vy = floor (center - sin (angle + 4.0 * G_PI / 3.0) * inner + 0.5);
+
+  *hx = floor (center_x + cos (angle) * inner + 0.5);
+  *hy = floor (center_y - sin (angle) * inner + 0.5);
+  *sx = floor (center_x + cos (angle + 2.0 * G_PI / 3.0) * inner + 0.5);
+  *sy = floor (center_y - sin (angle + 2.0 * G_PI / 3.0) * inner + 0.5);
+  *vx = floor (center_x + cos (angle + 4.0 * G_PI / 3.0) * inner + 0.5);
+  *vy = floor (center_y - sin (angle + 4.0 * G_PI / 3.0) * inner + 0.5);
 }
 
 /* Computes whether a point is inside the hue ring */
@@ -564,18 +568,21 @@ is_in_ring (GtkHSV *hsv,
 {
   HSVPrivate *priv;
   gdouble dx, dy, dist;
-  gdouble center, inner, outer;
-  
+  gdouble center_x;
+  gdouble center_y;
+  gdouble inner, outer;
+
   priv = hsv->priv;
-  
-  center = priv->size / 2.0;
+
+  center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
+  center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
   outer = priv->size / 2.0;
   inner = outer - priv->ring_width;
-  
-  dx = x - center;
-  dy = center - y;
+
+  dx = x - center_x;
+  dy = center_y - y;
   dist = dx * dx + dy * dy;
-  
+
   return (dist >= inner * inner && dist <= outer * outer);
 }
 
@@ -589,18 +596,20 @@ compute_sv (GtkHSV  *hsv,
 {
   int ihx, ihy, isx, isy, ivx, ivy;
   double hx, hy, sx, sy, vx, vy;
-  double center;
-  
+  double center_x;
+  double center_y;
+
   compute_triangle (hsv, &ihx, &ihy, &isx, &isy, &ivx, &ivy);
-  center = GTK_WIDGET (hsv)->requisition.width / 2.0;
-  hx = ihx - center;
-  hy = center - ihy;
-  sx = isx - center;
-  sy = center - isy;
-  vx = ivx - center;
-  vy = center - ivy;
-  x -= center;
-  y = center - y;
+  center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
+  center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+  hx = ihx - center_x;
+  hy = center_y - ihy;
+  sx = isx - center_x;
+  sy = center_y - isy;
+  vx = ivx - center_x;
+  vy = center_y - ivy;
+  x -= center_x;
+  y = center_y - y;
   
   if (vx * (x - sx) + vy * (y - sy) < 0.0)
     {
@@ -688,18 +697,20 @@ compute_v (GtkHSV *hsv,
           gdouble x,
           gdouble y)
 {
-  double center;
+  double center_x;
+  double center_y;
   double dx, dy;
   double angle;
-  
-  center = GTK_WIDGET (hsv)->requisition.width / 2.0;
-  dx = x - center;
-  dy = center - y;
-  
+
+  center_x = GTK_WIDGET (hsv)->allocation.width / 2.0;
+  center_y = GTK_WIDGET (hsv)->allocation.height / 2.0;
+  dx = x - center_x;
+  dy = center_y - y;
+
   angle = atan2 (dy, dx);
   if (angle < 0.0)
     angle += 2.0 * G_PI;
-  
+
   return angle / (2.0 * G_PI);
 }
 
@@ -889,7 +900,8 @@ paint_ring (GtkHSV      *hsv,
   HSVPrivate *priv;
   int xx, yy;
   gdouble dx, dy, dist;
-  gdouble center;
+  gdouble center_x;
+  gdouble center_y;
   gdouble inner, outer;
   guint32 *buf, *p;
   gdouble angle;
@@ -907,9 +919,10 @@ paint_ring (GtkHSV      *hsv,
                        NULL);
   
   priv = hsv->priv;
-  
-  center = widget->requisition.width / 2.0;
-  
+
+  center_x = widget->allocation.width / 2.0;
+  center_y = widget->allocation.height / 2.0;
+
   outer = priv->size / 2.0;
   inner = outer - priv->ring_width;
   
@@ -922,11 +935,11 @@ paint_ring (GtkHSV      *hsv,
     {
       p = buf + yy * width;
       
-      dy = -(yy + y - center);
+      dy = -(yy + y - center_y);
       
       for (xx = 0; xx < width; xx++)
        {
-         dx = xx + x - center;
+         dx = xx + x - center_x;
          
          dist = dx * dx + dy * dy;
          if (dist < ((inner-1) * (inner-1)) || dist > ((outer+1) * (outer+1)))
@@ -971,10 +984,10 @@ paint_ring (GtkHSV      *hsv,
   else
     cairo_set_source_rgb (source_cr, 1., 1., 1.);
 
-  cairo_move_to (source_cr, -x + center, - y + center);
+  cairo_move_to (source_cr, -x + center_x, - y + center_y);
   cairo_line_to (source_cr,
-                -x + center + cos (priv->h * 2.0 * G_PI) * center,
-                -y + center - sin (priv->h * 2.0 * G_PI) * center);
+                -x + center_x + cos (priv->h * 2.0 * G_PI) * priv->size / 2,
+                -y + center_y - sin (priv->h * 2.0 * G_PI) * priv->size / 2);
   cairo_stroke (source_cr);
   cairo_destroy (source_cr);
 
@@ -988,7 +1001,7 @@ paint_ring (GtkHSV      *hsv,
   cairo_set_line_width (cr, priv->ring_width);
   cairo_new_path (cr);
   cairo_arc (cr,
-            center, center,
+            center_x, center_y,
             priv->size / 2. - priv->ring_width / 2.,
             0, 2 * G_PI);
   cairo_stroke (cr);
@@ -1357,6 +1370,8 @@ gtk_hsv_focus (GtkWidget       *widget,
  * Creates a new HSV color selector.
  *
  * Return value: A newly-created HSV color selector.
+ *
+ * Since: 2.14
  **/
 GtkWidget*
 gtk_hsv_new (void)
@@ -1373,6 +1388,8 @@ gtk_hsv_new (void)
  *
  * Sets the current color in an HSV color selector.  Color component values must
  * be in the [0.0, 1.0] range.
+ *
+ * Since: 2.14
  **/
 void
 gtk_hsv_set_color (GtkHSV *hsv,
@@ -1407,9 +1424,14 @@ gtk_hsv_set_color (GtkHSV *hsv,
  *
  * Queries the current color in an HSV color selector.  Returned values will be
  * in the [0.0, 1.0] range.
+ *
+ * Since: 2.14
  **/
 void
-gtk_hsv_get_color (GtkHSV *hsv, double *h, double *s, double *v)
+gtk_hsv_get_color (GtkHSV *hsv,
+                   double *h,
+                   double *s,
+                   double *v)
 {
   HSVPrivate *priv;
   
@@ -1434,6 +1456,8 @@ gtk_hsv_get_color (GtkHSV *hsv, double *h, double *s, double *v)
  * @ring_width: Width of the hue ring.
  *
  * Sets the size and ring width of an HSV color selector.
+ *
+ * Since: 2.14
  **/
 void
 gtk_hsv_set_metrics (GtkHSV *hsv,
@@ -1468,6 +1492,8 @@ gtk_hsv_set_metrics (GtkHSV *hsv,
  * @ring_width: Return value for the width of the hue ring.
  *
  * Queries the size and ring width of an HSV color selector.
+ *
+ * Since: 2.14
  **/
 void
 gtk_hsv_get_metrics (GtkHSV *hsv,
@@ -1499,6 +1525,8 @@ gtk_hsv_get_metrics (GtkHSV *hsv,
  * Return value: TRUE if clients can ignore changes to the color value, since
  * they may be transitory, or FALSE if they should consider the color value
  * status to be final.
+ *
+ * Since: 2.14
  **/
 gboolean
 gtk_hsv_is_adjusting (GtkHSV *hsv)
@@ -1520,9 +1548,11 @@ gtk_hsv_is_adjusting (GtkHSV *hsv)
  * @r: Return value for the red component.
  * @g: Return value for the green component.
  * @b: Return value for the blue component.
- * 
+ *
  * Converts a color from HSV space to RGB.  Input values must be in the
  * [0.0, 1.0] range; output values will be in the same range.
+ *
+ * Since: 2.14
  **/
 void
 gtk_hsv_to_rgb (gdouble  h,
@@ -1556,9 +1586,11 @@ gtk_hsv_to_rgb (gdouble  h,
  * @h: Return value for the hue component.
  * @s: Return value for the saturation component.
  * @v: Return value for the value component.
- * 
+ *
  * Converts a color from RGB space to HSV.  Input values must be in the
  * [0.0, 1.0] range; output values will be in the same range.
+ *
+ * Since: 2.14
  **/
 void
 gtk_rgb_to_hsv (gdouble  r,
index b8bdd8323a27b3c4e708c032897d27b0ce8416b0..79f5b63229c75c83a042ecf0333f1408c808187b 100644 (file)
@@ -21,8 +21,6 @@
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
  */
-#ifndef __GTK_HSV_H__
-#define __GTK_HSV_H__
 
 /*
  * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
  * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
  */
 
-#include <gtk/gtkcontainer.h>
+#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
+#error "Only <gtk/gtk.h> can be included directly."
+#endif
+
+#ifndef __GTK_HSV_H__
+#define __GTK_HSV_H__
+
+#include <gtk/gtkwidget.h>
 
-G_BEGIN_DECLS 
+G_BEGIN_DECLS
 
 #define GTK_TYPE_HSV            (gtk_hsv_get_type ())
 #define GTK_HSV(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_HSV, GtkHSV))
@@ -49,22 +54,27 @@ typedef struct _GtkHSVClass GtkHSVClass;
 struct _GtkHSV
 {
   GtkWidget parent_instance;
-  
+
   /* Private data */
-  gpointer priv;
+  gpointer GSEAL (priv);
 };
 
 struct _GtkHSVClass
 {
   GtkWidgetClass parent_class;
-  
+
   /* Notification signals */
-  
-  void (*changed) (GtkHSV *hsv);
+  void (* changed) (GtkHSV          *hsv);
 
   /* Keybindings */
-  void (* move) (GtkHSV          *hsv,
-                 GtkDirectionType type);
+  void (* move)    (GtkHSV          *hsv,
+                    GtkDirectionType type);
+
+  /* Padding for future expansion */
+  void (*_gtk_reserved1) (void);
+  void (*_gtk_reserved2) (void);
+  void (*_gtk_reserved3) (void);
+  void (*_gtk_reserved4) (void);
 };
 
 
@@ -85,6 +95,8 @@ void       gtk_hsv_get_metrics  (GtkHSV    *hsv,
                                 gint      *size,
                                 gint      *ring_width);
 gboolean   gtk_hsv_is_adjusting (GtkHSV    *hsv);
+
+/* Convert colors between the RGB and HSV color spaces */
 void       gtk_hsv_to_rgb       (gdouble    h,
                                 gdouble    s,
                                 gdouble    v,
@@ -98,7 +110,6 @@ void       gtk_rgb_to_hsv       (gdouble    r,
                                 gdouble   *s,
                                 gdouble   *v);
 
-
 G_END_DECLS
 
 #endif /* __GTK_HSV_H__ */