-static void
-render (GtkColorButton *color_button)
-{
- gint dark_r, dark_g, dark_b;
- gint light_r, light_g, light_b;
- gint i, j, rowstride;
- gint width, height;
- gint c1[3], c2[3];
- guchar *pixels;
- guint8 insensitive_r = 0;
- guint8 insensitive_g = 0;
- guint8 insensitive_b = 0;
-
- width = color_button->priv->draw_area->allocation.width;
- height = color_button->priv->draw_area->allocation.height;
- if (color_button->priv->pixbuf == NULL ||
- gdk_pixbuf_get_width (color_button->priv->pixbuf) != width ||
- gdk_pixbuf_get_height (color_button->priv->pixbuf) != height)
- {
- if (color_button->priv->pixbuf != NULL)
- g_object_unref (color_button->priv->pixbuf);
- color_button->priv->pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
- }
-
-
- /* Compute dark and light check colors */
-
- insensitive_r = GTK_WIDGET(color_button)->style->bg[GTK_STATE_INSENSITIVE].red >> 8;
- insensitive_g = GTK_WIDGET(color_button)->style->bg[GTK_STATE_INSENSITIVE].green >> 8;
- insensitive_b = GTK_WIDGET(color_button)->style->bg[GTK_STATE_INSENSITIVE].blue >> 8;
-
- if (color_button->priv->use_alpha)
- {
- dark_r = ((CHECK_DARK << 16) + (color_button->priv->color.red - CHECK_DARK) * color_button->priv->alpha) >> 24;
- dark_g = ((CHECK_DARK << 16) + (color_button->priv->color.green - CHECK_DARK) * color_button->priv->alpha) >> 24;
- dark_b = ((CHECK_DARK << 16) + (color_button->priv->color.blue - CHECK_DARK) * color_button->priv->alpha) >> 24;
-
- light_r = ((CHECK_LIGHT << 16) + (color_button->priv->color.red - CHECK_LIGHT) * color_button->priv->alpha) >> 24;
- light_g = ((CHECK_LIGHT << 16) + (color_button->priv->color.green - CHECK_LIGHT) * color_button->priv->alpha) >> 24;
- light_b = ((CHECK_LIGHT << 16) + (color_button->priv->color.blue - CHECK_LIGHT) * color_button->priv->alpha) >> 24;
- }
- else
- {
- dark_r = light_r = color_button->priv->color.red >> 8;
- dark_g = light_g = color_button->priv->color.green >> 8;
- dark_b = light_b = color_button->priv->color.blue >> 8;
- }
-
- /* Fill image buffer */
- pixels = gdk_pixbuf_get_pixels (color_button->priv->pixbuf);
- rowstride = gdk_pixbuf_get_rowstride (color_button->priv->pixbuf);
- for (j = 0; j < height; j++)
- {
- if ((j / CHECK_SIZE) & 1)
- {
- c1[0] = dark_r;
- c1[1] = dark_g;
- c1[2] = dark_b;
-
- c2[0] = light_r;
- c2[1] = light_g;
- c2[2] = light_b;
- }
- else
- {
- c1[0] = light_r;
- c1[1] = light_g;
- c1[2] = light_b;
-
- c2[0] = dark_r;
- c2[1] = dark_g;
- c2[2] = dark_b;
- }
-
- for (i = 0; i < width; i++)
- {
- if (!gtk_widget_is_sensitive (GTK_WIDGET (color_button)) && (i+j)%2)
- {
- *(pixels + j * rowstride + i * 3) = insensitive_r;
- *(pixels + j * rowstride + i * 3 + 1) = insensitive_g;
- *(pixels + j * rowstride + i * 3 + 2) = insensitive_b;
- }
- else if ((i / CHECK_SIZE) & 1)
- {
- *(pixels + j * rowstride + i * 3) = c1[0];
- *(pixels + j * rowstride + i * 3 + 1) = c1[1];
- *(pixels + j * rowstride + i * 3 + 2) = c1[2];
- }
- else
- {
- *(pixels + j * rowstride + i * 3) = c2[0];
- *(pixels + j * rowstride + i * 3 + 1) = c2[1];
- *(pixels + j * rowstride + i * 3 + 2) = c2[2];
- }
- }
- }