Commit 0231688f authored by Marcus D. Hanwell's avatar Marcus D. Hanwell

Bring over the Cocoa classes for Mac

Change-Id: If7378bcfc3e6413d7a6d953181d87f5481f98cb7
parent 858756b8
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCocoaGLView.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkCocoaGLView - Cocoa OpenGL rendering context
//
// .SECTION Description
// This class is a subclass of Cocoa's NSView; it uses Objective-C++.
// This class overrides several NSView methods.
// To provide the usual VTK keyboard user interface, it overrides the
// following methods from NSResponder: acceptsFirstResponder, keyDown:,
// keyUp:, and flagsChanged:
// To provide the usual VTK mouse user interface, it overrides the
// following methods from NSResponder: mouseMoved:, mouseEntered:,
// mouseExited: scrollWheel:, mouseDown:, rightMouseDown:,
// otherMouseDown:, and resetCursorRects.
// To be able to render and draw onscreen, it overrides drawRect:
// from NSView.
// Note that this class was previously a subclass of NSOpenGLView,
// but starting with VTK 5.0 is now a subclass of NSView.
//
// .SECTION See Also
// vtkCocoaRenderWindow vtkCocoaRenderWindowInteractor
#ifndef __vtkCocoaGLView_h
#define __vtkCocoaGLView_h
#import <Cocoa/Cocoa.h>
// Note: This file should be includable by both pure Objective-C and Objective-C++ source files.
// To achieve this, we use the neat technique below:
#ifdef __cplusplus
// Forward declarations
class vtkCocoaRenderWindow;
class vtkCocoaRenderWindowInteractor;
// Type declarations
typedef vtkCocoaRenderWindow *vtkCocoaRenderWindowRef;
typedef vtkCocoaRenderWindowInteractor *vtkCocoaRenderWindowInteractorRef;
#else
// Type declarations
typedef void *vtkCocoaRenderWindowRef;
typedef void *vtkCocoaRenderWindowInteractorRef;
#endif
@interface vtkCocoaGLView : NSView
{
@private
vtkCocoaRenderWindowRef _myVTKRenderWindow;
NSTrackingRectTag _rolloverTrackingRectTag;
BOOL _rolloverTrackingRectSet;
}
- (vtkCocoaRenderWindowRef)getVTKRenderWindow;
- (void)setVTKRenderWindow:(vtkCocoaRenderWindowRef)theVTKRenderWindow;
- (vtkCocoaRenderWindowInteractorRef)getInteractor;
@end
#endif /* __vtkCocoaGLView_h */
// VTK-HeaderTest-Exclude: vtkCocoaGLView.h
This diff is collapsed.
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCocoaMacOSXSDKCompatibility.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkCocoaMacOSXSDKCompatibility - Compatibility header
// .SECTION Description
// VTK requires the Mac OS X 10.5 SDK or later.
// However, this file is meant to allow us to use features from newer
// SDKs by adding workarounds to still support the minimum SDK.
// It is safe to include this header multiple times.
#include <AvailabilityMacros.h>
#if MAC_OS_X_VERSION_MAX_ALLOWED < 1050
#error VTK requires the Mac OS X 10.5 SDK or later
#endif
#if MAC_OS_X_VERSION_MIN_REQUIRED < 1050
#error VTK requires a deployment target of Mac OS X 10.5 or later
#endif
// __has_feature is new in the 10.7 SDK, define it here if it's not yet defined.
#ifndef __has_feature
#define __has_feature(x) 0
#endif
#if __has_feature(objc_arc)
#error VTK does not yet support ARC memory management
#endif
// VTK-HeaderTest-Exclude: vtkCocoaMacOSXSDKCompatibility.h
This diff is collapsed.
This diff is collapsed.
/*=========================================================================
Program: Visualization Toolkit
Module: vtkCocoaRenderWindowInteractor.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
// .NAME vtkCocoaRenderWindowInteractor - implements Cocoa specific functions
// required by vtkRenderWindowInteractor.
//
// .SECTION Description
// The interactor interfaces with vtkCocoaRenderWindow and vtkCocoaGLView
// to trap messages from the Cocoa window manager and send them to vtk.
// IMPORTANT: This header must be in C++ only because it is included by .cxx files.
// That means no Objective C may be used. That's why some instance variables are
// void* instead of what they really should be.
#ifndef __vtkCocoaRenderWindowInteractor_h
#define __vtkCocoaRenderWindowInteractor_h
#include "vtkRenderingOpenGL2Module.h" // For export macro
#include "vtkRenderWindowInteractor.h"
#include "vtkTDxConfigure.h" // defines VTK_USE_TDX
#ifdef VTK_USE_TDX
class vtkTDxMacDevice;
#endif
class VTKRENDERINGOPENGL2_EXPORT vtkCocoaRenderWindowInteractor : public vtkRenderWindowInteractor
{
public:
// Description:
// Construct object so that light follows camera motion.
static vtkCocoaRenderWindowInteractor *New();
vtkTypeMacro(vtkCocoaRenderWindowInteractor,vtkRenderWindowInteractor);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Initialize the even handler
virtual void Initialize();
// Description:
// Enable/Disable interactions. By default interactors are enabled when
// initialized. Initialize() must be called prior to enabling/disabling
// interaction. These methods are used when a window/widget is being
// shared by multiple renderers and interactors. This allows a "modal"
// display where one interactor is active when its data is to be displayed
// and all other interactors associated with the widget are disabled
// when their data is not displayed.
virtual void Enable();
virtual void Disable();
// Description:
// This will start up the event loop and never return. If you
// call this method it will loop processing events until the
// application is exited.
virtual void Start();
// Description:
// By default the interactor installs a MessageProc callback which
// intercepts windows messages to the window and controls interactions.
// MFC or BCB programs can prevent this and instead directly route any mouse/key
// messages into the event bindings by setting InstallMessgeProc to false.
vtkSetMacro(InstallMessageProc,int);
vtkGetMacro(InstallMessageProc,int);
vtkBooleanMacro(InstallMessageProc,int);
// Description:
// Cocoa specific application terminate, calls ClassExitMethod then
// calls PostQuitMessage(0) to terminate app. An application can Specify
// ExitMethod for alternative behaviour (i.e. suppresion of keyboard exit)
void TerminateApp();
// Description:
// Methods to set the default exit method for the class. This method is
// only used if no instance level ExitMethod has been defined. It is
// provided as a means to control how an interactor is exited given
// the various language bindings (tcl, Cocoa, etc.).
static void SetClassExitMethod(void (*f)(void *), void *arg);
static void SetClassExitMethodArgDelete(void (*f)(void *));
// Description:
// These methods correspond to the the Exit, User and Pick
// callbacks. They allow for the Style to invoke them.
virtual void ExitCallback();
// int GetButtonDown();
// void SetButtonDown(int button);
protected:
vtkCocoaRenderWindowInteractor();
~vtkCocoaRenderWindowInteractor();
int InstallMessageProc;
// Description:
// Accessors for the Cocoa member variables. These should be used at all time, even
// by this class.
void SetTimerDictionary(void *dictionary); // Really an NSMutableDictionary*
void *GetTimerDictionary();
//BTX
// Description:
// Class variables so an exit method can be defined for this class
// (used to set different exit methods for various language bindings,
// i.e. tcl, java, Cocoa)
static void (*ClassExitMethod)(void *);
static void (*ClassExitMethodArgDelete)(void *);
static void *ClassExitMethodArg;
//ETX
// Description:
// Cocoa-specific internal timer methods. See the superclass for detailed
// documentation.
virtual int InternalCreateTimer(int timerId, int timerType, unsigned long duration);
virtual int InternalDestroyTimer(int platformTimerId);
// Description:
// Accessors for the cocoa manager (Really an NSMutableDictionary*).
// It manages all Cocoa objects in this C++ class.
void SetCocoaManager(void *manager);
void *GetCocoaManager();
#ifdef VTK_USE_TDX
vtkTDxMacDevice *Device;
#endif
private:
vtkCocoaRenderWindowInteractor(const vtkCocoaRenderWindowInteractor&); // Not implemented.
void operator=(const vtkCocoaRenderWindowInteractor&); // Not implemented.
// Important: this class cannot contain Objective-C instance
// variables for 2 reasons:
// 1) C++ files include this header
// 2) because of garbage collection
// Instead, use the CocoaManager dictionary to keep a collection
// of what would otherwise be Objective-C instance variables.
void *CocoaManager; // Really an NSMutableDictionary*
};
#endif
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment