static GdkPixbuf *image_osd_icon_pixbuf(ImageOSDFlag flag) { static GdkPixbuf **icons = NULL; GdkPixbuf *icon = NULL; if (!icons) icons = g_new0(GdkPixbuf *, IMAGE_OSD_COUNT); if (icons[flag]) return icons[flag]; if (osd_icons[flag].key) { icon = pixbuf_inline(osd_icons[flag].key); } if (!icon) { icon = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 24, 24); pixbuf_set_rect_fill(icon, 1, 1, 22, 22, 255, 255, 255, 200); pixbuf_set_rect(icon, 0, 0, 24, 24, 0, 0, 0, 128, 1, 1, 1, 1); switch (flag) { case IMAGE_OSD_ROTATE_AUTO: pixbuf_set_rect(icon, 3, 8, 11, 12, 0, 0, 0, 255, 3, 0, 3, 0); pixbuf_draw_triangle(icon, 14, 3, 6, 12, 20, 9, 14, 15, 14, 3, 0, 0, 0, 255); break; case IMAGE_OSD_ROTATE_USER: break; case IMAGE_OSD_COLOR: pixbuf_set_rect_fill(icon, 3, 3, 18, 6, 200, 0, 0, 255); pixbuf_set_rect_fill(icon, 3, 9, 18, 6, 0, 200, 0, 255); pixbuf_set_rect_fill(icon, 3, 15, 18, 6, 0, 0, 200, 255); break; case IMAGE_OSD_FIRST: pixbuf_set_rect(icon, 3, 3, 18, 18, 0, 0, 0, 200, 3, 3, 3, 0); pixbuf_draw_triangle(icon, 6, 5, 12, 6, 12, 5, 18, 11, 6, 11, 0, 0, 0, 255); break; case IMAGE_OSD_LAST: pixbuf_set_rect(icon, 3, 3, 18, 18, 0, 0, 0, 200, 3, 3, 0, 3); pixbuf_draw_triangle(icon, 6, 12, 12, 6, 12, 18, 6, 12, 18, 12, 0, 0, 0, 255); break; case IMAGE_OSD_ICON: pixbuf_set_rect_fill(icon, 11, 3, 3, 12, 0, 0, 0, 255); pixbuf_set_rect_fill(icon, 11, 17, 3, 3, 0, 0, 0, 255); break; default: break; } } icons[flag] = icon; return icon; }
/* Folders icons to be used in tree or list directory view */ static PixmapFolders *folder_icons_new(GtkWidget *widget) { PixmapFolders *pf = g_new0(PixmapFolders, 1); #if 1 GtkIconSize size = GTK_ICON_SIZE_MENU; /* Attempt to use stock gtk icons */ pf->close = gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL); pf->open = gtk_widget_render_icon(widget, GTK_STOCK_OPEN, size, NULL); pf->deny = gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL); pf->parent = gtk_widget_render_icon(widget, GTK_STOCK_GO_UP, size, NULL); #else /* GQView legacy icons */ pf->close = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED); pf->open = pixbuf_inline(PIXBUF_INLINE_FOLDER_OPEN); pf->deny = pixbuf_inline(PIXBUF_INLINE_FOLDER_LOCKED); pf->parent = pixbuf_inline(PIXBUF_INLINE_FOLDER_UP); #endif return pf; }
void window_set_icon(GtkWidget *window, const gchar *icon, const gchar *file) { if (!icon && !file) icon = PIXBUF_INLINE_ICON; if (icon) { GdkPixbuf *pixbuf; pixbuf = pixbuf_inline(icon); if (pixbuf) { gtk_window_set_icon(GTK_WINDOW(window), pixbuf); g_object_unref(pixbuf); } } else { gtk_window_set_icon_from_file(GTK_WINDOW(window), file, NULL); } }
GdkPixbuf *thumb_loader_std_get_pixbuf(ThumbLoaderStd *tl, gint with_fallback) { GdkPixbuf *pixbuf; if (tl && tl->pixbuf) { pixbuf = tl->pixbuf; g_object_ref(pixbuf); } else if (with_fallback) { gint w, h; pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); w = gdk_pixbuf_get_width(pixbuf); h = gdk_pixbuf_get_height(pixbuf); if (w > tl->requested_width || h > tl->requested_height) { gint nw, nh; if (thumb_loader_std_scale_aspect(tl->requested_width, tl->requested_height, w, h, &nw, &nh)) { GdkPixbuf *tmp; tmp = pixbuf; pixbuf = gdk_pixbuf_scale_simple(tmp, nw, nh, GDK_INTERP_TILES); g_object_unref(G_OBJECT(tmp)); } } } else { pixbuf = NULL; } return pixbuf; }
LayoutWindow *layout_new(const gchar *path, gint popped, gint hidden) { LayoutWindow *lw; GdkGeometry geometry; GdkWindowHints hints; lw = g_new0(LayoutWindow, 1); lw->thumbs_enabled = thumbnails_enabled; lw->sort_method = SORT_NAME; lw->sort_ascend = TRUE; lw->tools_float = popped; lw->tools_hidden = hidden; lw->toolbar_hidden = toolbar_hidden; lw->utility_box = NULL; lw->bar_sort = NULL; lw->bar_sort_enabled = FALSE; lw->bar_exif = NULL; lw->bar_exif_enabled = FALSE; lw->bar_exif_size = -1; lw->bar_exif_advanced = FALSE; lw->full_screen_overlay_id = -1; lw->full_screen_overlay_on = FALSE; /* default layout */ layout_config_parse(layout_style, layout_order, &lw->dir_location, &lw->file_location, &lw->image_location); lw->tree_view = layout_view_tree; lw->icon_view = layout_view_icons; /* divider positions */ if (save_window_positions) { lw->div_h = window_hdivider_pos; lw->div_v = window_vdivider_pos; lw->div_float = float_window_divider; } else { lw->div_h = MAIN_WINDOW_DIV_HPOS; lw->div_v = MAIN_WINDOW_DIV_VPOS; lw->div_float = MAIN_WINDOW_DIV_VPOS; } /* window */ lw->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_resizable(GTK_WINDOW(lw->window), TRUE); gtk_window_set_title(GTK_WINDOW(lw->window), "GQview"); gtk_window_set_wmclass(GTK_WINDOW(lw->window), "gqview", "GQview"); gtk_container_set_border_width(GTK_CONTAINER(lw->window), 0); window_set_icon(lw->window, NULL, NULL); if (save_window_positions) { hints = GDK_HINT_USER_POS; } else { hints = 0; } geometry.min_width = 32; geometry.min_height = 32; geometry.base_width = MAINWINDOW_DEF_WIDTH; geometry.base_height = MAINWINDOW_DEF_HEIGHT; gtk_window_set_geometry_hints(GTK_WINDOW(lw->window), NULL, &geometry, GDK_HINT_MIN_SIZE | GDK_HINT_BASE_SIZE | hints); if (save_window_positions) { gtk_window_set_default_size(GTK_WINDOW(lw->window), main_window_w, main_window_h); if (!layout_window_list) { gtk_window_move(GTK_WINDOW(lw->window), main_window_x, main_window_y); if (main_window_maximized) gtk_window_maximize(GTK_WINDOW(lw->window)); } } else { gtk_window_set_default_size(GTK_WINDOW(lw->window), MAINWINDOW_DEF_WIDTH, MAINWINDOW_DEF_HEIGHT); } g_signal_connect(G_OBJECT(lw->window), "delete_event", G_CALLBACK(layout_delete_cb), lw); layout_keyboard_init(lw, lw->window); lw->tooltips = gtk_tooltips_new(); /* take ownership of tooltips */ #ifdef GTK_OBJECT_FLOATING /* GTK+ < 2.10 */ g_object_ref(G_OBJECT(lw->tooltips)); gtk_object_sink(GTK_OBJECT(lw->tooltips)); #else /* GTK+ >= 2.10 */ g_object_ref_sink(G_OBJECT(lw->tooltips)); #endif lw->main_box = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(lw->window), lw->main_box); gtk_widget_show(lw->main_box); layout_grid_setup(lw); image_top_window_set_sync(lw->image, (lw->tools_float || lw->tools_hidden)); layout_util_sync(lw); layout_status_update_all(lw); if (path) { layout_set_path(lw, path); } else { GdkPixbuf *pixbuf; pixbuf = pixbuf_inline(PIXBUF_INLINE_LOGO); image_change_pixbuf(lw->image, pixbuf, 1.0); gdk_pixbuf_unref(pixbuf); } /* set up the time stat timeout */ lw->last_time = 0; lw->last_time_id = g_timeout_add(5000, layout_check_for_update_cb, lw); gtk_widget_show(lw->window); layout_tools_hide(lw, lw->tools_hidden); layout_window_list = g_list_append(layout_window_list, lw); return lw; }
void show_about_window(void) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *label; GtkWidget *button; GdkPixbuf *pixbuf; gchar *buf; if (about) { gtk_window_present(GTK_WINDOW(about)); return; } about = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_type_hint(GTK_WINDOW(about), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_window_set_wmclass(GTK_WINDOW(about), "about", "GQview"); g_signal_connect(G_OBJECT(about), "delete_event", G_CALLBACK(about_delete_cb), NULL); gtk_window_set_title(GTK_WINDOW(about), _("About - GQview")); gtk_container_set_border_width(GTK_CONTAINER(about), PREF_PAD_BORDER); vbox = gtk_vbox_new(FALSE, PREF_PAD_SPACE); gtk_container_add(GTK_CONTAINER(about), vbox); gtk_widget_show(vbox); pixbuf = pixbuf_inline(PIXBUF_INLINE_LOGO); button = gtk_image_new_from_pixbuf(pixbuf); g_object_unref(pixbuf); gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0); gtk_widget_show(button); buf = g_strdup_printf(_("GQview %s\n\nCopyright (c) %s John Ellis\nwebsite: %s\nemail: %s\n\nReleased under the GNU General Public License"), VERSION, "2006", "gqview.sourceforge.net", "*****@*****.**"); label = gtk_label_new(buf); g_free(buf); gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_CENTER); gtk_box_pack_start(GTK_BOX(vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); hbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(hbox), GTK_BUTTONBOX_END); gtk_box_set_spacing(GTK_BOX(hbox), PREF_PAD_BUTTON_GAP); gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); gtk_widget_show(hbox); button = pref_button_new(NULL, NULL, _("Credits..."), FALSE, G_CALLBACK(about_credits_cb), NULL); gtk_container_add(GTK_CONTAINER(hbox), button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_show(button); button = pref_button_new(NULL, GTK_STOCK_CLOSE, NULL, FALSE, G_CALLBACK(about_window_close), NULL); gtk_container_add(GTK_CONTAINER(hbox), button); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_widget_grab_default(button); gtk_widget_show(button); window_set_icon(about, NULL, NULL); gtk_widget_show(about); }