OSX: add multistage support

Bug #911 - OSX: add multistage support

	* clutter/osx/clutter-backend-osx.{c,h}
	(clutter_backend_osx_init_stage, clutter_backend_osx_get_stage,
	clutter_backend_osx_redraw, clutter_backend_osx_create_stage,
	clutter_backend_osx_ensure_context, clutter_backend_osx_class_init,
	clutter_backend_osx_dispose, ClutterGLView:drawRect:):
	* clutter/osx/clutter-stage-osx.{c,h} (clutter_stage_osx_realize,
	ClutterGLWindow:setFrameSize:):
	Adapt to new multistage backend API. Don't keep a pointer to
	default stage. Derive from ClutterActor instead of ClutterStage.
	Implement ClutterStageWindow interface. Paint, resize and
	otherwise manipulate the wrapper rather than self when necessary.

	(clutter_backend_post_parse): Create our singleton GL context
	here. We could probably create the context when the default
	stage is created, but I think this is more clean.

	* clutter/osx/clutter-event-osx.c (clutter_event_osx_translate)
	* clutter/osx/clutter-stage-osx.c (clutter_stage_osx_state_update,
	ClutterGLWindow:windowShouldClose:):
	* clutter/osx/clutter-stage-osx.h: Export ClutterGLWindow interface
	for clutter-event-osx.c to easily get the stage for NSWindow.
	Fill in ClutterEventAny::stage on our events.

	Consistently use 'stage_osx' and 'wrapper' as variable names
	when referring to ClutterStageOSX and ClutterStage objects
	respectively.
This commit is contained in:
Tommi Komulainen
2008-06-05 21:27:58 +00:00
parent cba23c0b26
commit b8e8a80a40
6 changed files with 196 additions and 132 deletions

View File

@ -26,7 +26,7 @@
#include <clutter/clutter-backend.h>
#import <Foundation/Foundation.h>
@class NSOpenGLView, NSWindow;
#import <AppKit/AppKit.h>
G_BEGIN_DECLS
@ -41,11 +41,19 @@ G_BEGIN_DECLS
typedef struct _ClutterStageOSX ClutterStageOSX;
typedef struct _ClutterStageOSXClass ClutterStageOSXClass;
@interface ClutterGLWindow : NSWindow
{
@public
ClutterStageOSX *stage_osx;
}
@end
struct _ClutterStageOSX
{
ClutterStage parent;
ClutterActor parent;
ClutterBackend *backend;
ClutterStage *wrapper;
NSWindow *window;
NSOpenGLView *view;
@ -61,12 +69,13 @@ struct _ClutterStageOSX
struct _ClutterStageOSXClass
{
ClutterStageClass parent_class;
ClutterActorClass parent_class;
};
GType clutter_stage_osx_get_type (void) G_GNUC_CONST;
ClutterActor* clutter_stage_osx_new (ClutterBackend *backend);
ClutterActor* clutter_stage_osx_new (ClutterBackend *backend,
ClutterStage *wrapper);
G_END_DECLS