mutter/clutter/clutter-canvas.h

107 lines
3.4 KiB
C
Raw Normal View History

2012-03-08 10:31:21 +00:00
/*
* Clutter.
*
* An OpenGL based 'interactive canvas' library.
*
* Copyright (C) 2012 Intel Corporation.
*
* 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, see <http://www.gnu.org/licenses/>.
*
* Author:
* Emmanuele Bassi <ebassi@linux.intel.com>
*/
#if !defined(__CLUTTER_H_INSIDE__) && !defined(CLUTTER_COMPILATION)
#error "Only <clutter/clutter.h> can be included directly."
#endif
2012-03-08 10:31:21 +00:00
#ifndef __CLUTTER_CANVAS_H__
#define __CLUTTER_CANVAS_H__
#include <clutter/clutter-types.h>
G_BEGIN_DECLS
#define CLUTTER_TYPE_CANVAS (clutter_canvas_get_type ())
#define CLUTTER_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_CANVAS, ClutterCanvas))
#define CLUTTER_IS_CANVAS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_CANVAS))
#define CLUTTER_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_CANVAS, ClutterCanvasClass))
#define CLUTTER_IS_CANVAS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_CANVAS))
#define CLUTTER_CANVAS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_CANVAS, ClutterCanvasClass))
typedef struct _ClutterCanvas ClutterCanvas;
typedef struct _ClutterCanvasPrivate ClutterCanvasPrivate;
typedef struct _ClutterCanvasClass ClutterCanvasClass;
/**
* ClutterCanvas:
*
2014-03-18 14:14:22 +00:00
* The #ClutterCanvas structure contains
2012-03-08 10:31:21 +00:00
* private data and should only be accessed using the provided
* API.
*
* Since: 1.10
*/
struct _ClutterCanvas
{
/*< private >*/
GObject parent_instance;
ClutterCanvasPrivate *priv;
};
/**
* ClutterCanvasClass:
* @draw: class handler for the #ClutterCanvas::draw signal
*
2014-03-18 14:14:22 +00:00
* The #ClutterCanvasClass structure contains
2012-03-08 10:31:21 +00:00
* private data.
*
* Since: 1.10
*/
struct _ClutterCanvasClass
{
/*< private >*/
GObjectClass parent_class;
/*< public >*/
gboolean (* draw) (ClutterCanvas *canvas,
cairo_t *cr,
int width,
int height);
2012-03-08 10:31:21 +00:00
/*< private >*/
gpointer _padding[16];
};
2012-03-16 17:30:26 +00:00
CLUTTER_AVAILABLE_IN_1_10
2012-03-08 10:31:21 +00:00
GType clutter_canvas_get_type (void) G_GNUC_CONST;
2012-03-16 17:30:26 +00:00
CLUTTER_AVAILABLE_IN_1_10
canvas: Allow invalidating the content along with the size Currently, clutter_canvas_set_size() causes invalidation of the canvas contents only if the newly set size is different. There are cases when we want to invalidate the content regardless of the size set, but we cannot do that right now without possibly causing two invalidations, for instance: clutter_canvas_set_size (canvas, new_width, new_height); clutter_content_invalidate (canvas); will cause two invalidations if the newly set size is different than the existing one. One way to work around it is to check the current size of the canvas and either call set_size() or invalidate() depending on whether the size differs or not, respectively: g_object_get (canvas, "width", &width, "height", &height, NULL); if (width != new_width || height != new_height) clutter_canvas_set_size (canvas, new_width, new_height); else clutter_content_invalidate (canvas); this, howevere, implies knowledge of the internals of ClutterCanvas, and of its optimizations — and encodes a certain behaviour in third party code, which makes changes further down the line harder. We could remove the optimization, and just issue an invalidation regardless of the surface size, but it's not something I'd be happy to do. Instead, we can add a new function specifically for ClutterCanvas that causes a forced invalidation regardless of the size change. If we ever decide to remove the optimization further down the road, we can simply deprecate the function, and make it an alias of invalidate() or set_size().
2013-04-11 12:05:03 +00:00
ClutterContent * clutter_canvas_new (void);
2012-03-16 17:30:26 +00:00
CLUTTER_AVAILABLE_IN_1_10
gboolean clutter_canvas_set_size (ClutterCanvas *canvas,
canvas: Allow invalidating the content along with the size Currently, clutter_canvas_set_size() causes invalidation of the canvas contents only if the newly set size is different. There are cases when we want to invalidate the content regardless of the size set, but we cannot do that right now without possibly causing two invalidations, for instance: clutter_canvas_set_size (canvas, new_width, new_height); clutter_content_invalidate (canvas); will cause two invalidations if the newly set size is different than the existing one. One way to work around it is to check the current size of the canvas and either call set_size() or invalidate() depending on whether the size differs or not, respectively: g_object_get (canvas, "width", &width, "height", &height, NULL); if (width != new_width || height != new_height) clutter_canvas_set_size (canvas, new_width, new_height); else clutter_content_invalidate (canvas); this, howevere, implies knowledge of the internals of ClutterCanvas, and of its optimizations — and encodes a certain behaviour in third party code, which makes changes further down the line harder. We could remove the optimization, and just issue an invalidation regardless of the surface size, but it's not something I'd be happy to do. Instead, we can add a new function specifically for ClutterCanvas that causes a forced invalidation regardless of the size change. If we ever decide to remove the optimization further down the road, we can simply deprecate the function, and make it an alias of invalidate() or set_size().
2013-04-11 12:05:03 +00:00
int width,
int height);
CLUTTER_AVAILABLE_IN_1_18
void clutter_canvas_set_scale_factor (ClutterCanvas *canvas,
int scale);
CLUTTER_AVAILABLE_IN_1_18
int clutter_canvas_get_scale_factor (ClutterCanvas *canvas);
2012-03-08 10:31:21 +00:00
G_END_DECLS
#endif /* __CLUTTER_CANVAS_H__ */