Blame clutter/clutter-private.h

Packit Service bf98b9
/*
Packit Service bf98b9
 * Clutter.
Packit Service bf98b9
 *
Packit Service bf98b9
 * An OpenGL based 'interactive canvas' library.
Packit Service bf98b9
 *
Packit Service bf98b9
 * Authored By Matthew Allum  <mallum@openedhand.com>
Packit Service bf98b9
 *
Packit Service bf98b9
 * Copyright (C) 2006 OpenedHand
Packit Service bf98b9
 *
Packit Service bf98b9
 * This library is free software; you can redistribute it and/or
Packit Service bf98b9
 * modify it under the terms of the GNU Lesser General Public
Packit Service bf98b9
 * License as published by the Free Software Foundation; either
Packit Service bf98b9
 * version 2 of the License, or (at your option) any later version.
Packit Service bf98b9
 *
Packit Service bf98b9
 * This library is distributed in the hope that it will be useful,
Packit Service bf98b9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service bf98b9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service bf98b9
 * Lesser General Public License for more details.
Packit Service bf98b9
 *
Packit Service bf98b9
 * You should have received a copy of the GNU Lesser General Public
Packit Service bf98b9
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
Packit Service bf98b9
 *
Packit Service bf98b9
 *
Packit Service bf98b9
 */
Packit Service bf98b9
Packit Service bf98b9
#ifndef __CLUTTER_PRIVATE_H__
Packit Service bf98b9
#define __CLUTTER_PRIVATE_H__
Packit Service bf98b9
Packit Service bf98b9
#include <glib.h>
Packit Service bf98b9
Packit Service bf98b9
#include <glib/gi18n-lib.h>
Packit Service bf98b9
Packit Service bf98b9
#include <cogl-pango/cogl-pango.h>
Packit Service bf98b9
Packit Service bf98b9
#include "clutter-backend.h"
Packit Service bf98b9
#include "clutter-effect.h"
Packit Service bf98b9
#include "clutter-event.h"
Packit Service bf98b9
#include "clutter-feature.h"
Packit Service bf98b9
#include "clutter-id-pool.h"
Packit Service bf98b9
#include "clutter-layout-manager.h"
Packit Service bf98b9
#include "clutter-master-clock.h"
Packit Service bf98b9
#include "clutter-settings.h"
Packit Service bf98b9
#include "clutter-stage-manager.h"
Packit Service bf98b9
#include "clutter-stage.h"
Packit Service bf98b9
Packit Service bf98b9
G_BEGIN_DECLS
Packit Service bf98b9
Packit Service bf98b9
typedef struct _ClutterMainContext      ClutterMainContext;
Packit Service bf98b9
typedef struct _ClutterVertex4          ClutterVertex4;
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_REGISTER_VALUE_TRANSFORM_TO(TYPE_TO,func)             { \
Packit Service bf98b9
  g_value_register_transform_func (g_define_type_id, TYPE_TO, func);    \
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_REGISTER_VALUE_TRANSFORM_FROM(TYPE_FROM,func)         { \
Packit Service bf98b9
  g_value_register_transform_func (TYPE_FROM, g_define_type_id, func);  \
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_REGISTER_INTERVAL_PROGRESS(func)                      { \
Packit Service bf98b9
  clutter_interval_register_progress_func (g_define_type_id, func);     \
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_PRIVATE_FLAGS(a)	 (((ClutterActor *) (a))->private_flags)
Packit Service bf98b9
#define CLUTTER_SET_PRIVATE_FLAGS(a,f)	 (CLUTTER_PRIVATE_FLAGS (a) |= (f))
Packit Service bf98b9
#define CLUTTER_UNSET_PRIVATE_FLAGS(a,f) (CLUTTER_PRIVATE_FLAGS (a) &= ~(f))
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_ACTOR_IS_TOPLEVEL(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IS_TOPLEVEL) != FALSE)
Packit Service bf98b9
#define CLUTTER_ACTOR_IS_INTERNAL_CHILD(a)      ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_INTERNAL_CHILD) != FALSE)
Packit Service bf98b9
#define CLUTTER_ACTOR_IN_DESTRUCTION(a)         ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_DESTRUCTION) != FALSE)
Packit Service bf98b9
#define CLUTTER_ACTOR_IN_REPARENT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_REPARENT) != FALSE)
Packit Service bf98b9
#define CLUTTER_ACTOR_IN_PAINT(a)               ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_PAINT) != FALSE)
Packit Service bf98b9
#define CLUTTER_ACTOR_IN_RELAYOUT(a)            ((CLUTTER_PRIVATE_FLAGS (a) & CLUTTER_IN_RELAYOUT) != FALSE)
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_PARAM_READABLE  (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)
Packit Service bf98b9
#define CLUTTER_PARAM_WRITABLE  (G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)
Packit Service bf98b9
#define CLUTTER_PARAM_READWRITE (G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS)
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_PARAM_ANIMATABLE        (1 << G_PARAM_USER_SHIFT)
Packit Service bf98b9
Packit Service bf98b9
/* automagic interning of a static string */
Packit Service bf98b9
#define I_(str)  (g_intern_static_string ((str)))
Packit Service bf98b9
Packit Service bf98b9
/* mark all properties under the "Property" context */
Packit Service bf98b9
#ifdef ENABLE_NLS
Packit Service bf98b9
#define P_(String) (_clutter_gettext ((String)))
Packit Service bf98b9
#else
Packit Service bf98b9
#define P_(String) (String)
Packit Service bf98b9
#endif
Packit Service bf98b9
Packit Service bf98b9
/* This is a replacement for the nearbyint function which always rounds to the
Packit Service bf98b9
 * nearest integer. nearbyint is apparently a C99 function so it might not
Packit Service bf98b9
 * always be available but also it seems in glibc it is defined as a function
Packit Service bf98b9
 * call so this macro could end up faster anyway. We can't just add 0.5f
Packit Service bf98b9
 * because it will break for negative numbers. */
Packit Service bf98b9
#define CLUTTER_NEARBYINT(x) ((int) ((x) < 0.0f ? (x) - 0.5f : (x) + 0.5f))
Packit Service bf98b9
Packit Service bf98b9
typedef enum {
Packit Service bf98b9
  CLUTTER_ACTOR_UNUSED_FLAG = 0,
Packit Service bf98b9
Packit Service bf98b9
  CLUTTER_IN_DESTRUCTION = 1 << 0,
Packit Service bf98b9
  CLUTTER_IS_TOPLEVEL    = 1 << 1,
Packit Service bf98b9
  CLUTTER_IN_REPARENT    = 1 << 2,
Packit Service bf98b9
Packit Service bf98b9
  /* Used to avoid recursion */
Packit Service bf98b9
  CLUTTER_IN_PAINT       = 1 << 3,
Packit Service bf98b9
Packit Service bf98b9
  /* Used to avoid recursion */
Packit Service bf98b9
  CLUTTER_IN_RELAYOUT    = 1 << 4,
Packit Service bf98b9
Packit Service bf98b9
  /* a flag for internal children of Containers (DEPRECATED) */
Packit Service bf98b9
  CLUTTER_INTERNAL_CHILD = 1 << 5
Packit Service bf98b9
} ClutterPrivateFlags;
Packit Service bf98b9
Packit Service bf98b9
/*
Packit Service bf98b9
 * ClutterMainContext:
Packit Service bf98b9
 *
Packit Service bf98b9
 * The shared state of Clutter
Packit Service bf98b9
 */
Packit Service bf98b9
struct _ClutterMainContext
Packit Service bf98b9
{
Packit Service bf98b9
  /* the main windowing system backend */
Packit Service bf98b9
  ClutterBackend *backend;
Packit Service bf98b9
Packit Service bf98b9
  /* the object holding all the stage instances */
Packit Service bf98b9
  ClutterStageManager *stage_manager;
Packit Service bf98b9
Packit Service bf98b9
  /* the clock driving all the frame operations */
Packit Service bf98b9
  ClutterMasterClock *master_clock;
Packit Service bf98b9
Packit Service bf98b9
  /* the main event queue */
Packit Service bf98b9
  GQueue *events_queue;
Packit Service bf98b9
Packit Service bf98b9
  /* the event filters added via clutter_event_add_filter. these are
Packit Service bf98b9
   * ordered from least recently added to most recently added */
Packit Service bf98b9
  GList *event_filters;
Packit Service bf98b9
Packit Service bf98b9
  ClutterPickMode  pick_mode;
Packit Service bf98b9
Packit Service bf98b9
  /* default FPS; this is only used if we cannot sync to vblank */
Packit Service bf98b9
  guint frame_rate;
Packit Service bf98b9
Packit Service bf98b9
  /* actors with a grab on all devices */
Packit Service bf98b9
  ClutterActor *pointer_grab_actor;
Packit Service bf98b9
  ClutterActor *keyboard_grab_actor;
Packit Service bf98b9
Packit Service bf98b9
  /* stack of actors with shaders during paint */
Packit Service bf98b9
  GSList *shaders;
Packit Service bf98b9
Packit Service bf98b9
  /* fb bit masks for col<->id mapping in picking */
Packit Service bf98b9
  gint fb_r_mask;
Packit Service bf98b9
  gint fb_g_mask;
Packit Service bf98b9
  gint fb_b_mask;
Packit Service bf98b9
  gint fb_r_mask_used;
Packit Service bf98b9
  gint fb_g_mask_used;
Packit Service bf98b9
  gint fb_b_mask_used;
Packit Service bf98b9
Packit Service bf98b9
  CoglPangoFontMap *font_map;   /* Global font map */
Packit Service bf98b9
Packit Service bf98b9
  /* stack of #ClutterEvent */
Packit Service bf98b9
  GSList *current_event;
Packit Service bf98b9
Packit Service bf98b9
  /* list of repaint functions installed through
Packit Service bf98b9
   * clutter_threads_add_repaint_func()
Packit Service bf98b9
   */
Packit Service bf98b9
  GList *repaint_funcs;
Packit Service bf98b9
  guint last_repaint_id;
Packit Service bf98b9
Packit Service bf98b9
  /* main settings singleton */
Packit Service bf98b9
  ClutterSettings *settings;
Packit Service bf98b9
Packit Service bf98b9
  /* boolean flags */
Packit Service bf98b9
  guint is_initialized          : 1;
Packit Service bf98b9
  guint motion_events_per_actor : 1;
Packit Service bf98b9
  guint defer_display_setup     : 1;
Packit Service bf98b9
  guint options_parsed          : 1;
Packit Service bf98b9
  guint show_fps                : 1;
Packit Service bf98b9
};
Packit Service bf98b9
Packit Service bf98b9
/* shared between clutter-main.c and clutter-frame-source.c */
Packit Service bf98b9
typedef struct
Packit Service bf98b9
{
Packit Service bf98b9
  GSourceFunc func;
Packit Service bf98b9
  gpointer data;
Packit Service bf98b9
  GDestroyNotify notify;
Packit Service bf98b9
} ClutterThreadsDispatch;
Packit Service bf98b9
Packit Service bf98b9
gboolean _clutter_threads_dispatch      (gpointer data);
Packit Service bf98b9
void     _clutter_threads_dispatch_free (gpointer data);
Packit Service bf98b9
Packit Service bf98b9
void                    _clutter_threads_acquire_lock                   (void);
Packit Service bf98b9
void                    _clutter_threads_release_lock                   (void);
Packit Service bf98b9
Packit Service bf98b9
ClutterMainContext *    _clutter_context_get_default                    (void);
Packit Service bf98b9
void                    _clutter_context_lock                           (void);
Packit Service bf98b9
void                    _clutter_context_unlock                         (void);
Packit Service bf98b9
gboolean                _clutter_context_is_initialized                 (void);
Packit Service bf98b9
ClutterPickMode         _clutter_context_get_pick_mode                  (void);
Packit Service bf98b9
void                    _clutter_context_push_shader_stack              (ClutterActor *actor);
Packit Service bf98b9
ClutterActor *          _clutter_context_pop_shader_stack               (ClutterActor *actor);
Packit Service bf98b9
ClutterActor *          _clutter_context_peek_shader_stack              (void);
Packit Service bf98b9
gboolean                _clutter_context_get_motion_events_enabled      (void);
Packit Service bf98b9
gboolean                _clutter_context_get_show_fps                   (void);
Packit Service bf98b9
Packit Service bf98b9
const gchar *_clutter_gettext (const gchar *str);
Packit Service bf98b9
Packit Service bf98b9
gboolean      _clutter_feature_init (GError **error);
Packit Service bf98b9
Packit Service bf98b9
/* Diagnostic mode */
Packit Service bf98b9
gboolean        _clutter_diagnostic_enabled     (void);
Packit Service bf98b9
void            _clutter_diagnostic_message     (const char *fmt, ...);
Packit Service bf98b9
Packit Service bf98b9
/* Picking code */
Packit Service bf98b9
guint           _clutter_pixel_to_id            (guchar        pixel[4]);
Packit Service bf98b9
void            _clutter_id_to_color            (guint         id,
Packit Service bf98b9
                                                 ClutterColor *col);
Packit Service bf98b9
Packit Service bf98b9
void            _clutter_set_sync_to_vblank     (gboolean      sync_to_vblank);
Packit Service bf98b9
gboolean        _clutter_get_sync_to_vblank     (void);
Packit Service bf98b9
Packit Service bf98b9
/* use this function as the accumulator if you have a signal with
Packit Service bf98b9
 * a G_TYPE_BOOLEAN return value; this will stop the emission as
Packit Service bf98b9
 * soon as one handler returns TRUE
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean _clutter_boolean_handled_accumulator (GSignalInvocationHint *ihint,
Packit Service bf98b9
                                               GValue                *return_accu,
Packit Service bf98b9
                                               const GValue          *handler_return,
Packit Service bf98b9
                                               gpointer               dummy);
Packit Service bf98b9
Packit Service bf98b9
/* use this function as the accumulator if you have a signal with
Packit Service bf98b9
 * a G_TYPE_BOOLEAN return value; this will stop the emission as
Packit Service bf98b9
 * soon as one handler returns FALSE
Packit Service bf98b9
 */
Packit Service bf98b9
gboolean _clutter_boolean_continue_accumulator (GSignalInvocationHint *ihint,
Packit Service bf98b9
                                                GValue                *return_accu,
Packit Service bf98b9
                                                const GValue          *handler_return,
Packit Service bf98b9
                                                gpointer               dummy);
Packit Service bf98b9
Packit Service bf98b9
void _clutter_run_repaint_functions (ClutterRepaintFlags flags);
Packit Service bf98b9
Packit Service bf98b9
GType _clutter_layout_manager_get_child_meta_type (ClutterLayoutManager *manager);
Packit Service bf98b9
Packit Service bf98b9
void  _clutter_util_fully_transform_vertices (const CoglMatrix    *modelview,
Packit Service bf98b9
                                              const CoglMatrix    *projection,
Packit Service bf98b9
                                              const float         *viewport,
Packit Service bf98b9
                                              const ClutterVertex *vertices_in,
Packit Service bf98b9
                                              ClutterVertex       *vertices_out,
Packit Service bf98b9
                                              int                  n_vertices);
Packit Service bf98b9
Packit Service bf98b9
void _clutter_util_rectangle_union (const cairo_rectangle_int_t *src1,
Packit Service bf98b9
                                    const cairo_rectangle_int_t *src2,
Packit Service bf98b9
                                    cairo_rectangle_int_t       *dest);
Packit Service bf98b9
Packit Service bf98b9
Packit Service bf98b9
struct _ClutterVertex4
Packit Service bf98b9
{
Packit Service bf98b9
  float x;
Packit Service bf98b9
  float y;
Packit Service bf98b9
  float z;
Packit Service bf98b9
  float w;
Packit Service bf98b9
};
Packit Service bf98b9
Packit Service bf98b9
void
Packit Service bf98b9
_clutter_util_vertex4_interpolate (const ClutterVertex4 *a,
Packit Service bf98b9
                                   const ClutterVertex4 *b,
Packit Service bf98b9
                                   double                progress,
Packit Service bf98b9
                                   ClutterVertex4       *res);
Packit Service bf98b9
Packit Service bf98b9
#define CLUTTER_MATRIX_INIT_IDENTITY { \
Packit Service bf98b9
  1.0f, 0.0f, 0.0f, 0.0f, \
Packit Service bf98b9
  0.0f, 1.0f, 0.0f, 0.0f, \
Packit Service bf98b9
  0.0f, 0.0f, 1.0f, 0.0f, \
Packit Service bf98b9
  0.0f, 0.0f, 0.0f, 1.0f, \
Packit Service bf98b9
}
Packit Service bf98b9
Packit Service bf98b9
float   _clutter_util_matrix_determinant        (const ClutterMatrix *matrix);
Packit Service bf98b9
Packit Service bf98b9
void    _clutter_util_matrix_skew_xy            (ClutterMatrix *matrix,
Packit Service bf98b9
                                                 float          factor);
Packit Service bf98b9
void    _clutter_util_matrix_skew_xz            (ClutterMatrix *matrix,
Packit Service bf98b9
                                                 float          factor);
Packit Service bf98b9
void    _clutter_util_matrix_skew_yz            (ClutterMatrix *matrix,
Packit Service bf98b9
                                                 float          factor);
Packit Service bf98b9
Packit Service bf98b9
gboolean        _clutter_util_matrix_decompose  (const ClutterMatrix *src,
Packit Service bf98b9
                                                 ClutterVertex       *scale_p,
Packit Service bf98b9
                                                 float                shear_p[3],
Packit Service bf98b9
                                                 ClutterVertex       *rotate_p,
Packit Service bf98b9
                                                 ClutterVertex       *translate_p,
Packit Service bf98b9
                                                 ClutterVertex4      *perspective_p);
Packit Service bf98b9
Packit Service bf98b9
typedef struct _ClutterPlane
Packit Service bf98b9
{
Packit Service bf98b9
  float v0[3];
Packit Service bf98b9
  float n[3];
Packit Service bf98b9
} ClutterPlane;
Packit Service bf98b9
Packit Service bf98b9
typedef enum _ClutterCullResult
Packit Service bf98b9
{
Packit Service bf98b9
  CLUTTER_CULL_RESULT_UNKNOWN,
Packit Service bf98b9
  CLUTTER_CULL_RESULT_IN,
Packit Service bf98b9
  CLUTTER_CULL_RESULT_OUT,
Packit Service bf98b9
  CLUTTER_CULL_RESULT_PARTIAL
Packit Service bf98b9
} ClutterCullResult;
Packit Service bf98b9
Packit Service bf98b9
gboolean        _clutter_has_progress_function  (GType gtype);
Packit Service bf98b9
gboolean        _clutter_run_progress_function  (GType gtype,
Packit Service bf98b9
                                                 const GValue *initial,
Packit Service bf98b9
                                                 const GValue *final,
Packit Service bf98b9
                                                 gdouble progress,
Packit Service bf98b9
                                                 GValue *retval);
Packit Service bf98b9
Packit Service bf98b9
G_END_DECLS
Packit Service bf98b9
Packit Service bf98b9
#endif /* __CLUTTER_PRIVATE_H__ */