static gboolean gimp_palette_view_button_press (GtkWidget *widget, GdkEventButton *bevent) { GimpPaletteView *view = GIMP_PALETTE_VIEW (widget); GimpPaletteEntry *entry; if (GTK_WIDGET_CAN_FOCUS (widget) && ! GTK_WIDGET_HAS_FOCUS (widget)) gtk_widget_grab_focus (widget); entry = gimp_palette_view_find_entry (view, bevent->x, bevent->y); view->dnd_entry = entry; if (! entry || bevent->button == 2) return FALSE; if (bevent->type == GDK_BUTTON_PRESS) g_signal_emit (view, view_signals[ENTRY_CLICKED], 0, entry, bevent->state); switch (bevent->button) { case 1: if (bevent->type == GDK_BUTTON_PRESS) { gimp_palette_view_select_entry (view, entry); } else if (bevent->type == GDK_2BUTTON_PRESS && entry == view->selected) { g_signal_emit (view, view_signals[ENTRY_ACTIVATED], 0, entry); } break; case 3: if (bevent->type == GDK_BUTTON_PRESS) { if (entry != view->selected) gimp_palette_view_select_entry (view, entry); g_signal_emit (view, view_signals[ENTRY_CONTEXT], 0, entry); } break; default: break; } return FALSE; }
gboolean gimp_palette_editor_set_index (GimpPaletteEditor *editor, gint index, GimpRGB *color) { GimpPalette *palette; g_return_val_if_fail (GIMP_IS_PALETTE_EDITOR (editor), FALSE); palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data); if (palette && gimp_palette_get_n_colors (palette) > 0) { GimpPaletteEntry *entry; index = CLAMP (index, 0, gimp_palette_get_n_colors (palette) - 1); entry = gimp_palette_get_entry (palette, index); gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view), entry); if (color) *color = editor->color->color; return TRUE; } return FALSE; }
static void gimp_palette_view_invalidate (GimpPalette *palette, GimpPaletteView *view) { view->dnd_entry = NULL; if (view->selected && ! g_list_find (palette->colors, view->selected)) gimp_palette_view_select_entry (view, NULL); }
static gboolean gimp_palette_view_button_press (GtkWidget *widget, GdkEventButton *bevent) { GimpPaletteView *view = GIMP_PALETTE_VIEW (widget); GimpPaletteEntry *entry; if (gtk_widget_get_can_focus (widget) && ! gtk_widget_has_focus (widget)) gtk_widget_grab_focus (widget); entry = gimp_palette_view_find_entry (view, bevent->x, bevent->y); view->dnd_entry = entry; if (! entry || bevent->button == 2) return TRUE; if (bevent->type == GDK_BUTTON_PRESS) g_signal_emit (view, view_signals[ENTRY_CLICKED], 0, entry, bevent->state); if (gdk_event_triggers_context_menu ((GdkEvent *) bevent)) { if (entry != view->selected) gimp_palette_view_select_entry (view, entry); g_signal_emit (view, view_signals[ENTRY_CONTEXT], 0, entry); } else if (bevent->button == 1) { if (bevent->type == GDK_BUTTON_PRESS) { gimp_palette_view_select_entry (view, entry); } else if (bevent->type == GDK_2BUTTON_PRESS && entry == view->selected) { g_signal_emit (view, view_signals[ENTRY_ACTIVATED], 0, entry); } } return TRUE; }
static void gimp_palette_view_set_viewable (GimpView *view, GimpViewable *old_viewable, GimpViewable *new_viewable) { GimpPaletteView *pal_view = GIMP_PALETTE_VIEW (view); pal_view->dnd_entry = NULL; gimp_palette_view_select_entry (pal_view, NULL); if (old_viewable) { g_signal_handlers_disconnect_by_func (old_viewable, gimp_palette_view_invalidate, view); if (! new_viewable) { gimp_dnd_color_source_remove (GTK_WIDGET (view)); gimp_dnd_color_dest_remove (GTK_WIDGET (view)); } } GIMP_VIEW_CLASS (parent_class)->set_viewable (view, old_viewable, new_viewable); if (new_viewable) { g_signal_connect (new_viewable, "invalidate-preview", G_CALLBACK (gimp_palette_view_invalidate), view); /* unset the palette drag handler set by GimpView */ gimp_dnd_viewable_source_remove (GTK_WIDGET (view), GIMP_TYPE_PALETTE); if (! old_viewable) { gimp_dnd_color_source_add (GTK_WIDGET (view), gimp_palette_view_drag_color, view); gimp_dnd_color_dest_add (GTK_WIDGET (view), gimp_palette_view_drop_color, view); } } }
static void palette_editor_color_dropped (GimpPaletteView *view, GimpPaletteEntry *entry, const GimpRGB *color, GimpPaletteEditor *editor) { if (GIMP_DATA_EDITOR (editor)->data_editable) { GimpPalette *palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data); gint pos = -1; if (entry) pos = entry->position; entry = gimp_palette_add_entry (palette, pos, NULL, color); gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view), entry); } }
static void palette_editor_drop_color (GtkWidget *widget, gint x, gint y, const GimpRGB *color, gpointer data) { GimpPaletteEditor *editor = data; if (GIMP_DATA_EDITOR (editor)->data_editable) { GimpPalette *palette = GIMP_PALETTE (GIMP_DATA_EDITOR (editor)->data); GimpPaletteEntry *entry; entry = gimp_palette_add_entry (palette, -1, NULL, color); gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view), entry); } }
void palette_editor_new_color_cmd_callback (GtkAction *action, gint value, gpointer data) { GimpPaletteEditor *editor = GIMP_PALETTE_EDITOR (data); GimpDataEditor *data_editor = GIMP_DATA_EDITOR (data); if (data_editor->data_editable) { GimpPalette *palette = GIMP_PALETTE (data_editor->data); GimpPaletteEntry *entry; GimpRGB color; if (value) gimp_context_get_background (data_editor->context, &color); else gimp_context_get_foreground (data_editor->context, &color); entry = gimp_palette_add_entry (palette, -1, NULL, &color); gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view), entry); } }
static void gimp_color_selector_palette_set_color (GimpColorSelector *selector, const GimpRGB *rgb, const GimpHSV *hsv) { GimpColorSelectorPalette *select = GIMP_COLOR_SELECTOR_PALETTE (selector); if (select->context) { GimpPalette *palette = gimp_context_get_palette (select->context); if (palette && palette->n_colors > 0) { GimpPaletteEntry *entry; entry = gimp_palette_find_entry (palette, rgb, GIMP_PALETTE_VIEW (select->view)->selected); if (entry) gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (select->view), entry); } } }
void gimp_palette_editor_pick_color (GimpPaletteEditor *editor, const GimpRGB *color, GimpColorPickState pick_state) { g_return_if_fail (GIMP_IS_PALETTE_EDITOR (editor)); g_return_if_fail (color != NULL); if (GIMP_DATA_EDITOR (editor)->data_editable) { GimpPaletteEntry *entry; GimpData *data; gint index = -1; data = gimp_data_editor_get_data (GIMP_DATA_EDITOR (editor)); switch (pick_state) { case GIMP_COLOR_PICK_STATE_NEW: if (editor->color) index = editor->color->position + 1; entry = gimp_palette_add_entry (GIMP_PALETTE (data), index, NULL, color); gimp_palette_view_select_entry (GIMP_PALETTE_VIEW (editor->view), entry); break; case GIMP_COLOR_PICK_STATE_UPDATE: gimp_palette_set_entry_color (GIMP_PALETTE (data), editor->color->position, color); break; } } }
static gboolean gimp_palette_view_focus (GtkWidget *widget, GtkDirectionType direction) { GimpPaletteView *view = GIMP_PALETTE_VIEW (widget); GimpPalette *palette; palette = GIMP_PALETTE (GIMP_VIEW (view)->renderer->viewable); if (gtk_widget_get_can_focus (widget) && ! gtk_widget_has_focus (widget)) { gtk_widget_grab_focus (widget); if (! view->selected && palette && gimp_palette_get_n_colors (palette) > 0) { GimpPaletteEntry *entry = gimp_palette_get_entry (palette, 0); gimp_palette_view_select_entry (view, entry); } return TRUE; } if (view->selected) { GimpViewRendererPalette *renderer; gint skip = 0; renderer = GIMP_VIEW_RENDERER_PALETTE (GIMP_VIEW (view)->renderer); switch (direction) { case GTK_DIR_UP: skip = -renderer->columns; break; case GTK_DIR_DOWN: skip = renderer->columns; break; case GTK_DIR_LEFT: skip = -1; break; case GTK_DIR_RIGHT: skip = 1; break; case GTK_DIR_TAB_FORWARD: case GTK_DIR_TAB_BACKWARD: return FALSE; } if (skip != 0) { GimpPaletteEntry *entry; gint position; position = view->selected->position + skip; entry = gimp_palette_get_entry (palette, position); if (entry) gimp_palette_view_select_entry (view, entry); } return TRUE; } return FALSE; }