mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-04 01:43:24 +00:00

I still see some limitations in GimpGradient, and in particular, they are still always stored as RGB in GGR files. It would be nice if we could store the actual color format. This way, if someone chooses a gradient stop as Lab or CMYK color, that's what the gradient file would keep track of. But also even storing the space of a color (instead of storing/loading always in sRGB, even though this may still work fine as we store unbounded double values). This might warrant for a v2 of GGR file format. This commit also fixes loading of SVG gradient which was apparently broken regarding hexadecimal color parsing. Finally I improve gegl_color_set_alpha() by adding an alpha channel when the initial format had none.
122 lines
4.9 KiB
C
122 lines
4.9 KiB
C
/* GIMP - The GNU Image Manipulation Program
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
*
|
|
* Gradient editor module copyight (C) 1996-1997 Federico Mena Quintero
|
|
* federico@nuclecu.unam.mx
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __GIMP_GRADIENT_EDITOR_H__
|
|
#define __GIMP_GRADIENT_EDITOR_H__
|
|
|
|
|
|
#include "gimpdataeditor.h"
|
|
|
|
|
|
#define GRAD_NUM_COLORS 10
|
|
|
|
|
|
typedef enum
|
|
{
|
|
GRAD_DRAG_NONE = 0,
|
|
GRAD_DRAG_LEFT,
|
|
GRAD_DRAG_MIDDLE,
|
|
GRAD_DRAG_ALL
|
|
} GradientEditorDragMode;
|
|
|
|
|
|
#define GIMP_TYPE_GRADIENT_EDITOR (gimp_gradient_editor_get_type ())
|
|
#define GIMP_GRADIENT_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_GRADIENT_EDITOR, GimpGradientEditor))
|
|
#define GIMP_GRADIENT_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_GRADIENT_EDITOR, GimpGradientEditorClass))
|
|
#define GIMP_IS_GRADIENT_EDITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_GRADIENT_EDITOR))
|
|
#define GIMP_IS_GRADIENT_EDITOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_GRADIENT_EDITOR))
|
|
#define GIMP_GRADIENT_EDITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_GRADIENT_EDITOR, GimpGradientEditorClass))
|
|
|
|
|
|
typedef struct _GimpGradientEditorClass GimpGradientEditorClass;
|
|
|
|
struct _GimpGradientEditor
|
|
{
|
|
GimpDataEditor parent_instance;
|
|
|
|
GtkWidget *current_color;
|
|
GtkWidget *hint_label1;
|
|
GtkWidget *hint_label2;
|
|
GtkWidget *hint_label3;
|
|
GtkWidget *hint_label4;
|
|
GtkWidget *scrollbar;
|
|
GtkWidget *control;
|
|
|
|
/* Zoom and scrollbar */
|
|
gdouble zoom_factor;
|
|
GtkAdjustment *scroll_data;
|
|
GtkGesture *zoom_gesture;
|
|
gdouble last_zoom_scale;
|
|
|
|
/* Gradient view */
|
|
gint view_last_x; /* -1 if mouse has left focus */
|
|
gboolean view_button_down;
|
|
|
|
/* Gradient control */
|
|
GimpGradientSegment *control_drag_segment; /* Segment which is being dragged */
|
|
GimpGradientSegment *control_sel_l; /* Left segment of selection */
|
|
GimpGradientSegment *control_sel_r; /* Right segment of selection */
|
|
GradientEditorDragMode control_drag_mode; /* What is being dragged? */
|
|
guint32 control_click_time; /* Time when mouse was pressed */
|
|
gboolean control_compress; /* Compressing/expanding handles */
|
|
gint control_last_x; /* Last mouse position, -1 if out of focus */
|
|
gdouble control_last_gx; /* Last position (wrt gradient) when dragging */
|
|
gdouble control_orig_pos; /* Original click position when dragging */
|
|
|
|
GimpGradientBlendColorSpace blend_color_space;
|
|
|
|
/* Saved colors */
|
|
GeglColor *saved_colors[GRAD_NUM_COLORS];
|
|
|
|
/* Color dialog */
|
|
GtkWidget *color_dialog;
|
|
GimpGradientSegment *saved_segments;
|
|
gboolean saved_dirty;
|
|
};
|
|
|
|
struct _GimpGradientEditorClass
|
|
{
|
|
GimpDataEditorClass parent_class;
|
|
};
|
|
|
|
|
|
GType gimp_gradient_editor_get_type (void) G_GNUC_CONST;
|
|
|
|
GtkWidget * gimp_gradient_editor_new (GimpContext *context,
|
|
GimpMenuFactory *menu_factory);
|
|
|
|
void gimp_gradient_editor_get_selection (GimpGradientEditor *editor,
|
|
GimpGradient **gradient,
|
|
GimpGradientSegment **left,
|
|
GimpGradientSegment **right);
|
|
void gimp_gradient_editor_set_selection (GimpGradientEditor *editor,
|
|
GimpGradientSegment *left,
|
|
GimpGradientSegment *right);
|
|
|
|
void gimp_gradient_editor_edit_left_color (GimpGradientEditor *editor);
|
|
void gimp_gradient_editor_edit_right_color (GimpGradientEditor *editor);
|
|
|
|
void gimp_gradient_editor_zoom (GimpGradientEditor *editor,
|
|
GimpZoomType zoom_type,
|
|
gdouble delta,
|
|
gdouble zoom_focus_x);
|
|
|
|
|
|
#endif /* __GIMP_GRADIENT_EDITOR_H__ */
|