static void draw_shadow (GdkPixmap *pixmap, int x, int y, int width, int height) { GdkPixbuf *shadow; int i, alpha = 0, max; shadow = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height); gdk_pixbuf_fill (shadow, 0x00000000); max = MAX (width / 2, height / 2); for (i = 1; i < max; i++) { _gdk_pixbuf_draw_rectangle (shadow, i, alpha); alpha += 12; alpha = MIN (alpha, 255); } gdk_pixbuf_render_to_drawable_alpha (shadow, pixmap, 0, 0, x, y, width, height, GDK_PIXBUF_ALPHA_FULL, 255, GDK_RGB_DITHER_MAX, 0, 0); g_object_unref (shadow); }
void draw_selected_color (GtkWidget * widget, HSV hsv, GdkPixbuf **pixbufs) { GdkGC * gc; float angle, radius; GdkPixbuf * colorwheel, * brightness; gint xcenter, ycenter, x, y, width, height; GtkAllocation allocation; gc = gdk_gc_new(gtk_widget_get_window(widget)); gdk_rgb_gc_set_foreground(gc, 0); colorwheel = g_object_get_data(G_OBJECT (widget), DATA_HS_PIXBUF); brightness = g_object_get_data(G_OBJECT (widget), DATA_V_PIXBUF); width = gdk_pixbuf_get_width(brightness); height = gdk_pixbuf_get_height(brightness); gtk_widget_get_allocation(widget, &allocation); x = allocation.width - gdk_pixbuf_get_width(brightness) - 2*COLORWHEEL_SELECT; y = (1.0 - hsv.V) * (float) gdk_pixbuf_get_height(brightness); gdk_draw_line( gtk_widget_get_window(widget), gc, x, y + COLORWHEEL_SELECT, allocation.width, COLORWHEEL_SELECT + y); /* Hue is 0..6 */ angle = (hsv.H / 3) * (M_PI); radius = (hsv.S * gdk_pixbuf_get_width(colorwheel)) / 2.0; x = radius * cos (angle); y = radius * sin (angle); width = gdk_pixbuf_get_width(pixbufs[PM_COLOR_SEL]); height = gdk_pixbuf_get_height(pixbufs[PM_COLOR_SEL]); xcenter = allocation.height / 2.0; // Use height on purpose ycenter = allocation.height / 2.0; gdk_pixbuf_render_to_drawable_alpha( pixbufs[PM_COLOR_SEL], gtk_widget_get_window(widget), 0, 0, (xcenter + x) - width/2, (ycenter + y) - height/2, width, height, GDK_PIXBUF_ALPHA_FULL, 127, GDK_RGB_DITHER_NORMAL, 0, 0); gdk_gc_unref(gc); }
static void draw_eye (t_eyes *eyes_applet, gint eye_num, gint pupil_x, gint pupil_y) { /* * XXX - gdk_pixbuf_render_to_drawable_alpha is deprecated. Any * replacements? * * dannym: yes ;) */ #if defined (GTK_CHECK_VERSION) && GTK_CHECK_VERSION(2,2,0) gdk_draw_pixbuf (eyes_applet->eyes[eye_num]->window, /*gc*/NULL, eyes_applet->eye_image, 0, 0, 0, 0, eyes_applet->eye_width, eyes_applet->eye_height, GDK_RGB_DITHER_NONE, 0, 0); /* how to do the alpha channel? */ gdk_draw_pixbuf ( eyes_applet->eyes[eye_num]->window, /*gc*/ NULL, eyes_applet->pupil_image, 0, 0, pupil_x - eyes_applet->pupil_width / 2, pupil_y - eyes_applet->pupil_height / 2, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); #else /*pixbuf,drwable(dest),src_x,src_y,dest_x,dest_y,w,h,resv,resv,dither,xdither,ydither) */ gdk_pixbuf_render_to_drawable_alpha (eyes_applet->eye_image, eyes_applet->eyes[eye_num]->window, 0, 0, 0, 0, eyes_applet->eye_width, eyes_applet->eye_height, GDK_PIXBUF_ALPHA_BILEVEL, 128, GDK_RGB_DITHER_NONE, 0, 0); gdk_pixbuf_render_to_drawable_alpha (eyes_applet->pupil_image, eyes_applet->eyes[eye_num]->window, 0, 0, pupil_x - eyes_applet->pupil_width / 2, pupil_y - eyes_applet->pupil_height / 2, -1, -1, GDK_PIXBUF_ALPHA_BILEVEL, 128, GDK_RGB_DITHER_NONE, 0, 0); #endif }
static gboolean drawing_expose_event_callback (GtkWidget *widget, GdkEventExpose *event, gpointer data) { GList * ll, ** list; HSV * hsv, prev_hsv; GjaySong * s; gint xcenter, ycenter, width, height, num_colors; GdkPixbuf * colorwheel, * brightness; GtkAllocation allocation; gboolean set; GjayApp *gjay=(GjayApp*)data; set = FALSE; num_colors = 0; list = g_object_get_data(G_OBJECT (widget), DATA_LIST); hsv = g_object_get_data(G_OBJECT (widget), DATA_COLOR); assert(hsv); prev_hsv.H = -1; prev_hsv.S = -1; prev_hsv.V = -1; colorwheel = g_object_get_data(G_OBJECT (widget), DATA_HS_PIXBUF); brightness = g_object_get_data(G_OBJECT (widget), DATA_V_PIXBUF); gdk_draw_rectangle (gtk_widget_get_window(widget), gtk_widget_get_style(widget)->bg_gc[gtk_widget_get_state(widget)], TRUE, event->area.x, event->area.y, event->area.width, event->area.height); width = gdk_pixbuf_get_width(brightness); height = gdk_pixbuf_get_height(brightness); gtk_widget_get_allocation(widget, &allocation); gdk_pixbuf_render_to_drawable_alpha( brightness, gtk_widget_get_window(widget), 0, 0, allocation.width - width - COLORWHEEL_SELECT, COLORWHEEL_SELECT, width, height, GDK_PIXBUF_ALPHA_FULL, 127, GDK_RGB_DITHER_NORMAL, 0, 0); width = gdk_pixbuf_get_width(colorwheel); height = gdk_pixbuf_get_height(colorwheel); gtk_widget_get_allocation(widget, &allocation); xcenter = allocation.height / 2.0; // Use height on purpose ycenter = allocation.height / 2.0; gdk_pixbuf_render_to_drawable_alpha( colorwheel, gtk_widget_get_window(widget), 0, 0, xcenter - width/2, ycenter - height/2, width, height, GDK_PIXBUF_ALPHA_FULL, 127, GDK_RGB_DITHER_NORMAL, 0, 0); if (list) { for (ll = g_list_first(gjay->selected_songs); ll; ll = g_list_next(ll)) { s = (GjaySong *) ll->data; if (!s->no_color) { set = TRUE; *hsv = s->color; if (!((hsv->H == prev_hsv.H) && (hsv->S == prev_hsv.S) && (hsv->V == prev_hsv.V))) { draw_selected_color(widget, s->color, gjay->gui->pixbufs); num_colors++; prev_hsv = *hsv; } } } if (set) { if (num_colors == 1) { draw_swatch_color(widget, *hsv); } } else { width = gdk_pixbuf_get_width(gjay->gui->pixbufs[PM_NOT_SET]); height = gdk_pixbuf_get_height(gjay->gui->pixbufs[PM_NOT_SET]); gdk_pixbuf_render_to_drawable_alpha( gjay->gui->pixbufs[PM_NOT_SET], gtk_widget_get_window(widget), 0, 0, xcenter - width/2, ycenter - height/2, width, height, GDK_PIXBUF_ALPHA_FULL, 127, GDK_RGB_DITHER_NORMAL, 0, 0); // When the user does set a color, make it full brightness hsv->V = 1; } } else { draw_selected_color(widget, *hsv, gjay->gui->pixbufs); draw_swatch_color(widget, *hsv); } return TRUE; }
void gthumb_draw_image_shadow_out (int image_x, int image_y, int image_w, int image_h, GdkDrawable *drawable) { GdkPixbuf *shadow; shadow = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, image_w, image_h); gdk_pixbuf_fill (shadow, 0xFFFFFF80); gdk_pixbuf_render_to_drawable_alpha (shadow, drawable, 0, 0, image_x - INOUT_SHADOW_OFFSET, image_y - INOUT_SHADOW_OFFSET, image_w, image_h, GDK_PIXBUF_ALPHA_FULL, 255, GDK_RGB_DITHER_MAX, 0, 0); gdk_pixbuf_fill (shadow, 0x00000080); gdk_pixbuf_render_to_drawable_alpha (shadow, drawable, 0, 0, image_x + INOUT_SHADOW_OFFSET, image_y + INOUT_SHADOW_OFFSET, image_w, image_h, GDK_PIXBUF_ALPHA_FULL, 255, GDK_RGB_DITHER_MAX, 0, 0); g_object_unref (shadow); /**/ shadow = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, INOUT_SHADOW_OFFSET * 2, INOUT_SHADOW_OFFSET * 2); _gdk_pixbuf_fill_triangle (shadow, 0xFFFFFF80, 0x00000080); gdk_pixbuf_render_to_drawable_alpha (shadow, drawable, 0, 0, image_x + image_w - INOUT_SHADOW_OFFSET, image_y - INOUT_SHADOW_OFFSET, INOUT_SHADOW_OFFSET * 2, INOUT_SHADOW_OFFSET * 2, GDK_PIXBUF_ALPHA_FULL, 255, GDK_RGB_DITHER_MAX, 0, 0); gdk_pixbuf_render_to_drawable_alpha (shadow, drawable, 0, 0, image_x - INOUT_SHADOW_OFFSET, image_y + image_h - INOUT_SHADOW_OFFSET, INOUT_SHADOW_OFFSET * 2, INOUT_SHADOW_OFFSET * 2, GDK_PIXBUF_ALPHA_FULL, 255, GDK_RGB_DITHER_MAX, 0, 0); g_object_unref (shadow); }