gdkdisplayprivate.h \
gdkdndprivate.h \
gdkframeclockidle.h \
+ gdkframeclockprivate.h \
gdkscreenprivate.h \
gdkinternals.h \
gdkintl.h \
#include "config.h"
-#include "gdkframeclock.h"
+#include "gdkframeclockprivate.h"
/**
* SECTION:frameclock
* time that doesn't have a lot to do with wall clock time.
*/
-G_DEFINE_INTERFACE (GdkFrameClock, gdk_frame_clock, G_TYPE_OBJECT)
+G_DEFINE_ABSTRACT_TYPE (GdkFrameClock, gdk_frame_clock, G_TYPE_OBJECT)
enum {
FRAME_REQUESTED,
static guint signals[LAST_SIGNAL];
+struct _GdkFrameClockPrivate
+{
+ GdkFrameHistory *history;
+};
+
+static void
+gdk_frame_clock_finalize (GObject *object)
+{
+ GdkFrameClockPrivate *priv = GDK_FRAME_CLOCK (object)->priv;
+
+ g_object_unref (priv->history);
+
+ G_OBJECT_CLASS (gdk_frame_clock_parent_class)->finalize (object);
+}
+
static void
-gdk_frame_clock_default_init (GdkFrameClockInterface *iface)
+gdk_frame_clock_class_init (GdkFrameClockClass *klass)
{
+ GObjectClass *gobject_class = (GObjectClass*) klass;
+
+ gobject_class->finalize = gdk_frame_clock_finalize;
+
/**
* GdkFrameClock::frame-requested:
* @clock: the frame clock emitting the signal
NULL, NULL,
g_cclosure_marshal_VOID__VOID,
G_TYPE_NONE, 0);
+
+ g_type_class_add_private (klass, sizeof (GdkFrameClockPrivate));
+}
+
+static void
+gdk_frame_clock_init (GdkFrameClock *clock)
+{
+ GdkFrameClockPrivate *priv;
+
+ clock->priv = G_TYPE_INSTANCE_GET_PRIVATE (clock,
+ GDK_TYPE_FRAME_CLOCK,
+ GdkFrameClockPrivate);
+ priv = clock->priv;
+
+ priv->history = gdk_frame_history_new ();
}
/**
{
g_return_val_if_fail (GDK_IS_FRAME_CLOCK (clock), 0);
- return GDK_FRAME_CLOCK_GET_IFACE (clock)->get_frame_time (clock);
+ return GDK_FRAME_CLOCK_GET_CLASS (clock)->get_frame_time (clock);
}
/**
{
g_return_if_fail (GDK_IS_FRAME_CLOCK (clock));
- GDK_FRAME_CLOCK_GET_IFACE (clock)->request_phase (clock, phase);
+ GDK_FRAME_CLOCK_GET_CLASS (clock)->request_phase (clock, phase);
}
{
g_return_if_fail (GDK_IS_FRAME_CLOCK (clock));
- GDK_FRAME_CLOCK_GET_IFACE (clock)->freeze (clock);
+ GDK_FRAME_CLOCK_GET_CLASS (clock)->freeze (clock);
}
{
g_return_if_fail (GDK_IS_FRAME_CLOCK (clock));
- GDK_FRAME_CLOCK_GET_IFACE (clock)->thaw (clock);
+ GDK_FRAME_CLOCK_GET_CLASS (clock)->thaw (clock);
}
/**
GdkFrameHistory *
gdk_frame_clock_get_history (GdkFrameClock *clock)
{
+ GdkFrameClockPrivate *priv;
+
g_return_val_if_fail (GDK_IS_FRAME_CLOCK (clock), NULL);
- return GDK_FRAME_CLOCK_GET_IFACE (clock)->get_history (clock);
+ priv = clock->priv;
+
+ return priv->history;
}
/**
{
g_return_val_if_fail (GDK_IS_FRAME_CLOCK (clock), FALSE);
- return GDK_FRAME_CLOCK_GET_IFACE (clock)->get_requested (clock);
+ return GDK_FRAME_CLOCK_GET_CLASS (clock)->get_requested (clock);
}
/**
timeval->tv_usec = (time_ms % 1000) * 1000;
}
-/**
- * gdk_frame_clock_frame_requested:
- * @clock: the clock
- *
- * Emits the frame-requested signal. Used in implementations of the
- * #GdkFrameClock interface.
- */
-void
-gdk_frame_clock_frame_requested (GdkFrameClock *clock)
-{
- g_return_if_fail (GDK_IS_FRAME_CLOCK (clock));
-
- g_signal_emit (G_OBJECT (clock),
- signals[FRAME_REQUESTED], 0);
-}
-
GdkFrameTimings *
gdk_frame_clock_get_current_frame_timings (GdkFrameClock *clock)
{
G_BEGIN_DECLS
-typedef struct _GdkFrameClock GdkFrameClock;
-typedef struct _GdkFrameClockInterface GdkFrameClockInterface;
+#define GDK_TYPE_FRAME_CLOCK (gdk_frame_clock_get_type ())
+#define GDK_FRAME_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_FRAME_CLOCK, GdkFrameClock))
+#define GDK_FRAME_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_FRAME_CLOCK, GdkFrameClockClass))
+#define GDK_IS_FRAME_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_FRAME_CLOCK))
+#define GDK_IS_FRAME_CLOCK_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_FRAME_CLOCK))
+#define GDK_FRAME_CLOCK_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_FRAME_CLOCK, GdkFrameClockClass))
-#define GDK_TYPE_FRAME_CLOCK (gdk_frame_clock_get_type ())
-#define GDK_FRAME_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GDK_TYPE_FRAME_CLOCK, GdkFrameClock))
-#define GDK_IS_FRAME_CLOCK(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GDK_TYPE_FRAME_CLOCK))
-#define GDK_FRAME_CLOCK_GET_IFACE(inst) (G_TYPE_INSTANCE_GET_INTERFACE ((inst), GDK_TYPE_FRAME_CLOCK, GdkFrameClockInterface))
+typedef struct _GdkFrameClock GdkFrameClock;
+typedef struct _GdkFrameClockPrivate GdkFrameClockPrivate;
+typedef struct _GdkFrameClockClass GdkFrameClockClass;
typedef enum {
GDK_FRAME_CLOCK_PHASE_NONE = 0,
GDK_FRAME_CLOCK_PHASE_AFTER_PAINT = 1 << 6
} GdkFrameClockPhase;
-struct _GdkFrameClockInterface
-{
- GTypeInterface base_iface;
-
- guint64 (* get_frame_time) (GdkFrameClock *clock);
-
- void (* request_phase) (GdkFrameClock *clock,
- GdkFrameClockPhase phase);
- GdkFrameClockPhase (* get_requested) (GdkFrameClock *clock);
-
- void (* freeze) (GdkFrameClock *clock);
- void (* thaw) (GdkFrameClock *clock);
-
- GdkFrameHistory * (* get_history) (GdkFrameClock *clock);
-
- /* signals */
- /* void (* frame_requested) (GdkFrameClock *clock); */
- /* void (* flush_events) (GdkFrameClock *clock); */
- /* void (* before_paint) (GdkFrameClock *clock); */
- /* void (* update) (GdkFrameClock *clock); */
- /* void (* layout) (GdkFrameClock *clock); */
- /* void (* paint) (GdkFrameClock *clock); */
- /* void (* after_paint) (GdkFrameClock *clock); */
- /* void (* resume_events) (GdkFrameClock *clock); */
-};
-
GType gdk_frame_clock_get_type (void) G_GNUC_CONST;
guint64 gdk_frame_clock_get_frame_time (GdkFrameClock *clock);
GdkFrameTimings *gdk_frame_clock_get_current_frame_timings (GdkFrameClock *clock);
-/* Signal emitters (used in frame clock implementations) */
-void gdk_frame_clock_frame_requested (GdkFrameClock *clock);
-
G_END_DECLS
#endif /* __GDK_FRAME_CLOCK_H__ */
#include "config.h"
#include "gdkinternals.h"
+#include "gdkframeclockprivate.h"
#include "gdkframeclockidle.h"
#include "gdk.h"
struct _GdkFrameClockIdlePrivate
{
- GdkFrameHistory *history;
GTimer *timer;
/* timer_base is used to avoid ever going backward */
guint64 timer_base;
static gboolean gdk_frame_clock_paint_idle (void *data);
static void gdk_frame_clock_idle_finalize (GObject *object);
-static void gdk_frame_clock_idle_interface_init (GdkFrameClockInterface *iface);
-G_DEFINE_TYPE_WITH_CODE (GdkFrameClockIdle, gdk_frame_clock_idle, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (GDK_TYPE_FRAME_CLOCK,
- gdk_frame_clock_idle_interface_init))
+G_DEFINE_TYPE (GdkFrameClockIdle, gdk_frame_clock_idle, GDK_TYPE_FRAME_CLOCK)
static gint64 sleep_serial;
static gint64 sleep_source_prepare_time;
return sleep_serial;
}
-static void
-gdk_frame_clock_idle_class_init (GdkFrameClockIdleClass *klass)
-{
- GObjectClass *gobject_class = (GObjectClass*) klass;
-
- gobject_class->finalize = gdk_frame_clock_idle_finalize;
-
- g_type_class_add_private (klass, sizeof (GdkFrameClockIdlePrivate));
-}
-
static void
gdk_frame_clock_idle_init (GdkFrameClockIdle *frame_clock_idle)
{
GdkFrameClockIdlePrivate);
priv = frame_clock_idle->priv;
- priv->history = gdk_frame_history_new ();
priv->timer = g_timer_new ();
priv->freeze_count = 0;
}
g_object_ref (clock_idle),
(GDestroyNotify) g_object_unref);
- gdk_frame_clock_frame_requested (GDK_FRAME_CLOCK (clock_idle));
+ g_signal_emit_by_name (clock_idle, "frame-requested");
}
}
}
GdkFrameClock *clock = GDK_FRAME_CLOCK (data);
GdkFrameClockIdle *clock_idle = GDK_FRAME_CLOCK_IDLE (clock);
GdkFrameClockIdlePrivate *priv = clock_idle->priv;
+ GdkFrameHistory *history = gdk_frame_clock_get_history (clock);
gboolean skip_to_resume_events;
GdkFrameTimings *timings = NULL;
gint64 frame_counter = 0;
if (priv->phase > GDK_FRAME_CLOCK_PHASE_BEFORE_PAINT)
{
- frame_counter = gdk_frame_history_get_frame_counter (priv->history);
- timings = gdk_frame_history_get_timings (priv->history, frame_counter);
+ frame_counter = gdk_frame_history_get_frame_counter (history);
+ timings = gdk_frame_history_get_timings (history, frame_counter);
}
if (!skip_to_resume_events)
{
priv->frame_time = compute_frame_time (clock_idle);
- gdk_frame_history_begin_frame (priv->history);
- frame_counter = gdk_frame_history_get_frame_counter (priv->history);
- timings = gdk_frame_history_get_timings (priv->history, frame_counter);
+ gdk_frame_history_begin_frame (history);
+ frame_counter = gdk_frame_history_get_frame_counter (history);
+ timings = gdk_frame_history_get_timings (history, frame_counter);
gdk_frame_timings_set_frame_time (timings, priv->frame_time);
if ((_gdk_debug_flags & GDK_DEBUG_FRAMES) != 0)
{
if (gdk_frame_timings_get_complete (timings))
- _gdk_frame_history_debug_print (priv->history, timings);
+ _gdk_frame_history_debug_print (history, timings);
}
#endif /* G_ENABLE_DEBUG */
}
}
-static GdkFrameHistory *
-gdk_frame_clock_idle_get_history (GdkFrameClock *clock)
+static void
+gdk_frame_clock_idle_class_init (GdkFrameClockIdleClass *klass)
{
- GdkFrameClockIdle *clock_idle = GDK_FRAME_CLOCK_IDLE (clock);
- GdkFrameClockIdlePrivate *priv = clock_idle->priv;
+ GObjectClass *gobject_class = (GObjectClass*) klass;
+ GdkFrameClockClass *frame_clock_class = (GdkFrameClockClass *)klass;
- return priv->history;
-}
+ gobject_class->finalize = gdk_frame_clock_idle_finalize;
-static void
-gdk_frame_clock_idle_interface_init (GdkFrameClockInterface *iface)
-{
- iface->get_frame_time = gdk_frame_clock_idle_get_frame_time;
- iface->request_phase = gdk_frame_clock_idle_request_phase;
- iface->get_requested = gdk_frame_clock_idle_get_requested;
- iface->freeze = gdk_frame_clock_idle_freeze;
- iface->thaw = gdk_frame_clock_idle_thaw;
- iface->get_history = gdk_frame_clock_idle_get_history;
+ frame_clock_class->get_frame_time = gdk_frame_clock_idle_get_frame_time;
+ frame_clock_class->request_phase = gdk_frame_clock_idle_request_phase;
+ frame_clock_class->get_requested = gdk_frame_clock_idle_get_requested;
+ frame_clock_class->freeze = gdk_frame_clock_idle_freeze;
+ frame_clock_class->thaw = gdk_frame_clock_idle_thaw;
+
+ g_type_class_add_private (klass, sizeof (GdkFrameClockIdlePrivate));
}
GdkFrameClock *
#ifndef __GDK_FRAME_CLOCK_IDLE_H__
#define __GDK_FRAME_CLOCK_IDLE_H__
-#include <gdk/gdkframeclock.h>
+#include "gdkframeclockprivate.h"
G_BEGIN_DECLS
struct _GdkFrameClockIdle
{
- GObject parent_instance;
+ GdkFrameClock parent_instance;
/*< private >*/
GdkFrameClockIdlePrivate *priv;
struct _GdkFrameClockIdleClass
{
- GObjectClass parent_class;
+ GdkFrameClockClass parent_class;
};
GType gdk_frame_clock_idle_get_type (void) G_GNUC_CONST;
--- /dev/null
+/* GDK - The GIMP Drawing Kit
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GTK+ Team and others 1997-2010. See the AUTHORS
+ * file for a list of people on the GTK+ Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+/* Uninstalled header, internal to GDK */
+
+#ifndef __GDK_FRAME_CLOCK_PRIVATE_H__
+#define __GDK_FRAME_CLOCK_PRIVATE_H__
+
+#include <gdk/gdkframeclock.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GdkFrameClockIdlePrivate GdkFrameClockIdlePrivate;
+
+struct _GdkFrameClock
+{
+ GObject parent_instance;
+
+ /*< private >*/
+ GdkFrameClockPrivate *priv;
+};
+
+struct _GdkFrameClockClass
+{
+ GObjectClass parent_class;
+
+ guint64 (* get_frame_time) (GdkFrameClock *clock);
+
+ void (* request_phase) (GdkFrameClock *clock,
+ GdkFrameClockPhase phase);
+ GdkFrameClockPhase (* get_requested) (GdkFrameClock *clock);
+
+ void (* freeze) (GdkFrameClock *clock);
+ void (* thaw) (GdkFrameClock *clock);
+
+ /* signals */
+ /* void (* frame_requested) (GdkFrameClock *clock); */
+ /* void (* flush_events) (GdkFrameClock *clock); */
+ /* void (* before_paint) (GdkFrameClock *clock); */
+ /* void (* update) (GdkFrameClock *clock); */
+ /* void (* layout) (GdkFrameClock *clock); */
+ /* void (* paint) (GdkFrameClock *clock); */
+ /* void (* after_paint) (GdkFrameClock *clock); */
+ /* void (* resume_events) (GdkFrameClock *clock); */
+};
+
+G_END_DECLS
+
+#endif /* __GDK_FRAME_CLOCK_PRIVATE_H__ */