void gimp_container_popup_set_view_size (GimpContainerPopup *popup, gint view_size) { GtkWidget *scrolled_win; GtkWidget *viewport; GtkAllocation allocation; g_return_if_fail (GIMP_IS_CONTAINER_POPUP (popup)); scrolled_win = GIMP_CONTAINER_BOX (popup->editor->view)->scrolled_win; viewport = gtk_bin_get_child (GTK_BIN (scrolled_win)); gtk_widget_get_allocation (viewport, &allocation); view_size = CLAMP (view_size, GIMP_VIEW_SIZE_TINY, MIN (GIMP_VIEW_SIZE_GIGANTIC, allocation.width - 2 * popup->view_border_width)); if (view_size != popup->view_size) { popup->view_size = view_size; gimp_container_view_set_view_size (popup->editor->view, popup->view_size, popup->view_border_width); } }
gint gimp_container_popup_get_view_size (GimpContainerPopup *popup) { g_return_val_if_fail (GIMP_IS_CONTAINER_POPUP (popup), GIMP_VIEW_SIZE_SMALL); return popup->view_size; }
GimpViewType gimp_container_popup_get_view_type (GimpContainerPopup *popup) { g_return_val_if_fail (GIMP_IS_CONTAINER_POPUP (popup), GIMP_VIEW_TYPE_LIST); return popup->view_type; }
void gimp_container_popup_show (GimpContainerPopup *popup, GtkWidget *widget) { GdkScreen *screen; GtkRequisition requisition; GtkAllocation allocation; GdkRectangle rect; gint monitor; gint orig_x; gint orig_y; gint x; gint y; g_return_if_fail (GIMP_IS_CONTAINER_POPUP (popup)); g_return_if_fail (GTK_IS_WIDGET (widget)); gtk_widget_size_request (GTK_WIDGET (popup), &requisition); gtk_widget_get_allocation (widget, &allocation); gdk_window_get_origin (gtk_widget_get_window (widget), &orig_x, &orig_y); if (! gtk_widget_get_has_window (widget)) { orig_x += allocation.x; orig_y += allocation.y; } screen = gtk_widget_get_screen (widget); monitor = gdk_screen_get_monitor_at_point (screen, orig_x, orig_y); gdk_screen_get_monitor_geometry (screen, monitor, &rect); if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL) { x = orig_x + allocation.width - requisition.width; if (x < rect.x) x -= allocation.width - requisition.width; } else { x = orig_x; if (x + requisition.width > rect.x + rect.width) x += allocation.width - requisition.width; } y = orig_y + allocation.height; if (y + requisition.height > rect.y + rect.height) y = orig_y - requisition.height; gtk_window_set_screen (GTK_WINDOW (popup), screen); gtk_window_set_transient_for (GTK_WINDOW (popup), GTK_WINDOW (gtk_widget_get_toplevel (widget))); gtk_window_move (GTK_WINDOW (popup), x, y); gtk_widget_show (GTK_WIDGET (popup)); }
void gimp_container_popup_set_view_type (GimpContainerPopup *popup, GimpViewType view_type) { g_return_if_fail (GIMP_IS_CONTAINER_POPUP (popup)); if (view_type != popup->view_type) { popup->view_type = view_type; gtk_widget_destroy (GTK_WIDGET (popup->editor)); gimp_container_popup_create_view (popup); } }