forked from AuroraMiddleware/gtk
Made the XCC stuff more accessible
This commit is contained in:
parent
4de2665e8c
commit
65e63db01e
@ -680,10 +680,6 @@ void gdk_color_context_get_pixels_incremental (GdkColorContext *cc,
|
|||||||
gulong *colors,
|
gulong *colors,
|
||||||
gint *nallocated);
|
gint *nallocated);
|
||||||
|
|
||||||
gint gdk_color_context_get_num_colors (GdkColorContext *cc);
|
|
||||||
gint gdk_color_context_get_depth (GdkColorContext *cc);
|
|
||||||
GdkColorContextMode gdk_color_context_get_mode (GdkColorContext *cc);
|
|
||||||
GdkVisual *gdk_color_context_get_visual (GdkColorContext *cc);
|
|
||||||
gint gdk_color_context_query_color (GdkColorContext *cc,
|
gint gdk_color_context_query_color (GdkColorContext *cc,
|
||||||
GdkColor *color);
|
GdkColor *color);
|
||||||
gint gdk_color_context_query_colors (GdkColorContext *cc,
|
gint gdk_color_context_query_colors (GdkColorContext *cc,
|
||||||
|
352
gdk/gdkcc.c
352
gdk/gdkcc.c
@ -126,14 +126,14 @@ my_x_query_colors(GdkColormap *colormap,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
query_colors(GdkColorContextPrivate *cc)
|
query_colors(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->cmap = g_new(GdkColor, cc->num_colors);
|
cc->cmap = g_new(GdkColor, cc->num_colors);
|
||||||
|
|
||||||
for (i = 0; i < cc->num_colors; i++)
|
for (i = 0; i < cc->num_colors; i++)
|
||||||
cc->cmap[i].pixel = cc->clut ? cc->clut[i] : cc->std_cmap.base_pixel + 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);
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ query_colors(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_bw(GdkColorContextPrivate *cc)
|
init_bw(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColor color;
|
GdkColor color;
|
||||||
|
|
||||||
@ -165,8 +165,9 @@ init_bw(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_gray(GdkColorContextPrivate *cc)
|
init_gray(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
GdkColor *clrs, *cstart;
|
GdkColor *clrs, *cstart;
|
||||||
gint i;
|
gint i;
|
||||||
gdouble dinc;
|
gdouble dinc;
|
||||||
@ -207,17 +208,17 @@ retrygray:
|
|||||||
g_free(cstart);
|
g_free(cstart);
|
||||||
|
|
||||||
/* XXX: is this the right thing to do? */
|
/* XXX: is this the right thing to do? */
|
||||||
cc->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP(cc->colormap);
|
ccp->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP(cc->colormap);
|
||||||
cc->std_cmap.base_pixel = 0;
|
ccp->std_cmap.base_pixel = 0;
|
||||||
cc->std_cmap.red_max = cc->num_colors - 1;
|
ccp->std_cmap.red_max = cc->num_colors - 1;
|
||||||
cc->std_cmap.green_max = 0;
|
ccp->std_cmap.green_max = 0;
|
||||||
cc->std_cmap.blue_max = 0;
|
ccp->std_cmap.blue_max = 0;
|
||||||
cc->std_cmap.red_mult = 1;
|
ccp->std_cmap.red_mult = 1;
|
||||||
cc->std_cmap.green_mult = 0;
|
ccp->std_cmap.green_mult = 0;
|
||||||
cc->std_cmap.blue_mult = 0;
|
ccp->std_cmap.blue_mult = 0;
|
||||||
|
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
|
|
||||||
query_colors(cc);
|
query_colors(cc);
|
||||||
|
|
||||||
@ -225,8 +226,9 @@ retrygray:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_color(GdkColorContextPrivate *cc)
|
init_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
gint cubeval;
|
gint cubeval;
|
||||||
|
|
||||||
cubeval = 1;
|
cubeval = 1;
|
||||||
@ -236,17 +238,17 @@ init_color(GdkColorContextPrivate *cc)
|
|||||||
|
|
||||||
cc->num_colors = cubeval * cubeval * cubeval;
|
cc->num_colors = cubeval * cubeval * cubeval;
|
||||||
|
|
||||||
cc->std_cmap.red_max = cubeval - 1;
|
ccp->std_cmap.red_max = cubeval - 1;
|
||||||
cc->std_cmap.green_max = cubeval - 1;
|
ccp->std_cmap.green_max = cubeval - 1;
|
||||||
cc->std_cmap.blue_max = cubeval - 1;
|
ccp->std_cmap.blue_max = cubeval - 1;
|
||||||
cc->std_cmap.red_mult = cubeval * cubeval;
|
ccp->std_cmap.red_mult = cubeval * cubeval;
|
||||||
cc->std_cmap.green_mult = cubeval;
|
ccp->std_cmap.green_mult = cubeval;
|
||||||
cc->std_cmap.blue_mult = 1;
|
ccp->std_cmap.blue_mult = 1;
|
||||||
cc->std_cmap.base_pixel = 0;
|
ccp->std_cmap.base_pixel = 0;
|
||||||
|
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->num_colors = DisplayCells(cc->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 */
|
||||||
|
|
||||||
@ -263,8 +265,9 @@ init_color(GdkColorContextPrivate *cc)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_true_color(GdkColorContextPrivate *cc)
|
init_true_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
gulong rmask, gmask, bmask;
|
gulong rmask, gmask, bmask;
|
||||||
|
|
||||||
cc->mode = GDK_CC_MODE_TRUE;
|
cc->mode = GDK_CC_MODE_TRUE;
|
||||||
@ -321,12 +324,12 @@ init_true_color(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
|
cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_direct_color(GdkColorContextPrivate *cc)
|
init_direct_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
gint n, count;
|
gint n, count;
|
||||||
GdkColor *clrs, *cstart;
|
GdkColor *clrs, *cstart;
|
||||||
@ -425,7 +428,7 @@ retrydirect:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_palette(GdkColorContextPrivate *cc)
|
init_palette(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
/* restore correct mode for this cc */
|
/* restore correct mode for this cc */
|
||||||
|
|
||||||
@ -479,17 +482,18 @@ GdkColorContext *
|
|||||||
gdk_color_context_new(GdkVisual *visual,
|
gdk_color_context_new(GdkVisual *visual,
|
||||||
GdkColormap *colormap)
|
GdkColormap *colormap)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp;
|
||||||
gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
|
gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
|
||||||
GdkColorContextPrivate *cc;
|
GdkColorContext *cc;
|
||||||
gint retry_count;
|
gint retry_count;
|
||||||
GdkColormap *default_colormap;
|
GdkColormap *default_colormap;
|
||||||
|
|
||||||
g_assert(visual != NULL);
|
g_assert(visual != NULL);
|
||||||
g_assert(colormap != NULL);
|
g_assert(colormap != NULL);
|
||||||
|
|
||||||
cc = g_new(GdkColorContextPrivate, 1);
|
cc = g_new(GdkColorContext, 1);
|
||||||
|
ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->xdisplay = gdk_display;
|
ccp->xdisplay = gdk_display;
|
||||||
cc->visual = visual;
|
cc->visual = visual;
|
||||||
cc->colormap = colormap;
|
cc->colormap = colormap;
|
||||||
cc->clut = NULL;
|
cc->clut = NULL;
|
||||||
@ -599,14 +603,15 @@ GdkColorContext *
|
|||||||
gdk_color_context_new_mono(GdkVisual *visual,
|
gdk_color_context_new_mono(GdkVisual *visual,
|
||||||
GdkColormap *colormap)
|
GdkColormap *colormap)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *cc;
|
GdkColorContextPrivate *ccp;
|
||||||
|
GdkColorContext *cc;
|
||||||
|
|
||||||
g_assert(visual != NULL);
|
g_assert(visual != NULL);
|
||||||
g_assert(colormap != NULL);
|
g_assert(colormap != NULL);
|
||||||
|
|
||||||
cc = g_new(GdkColorContextPrivate, 1);
|
cc = g_new(GdkColorContext, 1);
|
||||||
|
ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->xdisplay = gdk_display;
|
ccp->xdisplay = gdk_display;
|
||||||
cc->visual = visual;
|
cc->visual = visual;
|
||||||
cc->colormap = colormap;
|
cc->colormap = colormap;
|
||||||
cc->clut = NULL;
|
cc->clut = NULL;
|
||||||
@ -624,36 +629,32 @@ gdk_color_context_new_mono(GdkVisual *visual,
|
|||||||
void
|
void
|
||||||
gdk_color_context_free(GdkColorContext *cc)
|
gdk_color_context_free(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
if ((cc->visual->type == GDK_VISUAL_STATIC_COLOR)
|
||||||
|
|| (cc->visual->type == GDK_VISUAL_PSEUDO_COLOR)) {
|
||||||
if ((ccp->visual->type == GDK_VISUAL_STATIC_COLOR)
|
gdk_colors_free(cc->colormap, cc->clut, cc->num_allocated, 0);
|
||||||
|| (ccp->visual->type == GDK_VISUAL_PSEUDO_COLOR)) {
|
g_free(cc->clut);
|
||||||
gdk_colors_free(ccp->colormap, ccp->clut, ccp->num_allocated, 0);
|
} else if (cc->clut != NULL) {
|
||||||
g_free(ccp->clut);
|
gdk_colors_free(cc->colormap, cc->clut, cc->num_colors, 0);
|
||||||
} else if (ccp->clut != NULL) {
|
g_free(cc->clut);
|
||||||
gdk_colors_free(ccp->colormap, ccp->clut, ccp->num_colors, 0);
|
|
||||||
g_free(ccp->clut);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ccp->cmap != NULL)
|
if (cc->cmap != NULL)
|
||||||
g_free(ccp->cmap);
|
g_free(cc->cmap);
|
||||||
|
|
||||||
if (ccp->need_to_free_colormap)
|
if (cc->need_to_free_colormap)
|
||||||
gdk_colormap_destroy(ccp->colormap);
|
gdk_colormap_destroy(cc->colormap);
|
||||||
|
|
||||||
/* free any palette that has been associated with this GdkColorContext */
|
/* free any palette that has been associated with this GdkColorContext */
|
||||||
|
|
||||||
init_palette(ccp);
|
init_palette(cc);
|
||||||
|
|
||||||
if (ccp->color_hash) {
|
if (cc->color_hash) {
|
||||||
g_hash_table_foreach(ccp->color_hash,
|
g_hash_table_foreach(cc->color_hash,
|
||||||
free_hash_entry,
|
free_hash_entry,
|
||||||
NULL);
|
NULL);
|
||||||
g_hash_table_destroy(ccp->color_hash);
|
g_hash_table_destroy(cc->color_hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(cc);
|
g_free(cc);
|
||||||
@ -666,16 +667,13 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
gushort blue,
|
gushort blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
switch (ccp->mode) {
|
switch (cc->mode) {
|
||||||
case GDK_CC_MODE_BW: {
|
case GDK_CC_MODE_BW: {
|
||||||
gdouble value;
|
gdouble value;
|
||||||
|
|
||||||
@ -688,9 +686,9 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
+ blue / 65535.0 * 0.11;
|
+ blue / 65535.0 * 0.11;
|
||||||
|
|
||||||
if (value > 0.5)
|
if (value > 0.5)
|
||||||
return ccp->white_pixel;
|
return cc->white_pixel;
|
||||||
|
|
||||||
return ccp->black_pixel;
|
return cc->black_pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GDK_CC_MODE_MY_GRAY: {
|
case GDK_CC_MODE_MY_GRAY: {
|
||||||
@ -722,8 +720,8 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
|
|
||||||
iblue *= ccp->std_cmap.blue_mult;
|
iblue *= ccp->std_cmap.blue_mult;
|
||||||
|
|
||||||
if (ccp->clut != NULL)
|
if (cc->clut != NULL)
|
||||||
return ccp->clut[ccp->std_cmap.base_pixel + ired + igreen + iblue];
|
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;
|
||||||
}
|
}
|
||||||
@ -735,21 +733,21 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
green <<= 8;
|
green <<= 8;
|
||||||
blue <<= 8;
|
blue <<= 8;
|
||||||
|
|
||||||
if (ccp->clut == NULL) {
|
if (cc->clut == NULL) {
|
||||||
red >>= 16 - ccp->bits.red;
|
red >>= 16 - cc->bits.red;
|
||||||
green >>= 16 - ccp->bits.green;
|
green >>= 16 - cc->bits.green;
|
||||||
blue >>= 16 - ccp->bits.blue;
|
blue >>= 16 - cc->bits.blue;
|
||||||
|
|
||||||
ired = (red << ccp->shifts.red) & ccp->masks.red;
|
ired = (red << cc->shifts.red) & cc->masks.red;
|
||||||
igreen = (green << ccp->shifts.green) & ccp->masks.green;
|
igreen = (green << cc->shifts.green) & cc->masks.green;
|
||||||
iblue = (blue << ccp->shifts.blue) & ccp->masks.blue;
|
iblue = (blue << cc->shifts.blue) & cc->masks.blue;
|
||||||
|
|
||||||
return ired | igreen | iblue;
|
return ired | igreen | iblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ired = ccp->clut[red * ccp->max_entry / 65535] & ccp->masks.red;
|
ired = cc->clut[red * cc->max_entry / 65535] & cc->masks.red;
|
||||||
igreen = ccp->clut[green * ccp->max_entry / 65535] & ccp->masks.green;
|
igreen = cc->clut[green * cc->max_entry / 65535] & cc->masks.green;
|
||||||
iblue = ccp->clut[blue * ccp->max_entry / 65535] & ccp->masks.blue;
|
iblue = cc->clut[blue * cc->max_entry / 65535] & cc->masks.blue;
|
||||||
|
|
||||||
return ired | igreen | iblue;
|
return ired | igreen | iblue;
|
||||||
}
|
}
|
||||||
@ -770,7 +768,7 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
color.green = green;
|
color.green = green;
|
||||||
color.blue = blue;
|
color.blue = blue;
|
||||||
|
|
||||||
result = g_hash_table_lookup(ccp->color_hash, &color);
|
result = g_hash_table_lookup(cc->color_hash, &color);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
color.red = red;
|
color.red = red;
|
||||||
@ -778,7 +776,7 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
color.blue = blue;
|
color.blue = blue;
|
||||||
color.pixel = 0;
|
color.pixel = 0;
|
||||||
|
|
||||||
if (!gdk_color_alloc(ccp->colormap, &color))
|
if (!gdk_color_alloc(cc->colormap, &color))
|
||||||
*failed = TRUE;
|
*failed = TRUE;
|
||||||
else {
|
else {
|
||||||
GdkColor *cnew;
|
GdkColor *cnew;
|
||||||
@ -796,26 +794,26 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
* might be necessary for us to resize the CLUT.
|
* might be necessary for us to resize the CLUT.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ccp->num_allocated == ccp->max_colors) {
|
if (cc->num_allocated == cc->max_colors) {
|
||||||
ccp->max_colors *= 2;
|
cc->max_colors *= 2;
|
||||||
|
|
||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixel: "
|
g_print("gdk_color_context_get_pixel: "
|
||||||
"resizing CLUT to %i entries",
|
"resizing CLUT to %i entries",
|
||||||
ccp->max_colors);
|
cc->max_colors);
|
||||||
|
|
||||||
ccp->clut = g_realloc(ccp->clut,
|
cc->clut = g_realloc(cc->clut,
|
||||||
ccp->max_colors * sizeof(gulong));
|
cc->max_colors * sizeof(gulong));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Key and value are the same color structure */
|
/* Key and value are the same color structure */
|
||||||
|
|
||||||
cnew = g_new(GdkColor, 1);
|
cnew = g_new(GdkColor, 1);
|
||||||
*cnew = color;
|
*cnew = color;
|
||||||
g_hash_table_insert(ccp->color_hash, cnew, cnew);
|
g_hash_table_insert(cc->color_hash, cnew, cnew);
|
||||||
|
|
||||||
ccp->clut[ccp->num_allocated] = color.pixel;
|
cc->clut[cc->num_allocated] = color.pixel;
|
||||||
ccp->num_allocated++;
|
cc->num_allocated++;
|
||||||
return color.pixel;
|
return color.pixel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -834,7 +832,6 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
gulong *colors,
|
gulong *colors,
|
||||||
gint *nallocated)
|
gint *nallocated)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, k, idx;
|
gint i, k, idx;
|
||||||
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
||||||
gint bad_alloc = FALSE;
|
gint bad_alloc = FALSE;
|
||||||
@ -849,8 +846,6 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
g_assert(nallocated != NULL);
|
g_assert(nallocated != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
||||||
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
@ -894,7 +889,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if ((ncols == ncolors) || (nopen == 0)) {
|
if ((ncols == ncolors) || (nopen == 0)) {
|
||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got all %i colors; "
|
g_print("gdk_color_context_get_pixels: got all %i colors; "
|
||||||
"(%i colors allocated so far", ncolors, ccp->num_allocated);
|
"(%i colors allocated so far", ncolors, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -908,7 +903,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read up to MAX_IMAGE_COLORS colors of the current colormap */
|
/* read up to MAX_IMAGE_COLORS colors of the current colormap */
|
||||||
|
|
||||||
cmapsize = MIN(ccp->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 */
|
||||||
|
|
||||||
@ -932,7 +927,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read the colormap */
|
/* read the colormap */
|
||||||
|
|
||||||
my_x_query_colors(ccp->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 */
|
||||||
|
|
||||||
@ -1017,7 +1012,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got %i colors, %i exact and "
|
g_print("gdk_color_context_get_pixels: got %i colors, %i exact and "
|
||||||
"%i close (%i colors allocated so far)",
|
"%i close (%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1061,7 +1056,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (close < 0) {
|
if (close < 0) {
|
||||||
/* too bad, map to black */
|
/* too bad, map to black */
|
||||||
|
|
||||||
defs[i].pixel = ccp->black_pixel;
|
defs[i].pixel = cc->black_pixel;
|
||||||
defs[i].red = defs[i].green = defs[i].blue = 0;
|
defs[i].red = defs[i].green = defs[i].blue = 0;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
black_col++;
|
black_col++;
|
||||||
@ -1079,7 +1074,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
|
g_print("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
|
||||||
"%i substituted, %i to black (%i colors allocated so far)",
|
"%i substituted, %i to black (%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, subst_col, black_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1092,7 +1087,6 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
gulong *colors,
|
gulong *colors,
|
||||||
gint *nallocated)
|
gint *nallocated)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, k, idx;
|
gint i, k, idx;
|
||||||
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
||||||
gint bad_alloc = FALSE;
|
gint bad_alloc = FALSE;
|
||||||
@ -1108,8 +1102,6 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
g_assert(nallocated != NULL);
|
g_assert(nallocated != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
||||||
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
@ -1161,12 +1153,12 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels_incremental: got all %i colors "
|
g_print("gdk_color_context_get_pixels_incremental: got all %i colors "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, ccp->num_allocated);
|
ncolors, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmapsize = MIN(ccp->num_colors, MAX_IMAGE_COLORS);
|
cmapsize = MIN(cc->num_colors, MAX_IMAGE_COLORS);
|
||||||
|
|
||||||
if (cmapsize < 0) {
|
if (cmapsize < 0) {
|
||||||
g_warning("gdk_color_context_get_pixels_incremental: oops! "
|
g_warning("gdk_color_context_get_pixels_incremental: oops! "
|
||||||
@ -1187,7 +1179,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read and downscale */
|
/* read and downscale */
|
||||||
|
|
||||||
my_x_query_colors(ccp->colormap, cmap, cmapsize);
|
my_x_query_colors(cc->colormap, cmap, cmapsize);
|
||||||
|
|
||||||
for (i = 0; i < cmapsize; i++) {
|
for (i = 0; i < cmapsize; i++) {
|
||||||
cmap[i].red >>= 8;
|
cmap[i].red >>= 8;
|
||||||
@ -1261,7 +1253,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_print("gdk_color_context_get_pixels_incremental: "
|
g_print("gdk_color_context_get_pixels_incremental: "
|
||||||
"got %i colors, %i exact and %i close "
|
"got %i colors, %i exact and %i close "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1305,7 +1297,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
if (close < 0) {
|
if (close < 0) {
|
||||||
/* too bad, map to black */
|
/* too bad, map to black */
|
||||||
|
|
||||||
defs[i].pixel = ccp->black_pixel;
|
defs[i].pixel = cc->black_pixel;
|
||||||
defs[i].red = defs[i].green = defs[i].blue = 0;
|
defs[i].red = defs[i].green = defs[i].blue = 0;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
black_col++;
|
black_col++;
|
||||||
@ -1324,42 +1316,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_print("gdk_color_context_get_pixels_incremental: "
|
g_print("gdk_color_context_get_pixels_incremental: "
|
||||||
"got %i colors, %i exact, %i close, %i substituted, %i to black "
|
"got %i colors, %i exact, %i close, %i substituted, %i to black "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, subst_col, black_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_color_context_get_num_colors(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->num_colors;
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_color_context_get_depth(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ccp->visual->depth;
|
|
||||||
}
|
|
||||||
|
|
||||||
GdkColorContextMode
|
|
||||||
gdk_color_context_get_mode(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->mode;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
GdkVisual *
|
|
||||||
gdk_color_context_get_visual(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->visual;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
@ -1374,19 +1331,16 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
GdkColor *colors,
|
GdkColor *colors,
|
||||||
gint num_colors)
|
gint num_colors)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i;
|
gint i;
|
||||||
GdkColor *tc;
|
GdkColor *tc;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
switch (cc->mode) {
|
||||||
|
|
||||||
switch (ccp->mode) {
|
|
||||||
case GDK_CC_MODE_BW:
|
case GDK_CC_MODE_BW:
|
||||||
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
||||||
if (tc->pixel == ccp->white_pixel)
|
if (tc->pixel == cc->white_pixel)
|
||||||
tc->red = tc->green = tc->blue = 65535;
|
tc->red = tc->green = tc->blue = 65535;
|
||||||
else
|
else
|
||||||
tc->red = tc->green = tc->blue = 0;
|
tc->red = tc->green = tc->blue = 0;
|
||||||
@ -1394,22 +1348,22 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_CC_MODE_TRUE:
|
case GDK_CC_MODE_TRUE:
|
||||||
if (ccp->clut == NULL)
|
if (cc->clut == NULL)
|
||||||
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
||||||
tc->red = (tc->pixel & ccp->masks.red) * 65535 / ccp->masks.red;
|
tc->red = (tc->pixel & cc->masks.red) * 65535 / cc->masks.red;
|
||||||
tc->green = (tc->pixel & ccp->masks.green) * 65535 / ccp->masks.green;
|
tc->green = (tc->pixel & cc->masks.green) * 65535 / cc->masks.green;
|
||||||
tc->blue = (tc->pixel & ccp->masks.blue) * 65535 / ccp->masks.blue;
|
tc->blue = (tc->pixel & cc->masks.blue) * 65535 / cc->masks.blue;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my_x_query_colors(ccp->colormap, colors, num_colors);
|
my_x_query_colors(cc->colormap, colors, num_colors);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_CC_MODE_STD_CMAP:
|
case GDK_CC_MODE_STD_CMAP:
|
||||||
default:
|
default:
|
||||||
if (ccp->cmap == NULL) {
|
if (cc->cmap == NULL) {
|
||||||
my_x_query_colors(ccp->colormap, colors, num_colors);
|
my_x_query_colors(cc->colormap, colors, num_colors);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
gint first, last, half;
|
gint first, last, half;
|
||||||
@ -1417,16 +1371,16 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
|
|
||||||
for (i = 0, tc = colors; i < num_colors; i++) {
|
for (i = 0, tc = colors; i < num_colors; i++) {
|
||||||
first = 0;
|
first = 0;
|
||||||
last = ccp->num_colors - 1;
|
last = cc->num_colors - 1;
|
||||||
|
|
||||||
while (first <= last) {
|
while (first <= last) {
|
||||||
half = (first + last) / 2;
|
half = (first + last) / 2;
|
||||||
half_pixel = ccp->cmap[half].pixel;
|
half_pixel = cc->cmap[half].pixel;
|
||||||
|
|
||||||
if (tc->pixel == half_pixel) {
|
if (tc->pixel == half_pixel) {
|
||||||
tc->red = ccp->cmap[half].red;
|
tc->red = cc->cmap[half].red;
|
||||||
tc->green = ccp->cmap[half].green;
|
tc->green = cc->cmap[half].green;
|
||||||
tc->blue = ccp->cmap[half].blue;
|
tc->blue = cc->cmap[half].blue;
|
||||||
first = last + 1; /* false break */
|
first = last + 1; /* false break */
|
||||||
} else {
|
} else {
|
||||||
if (tc->pixel > half_pixel)
|
if (tc->pixel > half_pixel)
|
||||||
@ -1448,18 +1402,15 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
GdkColor *palette,
|
GdkColor *palette,
|
||||||
gint num_palette)
|
gint num_palette)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, j, erg;
|
gint i, j, erg;
|
||||||
gushort r, g, b;
|
gushort r, g, b;
|
||||||
gulong pixel[1];
|
gulong pixel[1];
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
/* initialize this palette (will also erase previous palette as well) */
|
/* initialize this palette (will also erase previous palette as well) */
|
||||||
|
|
||||||
init_palette(ccp);
|
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 */
|
||||||
|
|
||||||
@ -1475,12 +1426,12 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
* the pixels in the palette using the current settings)
|
* the pixels in the palette using the current settings)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ccp->color_hash == NULL)
|
if (cc->color_hash == NULL)
|
||||||
ccp->color_hash = g_hash_table_new(hash_color, compare_colors);
|
cc->color_hash = g_hash_table_new(hash_color, compare_colors);
|
||||||
|
|
||||||
/* copy incoming palette */
|
/* copy incoming palette */
|
||||||
|
|
||||||
ccp->palette = g_new0(GdkColor, num_palette);
|
cc->palette = g_new0(GdkColor, num_palette);
|
||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
|
|
||||||
@ -1501,10 +1452,10 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
if (erg) {
|
if (erg) {
|
||||||
/* store in palette */
|
/* store in palette */
|
||||||
|
|
||||||
ccp->palette[j].red = r;
|
cc->palette[j].red = r;
|
||||||
ccp->palette[j].green = g;
|
cc->palette[j].green = g;
|
||||||
ccp->palette[j].blue = b;
|
cc->palette[j].blue = b;
|
||||||
ccp->palette[j].pixel = pixel[0];
|
cc->palette[j].pixel = pixel[0];
|
||||||
|
|
||||||
/* move to next slot */
|
/* move to next slot */
|
||||||
|
|
||||||
@ -1515,28 +1466,28 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
/* resize to fit */
|
/* resize to fit */
|
||||||
|
|
||||||
if (j != num_palette)
|
if (j != num_palette)
|
||||||
ccp->palette = g_realloc(ccp->palette, j * sizeof(GdkColor));
|
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 (ccp->color_hash) {
|
if (cc->color_hash) {
|
||||||
g_hash_table_destroy(ccp->color_hash);
|
g_hash_table_destroy(cc->color_hash);
|
||||||
ccp->color_hash = NULL;
|
cc->color_hash = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store real palette size */
|
/* store real palette size */
|
||||||
|
|
||||||
ccp->num_palette = j;
|
cc->num_palette = j;
|
||||||
|
|
||||||
/* switch to palette mode */
|
/* switch to palette mode */
|
||||||
|
|
||||||
ccp->mode = GDK_CC_MODE_PALETTE;
|
cc->mode = GDK_CC_MODE_PALETTE;
|
||||||
|
|
||||||
/* sort palette */
|
/* sort palette */
|
||||||
|
|
||||||
qsort(ccp->palette, ccp->num_palette, sizeof(GdkColor), pixel_sort);
|
qsort(cc->palette, cc->num_palette, sizeof(GdkColor), pixel_sort);
|
||||||
|
|
||||||
ccp->fast_dither = NULL;
|
cc->fast_dither = NULL;
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
@ -1544,18 +1495,15 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
void
|
void
|
||||||
gdk_color_context_init_dither(GdkColorContext *cc)
|
gdk_color_context_init_dither(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint rr, gg, bb, err, erg, erb;
|
gint rr, gg, bb, err, erg, erb;
|
||||||
gint success = FALSE;
|
gint success = FALSE;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
/* now we can initialize the fast dither matrix */
|
/* now we can initialize the fast dither matrix */
|
||||||
|
|
||||||
if(ccp->fast_dither == NULL)
|
if(cc->fast_dither == NULL)
|
||||||
ccp->fast_dither = g_new(GdkColorContextDither, 1);
|
cc->fast_dither = g_new(GdkColorContextDither, 1);
|
||||||
|
|
||||||
/* Fill it. We ignore unsuccessful allocations, they are just mapped
|
/* Fill it. We ignore unsuccessful allocations, they are just mapped
|
||||||
* to black instead */
|
* to black instead */
|
||||||
@ -1567,27 +1515,23 @@ gdk_color_context_init_dither(GdkColorContext *cc)
|
|||||||
erg = (gg << 3) | (gg >> 2);
|
erg = (gg << 3) | (gg >> 2);
|
||||||
erb = (bb << 3) | (bb >> 2);
|
erb = (bb << 3) | (bb >> 2);
|
||||||
|
|
||||||
ccp->fast_dither->fast_rgb[rr][gg][bb] =
|
cc->fast_dither->fast_rgb[rr][gg][bb] =
|
||||||
gdk_color_context_get_index_from_palette(cc, &err, &erg, &erb, &success);
|
gdk_color_context_get_index_from_palette(cc, &err, &erg, &erb, &success);
|
||||||
ccp->fast_dither->fast_err[rr][gg][bb] = err;
|
cc->fast_dither->fast_err[rr][gg][bb] = err;
|
||||||
ccp->fast_dither->fast_erg[rr][gg][bb] = erg;
|
cc->fast_dither->fast_erg[rr][gg][bb] = erg;
|
||||||
ccp->fast_dither->fast_erb[rr][gg][bb] = erb;
|
cc->fast_dither->fast_erb[rr][gg][bb] = erb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_color_context_free_dither(GdkColorContext *cc)
|
gdk_color_context_free_dither(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
if (cc->fast_dither)
|
||||||
|
g_free(cc->fast_dither);
|
||||||
|
|
||||||
if (ccp->fast_dither)
|
cc->fast_dither = NULL;
|
||||||
g_free(ccp->fast_dither);
|
|
||||||
|
|
||||||
ccp->fast_dither = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gulong
|
gulong
|
||||||
@ -1597,7 +1541,6 @@ gdk_color_context_get_pixel_from_palette(GdkColorContext *cc,
|
|||||||
gushort *blue,
|
gushort *blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gulong pixel = 0;
|
gulong pixel = 0;
|
||||||
gint dif, dr, dg, db, j = -1;
|
gint dif, dr, dg, db, j = -1;
|
||||||
gint mindif = 0x7fffffff;
|
gint mindif = 0x7fffffff;
|
||||||
@ -1610,21 +1553,19 @@ gdk_color_context_get_pixel_from_palette(GdkColorContext *cc,
|
|||||||
g_assert(blue != NULL);
|
g_assert(blue != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < ccp->num_palette; i++) {
|
for (i = 0; i < cc->num_palette; i++) {
|
||||||
dr = *red - ccp->palette[i].red;
|
dr = *red - cc->palette[i].red;
|
||||||
dg = *green - ccp->palette[i].green;
|
dg = *green - cc->palette[i].green;
|
||||||
db = *blue - ccp->palette[i].blue;
|
db = *blue - cc->palette[i].blue;
|
||||||
|
|
||||||
dif = dr * dr + dg * dg + db * db;
|
dif = dr * dr + dg * dg + db * db;
|
||||||
|
|
||||||
if (dif < mindif) {
|
if (dif < mindif) {
|
||||||
mindif = dif;
|
mindif = dif;
|
||||||
j = i;
|
j = i;
|
||||||
pixel = ccp->palette[i].pixel;
|
pixel = cc->palette[i].pixel;
|
||||||
err = dr;
|
err = dr;
|
||||||
erg = dg;
|
erg = dg;
|
||||||
erb = db;
|
erb = db;
|
||||||
@ -1654,7 +1595,6 @@ gdk_color_context_get_index_from_palette(GdkColorContext *cc,
|
|||||||
gint *blue,
|
gint *blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint dif, dr, dg, db, j = -1;
|
gint dif, dr, dg, db, j = -1;
|
||||||
gint mindif = 0x7fffffff;
|
gint mindif = 0x7fffffff;
|
||||||
gint err = 0, erg = 0, erb = 0;
|
gint err = 0, erg = 0, erb = 0;
|
||||||
@ -1666,14 +1606,12 @@ gdk_color_context_get_index_from_palette(GdkColorContext *cc,
|
|||||||
g_assert(blue != NULL);
|
g_assert(blue != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < ccp->num_palette; i++) {
|
for (i = 0; i < cc->num_palette; i++) {
|
||||||
dr = *red - ccp->palette[i].red;
|
dr = *red - cc->palette[i].red;
|
||||||
dg = *green - ccp->palette[i].green;
|
dg = *green - cc->palette[i].green;
|
||||||
db = *blue - ccp->palette[i].blue;
|
db = *blue - cc->palette[i].blue;
|
||||||
|
|
||||||
dif = dr * dr + dg * dg + db * db;
|
dif = dr * dr + dg * dg + db * db;
|
||||||
|
|
||||||
|
@ -166,52 +166,7 @@ struct _GdkColorContextPrivate
|
|||||||
{
|
{
|
||||||
GdkColorContext color_context;
|
GdkColorContext color_context;
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
GdkVisual *visual;
|
|
||||||
GdkColormap *colormap;
|
|
||||||
|
|
||||||
gint num_colors; /* available no. of colors in colormap */
|
|
||||||
gint max_colors; /* maximum no. of colors */
|
|
||||||
gint num_allocated; /* no. of allocated colors */
|
|
||||||
|
|
||||||
GdkColorContextMode mode;
|
|
||||||
gint need_to_free_colormap;
|
|
||||||
GdkAtom std_cmap_atom;
|
|
||||||
|
|
||||||
XStandardColormap std_cmap;
|
XStandardColormap std_cmap;
|
||||||
gulong *clut; /* color look-up table */
|
|
||||||
GdkColor *cmap; /* colormap */
|
|
||||||
|
|
||||||
GHashTable *color_hash; /* hash table of allocated colors */
|
|
||||||
GdkColor *palette; /* preallocated palette */
|
|
||||||
gint num_palette; /* size of palette */
|
|
||||||
|
|
||||||
GdkColorContextDither *fast_dither; /* fast dither matrix */
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
gint red;
|
|
||||||
gint green;
|
|
||||||
gint blue;
|
|
||||||
} shifts;
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
gulong red;
|
|
||||||
gulong green;
|
|
||||||
gulong blue;
|
|
||||||
} masks;
|
|
||||||
|
|
||||||
|
|
||||||
struct {
|
|
||||||
gint red;
|
|
||||||
gint green;
|
|
||||||
gint blue;
|
|
||||||
} bits;
|
|
||||||
|
|
||||||
gulong max_entry;
|
|
||||||
|
|
||||||
gulong black_pixel;
|
|
||||||
gulong white_pixel;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -752,7 +752,51 @@ struct _GdkColorContextDither
|
|||||||
|
|
||||||
struct _GdkColorContext
|
struct _GdkColorContext
|
||||||
{
|
{
|
||||||
gint dummy;
|
GdkVisual *visual;
|
||||||
|
GdkColormap *colormap;
|
||||||
|
|
||||||
|
gint num_colors; /* available no. of colors in colormap */
|
||||||
|
gint max_colors; /* maximum no. of colors */
|
||||||
|
gint num_allocated; /* no. of allocated colors */
|
||||||
|
|
||||||
|
GdkColorContextMode mode;
|
||||||
|
gint need_to_free_colormap;
|
||||||
|
GdkAtom std_cmap_atom;
|
||||||
|
|
||||||
|
gulong *clut; /* color look-up table */
|
||||||
|
GdkColor *cmap; /* colormap */
|
||||||
|
|
||||||
|
GHashTable *color_hash; /* hash table of allocated colors */
|
||||||
|
GdkColor *palette; /* preallocated palette */
|
||||||
|
gint num_palette; /* size of palette */
|
||||||
|
|
||||||
|
GdkColorContextDither *fast_dither; /* fast dither matrix */
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
gint red;
|
||||||
|
gint green;
|
||||||
|
gint blue;
|
||||||
|
} shifts;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
gulong red;
|
||||||
|
gulong green;
|
||||||
|
gulong blue;
|
||||||
|
} masks;
|
||||||
|
|
||||||
|
|
||||||
|
struct {
|
||||||
|
gint red;
|
||||||
|
gint green;
|
||||||
|
gint blue;
|
||||||
|
} bits;
|
||||||
|
|
||||||
|
gulong max_entry;
|
||||||
|
|
||||||
|
gulong black_pixel;
|
||||||
|
gulong white_pixel;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Types for XInput support */
|
/* Types for XInput support */
|
||||||
|
@ -126,14 +126,14 @@ my_x_query_colors(GdkColormap *colormap,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
query_colors(GdkColorContextPrivate *cc)
|
query_colors(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->cmap = g_new(GdkColor, cc->num_colors);
|
cc->cmap = g_new(GdkColor, cc->num_colors);
|
||||||
|
|
||||||
for (i = 0; i < cc->num_colors; i++)
|
for (i = 0; i < cc->num_colors; i++)
|
||||||
cc->cmap[i].pixel = cc->clut ? cc->clut[i] : cc->std_cmap.base_pixel + 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);
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ query_colors(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_bw(GdkColorContextPrivate *cc)
|
init_bw(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColor color;
|
GdkColor color;
|
||||||
|
|
||||||
@ -165,8 +165,9 @@ init_bw(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_gray(GdkColorContextPrivate *cc)
|
init_gray(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
GdkColor *clrs, *cstart;
|
GdkColor *clrs, *cstart;
|
||||||
gint i;
|
gint i;
|
||||||
gdouble dinc;
|
gdouble dinc;
|
||||||
@ -207,17 +208,17 @@ retrygray:
|
|||||||
g_free(cstart);
|
g_free(cstart);
|
||||||
|
|
||||||
/* XXX: is this the right thing to do? */
|
/* XXX: is this the right thing to do? */
|
||||||
cc->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP(cc->colormap);
|
ccp->std_cmap.colormap = GDK_COLORMAP_XCOLORMAP(cc->colormap);
|
||||||
cc->std_cmap.base_pixel = 0;
|
ccp->std_cmap.base_pixel = 0;
|
||||||
cc->std_cmap.red_max = cc->num_colors - 1;
|
ccp->std_cmap.red_max = cc->num_colors - 1;
|
||||||
cc->std_cmap.green_max = 0;
|
ccp->std_cmap.green_max = 0;
|
||||||
cc->std_cmap.blue_max = 0;
|
ccp->std_cmap.blue_max = 0;
|
||||||
cc->std_cmap.red_mult = 1;
|
ccp->std_cmap.red_mult = 1;
|
||||||
cc->std_cmap.green_mult = 0;
|
ccp->std_cmap.green_mult = 0;
|
||||||
cc->std_cmap.blue_mult = 0;
|
ccp->std_cmap.blue_mult = 0;
|
||||||
|
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
|
|
||||||
query_colors(cc);
|
query_colors(cc);
|
||||||
|
|
||||||
@ -225,8 +226,9 @@ retrygray:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_color(GdkColorContextPrivate *cc)
|
init_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
gint cubeval;
|
gint cubeval;
|
||||||
|
|
||||||
cubeval = 1;
|
cubeval = 1;
|
||||||
@ -236,17 +238,17 @@ init_color(GdkColorContextPrivate *cc)
|
|||||||
|
|
||||||
cc->num_colors = cubeval * cubeval * cubeval;
|
cc->num_colors = cubeval * cubeval * cubeval;
|
||||||
|
|
||||||
cc->std_cmap.red_max = cubeval - 1;
|
ccp->std_cmap.red_max = cubeval - 1;
|
||||||
cc->std_cmap.green_max = cubeval - 1;
|
ccp->std_cmap.green_max = cubeval - 1;
|
||||||
cc->std_cmap.blue_max = cubeval - 1;
|
ccp->std_cmap.blue_max = cubeval - 1;
|
||||||
cc->std_cmap.red_mult = cubeval * cubeval;
|
ccp->std_cmap.red_mult = cubeval * cubeval;
|
||||||
cc->std_cmap.green_mult = cubeval;
|
ccp->std_cmap.green_mult = cubeval;
|
||||||
cc->std_cmap.blue_mult = 1;
|
ccp->std_cmap.blue_mult = 1;
|
||||||
cc->std_cmap.base_pixel = 0;
|
ccp->std_cmap.base_pixel = 0;
|
||||||
|
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->num_colors = DisplayCells(cc->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 */
|
||||||
|
|
||||||
@ -263,8 +265,9 @@ init_color(GdkColorContextPrivate *cc)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_true_color(GdkColorContextPrivate *cc)
|
init_true_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
gulong rmask, gmask, bmask;
|
gulong rmask, gmask, bmask;
|
||||||
|
|
||||||
cc->mode = GDK_CC_MODE_TRUE;
|
cc->mode = GDK_CC_MODE_TRUE;
|
||||||
@ -321,12 +324,12 @@ init_true_color(GdkColorContextPrivate *cc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
|
cc->num_colors = (cc->visual->red_mask | cc->visual->green_mask | cc->visual->blue_mask) + 1;
|
||||||
cc->white_pixel = WhitePixel(cc->xdisplay, gdk_screen);
|
cc->white_pixel = WhitePixel(ccp->xdisplay, gdk_screen);
|
||||||
cc->black_pixel = BlackPixel(cc->xdisplay, gdk_screen);
|
cc->black_pixel = BlackPixel(ccp->xdisplay, gdk_screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_direct_color(GdkColorContextPrivate *cc)
|
init_direct_color(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
gint n, count;
|
gint n, count;
|
||||||
GdkColor *clrs, *cstart;
|
GdkColor *clrs, *cstart;
|
||||||
@ -425,7 +428,7 @@ retrydirect:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
init_palette(GdkColorContextPrivate *cc)
|
init_palette(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
/* restore correct mode for this cc */
|
/* restore correct mode for this cc */
|
||||||
|
|
||||||
@ -479,17 +482,18 @@ GdkColorContext *
|
|||||||
gdk_color_context_new(GdkVisual *visual,
|
gdk_color_context_new(GdkVisual *visual,
|
||||||
GdkColormap *colormap)
|
GdkColormap *colormap)
|
||||||
{
|
{
|
||||||
|
GdkColorContextPrivate *ccp;
|
||||||
gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
|
gint use_private_colormap = FALSE; /* XXX: maybe restore full functionality later? */
|
||||||
GdkColorContextPrivate *cc;
|
GdkColorContext *cc;
|
||||||
gint retry_count;
|
gint retry_count;
|
||||||
GdkColormap *default_colormap;
|
GdkColormap *default_colormap;
|
||||||
|
|
||||||
g_assert(visual != NULL);
|
g_assert(visual != NULL);
|
||||||
g_assert(colormap != NULL);
|
g_assert(colormap != NULL);
|
||||||
|
|
||||||
cc = g_new(GdkColorContextPrivate, 1);
|
cc = g_new(GdkColorContext, 1);
|
||||||
|
ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->xdisplay = gdk_display;
|
ccp->xdisplay = gdk_display;
|
||||||
cc->visual = visual;
|
cc->visual = visual;
|
||||||
cc->colormap = colormap;
|
cc->colormap = colormap;
|
||||||
cc->clut = NULL;
|
cc->clut = NULL;
|
||||||
@ -599,14 +603,15 @@ GdkColorContext *
|
|||||||
gdk_color_context_new_mono(GdkVisual *visual,
|
gdk_color_context_new_mono(GdkVisual *visual,
|
||||||
GdkColormap *colormap)
|
GdkColormap *colormap)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *cc;
|
GdkColorContextPrivate *ccp;
|
||||||
|
GdkColorContext *cc;
|
||||||
|
|
||||||
g_assert(visual != NULL);
|
g_assert(visual != NULL);
|
||||||
g_assert(colormap != NULL);
|
g_assert(colormap != NULL);
|
||||||
|
|
||||||
cc = g_new(GdkColorContextPrivate, 1);
|
cc = g_new(GdkColorContext, 1);
|
||||||
|
ccp = (GdkColorContextPrivate *) cc;
|
||||||
cc->xdisplay = gdk_display;
|
ccp->xdisplay = gdk_display;
|
||||||
cc->visual = visual;
|
cc->visual = visual;
|
||||||
cc->colormap = colormap;
|
cc->colormap = colormap;
|
||||||
cc->clut = NULL;
|
cc->clut = NULL;
|
||||||
@ -624,36 +629,32 @@ gdk_color_context_new_mono(GdkVisual *visual,
|
|||||||
void
|
void
|
||||||
gdk_color_context_free(GdkColorContext *cc)
|
gdk_color_context_free(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
if ((cc->visual->type == GDK_VISUAL_STATIC_COLOR)
|
||||||
|
|| (cc->visual->type == GDK_VISUAL_PSEUDO_COLOR)) {
|
||||||
if ((ccp->visual->type == GDK_VISUAL_STATIC_COLOR)
|
gdk_colors_free(cc->colormap, cc->clut, cc->num_allocated, 0);
|
||||||
|| (ccp->visual->type == GDK_VISUAL_PSEUDO_COLOR)) {
|
g_free(cc->clut);
|
||||||
gdk_colors_free(ccp->colormap, ccp->clut, ccp->num_allocated, 0);
|
} else if (cc->clut != NULL) {
|
||||||
g_free(ccp->clut);
|
gdk_colors_free(cc->colormap, cc->clut, cc->num_colors, 0);
|
||||||
} else if (ccp->clut != NULL) {
|
g_free(cc->clut);
|
||||||
gdk_colors_free(ccp->colormap, ccp->clut, ccp->num_colors, 0);
|
|
||||||
g_free(ccp->clut);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ccp->cmap != NULL)
|
if (cc->cmap != NULL)
|
||||||
g_free(ccp->cmap);
|
g_free(cc->cmap);
|
||||||
|
|
||||||
if (ccp->need_to_free_colormap)
|
if (cc->need_to_free_colormap)
|
||||||
gdk_colormap_destroy(ccp->colormap);
|
gdk_colormap_destroy(cc->colormap);
|
||||||
|
|
||||||
/* free any palette that has been associated with this GdkColorContext */
|
/* free any palette that has been associated with this GdkColorContext */
|
||||||
|
|
||||||
init_palette(ccp);
|
init_palette(cc);
|
||||||
|
|
||||||
if (ccp->color_hash) {
|
if (cc->color_hash) {
|
||||||
g_hash_table_foreach(ccp->color_hash,
|
g_hash_table_foreach(cc->color_hash,
|
||||||
free_hash_entry,
|
free_hash_entry,
|
||||||
NULL);
|
NULL);
|
||||||
g_hash_table_destroy(ccp->color_hash);
|
g_hash_table_destroy(cc->color_hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(cc);
|
g_free(cc);
|
||||||
@ -666,16 +667,13 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
gushort blue,
|
gushort blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
switch (ccp->mode) {
|
switch (cc->mode) {
|
||||||
case GDK_CC_MODE_BW: {
|
case GDK_CC_MODE_BW: {
|
||||||
gdouble value;
|
gdouble value;
|
||||||
|
|
||||||
@ -688,9 +686,9 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
+ blue / 65535.0 * 0.11;
|
+ blue / 65535.0 * 0.11;
|
||||||
|
|
||||||
if (value > 0.5)
|
if (value > 0.5)
|
||||||
return ccp->white_pixel;
|
return cc->white_pixel;
|
||||||
|
|
||||||
return ccp->black_pixel;
|
return cc->black_pixel;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GDK_CC_MODE_MY_GRAY: {
|
case GDK_CC_MODE_MY_GRAY: {
|
||||||
@ -722,8 +720,8 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
|
|
||||||
iblue *= ccp->std_cmap.blue_mult;
|
iblue *= ccp->std_cmap.blue_mult;
|
||||||
|
|
||||||
if (ccp->clut != NULL)
|
if (cc->clut != NULL)
|
||||||
return ccp->clut[ccp->std_cmap.base_pixel + ired + igreen + iblue];
|
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;
|
||||||
}
|
}
|
||||||
@ -735,21 +733,21 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
green <<= 8;
|
green <<= 8;
|
||||||
blue <<= 8;
|
blue <<= 8;
|
||||||
|
|
||||||
if (ccp->clut == NULL) {
|
if (cc->clut == NULL) {
|
||||||
red >>= 16 - ccp->bits.red;
|
red >>= 16 - cc->bits.red;
|
||||||
green >>= 16 - ccp->bits.green;
|
green >>= 16 - cc->bits.green;
|
||||||
blue >>= 16 - ccp->bits.blue;
|
blue >>= 16 - cc->bits.blue;
|
||||||
|
|
||||||
ired = (red << ccp->shifts.red) & ccp->masks.red;
|
ired = (red << cc->shifts.red) & cc->masks.red;
|
||||||
igreen = (green << ccp->shifts.green) & ccp->masks.green;
|
igreen = (green << cc->shifts.green) & cc->masks.green;
|
||||||
iblue = (blue << ccp->shifts.blue) & ccp->masks.blue;
|
iblue = (blue << cc->shifts.blue) & cc->masks.blue;
|
||||||
|
|
||||||
return ired | igreen | iblue;
|
return ired | igreen | iblue;
|
||||||
}
|
}
|
||||||
|
|
||||||
ired = ccp->clut[red * ccp->max_entry / 65535] & ccp->masks.red;
|
ired = cc->clut[red * cc->max_entry / 65535] & cc->masks.red;
|
||||||
igreen = ccp->clut[green * ccp->max_entry / 65535] & ccp->masks.green;
|
igreen = cc->clut[green * cc->max_entry / 65535] & cc->masks.green;
|
||||||
iblue = ccp->clut[blue * ccp->max_entry / 65535] & ccp->masks.blue;
|
iblue = cc->clut[blue * cc->max_entry / 65535] & cc->masks.blue;
|
||||||
|
|
||||||
return ired | igreen | iblue;
|
return ired | igreen | iblue;
|
||||||
}
|
}
|
||||||
@ -770,7 +768,7 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
color.green = green;
|
color.green = green;
|
||||||
color.blue = blue;
|
color.blue = blue;
|
||||||
|
|
||||||
result = g_hash_table_lookup(ccp->color_hash, &color);
|
result = g_hash_table_lookup(cc->color_hash, &color);
|
||||||
|
|
||||||
if (!result) {
|
if (!result) {
|
||||||
color.red = red;
|
color.red = red;
|
||||||
@ -778,7 +776,7 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
color.blue = blue;
|
color.blue = blue;
|
||||||
color.pixel = 0;
|
color.pixel = 0;
|
||||||
|
|
||||||
if (!gdk_color_alloc(ccp->colormap, &color))
|
if (!gdk_color_alloc(cc->colormap, &color))
|
||||||
*failed = TRUE;
|
*failed = TRUE;
|
||||||
else {
|
else {
|
||||||
GdkColor *cnew;
|
GdkColor *cnew;
|
||||||
@ -796,26 +794,26 @@ gdk_color_context_get_pixel(GdkColorContext *cc,
|
|||||||
* might be necessary for us to resize the CLUT.
|
* might be necessary for us to resize the CLUT.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ccp->num_allocated == ccp->max_colors) {
|
if (cc->num_allocated == cc->max_colors) {
|
||||||
ccp->max_colors *= 2;
|
cc->max_colors *= 2;
|
||||||
|
|
||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixel: "
|
g_print("gdk_color_context_get_pixel: "
|
||||||
"resizing CLUT to %i entries",
|
"resizing CLUT to %i entries",
|
||||||
ccp->max_colors);
|
cc->max_colors);
|
||||||
|
|
||||||
ccp->clut = g_realloc(ccp->clut,
|
cc->clut = g_realloc(cc->clut,
|
||||||
ccp->max_colors * sizeof(gulong));
|
cc->max_colors * sizeof(gulong));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Key and value are the same color structure */
|
/* Key and value are the same color structure */
|
||||||
|
|
||||||
cnew = g_new(GdkColor, 1);
|
cnew = g_new(GdkColor, 1);
|
||||||
*cnew = color;
|
*cnew = color;
|
||||||
g_hash_table_insert(ccp->color_hash, cnew, cnew);
|
g_hash_table_insert(cc->color_hash, cnew, cnew);
|
||||||
|
|
||||||
ccp->clut[ccp->num_allocated] = color.pixel;
|
cc->clut[cc->num_allocated] = color.pixel;
|
||||||
ccp->num_allocated++;
|
cc->num_allocated++;
|
||||||
return color.pixel;
|
return color.pixel;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -834,7 +832,6 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
gulong *colors,
|
gulong *colors,
|
||||||
gint *nallocated)
|
gint *nallocated)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, k, idx;
|
gint i, k, idx;
|
||||||
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
||||||
gint bad_alloc = FALSE;
|
gint bad_alloc = FALSE;
|
||||||
@ -849,8 +846,6 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
g_assert(nallocated != NULL);
|
g_assert(nallocated != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
||||||
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
@ -894,7 +889,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if ((ncols == ncolors) || (nopen == 0)) {
|
if ((ncols == ncolors) || (nopen == 0)) {
|
||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got all %i colors; "
|
g_print("gdk_color_context_get_pixels: got all %i colors; "
|
||||||
"(%i colors allocated so far", ncolors, ccp->num_allocated);
|
"(%i colors allocated so far", ncolors, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -908,7 +903,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read up to MAX_IMAGE_COLORS colors of the current colormap */
|
/* read up to MAX_IMAGE_COLORS colors of the current colormap */
|
||||||
|
|
||||||
cmapsize = MIN(ccp->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 */
|
||||||
|
|
||||||
@ -932,7 +927,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read the colormap */
|
/* read the colormap */
|
||||||
|
|
||||||
my_x_query_colors(ccp->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 */
|
||||||
|
|
||||||
@ -1017,7 +1012,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got %i colors, %i exact and "
|
g_print("gdk_color_context_get_pixels: got %i colors, %i exact and "
|
||||||
"%i close (%i colors allocated so far)",
|
"%i close (%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1061,7 +1056,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (close < 0) {
|
if (close < 0) {
|
||||||
/* too bad, map to black */
|
/* too bad, map to black */
|
||||||
|
|
||||||
defs[i].pixel = ccp->black_pixel;
|
defs[i].pixel = cc->black_pixel;
|
||||||
defs[i].red = defs[i].green = defs[i].blue = 0;
|
defs[i].red = defs[i].green = defs[i].blue = 0;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
black_col++;
|
black_col++;
|
||||||
@ -1079,7 +1074,7 @@ gdk_color_context_get_pixels(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
|
g_print("gdk_color_context_get_pixels: got %i colors, %i exact, %i close, "
|
||||||
"%i substituted, %i to black (%i colors allocated so far)",
|
"%i substituted, %i to black (%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, subst_col, black_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -1092,7 +1087,6 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
gulong *colors,
|
gulong *colors,
|
||||||
gint *nallocated)
|
gint *nallocated)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, k, idx;
|
gint i, k, idx;
|
||||||
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
gint cmapsize, ncols = 0, nopen = 0, counter = 0;
|
||||||
gint bad_alloc = FALSE;
|
gint bad_alloc = FALSE;
|
||||||
@ -1108,8 +1102,6 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
g_assert(nallocated != NULL);
|
g_assert(nallocated != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
memset(defs, 0, MAX_IMAGE_COLORS * sizeof(GdkColor));
|
||||||
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(failed, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
memset(allocated, 0, MAX_IMAGE_COLORS * sizeof(gint));
|
||||||
@ -1161,12 +1153,12 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
if (gdk_debug_level >= 1)
|
if (gdk_debug_level >= 1)
|
||||||
g_print("gdk_color_context_get_pixels_incremental: got all %i colors "
|
g_print("gdk_color_context_get_pixels_incremental: got all %i colors "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, ccp->num_allocated);
|
ncolors, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmapsize = MIN(ccp->num_colors, MAX_IMAGE_COLORS);
|
cmapsize = MIN(cc->num_colors, MAX_IMAGE_COLORS);
|
||||||
|
|
||||||
if (cmapsize < 0) {
|
if (cmapsize < 0) {
|
||||||
g_warning("gdk_color_context_get_pixels_incremental: oops! "
|
g_warning("gdk_color_context_get_pixels_incremental: oops! "
|
||||||
@ -1187,7 +1179,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
|
|
||||||
/* read and downscale */
|
/* read and downscale */
|
||||||
|
|
||||||
my_x_query_colors(ccp->colormap, cmap, cmapsize);
|
my_x_query_colors(cc->colormap, cmap, cmapsize);
|
||||||
|
|
||||||
for (i = 0; i < cmapsize; i++) {
|
for (i = 0; i < cmapsize; i++) {
|
||||||
cmap[i].red >>= 8;
|
cmap[i].red >>= 8;
|
||||||
@ -1261,7 +1253,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_print("gdk_color_context_get_pixels_incremental: "
|
g_print("gdk_color_context_get_pixels_incremental: "
|
||||||
"got %i colors, %i exact and %i close "
|
"got %i colors, %i exact and %i close "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, cc->num_allocated);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1305,7 +1297,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
if (close < 0) {
|
if (close < 0) {
|
||||||
/* too bad, map to black */
|
/* too bad, map to black */
|
||||||
|
|
||||||
defs[i].pixel = ccp->black_pixel;
|
defs[i].pixel = cc->black_pixel;
|
||||||
defs[i].red = defs[i].green = defs[i].blue = 0;
|
defs[i].red = defs[i].green = defs[i].blue = 0;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
black_col++;
|
black_col++;
|
||||||
@ -1324,42 +1316,7 @@ gdk_color_context_get_pixels_incremental(GdkColorContext *cc,
|
|||||||
g_print("gdk_color_context_get_pixels_incremental: "
|
g_print("gdk_color_context_get_pixels_incremental: "
|
||||||
"got %i colors, %i exact, %i close, %i substituted, %i to black "
|
"got %i colors, %i exact, %i close, %i substituted, %i to black "
|
||||||
"(%i colors allocated so far)",
|
"(%i colors allocated so far)",
|
||||||
ncolors, exact_col, close_col, subst_col, black_col, ccp->num_allocated);
|
ncolors, exact_col, close_col, subst_col, black_col, cc->num_allocated);
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_color_context_get_num_colors(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->num_colors;
|
|
||||||
}
|
|
||||||
|
|
||||||
gint
|
|
||||||
gdk_color_context_get_depth(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
GdkColorContextPrivate *ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ccp->visual->depth;
|
|
||||||
}
|
|
||||||
|
|
||||||
GdkColorContextMode
|
|
||||||
gdk_color_context_get_mode(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->mode;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
GdkVisual *
|
|
||||||
gdk_color_context_get_visual(GdkColorContext *cc)
|
|
||||||
{
|
|
||||||
g_assert(cc != NULL);
|
|
||||||
|
|
||||||
return ((GdkColorContextPrivate *) cc)->visual;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
gint
|
||||||
@ -1374,19 +1331,16 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
GdkColor *colors,
|
GdkColor *colors,
|
||||||
gint num_colors)
|
gint num_colors)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i;
|
gint i;
|
||||||
GdkColor *tc;
|
GdkColor *tc;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
g_assert(colors != NULL);
|
g_assert(colors != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
switch (cc->mode) {
|
||||||
|
|
||||||
switch (ccp->mode) {
|
|
||||||
case GDK_CC_MODE_BW:
|
case GDK_CC_MODE_BW:
|
||||||
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
||||||
if (tc->pixel == ccp->white_pixel)
|
if (tc->pixel == cc->white_pixel)
|
||||||
tc->red = tc->green = tc->blue = 65535;
|
tc->red = tc->green = tc->blue = 65535;
|
||||||
else
|
else
|
||||||
tc->red = tc->green = tc->blue = 0;
|
tc->red = tc->green = tc->blue = 0;
|
||||||
@ -1394,22 +1348,22 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_CC_MODE_TRUE:
|
case GDK_CC_MODE_TRUE:
|
||||||
if (ccp->clut == NULL)
|
if (cc->clut == NULL)
|
||||||
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
for (i = 0, tc = colors; i < num_colors; i++, tc++) {
|
||||||
tc->red = (tc->pixel & ccp->masks.red) * 65535 / ccp->masks.red;
|
tc->red = (tc->pixel & cc->masks.red) * 65535 / cc->masks.red;
|
||||||
tc->green = (tc->pixel & ccp->masks.green) * 65535 / ccp->masks.green;
|
tc->green = (tc->pixel & cc->masks.green) * 65535 / cc->masks.green;
|
||||||
tc->blue = (tc->pixel & ccp->masks.blue) * 65535 / ccp->masks.blue;
|
tc->blue = (tc->pixel & cc->masks.blue) * 65535 / cc->masks.blue;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
my_x_query_colors(ccp->colormap, colors, num_colors);
|
my_x_query_colors(cc->colormap, colors, num_colors);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_CC_MODE_STD_CMAP:
|
case GDK_CC_MODE_STD_CMAP:
|
||||||
default:
|
default:
|
||||||
if (ccp->cmap == NULL) {
|
if (cc->cmap == NULL) {
|
||||||
my_x_query_colors(ccp->colormap, colors, num_colors);
|
my_x_query_colors(cc->colormap, colors, num_colors);
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
gint first, last, half;
|
gint first, last, half;
|
||||||
@ -1417,16 +1371,16 @@ gdk_color_context_query_colors(GdkColorContext *cc,
|
|||||||
|
|
||||||
for (i = 0, tc = colors; i < num_colors; i++) {
|
for (i = 0, tc = colors; i < num_colors; i++) {
|
||||||
first = 0;
|
first = 0;
|
||||||
last = ccp->num_colors - 1;
|
last = cc->num_colors - 1;
|
||||||
|
|
||||||
while (first <= last) {
|
while (first <= last) {
|
||||||
half = (first + last) / 2;
|
half = (first + last) / 2;
|
||||||
half_pixel = ccp->cmap[half].pixel;
|
half_pixel = cc->cmap[half].pixel;
|
||||||
|
|
||||||
if (tc->pixel == half_pixel) {
|
if (tc->pixel == half_pixel) {
|
||||||
tc->red = ccp->cmap[half].red;
|
tc->red = cc->cmap[half].red;
|
||||||
tc->green = ccp->cmap[half].green;
|
tc->green = cc->cmap[half].green;
|
||||||
tc->blue = ccp->cmap[half].blue;
|
tc->blue = cc->cmap[half].blue;
|
||||||
first = last + 1; /* false break */
|
first = last + 1; /* false break */
|
||||||
} else {
|
} else {
|
||||||
if (tc->pixel > half_pixel)
|
if (tc->pixel > half_pixel)
|
||||||
@ -1448,18 +1402,15 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
GdkColor *palette,
|
GdkColor *palette,
|
||||||
gint num_palette)
|
gint num_palette)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint i, j, erg;
|
gint i, j, erg;
|
||||||
gushort r, g, b;
|
gushort r, g, b;
|
||||||
gulong pixel[1];
|
gulong pixel[1];
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
/* initialize this palette (will also erase previous palette as well) */
|
/* initialize this palette (will also erase previous palette as well) */
|
||||||
|
|
||||||
init_palette(ccp);
|
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 */
|
||||||
|
|
||||||
@ -1475,12 +1426,12 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
* the pixels in the palette using the current settings)
|
* the pixels in the palette using the current settings)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ccp->color_hash == NULL)
|
if (cc->color_hash == NULL)
|
||||||
ccp->color_hash = g_hash_table_new(hash_color, compare_colors);
|
cc->color_hash = g_hash_table_new(hash_color, compare_colors);
|
||||||
|
|
||||||
/* copy incoming palette */
|
/* copy incoming palette */
|
||||||
|
|
||||||
ccp->palette = g_new0(GdkColor, num_palette);
|
cc->palette = g_new0(GdkColor, num_palette);
|
||||||
|
|
||||||
j = 0;
|
j = 0;
|
||||||
|
|
||||||
@ -1501,10 +1452,10 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
if (erg) {
|
if (erg) {
|
||||||
/* store in palette */
|
/* store in palette */
|
||||||
|
|
||||||
ccp->palette[j].red = r;
|
cc->palette[j].red = r;
|
||||||
ccp->palette[j].green = g;
|
cc->palette[j].green = g;
|
||||||
ccp->palette[j].blue = b;
|
cc->palette[j].blue = b;
|
||||||
ccp->palette[j].pixel = pixel[0];
|
cc->palette[j].pixel = pixel[0];
|
||||||
|
|
||||||
/* move to next slot */
|
/* move to next slot */
|
||||||
|
|
||||||
@ -1515,28 +1466,28 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
/* resize to fit */
|
/* resize to fit */
|
||||||
|
|
||||||
if (j != num_palette)
|
if (j != num_palette)
|
||||||
ccp->palette = g_realloc(ccp->palette, j * sizeof(GdkColor));
|
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 (ccp->color_hash) {
|
if (cc->color_hash) {
|
||||||
g_hash_table_destroy(ccp->color_hash);
|
g_hash_table_destroy(cc->color_hash);
|
||||||
ccp->color_hash = NULL;
|
cc->color_hash = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* store real palette size */
|
/* store real palette size */
|
||||||
|
|
||||||
ccp->num_palette = j;
|
cc->num_palette = j;
|
||||||
|
|
||||||
/* switch to palette mode */
|
/* switch to palette mode */
|
||||||
|
|
||||||
ccp->mode = GDK_CC_MODE_PALETTE;
|
cc->mode = GDK_CC_MODE_PALETTE;
|
||||||
|
|
||||||
/* sort palette */
|
/* sort palette */
|
||||||
|
|
||||||
qsort(ccp->palette, ccp->num_palette, sizeof(GdkColor), pixel_sort);
|
qsort(cc->palette, cc->num_palette, sizeof(GdkColor), pixel_sort);
|
||||||
|
|
||||||
ccp->fast_dither = NULL;
|
cc->fast_dither = NULL;
|
||||||
|
|
||||||
return j;
|
return j;
|
||||||
}
|
}
|
||||||
@ -1544,18 +1495,15 @@ gdk_color_context_add_palette(GdkColorContext *cc,
|
|||||||
void
|
void
|
||||||
gdk_color_context_init_dither(GdkColorContext *cc)
|
gdk_color_context_init_dither(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint rr, gg, bb, err, erg, erb;
|
gint rr, gg, bb, err, erg, erb;
|
||||||
gint success = FALSE;
|
gint success = FALSE;
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
/* now we can initialize the fast dither matrix */
|
/* now we can initialize the fast dither matrix */
|
||||||
|
|
||||||
if(ccp->fast_dither == NULL)
|
if(cc->fast_dither == NULL)
|
||||||
ccp->fast_dither = g_new(GdkColorContextDither, 1);
|
cc->fast_dither = g_new(GdkColorContextDither, 1);
|
||||||
|
|
||||||
/* Fill it. We ignore unsuccessful allocations, they are just mapped
|
/* Fill it. We ignore unsuccessful allocations, they are just mapped
|
||||||
* to black instead */
|
* to black instead */
|
||||||
@ -1567,27 +1515,23 @@ gdk_color_context_init_dither(GdkColorContext *cc)
|
|||||||
erg = (gg << 3) | (gg >> 2);
|
erg = (gg << 3) | (gg >> 2);
|
||||||
erb = (bb << 3) | (bb >> 2);
|
erb = (bb << 3) | (bb >> 2);
|
||||||
|
|
||||||
ccp->fast_dither->fast_rgb[rr][gg][bb] =
|
cc->fast_dither->fast_rgb[rr][gg][bb] =
|
||||||
gdk_color_context_get_index_from_palette(cc, &err, &erg, &erb, &success);
|
gdk_color_context_get_index_from_palette(cc, &err, &erg, &erb, &success);
|
||||||
ccp->fast_dither->fast_err[rr][gg][bb] = err;
|
cc->fast_dither->fast_err[rr][gg][bb] = err;
|
||||||
ccp->fast_dither->fast_erg[rr][gg][bb] = erg;
|
cc->fast_dither->fast_erg[rr][gg][bb] = erg;
|
||||||
ccp->fast_dither->fast_erb[rr][gg][bb] = erb;
|
cc->fast_dither->fast_erb[rr][gg][bb] = erb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
gdk_color_context_free_dither(GdkColorContext *cc)
|
gdk_color_context_free_dither(GdkColorContext *cc)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
|
|
||||||
g_assert(cc != NULL);
|
g_assert(cc != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
if (cc->fast_dither)
|
||||||
|
g_free(cc->fast_dither);
|
||||||
|
|
||||||
if (ccp->fast_dither)
|
cc->fast_dither = NULL;
|
||||||
g_free(ccp->fast_dither);
|
|
||||||
|
|
||||||
ccp->fast_dither = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gulong
|
gulong
|
||||||
@ -1597,7 +1541,6 @@ gdk_color_context_get_pixel_from_palette(GdkColorContext *cc,
|
|||||||
gushort *blue,
|
gushort *blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gulong pixel = 0;
|
gulong pixel = 0;
|
||||||
gint dif, dr, dg, db, j = -1;
|
gint dif, dr, dg, db, j = -1;
|
||||||
gint mindif = 0x7fffffff;
|
gint mindif = 0x7fffffff;
|
||||||
@ -1610,21 +1553,19 @@ gdk_color_context_get_pixel_from_palette(GdkColorContext *cc,
|
|||||||
g_assert(blue != NULL);
|
g_assert(blue != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < ccp->num_palette; i++) {
|
for (i = 0; i < cc->num_palette; i++) {
|
||||||
dr = *red - ccp->palette[i].red;
|
dr = *red - cc->palette[i].red;
|
||||||
dg = *green - ccp->palette[i].green;
|
dg = *green - cc->palette[i].green;
|
||||||
db = *blue - ccp->palette[i].blue;
|
db = *blue - cc->palette[i].blue;
|
||||||
|
|
||||||
dif = dr * dr + dg * dg + db * db;
|
dif = dr * dr + dg * dg + db * db;
|
||||||
|
|
||||||
if (dif < mindif) {
|
if (dif < mindif) {
|
||||||
mindif = dif;
|
mindif = dif;
|
||||||
j = i;
|
j = i;
|
||||||
pixel = ccp->palette[i].pixel;
|
pixel = cc->palette[i].pixel;
|
||||||
err = dr;
|
err = dr;
|
||||||
erg = dg;
|
erg = dg;
|
||||||
erb = db;
|
erb = db;
|
||||||
@ -1654,7 +1595,6 @@ gdk_color_context_get_index_from_palette(GdkColorContext *cc,
|
|||||||
gint *blue,
|
gint *blue,
|
||||||
gint *failed)
|
gint *failed)
|
||||||
{
|
{
|
||||||
GdkColorContextPrivate *ccp;
|
|
||||||
gint dif, dr, dg, db, j = -1;
|
gint dif, dr, dg, db, j = -1;
|
||||||
gint mindif = 0x7fffffff;
|
gint mindif = 0x7fffffff;
|
||||||
gint err = 0, erg = 0, erb = 0;
|
gint err = 0, erg = 0, erb = 0;
|
||||||
@ -1666,14 +1606,12 @@ gdk_color_context_get_index_from_palette(GdkColorContext *cc,
|
|||||||
g_assert(blue != NULL);
|
g_assert(blue != NULL);
|
||||||
g_assert(failed != NULL);
|
g_assert(failed != NULL);
|
||||||
|
|
||||||
ccp = (GdkColorContextPrivate *) cc;
|
|
||||||
|
|
||||||
*failed = FALSE;
|
*failed = FALSE;
|
||||||
|
|
||||||
for (i = 0; i < ccp->num_palette; i++) {
|
for (i = 0; i < cc->num_palette; i++) {
|
||||||
dr = *red - ccp->palette[i].red;
|
dr = *red - cc->palette[i].red;
|
||||||
dg = *green - ccp->palette[i].green;
|
dg = *green - cc->palette[i].green;
|
||||||
db = *blue - ccp->palette[i].blue;
|
db = *blue - cc->palette[i].blue;
|
||||||
|
|
||||||
dif = dr * dr + dg * dg + db * db;
|
dif = dr * dr + dg * dg + db * db;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user