new funtion which returns TRUE if any of the gradient's segments refer to
2006-08-31 Michael Natterer <mitch@gimp.org> * app/core/gimpgradient.[ch] (gimp_gradient_has_fg_bg_segments): new funtion which returns TRUE if any of the gradient's segments refer to FG of BG. (gimp_gradient_segment_get_left_color_type) (gimp_gradient_segment_set_left_color_type) (gimp_gradient_segment_get_right_color_type) (gimp_gradient_segment_set_right_color_type): new accessors for the new GimpGradientColor stuff. (gimp_gradient_segment_split_midpoint) (gimp_gradient_segment_range_flip) (gimp_gradient_segment_range_replicate): split, flip and replicate the segments' color_types too. * app/widgets/gimpviewrenderer.[ch]: added virtual functions ::set_context() and ::invalidate() and call them. * app/widgets/gimpviewrenderergradient.[ch]: implement the virtual functions. Connect to the context's "foreground-changed" and "background-changed" signals if the gradient contains FG or BG colors and invalidate the renderer whenever they change. * app/core/gimp-gradients.c: removed signal connections which invalidated the gradients on FG/BG changes of the user context.
This commit is contained in:

committed by
Michael Natterer

parent
50a8cde19a
commit
663b44c988
@ -51,23 +51,26 @@ enum
|
||||
};
|
||||
|
||||
|
||||
static void gimp_view_renderer_dispose (GObject *object);
|
||||
static void gimp_view_renderer_finalize (GObject *object);
|
||||
static void gimp_view_renderer_dispose (GObject *object);
|
||||
static void gimp_view_renderer_finalize (GObject *object);
|
||||
|
||||
static gboolean gimp_view_renderer_idle_update (GimpViewRenderer *renderer);
|
||||
static void gimp_view_renderer_real_draw (GimpViewRenderer *renderer,
|
||||
GdkWindow *window,
|
||||
GtkWidget *widget,
|
||||
const GdkRectangle *draw_area,
|
||||
const GdkRectangle *expose_area);
|
||||
static void gimp_view_renderer_real_render (GimpViewRenderer *renderer,
|
||||
GtkWidget *widget);
|
||||
static gboolean gimp_view_renderer_idle_update (GimpViewRenderer *renderer);
|
||||
static void gimp_view_renderer_real_set_context (GimpViewRenderer *renderer,
|
||||
GimpContext *context);
|
||||
static void gimp_view_renderer_real_invalidate (GimpViewRenderer *renderer);
|
||||
static void gimp_view_renderer_real_draw (GimpViewRenderer *renderer,
|
||||
GdkWindow *window,
|
||||
GtkWidget *widget,
|
||||
const GdkRectangle *draw_area,
|
||||
const GdkRectangle *expose_area);
|
||||
static void gimp_view_renderer_real_render (GimpViewRenderer *renderer,
|
||||
GtkWidget *widget);
|
||||
|
||||
static void gimp_view_renderer_size_changed (GimpViewRenderer *renderer,
|
||||
GimpViewable *viewable);
|
||||
static GdkGC * gimp_view_renderer_create_gc (GimpViewRenderer *renderer,
|
||||
GdkWindow *window,
|
||||
GtkWidget *widget);
|
||||
static void gimp_view_renderer_size_changed (GimpViewRenderer *renderer,
|
||||
GimpViewable *viewable);
|
||||
static GdkGC * gimp_view_renderer_create_gc (GimpViewRenderer *renderer,
|
||||
GdkWindow *window,
|
||||
GtkWidget *widget);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpViewRenderer, gimp_view_renderer, G_TYPE_OBJECT)
|
||||
@ -100,6 +103,8 @@ gimp_view_renderer_class_init (GimpViewRendererClass *klass)
|
||||
object_class->finalize = gimp_view_renderer_finalize;
|
||||
|
||||
klass->update = NULL;
|
||||
klass->set_context = gimp_view_renderer_real_set_context;
|
||||
klass->invalidate = gimp_view_renderer_real_invalidate;
|
||||
klass->draw = gimp_view_renderer_real_draw;
|
||||
klass->render = gimp_view_renderer_real_render;
|
||||
|
||||
@ -153,6 +158,9 @@ gimp_view_renderer_dispose (GObject *object)
|
||||
if (renderer->viewable)
|
||||
gimp_view_renderer_set_viewable (renderer, NULL);
|
||||
|
||||
if (renderer->context)
|
||||
gimp_view_renderer_set_context (renderer, NULL);
|
||||
|
||||
gimp_view_renderer_remove_idle (renderer);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||
@ -200,10 +208,12 @@ gimp_view_renderer_new_internal (GimpContext *context,
|
||||
renderer = g_object_new (gimp_view_renderer_type_from_viewable_type (viewable_type),
|
||||
NULL);
|
||||
|
||||
renderer->context = context;
|
||||
renderer->viewable_type = viewable_type;
|
||||
renderer->is_popup = is_popup ? TRUE : FALSE;
|
||||
|
||||
if (context)
|
||||
gimp_view_renderer_set_context (renderer, context);
|
||||
|
||||
return renderer;
|
||||
}
|
||||
|
||||
@ -272,7 +282,8 @@ gimp_view_renderer_set_context (GimpViewRenderer *renderer,
|
||||
|
||||
if (context != renderer->context)
|
||||
{
|
||||
renderer->context = context;
|
||||
GIMP_VIEW_RENDERER_GET_CLASS (renderer)->set_context (renderer,
|
||||
context);
|
||||
|
||||
if (renderer->viewable)
|
||||
gimp_view_renderer_invalidate (renderer);
|
||||
@ -521,9 +532,12 @@ gimp_view_renderer_invalidate (GimpViewRenderer *renderer)
|
||||
g_return_if_fail (GIMP_IS_VIEW_RENDERER (renderer));
|
||||
|
||||
if (renderer->idle_id)
|
||||
g_source_remove (renderer->idle_id);
|
||||
{
|
||||
g_source_remove (renderer->idle_id);
|
||||
renderer->idle_id = 0;
|
||||
}
|
||||
|
||||
renderer->needs_render = TRUE;
|
||||
GIMP_VIEW_RENDERER_GET_CLASS (renderer)->invalidate (renderer);
|
||||
|
||||
renderer->idle_id =
|
||||
g_idle_add_full (G_PRIORITY_LOW,
|
||||
@ -669,6 +683,19 @@ gimp_view_renderer_idle_update (GimpViewRenderer *renderer)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_view_renderer_real_set_context (GimpViewRenderer *renderer,
|
||||
GimpContext *context)
|
||||
{
|
||||
renderer->context = context;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_view_renderer_real_invalidate (GimpViewRenderer *renderer)
|
||||
{
|
||||
renderer->needs_render = TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_view_renderer_real_draw (GimpViewRenderer *renderer,
|
||||
GdkWindow *window,
|
||||
|
Reference in New Issue
Block a user