summaryrefslogtreecommitdiff
path: root/gdk/x11/gdkcc-x11.c
diff options
context:
space:
mode:
authorFederico Mena <federico@bananoid.nuclecu.unam.mx>1998-01-23 06:26:39 +0000
committerArturo Espinosa <unammx@src.gnome.org>1998-01-23 06:26:39 +0000
commit3779493d173ebd1e51016b68440d7bc9d9f51b7e (patch)
tree667afb7de07f1bd9d8e76bfd3c931c29791e5746 /gdk/x11/gdkcc-x11.c
parent01f66785cb1eacdea1b9289a40d3e4a60cce0282 (diff)
downloadgtk+-3779493d173ebd1e51016b68440d7bc9d9f51b7e.tar.gz
Switched the file to GNU indentation, for consistency.
Thu Jan 22 18:58:44 1998 Federico Mena <federico@bananoid.nuclecu.unam.mx> * gdk/gdkcc.c: Switched the file to GNU indentation, for consistency.
Diffstat (limited to 'gdk/x11/gdkcc-x11.c')
-rw-r--r--gdk/x11/gdkcc-x11.c2456
1 files changed, 1284 insertions, 1172 deletions
diff --git a/gdk/x11/gdkcc-x11.c b/gdk/x11/gdkcc-x11.c
index 5364ff7720..4598a18554 100644
--- a/gdk/x11/gdkcc-x11.c
+++ b/gdk/x11/gdkcc-x11.c
@@ -70,32 +70,35 @@
static guint
-hash_color(gpointer key)
+hash_color (gpointer key)
{
- GdkColor *color = key;
+ GdkColor *color = key;
- return (color->red * 33023 + color->green * 30013 + color->blue * 27011);
+ return (color->red * 33023 + color->green * 30013 + color->blue * 27011);
}
static gint
-compare_colors(gpointer a, gpointer b)
+compare_colors (gpointer a,
+ gpointer b)
{
- GdkColor *aa = a;
- GdkColor *bb = b;
+ GdkColor *aa = a;
+ GdkColor *bb = b;
- return ((aa->red == bb->red) && (aa->green == bb->green) && (aa->blue == bb->blue));
+ return ((aa->red == bb->red) && (aa->green == bb->green) && (aa->blue == bb->blue));
}
static void
-free_hash_entry(gpointer key, gpointer value, gpointer user_data)
+free_hash_entry (gpointer key,
+ gpointer value,
+ gpointer user_data)
{
- g_free(key); /* key and value are the same GdkColor */
+ g_free (key); /* key and value are the same GdkColor */
}
static int
-pixel_sort(const void *a, const void *b)
+pixel_sort (const void *a, const void *b)
{
- return ((GdkColor *) a)->pixel - ((GdkColor *) b)->pixel;
+ return ((GdkColor *) a)->pixel - ((GdkColor *) b)->pixel;
}
/* XXX: This function does an XQueryColors() the hard way, because there is
@@ -103,1542 +106,1651 @@ pixel_sort(const void *a, const void *b)
*/
static void
-my_x_query_colors(GdkColormap *colormap,
- GdkColor *colors,
- gint ncolors)
+my_x_query_colors (GdkColormap *colormap,
+ GdkColor *colors,
+ gint ncolors)
{
- XColor *xcolors;
- gint i;
+ XColor *xcolors;
+ gint i;
- xcolors = g_new(XColor, ncolors);
- for (i = 0; i < ncolors; i++)
- xcolors[i].pixel = colors[i].pixel;
+ xcolors = g_new (XColor, ncolors);
+ for (i = 0; i < ncolors; i++)
+ xcolors[i].pixel = colors[i].pixel;
- XQueryColors(gdk_display, GDK_COLORMAP_XCOLORMAP(colormap), xcolors, ncolors);
+ XQueryColors (gdk_display, GDK_COLORMAP_XCOLORMAP (colormap), xcolors, ncolors);
- for (i = 0; i < ncolors; i++) {
- colors[i].red = xcolors[i].red;
- colors[i].green = xcolors[i].green;
- colors[i].blue = xcolors[i].blue;
- }
+ for (i = 0; i < ncolors; i++)
+ {
+ colors[i].red = xcolors[i].red;
+ colors[i].green = xcolors[i].green;
+ colors[i].blue = xcolors[i].blue;
+ }
- g_free(xcolors);
+ g_free (xcolors);
}
static void
-query_colors(GdkColorContext *cc)
+query_colors (GdkColorContext *cc)
{
- gint i;
- GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
- cc->cmap = g_new(GdkColor, cc->num_colors);
+ gint i;
+ GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
+ cc->cmap = g_new (GdkColor, cc->num_colors);
- for (i = 0; i < cc->num_colors; i++)
- cc->cmap[i].pixel = cc->clut ? cc->clut[i] : ccp->std_cmap.base_pixel + i;
+ for (i = 0; i < cc->num_colors; i++)
+ cc->cmap[i].pixel = cc->clut ? cc->clut[i] : ccp->std_cmap.base_pixel + i;
- my_x_query_colors(cc->colormap, cc->cmap, cc->num_colors);
+ my_x_query_colors (cc->colormap, cc->cmap, cc->num_colors);
- qsort(cc->cmap, cc->num_colors, sizeof(GdkColor), pixel_sort);
+ qsort (cc->cmap, cc->num_colors, sizeof (GdkColor), pixel_sort);
}
static void
-init_bw(GdkColorContext *cc)
+init_bw (GdkColorContext *cc)
{
- GdkColor color;
+ GdkColor color;
- g_warning("init_bw: failed to allocate colors, falling back to black and white");
+ g_warning ("init_bw: failed to allocate colors, falling back to black and white");
- cc->mode = GDK_CC_MODE_BW;
+ cc->mode = GDK_CC_MODE_BW;
- color.red = color.green = color.blue = 0;
- if (!gdk_color_alloc(cc->colormap, &color))
- cc->black_pixel = 0;
- else
- cc->black_pixel = color.pixel;
+ color.red = color.green = color.blue = 0;
+
+ if (!gdk_color_alloc (cc->colormap, &color))
+ cc->black_pixel = 0;
+ else
+ cc->black_pixel = color.pixel;
- color.red = color.green = color.blue = 0xffff;
- if (!gdk_color_alloc(cc->colormap, &color))
- cc->white_pixel = cc->black_pixel ? 0 : 1;
- else
- cc->white_pixel = color.pixel;
+ color.red = color.green = color.blue = 0xffff;
+
+ if (!gdk_color_alloc (cc->colormap, &color))
+ cc->white_pixel = cc->black_pixel ? 0 : 1;
+ else
+ cc->white_pixel = color.pixel;
- cc->num_colors = 2;
+ cc->num_colors = 2;
}
static void
-init_gray(GdkColorContext *cc)
+init_gray (GdkColorContext *cc)
{
- GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
- GdkColor *clrs, *cstart;
- gint i;
- gdouble dinc;
+ GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
+ GdkColor *clrs, *cstart;
+ gint i;
+ gdouble dinc;
- cc->num_colors = GDK_VISUAL_XVISUAL(cc->visual)->map_entries;
+ cc->num_colors = GDK_VISUAL_XVISUAL (cc->visual)->map_entries;
- cc->clut = g_new(gulong, cc->num_colors);
- cstart = g_new(GdkColor, cc->num_colors);
+ cc->clut = g_new (gulong, cc->num_colors);
+ cstart = g_new (GdkColor, cc->num_colors);
retrygray:
- dinc = 65535.0 / (cc->num_colors - 1);
-
- clrs = cstart;
+ dinc = 65535.0 / (cc->num_colors - 1);
- for (i = 0; i < cc->num_colors; i++) {
- clrs->red = clrs->green = clrs->blue = dinc * i;
+ clrs = cstart;
- if (!gdk_color_alloc(cc->colormap, clrs)) {
- gdk_colors_free(cc->colormap, cc->clut, i, 0);
+ for (i = 0; i < cc->num_colors; i++)
+ {
+ clrs->red = clrs->green = clrs->blue = dinc * i;
- cc->num_colors /= 2;
+ if (!gdk_color_alloc (cc->colormap, clrs))
+ {
+ gdk_colors_free (cc->colormap, cc->clut, i, 0);
- if (cc->num_colors > 1)
- goto retrygray;
- else {
- g_free(cc->clut);
- cc->clut = NULL;
- init_bw(cc);
- g_free(cstart);
- return;
- }
- }
+ cc->num_colors /= 2;
- cc->clut[i] = clrs++->pixel;
+ if (cc->num_colors > 1)
+ goto retrygray;
+ else
+ {
+ g_free (cc->clut);
+ cc->clut = NULL;
+ init_bw (cc);
+ g_free (cstart);
+ return;
+ }
}
- g_free(cstart);
+ cc->clut[i] = clrs++->pixel;
+ }
- /* XXX: is this the right thing to do? */
- ccp->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP(cc->colormap);
- ccp->std_cmap.base_pixel = 0;
- ccp->std_cmap.red_max = cc->num_colors - 1;
- ccp->std_cmap.green_max = 0;
- ccp->std_cmap.blue_max = 0;
- ccp->std_cmap.red_mult = 1;
- ccp->std_cmap.green_mult = 0;
- ccp->std_cmap.blue_mult = 0;
+ g_free (cstart);
- cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
- cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
+ /* XXX: is this the right thing to do? */
+ ccp->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP (cc->colormap);
+ ccp->std_cmap.base_pixel = 0;
+ ccp->std_cmap.red_max = cc->num_colors - 1;
+ ccp->std_cmap.green_max = 0;
+ ccp->std_cmap.blue_max = 0;
+ ccp->std_cmap.red_mult = 1;
+ ccp->std_cmap.green_mult = 0;
+ ccp->std_cmap.blue_mult = 0;
- query_colors(cc);
+ cc->white_pixel = WhitePixel (ccp->xdisplay, gdk_screen);
+ cc->black_pixel = BlackPixel (ccp->xdisplay, gdk_screen);
- cc->mode = GDK_CC_MODE_MY_GRAY;
+ query_colors (cc);
+
+ cc->mode = GDK_CC_MODE_MY_GRAY;
}
static void
-init_color(GdkColorContext *cc)
+init_color (GdkColorContext *cc)
{
- GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
- gint cubeval;
+ GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
+ gint cubeval;
- cubeval = 1;
- while ((cubeval * cubeval * cubeval) < GDK_VISUAL_XVISUAL(cc->visual)->map_entries)
- cubeval++;
- cubeval--;
+ cubeval = 1;
+ while ((cubeval * cubeval * cubeval) < GDK_VISUAL_XVISUAL (cc->visual)->map_entries)
+ cubeval++;
+ cubeval--;
- cc->num_colors = cubeval * cubeval * cubeval;
+ cc->num_colors = cubeval * cubeval * cubeval;
- ccp->std_cmap.red_max = cubeval - 1;
- ccp->std_cmap.green_max = cubeval - 1;
- ccp->std_cmap.blue_max = cubeval - 1;
- ccp->std_cmap.red_mult = cubeval * cubeval;
- ccp->std_cmap.green_mult = cubeval;
- ccp->std_cmap.blue_mult = 1;
- ccp->std_cmap.base_pixel = 0;
+ ccp->std_cmap.red_max = cubeval - 1;
+ ccp->std_cmap.green_max = cubeval - 1;
+ ccp->std_cmap.blue_max = cubeval - 1;
+ ccp->std_cmap.red_mult = cubeval * cubeval;
+ ccp->std_cmap.green_mult = cubeval;
+ ccp->std_cmap.blue_mult = 1;
+ ccp->std_cmap.base_pixel = 0;
- cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
- cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
- cc->num_colors = DisplayCells(ccp->xdisplay, gdk_screen);
+ cc->white_pixel = WhitePixel (ccp->xdisplay, gdk_screen);
+ cc->black_pixel = BlackPixel (ccp->xdisplay, gdk_screen);
+ cc->num_colors = DisplayCells (ccp->xdisplay, gdk_screen);
- /* a CLUT for storing allocated pixel indices */
+ /* a CLUT for storing allocated pixel indices */
- cc->max_colors = cc->num_colors;
- cc->clut = g_new(gulong, cc->max_colors);
+ cc->max_colors = cc->num_colors;
+ cc->clut = g_new (gulong, cc->max_colors);
- for (cubeval = 0; cubeval < cc->max_colors; cubeval++)
- cc->clut[cubeval] = cubeval;
+ for (cubeval = 0; cubeval < cc->max_colors; cubeval++)
+ cc->clut[cubeval] = cubeval;
- query_colors(cc);
+ query_colors (cc);
- cc->mode = GDK_CC_MODE_STD_CMAP;
+ cc->mode = GDK_CC_MODE_STD_CMAP;
}
static void
-init_true_color(GdkColorContext *cc)
+init_true_color (GdkColorContext *cc)
{
- GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
- gulong rmask, gmask, bmask;
+ GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
+ gulong rmask, gmask, bmask;
- cc->mode = GDK_CC_MODE_TRUE;
+ cc->mode = GDK_CC_MODE_TRUE;
- /* Red */
+ /* Red */
- rmask = cc->masks.red = cc->visual->red_mask;
+ rmask = cc->masks.red = cc->visual->red_mask;
- cc->shifts.red = 0;
- cc->bits.red = 0;
+ cc->shifts.red = 0;
+ cc->bits.red = 0;
- while (!(rmask & 1)) {
- rmask >>= 1;
- cc->shifts.red++;
- }
+ while (!(rmask & 1))
+ {
+ rmask >>= 1;
+ cc->shifts.red++;
+ }
- while (rmask & 1) {
- rmask >>= 1;
- cc->bits.red++;
- }
+ while (rmask & 1)
+ {
+ rmask >>= 1;
+ cc->bits.red++;
+ }
- /* Green */
+ /* Green */
- gmask = cc->masks.green = cc->visual->green_mask;
+ gmask = cc->masks.green = cc->visual->green_mask;
- cc->shifts.green = 0;
- cc->bits.green = 0;
+ cc->shifts.green = 0;
+ cc->bits.green = 0;
- while (!(gmask & 1)) {
- gmask >>= 1;
- cc->shifts.green++;
- }
+ while (!(gmask & 1))
+ {
+ gmask >>= 1;
+ cc->shifts.green++;
+ }
- while (gmask & 1) {
- gmask >>= 1;
- cc->bits.green++;
- }
+ while (gmask & 1)
+ {
+ gmask >>= 1;
+ cc->bits.green++;
+ }
- /* Blue */
+ /* Blue */
- bmask = cc->masks.blue = cc->visual->blue_mask;
+ bmask = cc->masks.blue = cc->visual->blue_mask;
- cc->shifts.blue = 0;
- cc->bits.blue = 0;
+ cc->shifts.blue = 0;
+ cc->bits.blue = 0;
- while (!(bmask & 1)) {
- bmask >>= 1;
- cc->shifts.blue++;
- }
+ while (!(bmask & 1))
+ {
+ bmask >>= 1;
+ cc->shifts.blue++;
+ }
- while (bmask & 1) {
- bmask >>= 1;
- cc->bits.blue++;
- }
+ while (bmask & 1)
+ {
+ bmask >>= 1;
+ cc->bits.blue++;
+ }
- cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
- cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
- cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
+ cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
+ cc->white_pixel = WhitePixel (ccp->xdisplay, gdk_screen);
+ cc->black_pixel = BlackPixel (ccp->xdisplay, gdk_screen);
}
static void
-init_direct_color(GdkColorContext *cc)
+init_direct_color (GdkColorContext *cc)
{
- gint n, count;
- GdkColor *clrs, *cstart;
- gulong rval, gval, bval;
- gulong *rtable;
- gulong *gtable;
- gulong *btable;
- gdouble dinc;
+ gint n, count;
+ GdkColor *clrs, *cstart;
+ gulong rval, gval, bval;
+ gulong *rtable;
+ gulong *gtable;
+ gulong *btable;
+ gdouble dinc;
- init_true_color(cc); /* for shift stuff */
+ init_true_color (cc); /* for shift stuff */
- rval = cc->visual->red_mask >> cc->shifts.red;
- gval = cc->visual->green_mask >> cc->shifts.green;
- bval = cc->visual->blue_mask >> cc->shifts.blue;
+ rval = cc->visual->red_mask >> cc->shifts.red;
+ gval = cc->visual->green_mask >> cc->shifts.green;
+ bval = cc->visual->blue_mask >> cc->shifts.blue;
- rtable = g_new(gulong, rval + 1);
- gtable = g_new(gulong, gval + 1);
- btable = g_new(gulong, bval + 1);
+ rtable = g_new (gulong, rval + 1);
+ gtable = g_new (gulong, gval + 1);
+ btable = g_new (gulong, bval + 1);
- cc->max_entry = MAX(rval, gval);
- cc->max_entry = MAX(cc->max_entry, bval);
+ cc->max_entry = MAX (rval, gval);
+ cc->max_entry = MAX (cc->max_entry, bval);
- cstart = g_new(GdkColor, cc->max_entry + 1);
- cc->clut = g_new(gulong, cc->max_entry + 1);
+ cstart = g_new (GdkColor, cc->max_entry + 1);
+ cc->clut = g_new (gulong, cc->max_entry + 1);
retrydirect:
- for (n = 0; n < rval; n++)
- rtable[n] = rval ? (65535.0 / rval * n) : 0;
-
- for (n = 0; n < gval; n++)
- gtable[n] = gval ? (65535.0 / gval * n) : 0;
-
- for (n = 0; n < bval; n++)
- btable[n] = bval ? (65535.0 / bval * n) : 0;
+ for (n = 0; n < rval; n++)
+ rtable[n] = rval ? (65535.0 / rval * n) : 0;
- cc->max_entry = MAX(rval, gval);
- cc->max_entry = MAX(cc->max_entry, bval);
+ for (n = 0; n < gval; n++)
+ gtable[n] = gval ? (65535.0 / gval * n) : 0;
- count = 0;
- clrs = cstart;
- cc->num_colors = (rval + 1) * (gval + 1) * (bval + 1);
+ for (n = 0; n < bval; n++)
+ btable[n] = bval ? (65535.0 / bval * n) : 0;
- for (n = 0; n < cc->max_entry; n++) {
- dinc = (double) n / cc->max_entry;
+ cc->max_entry = MAX (rval, gval);
+ cc->max_entry = MAX (cc->max_entry, bval);
- clrs->red = rtable[(int) (dinc * rval)];
- clrs->green = gtable[(int) (dinc * gval)];
- clrs->blue = btable[(int) (dinc * bval)];
+ count = 0;
+ clrs = cstart;
+ cc->num_colors = (rval + 1) * (gval + 1) * (bval + 1);
- if (gdk_color_alloc(cc->colormap, clrs)) {
- cc->clut[count++] = clrs->pixel;
- clrs++;
- } else {
- gdk_colors_free(cc->colormap, cc->clut, count, 0);
+ for (n = 0; n < cc->max_entry; n++)
+ {
+ dinc = (double) n / cc->max_entry;
- rval >>= 1;
- gval >>= 1;
- bval >>= 1;
+ clrs->red = rtable[(int) (dinc * rval)];
+ clrs->green = gtable[(int) (dinc * gval)];
+ clrs->blue = btable[(int) (dinc * bval)];
- cc->masks.red = (cc->masks.red >> 1) & cc->visual->red_mask;
- cc->masks.green = (cc->masks.green >> 1) & cc->visual->green_mask;
- cc->masks.blue = (cc->masks.blue >> 1) & cc->visual->blue_mask;
-
- cc->shifts.red++;
- cc->shifts.green++;
- cc->shifts.blue++;
-
- cc->bits.red--;
- cc->bits.green--;
- cc->bits.blue--;
-
- cc->num_colors = (rval + 1) * (gval + 1) * (bval + 1);
-
- if (cc->num_colors >1)
- goto retrydirect;
- else {
- g_free(cc->clut);
- cc->clut = NULL;
- init_bw(cc);
- break;
- }
- }
+ if (gdk_color_alloc (cc->colormap, clrs))
+ {
+ cc->clut[count++] = clrs->pixel;
+ clrs++;
+ }
+ else
+ {
+ gdk_colors_free (cc->colormap, cc->clut, count, 0);
+
+ rval >>= 1;
+ gval >>= 1;
+ bval >>= 1;
+
+ cc->masks.red = (cc->masks.red >> 1) & cc->visual->red_mask;
+ cc->masks.green = (cc->masks.green >> 1) & cc->visual->green_mask;
+ cc->masks.blue = (cc->masks.blue >> 1) & cc->visual->blue_mask;
+
+ cc->shifts.red++;
+ cc->shifts.green++;
+ cc->shifts.blue++;
+
+ cc->bits.red--;
+ cc->bits.green--;
+ cc->bits.blue--;
+
+ cc->num_colors = (rval + 1) * (gval + 1) * (bval + 1);
+
+ if (cc->num_colors >1)
+ goto retrydirect;
+ else
+ {
+ g_free (cc->clut);
+ cc->clut = NULL;
+ init_bw (cc);
+ break;
+ }
}
+ }
- /* Update allocated color count; original num_colors is max_entry, which
- * is not necessarily the same as the really allocated number of colors.
- */
+ /* Update allocated color count; original num_colors is max_entry, which
+ * is not necessarily the same as the really allocated number of colors.
+ */
- cc->num_colors = count;
+ cc->num_colors = count;
- g_free(rtable);
- g_free(gtable);
- g_free(btable);
- g_free(cstart);
+ g_free (rtable);
+ g_free (gtable);
+ g_free (btable);
+ g_free (cstart);
}
static void
-init_palette(GdkColorContext *cc)
+init_palette (GdkColorContext *cc)
{
- /* restore correct mode for this cc */
+ /* restore correct mode for this cc */
- switch (cc->visual->type) {
- case GDK_VISUAL_STATIC_GRAY:
- case GDK_VISUAL_GRAYSCALE:
- if (GDK_VISUAL_XVISUAL(cc->visual)->map_entries == 2)
- cc->mode = GDK_CC_MODE_BW;
- else
- cc->mode = GDK_CC_MODE_MY_GRAY;
- break;
-
- case GDK_VISUAL_TRUE_COLOR:
- case GDK_VISUAL_DIRECT_COLOR:
- cc->mode = GDK_CC_MODE_TRUE;
- break;
-
- case GDK_VISUAL_STATIC_COLOR:
- case GDK_VISUAL_PSEUDO_COLOR:
- cc->mode = GDK_CC_MODE_STD_CMAP;
- break;
-
- default:
- cc->mode = GDK_CC_MODE_UNDEFINED;
- break;
- }
+ switch (cc->visual->type)
+ {
+ case GDK_VISUAL_STATIC_GRAY:
+ case GDK_VISUAL_GRAYSCALE:
+ if (GDK_VISUAL_XVISUAL (cc->visual)->map_entries == 2)
+ cc->mode = GDK_CC_MODE_BW;
+ else
+ cc->mode = GDK_CC_MODE_MY_GRAY;
+ break;
- /* previous palette */
+ case GDK_VISUAL_TRUE_COLOR:
+ case GDK_VISUAL_DIRECT_COLOR:
+ cc->mode = GDK_CC_MODE_TRUE;
+ break;
- if (cc->num_palette)
- g_free(cc->palette);
+ case GDK_VISUAL_STATIC_COLOR:
+ case GDK_VISUAL_PSEUDO_COLOR:
+ cc->mode = GDK_CC_MODE_STD_CMAP;
+ break;
- if (cc->fast_dither)
- g_free(cc->fast_dither);
+ default:
+ cc->mode = GDK_CC_MODE_UNDEFINED;
+ break;
+ }
- /* clear hash table if present */
+ /* previous palette */
- if (cc->color_hash) {
- /* XXX: quick-and-dirty way to remove everything */
+ if (cc->num_palette)
+ g_free (cc->palette);
- g_hash_table_destroy(cc->color_hash);
- cc->color_hash = g_hash_table_new(hash_color, compare_colors);
- }
+ if (cc->fast_dither)
+ g_free (cc->fast_dither);
+
+ /* clear hash table if present */
+
+ if (cc->color_hash)
+ {
+ /* XXX: quick-and-dirty way to remove everything */
- cc->palette = NULL;
- cc->num_palette = 0;
- cc->fast_dither = NULL;
+ g_hash_table_destroy (cc->color_hash);
+ cc->color_hash = g_hash_table_new (hash_color, compare_colors);
+ }
+
+ cc->palette = NULL;
+ cc->num_palette = 0;
+ cc->fast_dither = NULL;
}
GdkColorContext *
-gdk_color_context_new(GdkVisual *visual,
- GdkColormap *colormap)
+gdk_color_context_new (GdkVisual *visual,
+ GdkColormap *colormap)
{
- GdkColorContextPrivate *ccp;
- gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
- GdkColorContext *cc;
- gint retry_count;
- GdkColormap *default_colormap;
-
- g_assert(visual != NULL);
- g_assert(colormap != NULL);
+ GdkColorContextPrivate *ccp;
+ gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
+ GdkColorContext *cc;
+ gint retry_count;
+ GdkColormap *default_colormap;
+
+ g_assert (visual != NULL);
+ g_assert (colormap != NULL);
- cc = g_new(GdkColorContext, 1);
- ccp = (GdkColorContextPrivate *) cc;
- ccp->xdisplay = gdk_display;
- cc->visual = visual;
- cc->colormap = colormap;
- cc->clut = NULL;
- cc->cmap = NULL;
- cc->mode = GDK_CC_MODE_UNDEFINED;
- cc->need_to_free_colormap = FALSE;
-
- cc->color_hash = NULL;
- cc->palette = NULL;
- cc->num_palette = 0;
- cc->fast_dither = NULL;
-
- default_colormap = gdk_colormap_get_system();
-
- retry_count = 0;
-
- while (retry_count < 2) {
- /* Only create a private colormap if the visual found isn't equal
- * to the default visual and we don't have a private colormap,
- * -or- if we are instructed to create a private colormap (which
- * never is the case for XmHTML).
- */
-
- if (use_private_colormap
- || ((cc->visual != gdk_visual_get_system()) /* default visual? */
- && (GDK_COLORMAP_XCOLORMAP(colormap) == GDK_COLORMAP_XCOLORMAP(default_colormap)))) {
- g_warning("gdk_color_context_new: non-default visual detected, "
- "using private colormap");
-
- cc->colormap = gdk_colormap_new(cc->visual, FALSE);
-
- cc->need_to_free_colormap = (GDK_COLORMAP_XCOLORMAP(colormap)
- != GDK_COLORMAP_XCOLORMAP(default_colormap));
- }
+ cc = g_new (GdkColorContext, 1);
+ ccp = (GdkColorContextPrivate *) cc;
+ ccp->xdisplay = gdk_display;
+ cc->visual = visual;
+ cc->colormap = colormap;
+ cc->clut = NULL;
+ cc->cmap = NULL;
+ cc->mode = GDK_CC_MODE_UNDEFINED;
+ cc->need_to_free_colormap = FALSE;
+
+ cc->color_hash = NULL;
+ cc->palette = NULL;
+ cc->num_palette = 0;
+ cc->fast_dither = NULL;
+
+ default_colormap = gdk_colormap_get_system ();
+
+ retry_count = 0;
+
+ while (retry_count < 2)
+ {
+ /* Only create a private colormap if the visual found isn't equal
+ * to the default visual and we don't have a private colormap,
+ * -or- if we are instructed to create a private colormap (which
+ * never is the case for XmHTML).
+ */
+
+ if (use_private_colormap
+ || ((cc->visual != gdk_visual_get_system ()) /* default visual? */
+ && (GDK_COLORMAP_XCOLORMAP (colormap) == GDK_COLORMAP_XCOLORMAP (default_colormap))))
+ {
+ g_warning ("gdk_color_context_new: non-default visual detected, "
+ "using private colormap");
+
+ cc->colormap = gdk_colormap_new (cc->visual, FALSE);
+
+ cc->need_to_free_colormap = (GDK_COLORMAP_XCOLORMAP (colormap)
+ != GDK_COLORMAP_XCOLORMAP (default_colormap));
+ }
- switch (visual->type) {
- case GDK_VISUAL_STATIC_GRAY:
- case GDK_VISUAL_GRAYSCALE:
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_new: visual class is %s",
- (visual->type == GDK_VISUAL_STATIC_GRAY) ?
- "GDK_VISUAL_STATIC_GRAY" :
- "GDK_VISUAL_GRAYSCALE");
-
- if (GDK_VISUAL_XVISUAL(cc->visual)->map_entries == 2)
- init_bw(cc);
- else
- init_gray(cc);
-
- break;
-
- case GDK_VISUAL_TRUE_COLOR: /* shifts */
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_new: visual class is "
- "GDK_VISUAL_TRUE_COLOR");
-
- init_true_color(cc);
- break;
-
- case GDK_VISUAL_DIRECT_COLOR: /* shifts and fake CLUT */
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_new: visual class is "
- "GDK_VISUAL_DIRECT_COLOR");
-
- init_direct_color(cc);
- break;
-
- case GDK_VISUAL_STATIC_COLOR:
- case GDK_VISUAL_PSEUDO_COLOR:
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_new: visual class is %s",
- (visual->type == GDK_VISUAL_STATIC_COLOR) ?
- "GDK_VISUAL_STATIC_COLOR" :
- "GDK_VISUAL_PSEUDO_COLOR");
-
- init_color(cc);
- break;
-
- default:
- g_assert_not_reached();
- }
+ switch (visual->type)
+ {
+ case GDK_VISUAL_STATIC_GRAY:
+ case GDK_VISUAL_GRAYSCALE:
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_new: visual class is %s",
+ (visual->type == GDK_VISUAL_STATIC_GRAY) ?
+ "GDK_VISUAL_STATIC_GRAY" :
+ "GDK_VISUAL_GRAYSCALE");
+
+ if (GDK_VISUAL_XVISUAL (cc->visual)->map_entries == 2)
+ init_bw (cc);
+ else
+ init_gray (cc);
+
+ break;
+
+ case GDK_VISUAL_TRUE_COLOR: /* shifts */
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_new: visual class is "
+ "GDK_VISUAL_TRUE_COLOR");
+
+ init_true_color (cc);
+ break;
+
+ case GDK_VISUAL_DIRECT_COLOR: /* shifts and fake CLUT */
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_new: visual class is "
+ "GDK_VISUAL_DIRECT_COLOR");
+
+ init_direct_color (cc);
+ break;
+
+ case GDK_VISUAL_STATIC_COLOR:
+ case GDK_VISUAL_PSEUDO_COLOR:
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_new: visual class is %s",
+ (visual->type == GDK_VISUAL_STATIC_COLOR) ?
+ "GDK_VISUAL_STATIC_COLOR" :
+ "GDK_VISUAL_PSEUDO_COLOR");
+
+ init_color (cc);
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
- if ((cc->mode == GDK_CC_MODE_BW) && (cc->visual->depth > 1)) {
- use_private_colormap = TRUE;
- retry_count++;
- } else
- break;
+ if ((cc->mode == GDK_CC_MODE_BW) && (cc->visual->depth > 1))
+ {
+ use_private_colormap = TRUE;
+ retry_count++;
}
+ else
+ break;
+ }
- /* no. of colors allocated yet */
+ /* no. of colors allocated yet */
- cc->num_allocated = 0;
+ cc->num_allocated = 0;
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_new: screen depth is %i, no. of colors is %i",
- cc->visual->depth, cc->num_colors);
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_new: screen depth is %i, no. of colors is %i",
+ cc->visual->depth, cc->num_colors);
- /* check if we need to initialize a hash table */
+ /* check if we need to initialize a hash table */
- if ((cc->mode == GDK_CC_MODE_STD_CMAP) || (cc->mode == GDK_CC_MODE_UNDEFINED))
- cc->color_hash = g_hash_table_new(hash_color, compare_colors);
+ if ((cc->mode == GDK_CC_MODE_STD_CMAP) || (cc->mode == GDK_CC_MODE_UNDEFINED))
+ cc->color_hash = g_hash_table_new (hash_color, compare_colors);
- return (GdkColorContext *) cc;
+ return (GdkColorContext *) cc;
}
GdkColorContext *
-gdk_color_context_new_mono(GdkVisual *visual,
- GdkColormap *colormap)
+gdk_color_context_new_mono (GdkVisual *visual,
+ GdkColormap *colormap)
{
- GdkColorContextPrivate *ccp;
- GdkColorContext *cc;
+ GdkColorContextPrivate *ccp;
+ GdkColorContext *cc;
- g_assert(visual != NULL);
- g_assert(colormap != NULL);
+ g_assert (visual != NULL);
+ g_assert (colormap != NULL);
- cc = g_new(GdkColorContext, 1);
- ccp = (GdkColorContextPrivate *) cc;
- ccp->xdisplay = gdk_display;
- cc->visual = visual;
- cc->colormap = colormap;
- cc->clut = NULL;
- cc->cmap = NULL;
- cc->mode = GDK_CC_MODE_UNDEFINED;
- cc->need_to_free_colormap = FALSE;
+ cc = g_new (GdkColorContext, 1);
+ ccp = (GdkColorContextPrivate *) cc;
+ ccp->xdisplay = gdk_display;
+ cc->visual = visual;
+ cc->colormap = colormap;
+ cc->clut = NULL;
+ cc->cmap = NULL;
+ cc->mode = GDK_CC_MODE_UNDEFINED;
+ cc->need_to_free_colormap = FALSE;
- init_bw(cc);
+ init_bw (cc);
- return (GdkColorContext *) cc;
+ return (GdkColorContext *) cc;
}
/* This doesn't currently free black/white, hmm... */
void
-gdk_color_context_free(GdkColorContext *cc)
+gdk_color_context_free (GdkColorContext *cc)
{
- g_assert(cc != NULL);
-
- if ((cc->visual->type == GDK_VISUAL_STATIC_COLOR)
- || (cc->visual->type == GDK_VISUAL_PSEUDO_COLOR)) {
- gdk_colors_free(cc->colormap, cc->clut, cc->num_allocated, 0);
- g_free(cc->clut);
- } else if (cc->clut != NULL) {
- gdk_colors_free(cc->colormap, cc->clut, cc->num_colors, 0);
- g_free(cc->clut);
- }
-
- if (cc->cmap != NULL)
- g_free(cc->cmap);
-
- if (cc->need_to_free_colormap)
- gdk_colormap_unref(cc->colormap);
-
- /* free any palette that has been associated with this GdkColorContext */
-
- init_palette(cc);
-
- if (cc->color_hash) {
- g_hash_table_foreach(cc->color_hash,
- free_hash_entry,
- NULL);
- g_hash_table_destroy(cc->color_hash);
- }
-
- g_free(cc);
+ g_assert (cc != NULL);
+
+ if ((cc->visual->type == GDK_VISUAL_STATIC_COLOR)
+ || (cc->visual->type == GDK_VISUAL_PSEUDO_COLOR))
+ {
+ gdk_colors_free (cc->colormap, cc->clut, cc->num_allocated, 0);
+ g_free (cc->clut);
+ }
+ else if (cc->clut != NULL)
+ {
+ gdk_colors_free (cc->colormap, cc->clut, cc->num_colors, 0);
+ g_free (cc->clut);
+ }
+
+ if (cc->cmap != NULL)
+ g_free (cc->cmap);
+
+ if (cc->need_to_free_colormap)
+ gdk_colormap_unref (cc->colormap);
+
+ /* free any palette that has been associated with this GdkColorContext */
+
+ init_palette (cc);
+
+ if (cc->color_hash)
+ {
+ g_hash_table_foreach (cc->color_hash,
+ free_hash_entry,
+ NULL);
+ g_hash_table_destroy (cc->color_hash);
+ }
+
+ g_free (cc);
}
gulong
-gdk_color_context_get_pixel(GdkColorContext *cc,
- gushort red,
- gushort green,
- gushort blue,
- gint *failed)
+gdk_color_context_get_pixel (GdkColorContext *cc,
+ gushort red,
+ gushort green,
+ gushort blue,
+ gint *failed)
{
- GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
- g_assert(cc != NULL);
- g_assert(failed != NULL);
+ GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
+ g_assert (cc != NULL);
+ g_assert (failed != NULL);
- *failed = FALSE;
+ *failed = FALSE;
- switch (cc->mode) {
- case GDK_CC_MODE_BW: {
- gdouble value;
+ switch (cc->mode)
+ {
+ case GDK_CC_MODE_BW:
+ {
+ gdouble value;
- red <<= 8;
- green <<= 8;
- blue <<= 8;
+ red <<= 8;
+ green <<= 8;
+ blue <<= 8;
- value = red / 65535.0 * 0.30
- + green / 65535.0 * 0.59
- + blue / 65535.0 * 0.11;
+ value = red / 65535.0 * 0.30
+ + green / 65535.0 * 0.59
+ + blue / 65535.0 * 0.11;
- if (value > 0.5)
- return cc->white_pixel;
+ if (value > 0.5)
+ return cc->white_pixel;
- return cc->black_pixel;
- }
+ return cc->black_pixel;
+ }
- case GDK_CC_MODE_MY_GRAY: {
- gulong ired, igreen, iblue;
+ case GDK_CC_MODE_MY_GRAY:
+ {
+ gulong ired, igreen, iblue;
- red <<= 8;
- green <<= 8;
- blue <<= 8;
+ red <<= 8;
+ green <<= 8;
+ blue <<= 8;
- red = red * 0.30 + green * 0.59 + blue * 0.11;
- green = 0;
- blue = 0;
+ red = red * 0.30 + green * 0.59 + blue * 0.11;
+ green = 0;
+ blue = 0;
- if ((ired = red * (ccp->std_cmap.red_max + 1) / 0xffff)
- > ccp->std_cmap.red_max)
- ired = ccp->std_cmap.red_max;
+ if ((ired = red * (ccp->std_cmap.red_max + 1) / 0xffff)
+ > ccp->std_cmap.red_max)
+ ired = ccp->std_cmap.red_max;
- ired *= ccp->std_cmap.red_mult;
+ ired *= ccp->std_cmap.red_mult;
- if ((igreen = green * (ccp->std_cmap.green_max + 1) / 0xffff)
- > ccp->std_cmap.green_max)
- igreen = ccp->std_cmap.green_max;
+ if ((igreen = green * (ccp->std_cmap.green_max + 1) / 0xffff)
+ > ccp->std_cmap.green_max)
+ igreen = ccp->std_cmap.green_max;
- igreen *= ccp->std_cmap.green_mult;
+ igreen *= ccp->std_cmap.green_mult;
- if ((iblue = blue * (ccp->std_cmap.blue_max + 1) / 0xffff)
- > ccp->std_cmap.blue_max)
- iblue = ccp->std_cmap.blue_max;
+ if ((iblue = blue * (ccp->std_cmap.blue_max + 1) / 0xffff)
+ > ccp->std_cmap.blue_max)
+ iblue = ccp->std_cmap.blue_max;
- iblue *= ccp->std_cmap.blue_mult;
+ iblue *= ccp->std_cmap.blue_mult;
- if (cc->clut != NULL)
- return cc->clut[ccp->std_cmap.base_pixel + ired + igreen + iblue];
+ if (cc->clut != NULL)
+ return cc->clut[ccp->std_cmap.base_pixel + ired + igreen + iblue];
- return ccp->std_cmap.base_pixel + ired + igreen + iblue;
- }
+ return ccp->std_cmap.base_pixel + ired + igreen + iblue;
+ }
- case GDK_CC_MODE_TRUE: {
- gulong ired, igreen, iblue;
+ case GDK_CC_MODE_TRUE:
+ {
+ gulong ired, igreen, iblue;
- red <<= 8;
- green <<= 8;
- blue <<= 8;
+ red <<= 8;
+ green <<= 8;
+ blue <<= 8;
- if (cc->clut == NULL) {
- red >>= 16 - cc->bits.red;
- green >>= 16 - cc->bits.green;
- blue >>= 16 - cc->bits.blue;
+ if (cc->clut == NULL)
+ {
+ red >>= 16 - cc->bits.red;
+ green >>= 16 - cc->bits.green;
+ blue >>= 16 - cc->bits.blue;
- ired = (red << cc->shifts.red) & cc->masks.red;
- igreen = (green << cc->shifts.green) & cc->masks.green;
- iblue = (blue << cc->shifts.blue) & cc->masks.blue;
+ ired = (red << cc->shifts.red) & cc->masks.red;
+ igreen = (green << cc->shifts.green) & cc->masks.green;
+ iblue = (blue << cc->shifts.blue) & cc->masks.blue;
- return ired | igreen | iblue;
- }
+ return ired | igreen | iblue;
+ }
- ired = cc->clut[red * cc->max_entry / 65535] & cc->masks.red;
- igreen = cc->clut[green * cc->max_entry / 65535] & cc->masks.green;
- iblue = cc->clut[blue * cc->max_entry / 65535] & cc->masks.blue;
+ ired = cc->clut[red * cc->max_entry / 65535] & cc->masks.red;
+ igreen = cc->clut[green * cc->max_entry / 65535] & cc->masks.green;
+ iblue = cc->clut[blue * cc->max_entry / 65535] & cc->masks.blue;
- return ired | igreen | iblue;
- }
+ return ired | igreen | iblue;
+ }
- case GDK_CC_MODE_PALETTE:
- return gdk_color_context_get_pixel_from_palette(cc, &red, &green, &blue, failed);
+ case GDK_CC_MODE_PALETTE:
+ return gdk_color_context_get_pixel_from_palette (cc, &red, &green, &blue, failed);
+
+ case GDK_CC_MODE_STD_CMAP:
+ default:
+ {
+ GdkColor color;
+ GdkColor *result;
+
+ red <<= 8;
+ green <<= 8;
+ blue <<= 8;
+
+ color.red = red;
+ color.green = green;
+ color.blue = blue;
+
+ result = g_hash_table_lookup (cc->color_hash, &color);
+
+ if (!result)
+ {
+ color.red = red;
+ color.green = green;
+ color.blue = blue;
+ color.pixel = 0;
+
+ if (!gdk_color_alloc (cc->colormap, &color))
+ *failed = TRUE;
+ else
+ {
+ GdkColor *cnew;
+
+ /* XXX: the following comment comes directly from
+ * XCC.c. I don't know if it is relevant for
+ * gdk_color_alloc() as it is for XAllocColor()
+ * - Federico
+ */
+ /*
+ * I can't figure this out entirely, but it *is* possible
+ * that XAllocColor succeeds, even if the number of
+ * allocations we've made exceeds the number of available
+ * colors in the current colormap. And therefore it
+ * might be necessary for us to resize the CLUT.
+ */
- case GDK_CC_MODE_STD_CMAP:
- default: {
- GdkColor color;
- GdkColor *result;
+ if (cc->num_allocated == cc->max_colors)
+ {
+ cc->max_colors *= 2;
- red <<= 8;
- green <<= 8;
- blue <<= 8;
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixel: "
+ "resizing CLUT to %i entries",
+ cc->max_colors);
- color.red = red;
- color.green = green;
- color.blue = blue;
+ cc->clut = g_realloc (cc->clut,
+ cc->max_colors * sizeof (gulong));
+ }
- result = g_hash_table_lookup(cc->color_hash, &color);
+ /* Key and value are the same color structure */
- if (!result) {
- color.red = red;
- color.green = green;
- color.blue = blue;
- color.pixel = 0;
+ cnew = g_new (GdkColor, 1);
+ *cnew = color;
+ g_hash_table_insert (cc->color_hash, cnew, cnew);
- if (!gdk_color_alloc(cc->colormap, &color))
- *failed = TRUE;
- else {
- GdkColor *cnew;
-
- /* XXX: the following comment comes directly from
- * XCC.c. I don't know if it is relevant for
- * gdk_color_alloc() as it is for XAllocColor()
- * - Federico
- */
- /*
- * I can't figure this out entirely, but it *is* possible
- * that XAllocColor succeeds, even if the number of
- * allocations we've made exceeds the number of available
- * colors in the current colormap. And therefore it
- * might be necessary for us to resize the CLUT.
- */
-
- if (cc->num_allocated == cc->max_colors) {
- cc->max_colors *= 2;
-
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixel: "
- "resizing CLUT to %i entries",
- cc->max_colors);
-
- cc->clut = g_realloc(cc->clut,
- cc->max_colors * sizeof(gulong));
- }
-
- /* Key and value are the same color structure */
-
- cnew = g_new(GdkColor, 1);
- *cnew = color;
- g_hash_table_insert(cc->color_hash, cnew, cnew);
-
- cc->clut[cc->num_allocated] = color.pixel;
- cc->num_allocated++;
- return color.pixel;
- }
- }
+ cc->clut[cc->num_allocated] = color.pixel;
+ cc->num_allocated++;
+ return color.pixel;
+ }
+ }
- return result->pixel;
- }
- }
+ return result->pixel;
+ }
+ }
}
void
-gdk_color_context_get_pixels(GdkColorContext *cc,
- gushort *reds,
- gushort *greens,
- gushort *blues,
- gint ncolors,
- gulong *colors,
- gint *nallocated)
+gdk_color_context_get_pixels (GdkColorContext *cc,
+ gushort *reds,
+ gushort *greens,
+ gushort *blues,
+ gint ncolors,
+ gulong *colors,
+ gint *nallocated)
{
- gint i, k, idx;
- gint cmapsize, ncols = 0, nopen = 0, counter = 0;
- gint bad_alloc = FALSE;
- gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
- GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
- gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
-
- g_assert(cc != NULL);
- g_assert(reds != NULL);
- g_assert(greens != NULL);
- g_assert(blues != NULL);
- g_assert(colors != NULL);
- g_assert(nallocated != NULL);
-
- memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
- memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
- memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
-
- /* Will only have a value if used by the progressive image loader */
-
- ncols = *nallocated;
-
- *nallocated = 0;
-
- /* First allocate all pixels */
-
- for (i = 0; i < ncolors; i++) {
- /* colors[i] is only zero if the pixel at that location hasn't
- * been allocated yet. This is a sanity check required for proper
- * color allocation by the progressive image loader
- */
-
- if (colors[i] == 0) {
- defs[i].red = reds[i];
- defs[i].green = greens[i];
- defs[i].blue = blues[i];
-
- colors[i] = gdk_color_context_get_pixel(cc, reds[i], greens[i], blues[i],
- &bad_alloc);
-
- /* successfully allocated, store it */
-
- if (!bad_alloc) {
- defs[i].pixel = colors[i];
- allocated[ncols++] = colors[i];
- } else
- failed[nopen++] = i;
- }
+ gint i, k, idx;
+ gint cmapsize, ncols = 0, nopen = 0, counter = 0;
+ gint bad_alloc = FALSE;
+ gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
+ GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
+ gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
+
+ g_assert (cc != NULL);
+ g_assert (reds != NULL);
+ g_assert (greens != NULL);
+ g_assert (blues != NULL);
+ g_assert (colors != NULL);
+ g_assert (nallocated != NULL);
+
+ memset (defs, 0, MAX_IMAGE_COLORS * sizeof (GdkColor));
+ memset (failed, 0, MAX_IMAGE_COLORS * sizeof (gint));
+ memset (allocated, 0, MAX_IMAGE_COLORS * sizeof (gint));
+
+ /* Will only have a value if used by the progressive image loader */
+
+ ncols = *nallocated;
+
+ *nallocated = 0;
+
+ /* First allocate all pixels */
+
+ for (i = 0; i < ncolors; i++)
+ {
+ /* colors[i] is only zero if the pixel at that location hasn't
+ * been allocated yet. This is a sanity check required for proper
+ * color allocation by the progressive image loader
+ */
+
+ if (colors[i] == 0)
+ {
+ defs[i].red = reds[i];
+ defs[i].green = greens[i];
+ defs[i].blue = blues[i];
+
+ colors[i] = gdk_color_context_get_pixel (cc, reds[i], greens[i], blues[i],
+ &bad_alloc);
+
+ /* successfully allocated, store it */
+
+ if (!bad_alloc)
+ {
+ defs[i].pixel = colors[i];
+ allocated[ncols++] = colors[i];
+ }
+ else
+ failed[nopen++] = i;
}
+ }
- *nallocated = ncols;
+ *nallocated = ncols;
- /* all colors available, all done */
+ /* all colors available, all done */
- if ((ncols == ncolors) || (nopen == 0)) {
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels: got all %i colors; "
- "(%i colors allocated so far", ncolors, cc->num_allocated);
+ if ((ncols == ncolors) || (nopen == 0))
+ {
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels: got all %i colors; "
+ "(%i colors allocated so far", ncolors, cc->num_allocated);
- return;
- }
+ return;
+ }
- /* The fun part. We now try to allocate the colors we couldn't allocate
- * directly. The first step will map a color onto its nearest color
- * that has been allocated (either by us or someone else). If any colors
- * remain unallocated, we map these onto the colors that we have allocated
- * ourselves.
- */
+ /* The fun part. We now try to allocate the colors we couldn't allocate
+ * directly. The first step will map a color onto its nearest color
+ * that has been allocated (either by us or someone else). If any colors
+ * remain unallocated, we map these onto the colors that we have allocated
+ * ourselves.
+ */
- /* read up to MAX_IMAGE_COLORS colors of the current colormap */
+ /* read up to MAX_IMAGE_COLORS colors of the current colormap */
- cmapsize = MIN(cc->num_colors, MAX_IMAGE_COLORS);
+ cmapsize = MIN (cc->num_colors, MAX_IMAGE_COLORS);
- /* see if the colormap has any colors to read */
+ /* see if the colormap has any colors to read */
- if (cmapsize < 0) {
- g_warning("gdk_color_context_get_pixels: oops! no colors available, "
- "your images will look *really* ugly.");
+ if (cmapsize < 0)
+ {
+ g_warning ("gdk_color_context_get_pixels: oops! no colors available, "
+ "your images will look *really* ugly.");
- return;
- }
+ return;
+ }
#ifdef DEBUG
- exact_col = ncols;
+ exact_col = ncols;
#endif
- /* initialize pixels */
+ /* initialize pixels */
- for (i = 0; i < cmapsize; i++) {
- cmap[i].pixel = i;
- cmap[i].red = cmap[i].green = cmap[i].blue = 0;
- }
+ for (i = 0; i < cmapsize; i++)
+ {
+ cmap[i].pixel = i;
+ cmap[i].red = cmap[i].green = cmap[i].blue = 0;
+ }
- /* read the colormap */
+ /* read the colormap */
- my_x_query_colors(cc->colormap, cmap, cmapsize);
+ my_x_query_colors (cc->colormap, cmap, cmapsize);
- /* speedup: downscale here instead of in the matching code */
+ /* speedup: downscale here instead of in the matching code */
- for (i = 0; i < cmapsize; i++) {
- cmap[i].red >>= 8;
- cmap[i].green >>= 8;
- cmap[i].blue >>= 8;
- }
+ for (i = 0; i < cmapsize; i++)
+ {
+ cmap[i].red >>= 8;
+ cmap[i].green >>= 8;
+ cmap[i].blue >>= 8;
+ }
- /* get a close match for any unallocated colors */
+ /* get a close match for any unallocated colors */
- counter = nopen;
- nopen = 0;
- idx = 0;
+ counter = nopen;
+ nopen = 0;
+ idx = 0;
- do {
- gint d, j, mdist, close, ri, gi, bi;
- gint rd, gd, bd;
+ do
+ {
+ gint d, j, mdist, close, ri, gi, bi;
+ gint rd, gd, bd;
- i = failed[idx];
+ i = failed[idx];
- mdist = 1000000;
- close = -1;
+ mdist = 1000000;
+ close = -1;
- /* Store these vals. Small performance increase as this skips three
- * indexing operations in the loop code.
- */
+ /* Store these vals. Small performance increase as this skips three
+ * indexing operations in the loop code.
+ */
- ri = reds[i];
- gi = greens[i];
- bi = blues[i];
+ ri = reds[i];
+ gi = greens[i];
+ bi = blues[i];
- /* Walk all colors in the colormap and see which one is the
- * closest. Uses plain least squares.
- */
+ /* Walk all colors in the colormap and see which one is the
+ * closest. Uses plain least squares.
+ */
- for (j = 0; (j < cmapsize) && (mdist != 0); j++) {
- rd = ri - cmap[j].red;
- gd = gi - cmap[j].green;
- bd = bi - cmap[j].blue;
+ for (j = 0; (j < cmapsize) && (mdist != 0); j++)
+ {
+ rd = ri - cmap[j].red;
+ gd = gi - cmap[j].green;
+ bd = bi - cmap[j].blue;
- d = rd * rd + gd * gd + bd * bd;
+ d = rd * rd + gd * gd + bd * bd;
- if (d < mdist) {
- close = j;
- mdist = d;
- }
- }
+ if (d < mdist)
+ {
+ close = j;
+ mdist = d;
+ }
+ }
- if (close != -1) {
- rd = cmap[close].red;
- gd = cmap[close].green;
- bd = cmap[close].blue;
+ if (close != -1)
+ {
+ rd = cmap[close].red;
+ gd = cmap[close].green;
+ bd = cmap[close].blue;
- /* allocate */
+ /* allocate */
- colors[i] = gdk_color_context_get_pixel(cc, rd, gd, bd, &bad_alloc);
+ colors[i] = gdk_color_context_get_pixel (cc, rd, gd, bd, &bad_alloc);
- /* store */
+ /* store */
- if (!bad_alloc) {
- defs[i] = cmap[close];
- defs[i].pixel = colors[i];
- allocated[ncols++] = colors[i];
+ if (!bad_alloc)
+ {
+ defs[i] = cmap[close];
+ defs[i].pixel = colors[i];
+ allocated[ncols++] = colors[i];
#ifdef DEBUG
- close_col++;
+ close_col++;
#endif
- } else
- failed[nopen++] = i;
- } else
- failed[nopen++] = i;
- /* deal with in next stage if allocation failed */
- } while (++idx < counter);
-
- *nallocated = ncols;
-
- /* This is the maximum no. of allocated colors. See also the nopen == 0
- * note above.
- */
-
- if ((ncols == ncolors) || (nopen == 0)) {
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels: got %i colors, %i exact and "
- "%i close (%i colors allocated so far)",
- ncolors, exact_col, close_col, cc->num_allocated);
-
- return;
- }
+ } else
+ failed[nopen++] = i;
+ } else
+ failed[nopen++] = i;
+ /* deal with in next stage if allocation failed */
+ }
+ while (++idx < counter);
- /* Now map any remaining unallocated pixels into the colors we did get */
+ *nallocated = ncols;
- idx = 0;
+ /* This is the maximum no. of allocated colors. See also the nopen == 0
+ * note above.
+ */
- do {
- gint d, mdist, close, ri, gi, bi;
- gint j, rd, gd, bd;
+ if ((ncols == ncolors) || (nopen == 0))
+ {
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels: got %i colors, %i exact and "
+ "%i close (%i colors allocated so far)",
+ ncolors, exact_col, close_col, cc->num_allocated);
- i = failed[idx];
+ return;
+ }
- mdist = 1000000;
- close = -1;
+ /* Now map any remaining unallocated pixels into the colors we did get */
- /* store */
+ idx = 0;
- ri = reds[i];
- gi = greens[i];
- bi = blues[i];
+ do
+ {
+ gint d, mdist, close, ri, gi, bi;
+ gint j, rd, gd, bd;
- /* search allocated colors */
+ i = failed[idx];
- for (j = 0; (j < ncols) && (mdist != 0); j++) {
- k = allocated[j];
+ mdist = 1000000;
+ close = -1;
- rd = ri - defs[k].red;
- gd = gi - defs[k].green;
- bd = bi - defs[k].blue;
+ /* store */
- d = rd * rd + gd * gd + bd * bd;
+ ri = reds[i];
+ gi = greens[i];
+ bi = blues[i];
- if (d < mdist) {
- close = k;
- mdist = d;
- }
- }
+ /* search allocated colors */
+
+ for (j = 0; (j < ncols) && (mdist != 0); j++)
+ {
+ k = allocated[j];
+
+ rd = ri - defs[k].red;
+ gd = gi - defs[k].green;
+ bd = bi - defs[k].blue;
+
+ d = rd * rd + gd * gd + bd * bd;
+
+ if (d < mdist)
+ {
+ close = k;
+ mdist = d;
+ }
+ }
- if (close < 0) {
- /* too bad, map to black */
+ if (close < 0)
+ {
+ /* too bad, map to black */
- defs[i].pixel = cc->black_pixel;
- defs[i].red = defs[i].green = defs[i].blue = 0;
+ defs[i].pixel = cc->black_pixel;
+ defs[i].red = defs[i].green = defs[i].blue = 0;
#ifdef DEBUG
- black_col++;
+ black_col++;
#endif
- } else {
- defs[i] = defs[close];
+ }
+ else
+ {
+ defs[i] = defs[close];
#ifdef DEBUG
- subst_col++;
+ subst_col++;
#endif
- }
+ }
- colors[i] = defs[i].pixel;
- } while (++idx < nopen);
+ colors[i] = defs[i].pixel;
+ }
+ while (++idx < nopen);
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
- "%i substituted, %i to black (%i colors allocated so far)",
- ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
+ "%i substituted, %i to black (%i colors allocated so far)",
+ ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
}
void
-gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
- gushort *reds,
- gushort *greens,
- gushort *blues,
- gint ncolors,
- gint *used,
- gulong *colors,
- gint *nallocated)
+gdk_color_context_get_pixels_incremental (GdkColorContext *cc,
+ gushort *reds,
+ gushort *greens,
+ gushort *blues,
+ gint ncolors,
+ gint *used,
+ gulong *colors,
+ gint *nallocated)
{
- gint i, k, idx;
- gint cmapsize, ncols = 0, nopen = 0, counter = 0;
- gint bad_alloc = FALSE;
- gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
- GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
- gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
-
- g_assert(cc != NULL);
- g_assert(reds != NULL);
- g_assert(greens != NULL);
- g_assert(blues != NULL);
- g_assert(used != NULL);
- g_assert(colors != NULL);
- g_assert(nallocated != NULL);
-
- memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
- memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
- memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
-
- /* Will only have a value if used by the progressive image loader */
-
- ncols = *nallocated;
-
- *nallocated = 0;
-
- /* First allocate all pixels */
-
- for (i = 0; i < ncolors; i++) {
- /* used[i] is only -1 if the pixel at that location hasn't
- * been allocated yet. This is a sanity check required for proper
- * color allocation by the progressive image loader.
- * When colors[i] == 0 it indicates the slot is available for
- * allocation.
- */
-
- if (used[i] != FALSE) {
- if (colors[i] == 0) {
- defs[i].red = reds[i];
- defs[i].green = greens[i];
- defs[i].blue = blues[i];
-
- colors[i] = gdk_color_context_get_pixel(cc, reds[i], greens[i], blues[i], &bad_alloc);
-
- /* successfully allocated, store it */
-
- if (!bad_alloc) {
- defs[i].pixel = colors[i];
- allocated[ncols++] = colors[i];
- } else
- failed[nopen++] = i;
- }
+ gint i, k, idx;
+ gint cmapsize, ncols = 0, nopen = 0, counter = 0;
+ gint bad_alloc = FALSE;
+ gint failed[MAX_IMAGE_COLORS], allocated[MAX_IMAGE_COLORS];
+ GdkColor defs[MAX_IMAGE_COLORS], cmap[MAX_IMAGE_COLORS];
+ gint exact_col = 0, subst_col = 0, close_col = 0, black_col = 0;
+
+ g_assert (cc != NULL);
+ g_assert (reds != NULL);
+ g_assert (greens != NULL);
+ g_assert (blues != NULL);
+ g_assert (used != NULL);
+ g_assert (colors != NULL);
+ g_assert (nallocated != NULL);
+
+ memset (defs, 0, MAX_IMAGE_COLORS * sizeof (GdkColor));
+ memset (failed, 0, MAX_IMAGE_COLORS * sizeof (gint));
+ memset (allocated, 0, MAX_IMAGE_COLORS * sizeof (gint));
+
+ /* Will only have a value if used by the progressive image loader */
+
+ ncols = *nallocated;
+
+ *nallocated = 0;
+
+ /* First allocate all pixels */
+
+ for (i = 0; i < ncolors; i++)
+ {
+ /* used[i] is only -1 if the pixel at that location hasn't
+ * been allocated yet. This is a sanity check required for proper
+ * color allocation by the progressive image loader.
+ * When colors[i] == 0 it indicates the slot is available for
+ * allocation.
+ */
+
+ if (used[i] != FALSE)
+ {
+ if (colors[i] == 0)
+ {
+ defs[i].red = reds[i];
+ defs[i].green = greens[i];
+ defs[i].blue = blues[i];
+
+ colors[i] = gdk_color_context_get_pixel (cc, reds[i], greens[i], blues[i], &bad_alloc);
+
+ /* successfully allocated, store it */
+
+ if (!bad_alloc)
+ {
+ defs[i].pixel = colors[i];
+ allocated[ncols++] = colors[i];
+ }
+ else
+ failed[nopen++] = i;
+ }
#ifdef DEBUG
- else
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels_incremental: "
- "pixel at slot %i already allocated, skipping", i);
+ else
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels_incremental: "
+ "pixel at slot %i already allocated, skipping", i);
#endif
- }
}
+ }
- *nallocated = ncols;
+ *nallocated = ncols;
- if ((ncols == ncolors) || (nopen == 0)) {
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels_incremental: got all %i colors "
- "(%i colors allocated so far)",
- ncolors, cc->num_allocated);
+ if ((ncols == ncolors) || (nopen == 0))
+ {
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels_incremental: got all %i colors "
+ "(%i colors allocated so far)",
+ ncolors, cc->num_allocated);
- return;
- }
+ return;
+ }
- cmapsize = MIN(cc->num_colors, MAX_IMAGE_COLORS);
+ cmapsize = MIN (cc->num_colors, MAX_IMAGE_COLORS);
- if (cmapsize < 0) {
- g_warning("gdk_color_context_get_pixels_incremental: oops! "
- "No colors available images will look *really* ugly.");
- return;
- }
+ if (cmapsize < 0)
+ {
+ g_warning ("gdk_color_context_get_pixels_incremental: oops! "
+ "No colors available images will look *really* ugly.");
+ return;
+ }
#ifdef DEBUG
- exact_col = ncols;
+ exact_col = ncols;
#endif
- /* initialize pixels */
+ /* initialize pixels */
- for (i = 0; i < cmapsize; i++) {
- cmap[i].pixel = i;
- cmap[i].red = cmap[i].green = cmap[i].blue = 0;
- }
+ for (i = 0; i < cmapsize; i++)
+ {
+ cmap[i].pixel = i;
+ cmap[i].red = cmap[i].green = cmap[i].blue = 0;
+ }
- /* read and downscale */
+ /* read and downscale */
- my_x_query_colors(cc->colormap, cmap, cmapsize);
+ my_x_query_colors (cc->colormap, cmap, cmapsize);
- for (i = 0; i < cmapsize; i++) {
- cmap[i].red >>= 8;
- cmap[i].green >>= 8;
- cmap[i].blue >>= 8;
- }
+ for (i = 0; i < cmapsize; i++)
+ {
+ cmap[i].red >>= 8;
+ cmap[i].green >>= 8;
+ cmap[i].blue >>= 8;
+ }
- /* now match any unallocated colors */
+ /* now match any unallocated colors */
- counter = nopen;
- nopen = 0;
- idx = 0;
+ counter = nopen;
+ nopen = 0;
+ idx = 0;
- do {
- gint d, j, mdist, close, ri, gi, bi;
- gint rd, gd, bd;
+ do
+ {
+ gint d, j, mdist, close, ri, gi, bi;
+ gint rd, gd, bd;
- i = failed[idx];
+ i = failed[idx];
- mdist = 1000000;
- close = -1;
+ mdist = 1000000;
+ close = -1;
- /* store */
+ /* store */
- ri = reds[i];
- gi = greens[i];
- bi = blues[i];
+ ri = reds[i];
+ gi = greens[i];
+ bi = blues[i];
- for (j = 0; (j < cmapsize) && (mdist != 0); j++) {
- rd = ri - cmap[j].red;
- gd = gi - cmap[j].green;
- bd = bi - cmap[j].blue;
+ for (j = 0; (j < cmapsize) && (mdist != 0); j++)
+ {
+ rd = ri - cmap[j].red;
+ gd = gi - cmap[j].green;
+ bd = bi - cmap[j].blue;
- d = rd * rd + gd * gd + bd * bd;
+ d = rd * rd + gd * gd + bd * bd;
- if (d < mdist) {
- close = j;
- mdist = d;
- }
- }
+ if (d < mdist)
+ {
+ close = j;
+ mdist = d;
+ }
+ }
- if (close != -1) {
- rd = cmap[close].red;
- gd = cmap[close].green;
- bd = cmap[close].blue;
+ if (close != -1)
+ {
+ rd = cmap[close].red;
+ gd = cmap[close].green;
+ bd = cmap[close].blue;
- /* allocate */
+ /* allocate */
- colors[i] = gdk_color_context_get_pixel(cc, rd, gd, bd, &bad_alloc);
+ colors[i] = gdk_color_context_get_pixel (cc, rd, gd, bd, &bad_alloc);
- /* store */
+ /* store */
- if (!bad_alloc) {
- defs[i] = cmap[close];
- defs[i].pixel = colors[i];
- allocated[ncols++] = colors[i];
+ if (!bad_alloc)
+ {
+ defs[i] = cmap[close];
+ defs[i].pixel = colors[i];
+ allocated[ncols++] = colors[i];
#ifdef DEBUG
- close_col++;
+ close_col++;
#endif
- } else
- failed[nopen++] = i;
- } else
- failed[nopen++] = i;
- /* deal with in next stage if allocation failed */
- } while (++idx < counter);
-
- *nallocated = ncols;
-
- if ((ncols == ncolors) || (nopen == 0)) {
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels_incremental: "
- "got %i colors, %i exact and %i close "
- "(%i colors allocated so far)",
- ncolors, exact_col, close_col, cc->num_allocated);
-
- return;
+ }
+ else
+ failed[nopen++] = i;
}
+ else
+ failed[nopen++] = i;
+ /* deal with in next stage if allocation failed */
+ }
+ while (++idx < counter);
- /* map remaining unallocated pixels into colors we did get */
+ *nallocated = ncols;
- idx = 0;
+ if ((ncols == ncolors) || (nopen == 0))
+ {
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels_incremental: "
+ "got %i colors, %i exact and %i close "
+ "(%i colors allocated so far)",
+ ncolors, exact_col, close_col, cc->num_allocated);
- do {
- gint d, mdist, close, ri, gi, bi;
- gint j, rd, gd, bd;
+ return;
+ }
- i = failed[idx];
+ /* map remaining unallocated pixels into colors we did get */
- mdist = 1000000;
- close = -1;
+ idx = 0;
- ri = reds[i];
- gi = greens[i];
- bi = blues[i];
+ do
+ {
+ gint d, mdist, close, ri, gi, bi;
+ gint j, rd, gd, bd;
- /* search allocated colors */
+ i = failed[idx];
- for (j = 0; (j < ncols) && (mdist != 0); j++) {
- k = allocated[j];
+ mdist = 1000000;
+ close = -1;
- /* downscale */
+ ri = reds[i];
+ gi = greens[i];
+ bi = blues[i];
- rd = ri - defs[k].red;
- gd = gi - defs[k].green;
- bd = bi - defs[k].blue;
+ /* search allocated colors */
- d = rd * rd + gd * gd + bd * bd;
+ for (j = 0; (j < ncols) && (mdist != 0); j++)
+ {
+ k = allocated[j];
- if (d < mdist) {
- close = k;
- mdist = d;
- }
- }
+ /* downscale */
- if (close < 0) {
- /* too bad, map to black */
+ rd = ri - defs[k].red;
+ gd = gi - defs[k].green;
+ bd = bi - defs[k].blue;
- defs[i].pixel = cc->black_pixel;
- defs[i].red = defs[i].green = defs[i].blue = 0;
+ d = rd * rd + gd * gd + bd * bd;
+
+ if (d < mdist)
+ {
+ close = k;
+ mdist = d;
+ }
+ }
+
+ if (close < 0)
+ {
+ /* too bad, map to black */
+
+ defs[i].pixel = cc->black_pixel;
+ defs[i].red = defs[i].green = defs[i].blue = 0;
#ifdef DEBUG
- black_col++;
+ black_col++;
#endif
- } else {
- defs[i] = defs[close];
+ }
+ else
+ {
+ defs[i] = defs[close];
#ifdef DEBUG
- subst_col++;
+ subst_col++;
#endif
- }
+ }
- colors[i] = defs[i].pixel;
- } while (++idx < nopen);
+ colors[i] = defs[i].pixel;
+ }
+ while (++idx < nopen);
- if (gdk_debug_level >= 1)
- g_print("gdk_color_context_get_pixels_incremental: "
- "got %i colors, %i exact, %i close, %i substituted, %i to black "
- "(%i colors allocated so far)",
- ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
+ if (gdk_debug_level >= 1)
+ g_print ("gdk_color_context_get_pixels_incremental: "
+ "got %i colors, %i exact, %i close, %i substituted, %i to black "
+ "(%i colors allocated so far)",
+ ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
}
gint
-gdk_color_context_query_color(GdkColorContext *cc,
- GdkColor *color)
+gdk_color_context_query_color (GdkColorContext *cc,
+ GdkColor *color)
{
- return gdk_color_context_query_colors(cc, color, 1);
+ return gdk_color_context_query_colors (cc, color, 1);
}
gint
-gdk_color_context_query_colors(GdkColorContext *cc,
- GdkColor *colors,
- gint num_colors)
+gdk_color_context_query_colors (GdkColorContext *cc,
+ GdkColor *colors,
+ gint num_colors)
{
- gint i;
- GdkColor *tc;
+ gint i;
+ GdkColor *tc;
- g_assert(cc != NULL);
- g_assert(colors != NULL);
-
- switch (cc->mode) {
- case GDK_CC_MODE_BW:
- for (i = 0, tc = colors; i < num_colors; i++, tc++) {
- if (tc->pixel == cc->white_pixel)
- tc->red = tc->green = tc->blue = 65535;
- else
- tc->red = tc->green = tc->blue = 0;
- }
- break;
-
- case GDK_CC_MODE_TRUE:
- if (cc->clut == NULL)
- for (i = 0, tc = colors; i < num_colors; i++, tc++) {
- tc->red = (tc->pixel & cc->masks.red) * 65535 / cc->masks.red;
- tc->green = (tc->pixel & cc->masks.green) * 65535 / cc->masks.green;
- tc->blue = (tc->pixel & cc->masks.blue) * 65535 / cc->masks.blue;
- }
- else {
- my_x_query_colors(cc->colormap, colors, num_colors);
- return 1;
- }
- break;
-
- case GDK_CC_MODE_STD_CMAP:
- default:
- if (cc->cmap == NULL) {
- my_x_query_colors(cc->colormap, colors, num_colors);
- return 1;
- } else {
- gint first, last, half;
- gulong half_pixel;
-
- for (i = 0, tc = colors; i < num_colors; i++) {
- first = 0;
- last = cc->num_colors - 1;
-
- while (first <= last) {
- half = (first + last) / 2;
- half_pixel = cc->cmap[half].pixel;
-
- if (tc->pixel == half_pixel) {
- tc->red = cc->cmap[half].red;
- tc->green = cc->cmap[half].green;
- tc->blue = cc->cmap[half].blue;
- first = last + 1; /* false break */
- } else {
- if (tc->pixel > half_pixel)
- first = half + 1;
- else
- last = half - 1;
- }
- }
- }
- return 1;
- }
- break;
+ g_assert (cc != NULL);
+ g_assert (colors != NULL);
+
+ switch (cc->mode)
+ {
+ case GDK_CC_MODE_BW:
+ for (i = 0, tc = colors; i < num_colors; i++, tc++)
+ {
+ if (tc->pixel == cc->white_pixel)
+ tc->red = tc->green = tc->blue = 65535;
+ else
+ tc->red = tc->green = tc->blue = 0;
+ }
+ break;
+
+ case GDK_CC_MODE_TRUE:
+ if (cc->clut == NULL)
+ for (i = 0, tc = colors; i < num_colors; i++, tc++)
+ {
+ tc->red = (tc->pixel & cc->masks.red) * 65535 / cc->masks.red;
+ tc->green = (tc->pixel & cc->masks.green) * 65535 / cc->masks.green;
+ tc->blue = (tc->pixel & cc->masks.blue) * 65535 / cc->masks.blue;
+ }
+ else
+ {
+ my_x_query_colors (cc->colormap, colors, num_colors);
+ return 1;
+ }
+ break;
+
+ case GDK_CC_MODE_STD_CMAP:
+ default:
+ if (cc->cmap == NULL)
+ {
+ my_x_query_colors (cc->colormap, colors, num_colors);
+ return 1;
}
- return 1;
+ else
+ {
+ gint first, last, half;
+ gulong half_pixel;
+
+ for (i = 0, tc = colors; i < num_colors; i++)
+ {
+ first = 0;
+ last = cc->num_colors - 1;
+
+ while (first <= last)
+ {
+ half = (first + last) / 2;
+ half_pixel = cc->cmap[half].pixel;
+
+ if (tc->pixel == half_pixel)
+ {
+ tc->red = cc->cmap[half].red;
+ tc->green = cc->cmap[half].green;
+ tc->blue = cc->cmap[half].blue;
+ first = last + 1; /* false break */
+ }
+ else
+ {
+ if (tc->pixel > half_pixel)
+ first = half + 1;
+ else
+ last = half - 1;
+ }
+ }
+ }
+ return 1;
+ }
+ break;
+ }
+ return 1;
}
gint
-gdk_color_context_add_palette(GdkColorContext *cc,
- GdkColor *palette,
- gint num_palette)
+gdk_color_context_add_palette (GdkColorContext *cc,
+ GdkColor *palette,
+ gint num_palette)
{
- gint i, j, erg;
- gushort r, g, b;
- gulong pixel[1];
+ gint i, j, erg;
+ gushort r, g, b;
+ gulong pixel[1];
- g_assert(cc != NULL);
+ g_assert (cc != NULL);
- /* initialize this palette (will also erase previous palette as well) */
+ /* initialize this palette (will also erase previous palette as well) */
- init_palette(cc);
+ init_palette (cc);
- /* restore previous mode if we aren't adding a new palette */
+ /* restore previous mode if we aren't adding a new palette */
- if (num_palette == 0) {
- /* GDK_CC_MODE_STD_CMAP uses a hash table, so we'd better initialize one */
+ if (num_palette == 0)
+ {
+ /* GDK_CC_MODE_STD_CMAP uses a hash table, so we'd better initialize one */
- /* XXX: here, the hash table is already initialized */
+ /* XXX: here, the hash table is already initialized */
- return 0;
- }
+ return 0;
+ }
- /* Initialize a hash table for this palette (we need one for allocating
- * the pixels in the palette using the current settings)
- */
+ /* Initialize a hash table for this palette (we need one for allocating
+ * the pixels in the palette using the current settings)
+ */
- if (cc->color_hash == NULL)
- cc->color_hash = g_hash_table_new(hash_color, compare_colors);
+ if (cc->color_hash == NULL)
+ cc->color_hash = g_hash_table_new (hash_color, compare_colors);
- /* copy incoming palette */
+ /* copy incoming palette */
- cc->palette = g_new0(GdkColor, num_palette);
+ cc->palette = g_new0(GdkColor, num_palette);
- j = 0;
+ j = 0;
- for (i = 0; i < num_palette; i++) {
- erg = 0;
- pixel[0] = 0;
+ for (i = 0; i < num_palette; i++)
+ {
+ erg = 0;
+ pixel[0] = 0;
- /* try to allocate this color */
+ /* try to allocate this color */
- r = palette[i].red;
- g = palette[i].green;
- b = palette[i].blue;
+ r = palette[i].red;
+ g = palette[i].green;
+ b = palette[i].blue;
- gdk_color_context_get_pixels(cc, &r, &g, &b, 1, pixel, &erg);
+ gdk_color_context_get_pixels (cc, &r, &g, &b, 1, pixel, &erg);
- /* only store if we succeed */
+ /* only store if we succeed */
- if (erg) {
- /* store in palette */
+ if (erg)
+ {
+ /* store in palette */
- cc->palette[j].red = r;
- cc->palette[j].green = g;
- cc->palette[j].blue = b;
- cc->palette[j].pixel = pixel[0];
+ cc->palette[j].red = r;
+ cc->palette[j].green = g;
+ cc->palette[j].blue = b;
+ cc->palette[j].pixel = pixel[0];
- /* move to next slot */
+ /* move to next slot */
- j++;
- }
+ j++;
}
+ }
- /* resize to fit */
+ /* resize to fit */
- if (j != num_palette)
- cc->palette = g_realloc(cc->palette, j * sizeof(GdkColor));
+ if (j != num_palette)
+ cc->palette = g_realloc (cc->palette, j * sizeof (GdkColor));
- /* clear the hash table, we don't use it when dithering */
+ /* clear the hash table, we don't use it when dithering */
- if (cc->color_hash) {
- g_hash_table_destroy(cc->color_hash);
- cc->color_hash = NULL;
- }
+ if (cc->color_hash)
+ {
+ g_hash_table_destroy (cc->color_hash);
+ cc->color_hash = NULL;
+ }
- /* store real palette size */
+ /* store real palette size */
- cc->num_palette = j;
+ cc->num_palette = j;
- /* switch to palette mode */
+ /* switch to palette mode */
- cc->mode = GDK_CC_MODE_PALETTE;
+ cc->mode = GDK_CC_MODE_PALETTE;
- /* sort palette */
+ /* sort palette */
- qsort(cc->palette, cc->num_palette, sizeof(GdkColor), pixel_sort);
+ qsort (cc->palette, cc->num_palette, sizeof (GdkColor), pixel_sort);
- cc->fast_dither = NULL;
+ cc->fast_dither = NULL;
- return j;
+ return j;
}
void
-gdk_color_context_init_dither(GdkColorContext *cc)
+gdk_color_context_init_dither (GdkColorContext *cc)
{
- gint rr, gg, bb, err, erg, erb;
- gint success = FALSE;
+ gint rr, gg, bb, err, erg, erb;
+ gint success = FALSE;
- g_assert(cc != NULL);
+ g_assert (cc != NULL);
- /* now we can initialize the fast dither matrix */
+ /* now we can initialize the fast dither matrix */
- if(cc->fast_dither == NULL)
- cc->fast_dither = g_new(GdkColorContextDither, 1);
+ if (cc->fast_dither == NULL)
+ cc->fast_dither = g_new (GdkColorContextDither, 1);
- /* Fill it. We ignore unsuccessful allocations, they are just mapped
- * to black instead */
+ /* Fill it. We ignore unsuccessful allocations, they are just mapped
+ * to black instead */
- for (rr = 0; rr < 32; rr++)
- for (gg = 0; gg < 32; gg++)
- for (bb = 0; bb < 32; bb++) {
- err = (rr << 3) | (rr >> 2);
- erg = (gg << 3) | (gg >> 2);
- erb = (bb << 3) | (bb >> 2);
+ for (rr = 0; rr < 32; rr++)
+ for (gg = 0; gg < 32; gg++)
+ for (bb = 0; bb < 32; bb++)
+ {
+ err = (rr << 3) | (rr >> 2);
+ erg = (gg << 3) | (gg >> 2);
+ erb = (bb << 3) | (bb >> 2);
- cc->fast_dither->fast_rgb[rr][gg][bb] =
- gdk_color_context_get_index_from_palette(cc, &err, &erg, &erb, &success);
- cc->fast_dither->fast_err[rr][gg][bb] = err;
- cc->fast_dither->fast_erg[rr][gg][bb] = erg;
- cc->fast_dither->fast_erb[rr][gg][bb] = erb;
- }
+ cc->fast_dither->fast_rgb[rr][gg][bb] =
+ gdk_color_context_get_index_from_palette (cc, &err, &erg, &erb, &success);
+ cc->fast_dither->fast_err[rr][gg][bb] = err;
+ cc->fast_dither->fast_erg[rr][gg][bb] = erg;
+ cc->fast_dither->fast_erb[rr][gg][bb] = erb;
+ }
}
void
-gdk_color_context_free_dither(GdkColorContext *cc)
+gdk_color_context_free_dither (GdkColorContext *cc)
{
- g_assert(cc != NULL);
+ g_assert (cc != NULL);
- if (cc->fast_dither)
- g_free(cc->fast_dither);
+ if (cc->fast_dither)
+ g_free (cc->fast_dither);
- cc->fast_dither = NULL;
+ cc->fast_dither = NULL;
}
gulong
-gdk_color_context_get_pixel_from_palette(GdkColorContext *cc,
- gushort *red,
- gushort *green,
- gushort *blue,
- gint *failed)
+gdk_color_context_get_pixel_from_palette (GdkColorContext *cc,
+ gushort *red,
+ gushort *green,
+ gushort *blue,
+ gint *failed)
{
- gulong pixel = 0;
- gint dif, dr, dg, db, j = -1;
- gint mindif = 0x7fffffff;
- gint err = 0, erg = 0, erb = 0;
- gint i;
-
- g_assert(cc != NULL);
- g_assert(red != NULL);
- g_assert(green != NULL);
- g_assert(blue != NULL);
- g_assert(failed != NULL);
-
- *failed = FALSE;
-
- for (i = 0; i < cc->num_palette; i++) {
- dr = *red - cc->palette[i].red;
- dg = *green - cc->palette[i].green;
- db = *blue - cc->palette[i].blue;
-
- dif = dr * dr + dg * dg + db * db;
+ gulong pixel = 0;
+ gint dif, dr, dg, db, j = -1;
+ gint mindif = 0x7fffffff;
+ gint err = 0, erg = 0, erb = 0;
+ gint i;
+
+ g_assert (cc != NULL);
+ g_assert (red != NULL);
+ g_assert (green != NULL);
+ g_assert (blue != NULL);
+ g_assert (failed != NULL);
+
+ *failed = FALSE;
+
+ for (i = 0; i < cc->num_palette; i++)
+ {
+ dr = *red - cc->palette[i].red;
+ dg = *green - cc->palette[i].green;
+ db = *blue - cc->palette[i].blue;
+
+ dif = dr * dr + dg * dg + db * db;
- if (dif < mindif) {
- mindif = dif;
- j = i;
- pixel = cc->palette[i].pixel;
- err = dr;
- erg = dg;
- erb = db;
-
- if (mindif == 0)
- break;
- }
+ if (dif < mindif)
+ {
+ mindif = dif;
+ j = i;
+ pixel = cc->palette[i].pixel;
+ err = dr;
+ erg = dg;
+ erb = db;
+
+ if (mindif == 0)
+ break;
}
+ }
- /* we failed to map onto a color */
+ /* we failed to map onto a color */
- if (j == -1)
- *failed = TRUE;
- else {
- *red = ABS(err);
- *green = ABS(erg);
- *blue = ABS(erb);
- }
+ if (j == -1)
+ *failed = TRUE;
+ else
+ {
+ *red = ABS (err);
+ *green = ABS (erg);
+ *blue = ABS (erb);
+ }
- return pixel;
+ return pixel;
}
guchar
-gdk_color_context_get_index_from_palette(GdkColorContext *cc,
- gint *red,
- gint *green,
- gint *blue,
- gint *failed)
+gdk_color_context_get_index_from_palette (GdkColorContext *cc,
+ gint *red,
+ gint *green,
+ gint *blue,
+ gint *failed)
{
- gint dif, dr, dg, db, j = -1;
- gint mindif = 0x7fffffff;
- gint err = 0, erg = 0, erb = 0;
- gint i;
-
- g_assert(cc != NULL);
- g_assert(red != NULL);
- g_assert(green != NULL);
- g_assert(blue != NULL);
- g_assert(failed != NULL);
-
- *failed = FALSE;
-
- for (i = 0; i < cc->num_palette; i++) {
- dr = *red - cc->palette[i].red;
- dg = *green - cc->palette[i].green;
- db = *blue - cc->palette[i].blue;
-
- dif = dr * dr + dg * dg + db * db;
-
- if (dif < mindif) {
- mindif = dif;
- j = i;
- err = dr;
- erg = dg;
- erb = db;
-
- if (mindif == 0)
- break;
- }
+ gint dif, dr, dg, db, j = -1;
+ gint mindif = 0x7fffffff;
+ gint err = 0, erg = 0, erb = 0;
+ gint i;
+
+ g_assert (cc != NULL);
+ g_assert (red != NULL);
+ g_assert (green != NULL);
+ g_assert (blue != NULL);
+ g_assert (failed != NULL);
+
+ *failed = FALSE;
+
+ for (i = 0; i < cc->num_palette; i++)
+ {
+ dr = *red - cc->palette[i].red;
+ dg = *green - cc->palette[i].green;
+ db = *blue - cc->palette[i].blue;
+
+ dif = dr * dr + dg * dg + db * db;
+
+ if (dif < mindif)
+ {
+ mindif = dif;
+ j = i;
+ err = dr;
+ erg = dg;
+ erb = db;
+
+ if (mindif == 0)
+ break;
}
+ }
- /* we failed to map onto a color */
+ /* we failed to map onto a color */
- if (j == -1) {
- *failed = TRUE;
- j = 0;
- } else {
- /* return error fractions */
+ if (j == -1)
+ {
+ *failed = TRUE;
+ j = 0;
+ }
+ else
+ {
+ /* return error fractions */
- *red = err;
- *green = erg;
- *blue = erb;
- }
+ *red = err;
+ *green = erg;
+ *blue = erb;
+ }
- return j;
+ return j;
}