mirror of https://github.com/GNOME/gimp.git
app: limit realtime image updates to about 50 fps
which increases responsiveness while painting quite a bit.
This commit is contained in:
parent
11bc11d2f7
commit
be2037ce03
|
@ -49,6 +49,9 @@
|
||||||
#include "gimp-intl.h"
|
#include "gimp-intl.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define FLUSH_NOW_TIMEOUT 20
|
||||||
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PROP_0,
|
PROP_0,
|
||||||
|
@ -71,6 +74,8 @@ struct _GimpDisplayPrivate
|
||||||
|
|
||||||
GtkWidget *shell;
|
GtkWidget *shell;
|
||||||
GSList *update_areas;
|
GSList *update_areas;
|
||||||
|
|
||||||
|
guint flush_now_timeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GIMP_DISPLAY_GET_PRIVATE(display) \
|
#define GIMP_DISPLAY_GET_PRIVATE(display) \
|
||||||
|
@ -83,6 +88,7 @@ struct _GimpDisplayPrivate
|
||||||
|
|
||||||
static void gimp_display_progress_iface_init (GimpProgressInterface *iface);
|
static void gimp_display_progress_iface_init (GimpProgressInterface *iface);
|
||||||
|
|
||||||
|
static void gimp_display_dispose (GObject *object);
|
||||||
static void gimp_display_set_property (GObject *object,
|
static void gimp_display_set_property (GObject *object,
|
||||||
guint property_id,
|
guint property_id,
|
||||||
const GValue *value,
|
const GValue *value,
|
||||||
|
@ -134,6 +140,7 @@ gimp_display_class_init (GimpDisplayClass *klass)
|
||||||
{
|
{
|
||||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->dispose = gimp_display_dispose;
|
||||||
object_class->set_property = gimp_display_set_property;
|
object_class->set_property = gimp_display_set_property;
|
||||||
object_class->get_property = gimp_display_get_property;
|
object_class->get_property = gimp_display_get_property;
|
||||||
|
|
||||||
|
@ -184,6 +191,20 @@ gimp_display_progress_iface_init (GimpProgressInterface *iface)
|
||||||
iface->message = gimp_display_progress_message;
|
iface->message = gimp_display_progress_message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gimp_display_dispose (GObject *object)
|
||||||
|
{
|
||||||
|
GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (object);
|
||||||
|
|
||||||
|
if (private->flush_now_timeout)
|
||||||
|
{
|
||||||
|
g_source_remove (private->flush_now_timeout);
|
||||||
|
private->flush_now_timeout = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
G_OBJECT_CLASS (parent_class)->dispose (object);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_display_set_property (GObject *object,
|
gimp_display_set_property (GObject *object,
|
||||||
guint property_id,
|
guint property_id,
|
||||||
|
@ -613,6 +634,12 @@ gimp_display_set_image (GimpDisplay *display,
|
||||||
|
|
||||||
shell = gimp_display_get_shell (display);
|
shell = gimp_display_get_shell (display);
|
||||||
|
|
||||||
|
if (private->flush_now_timeout)
|
||||||
|
{
|
||||||
|
g_source_remove (private->flush_now_timeout);
|
||||||
|
private->flush_now_timeout = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (private->image)
|
if (private->image)
|
||||||
{
|
{
|
||||||
/* stop any active tool */
|
/* stop any active tool */
|
||||||
|
@ -788,6 +815,18 @@ gimp_display_flush_now (GimpDisplay *display)
|
||||||
|
|
||||||
/* private functions */
|
/* private functions */
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
gimp_display_flush_now_timeout (GimpDisplay *display)
|
||||||
|
{
|
||||||
|
GimpDisplayPrivate *private = GIMP_DISPLAY_GET_PRIVATE (display);
|
||||||
|
|
||||||
|
private->flush_now_timeout = 0;
|
||||||
|
|
||||||
|
gimp_display_shell_flush (gimp_display_get_shell (display), TRUE);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gimp_display_flush_whenever (GimpDisplay *display,
|
gimp_display_flush_whenever (GimpDisplay *display,
|
||||||
gboolean now)
|
gboolean now)
|
||||||
|
@ -816,7 +855,19 @@ gimp_display_flush_whenever (GimpDisplay *display,
|
||||||
private->update_areas = NULL;
|
private->update_areas = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_display_shell_flush (gimp_display_get_shell (display), now);
|
if (now)
|
||||||
|
{
|
||||||
|
if (! private->flush_now_timeout)
|
||||||
|
private->flush_now_timeout =
|
||||||
|
gdk_threads_add_timeout_full (G_PRIORITY_HIGH_IDLE,
|
||||||
|
FLUSH_NOW_TIMEOUT,
|
||||||
|
(GSourceFunc) gimp_display_flush_now_timeout,
|
||||||
|
display, NULL);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gimp_display_shell_flush (gimp_display_get_shell (display), now);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue