mirror of
https://github.com/brl/mutter.git
synced 2025-06-13 16:59:30 +00:00
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:
@ -1,7 +1,7 @@
|
||||
/* Clutter - An OpenGL based 'interactive canvas' library.
|
||||
* OSX backend - event loops integration
|
||||
*
|
||||
* Copyright (C) 2007 Tommi Komulainen <tommi.komulainen@iki.fi>
|
||||
* Copyright (C) 2007-2008 Tommi Komulainen <tommi.komulainen@iki.fi>
|
||||
* Copyright (C) 2007 OpenedHand Ltd.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@ -22,6 +22,7 @@
|
||||
#include "config.h"
|
||||
|
||||
#include "clutter-osx.h"
|
||||
#include "clutter-stage-osx.h"
|
||||
|
||||
#import <AppKit/AppKit.h>
|
||||
#include <glib/gmain.h>
|
||||
@ -37,6 +38,7 @@ static GPollFunc old_poll_func = NULL;
|
||||
|
||||
/*************************************************************************/
|
||||
@interface NSEvent (Clutter)
|
||||
- (ClutterStage*)clutterStage;
|
||||
- (gint)clutterTime;
|
||||
- (gint)clutterButton;
|
||||
- (void)clutterX:(gint*)ptrX y:(gint*)ptrY;
|
||||
@ -45,6 +47,16 @@ static GPollFunc old_poll_func = NULL;
|
||||
@end
|
||||
|
||||
@implementation NSEvent (Clutter)
|
||||
- (ClutterStage*)clutterStage
|
||||
{
|
||||
ClutterGLWindow *w = (ClutterGLWindow*)[self window];
|
||||
if (![w isKindOfClass:[ClutterGLWindow class]])
|
||||
return NULL;
|
||||
|
||||
ClutterStageOSX *stage_osx = w->stage_osx;
|
||||
return stage_osx->wrapper;
|
||||
}
|
||||
|
||||
- (gint)clutterTime
|
||||
{
|
||||
return [self timestamp] * 1000;
|
||||
@ -160,6 +172,7 @@ static GPollFunc old_poll_func = NULL;
|
||||
static gboolean
|
||||
clutter_event_osx_translate (NSEvent *nsevent, ClutterEvent *event)
|
||||
{
|
||||
event->any.stage = [nsevent clutterStage];
|
||||
event->any.time = [nsevent clutterTime];
|
||||
|
||||
switch ([nsevent type])
|
||||
|
Reference in New Issue
Block a user