TViewNoCompositingCompatible Class Reference

Base class for all the controls of the SDK. More...

#include <TViewNoCompositingCompatible.h>

Inheritance diagram for TViewNoCompositingCompatible:

Inheritance graph
[legend]
Collaboration diagram for TViewNoCompositingCompatible:

Collaboration graph
[legend]
List of all members.

Public Types

enum  tPropertyType { kPropertyTypeInt = 0, kPropertyTypeDouble, kPropertyTypeString }

Public Member Functions

 TViewNoCompositingCompatible (HIViewRef inControl)
virtual ~TViewNoCompositingCompatible ()
virtual CFStringRef GetType ()=0
void ForceRedraw ()
void ForceValueChange ()
virtual void FlushStaticBackground ()
 Force the static background to be rebuild.
virtual OSStatus SetFocusPart (ControlPartCode inDesiredFocus, Boolean inFocusEverything, ControlPartCode *outActualFocus)
virtual void EraseBackground (CGContextRef inContext, bool inCompositing)
virtual void Draw (RgnHandle inLimitRgn, CGContextRef inContext)
 Build a context for non-compositing window, draw the background and call the CompatibleDraw method.
virtual void DrawStaticBackground (RgnHandle inLimitRgn, CGContextRef inContext, bool inCompositing)
virtual void CompatibleDraw (RgnHandle inLimitRgn, CGContextRef inContext, bool inCompositing)=0
virtual OSStatus SetUpTracking (TCarbonEvent &inEvent)
 This method will be called by Track() if a subclass has overridden UseNonblockingTracking() to return false.
virtual OSStatus StartTracking (TCarbonEvent &inEvent, HIPoint &from)
 Called at the beginning of tracking.
virtual OSStatus StillTracking (TCarbonEvent &inEvent, HIPoint &from)
 Called whenever the mouse is moving during tracking.
virtual OSStatus StopTracking (TCarbonEvent &inEvent, HIPoint &from)
 Called at the end of tracking.
virtual OSStatus Track (TCarbonEvent &inEvent, ControlPartCode *outPartHit)
 Will automatically call SetUpTracking() if the result of UseNonblockingTracking() is true.
virtual OSStatus GetData (OSType inTag, ControlPartCode inPart, Size inSize, Size *outSize, void *inPtr)
 Get some data about the view Only 'TVew' is supported.
virtual ControlPartCode HitTest (const HIPoint &inWhere)
virtual OSStatus ControlHit (ControlPartCode inPart, UInt32 inModifiers)
virtual UInt32 GetBehaviors ()
virtual bool UseNonblockingTracking ()
 To enable the non-blocking tracking a subclass must override this method to return true.
virtual void DrawBackgroundImage (CGContextRef context)
 Draw background image into the context.
bool IsCompositing ()
 Return true if the view is in a compositing window.
void ConvertToGlobal (HIPoint &thePoint)
 Convert the local point to window (x,y).
void ConvertToLocal (HIPoint &thePoint)
 Convert the point to view local (x,y).
virtual void WriteToDictionary (CACFDictionary &dict)
virtual void ReadFromDictionary (CACFDictionary &dict)
virtual void SetProperty (OSType propID, double value)
virtual void SetProperty (OSType propID, int32_t value)
virtual void SetProperty (OSType propID, CFStringRef value)
virtual void SetProperty (OSType propID, AUGUI::font_t &value)
virtual void SetProperty (OSType propID, AUGUI::rect_t &value)
virtual void SetProperty (OSType propID, AUGUI::color_t &value)
virtual void SetProperty (OSType propID, AUGUI::point_t &value)
virtual bool GetProperty (OSType propID, double &value)
virtual bool GetProperty (OSType propID, int32_t &value)
virtual bool GetProperty (OSType propID, CFStringRef &value)
virtual bool GetProperty (OSType propID, AUGUI::font_t &value)
virtual bool GetProperty (OSType propID, AUGUI::rect_t &value)
virtual bool GetProperty (OSType propID, AUGUI::color_t &value)
virtual bool GetProperty (OSType propID, AUGUI::point_t &value)
virtual void PropertiesChanged ()
virtual const AUGUI::property_tGetPropertyDefinition (unsigned int i) const
virtual size_t GetPropertiesListSize () const
void SaveMinMaxVal (bool save)

Static Public Member Functions

static OSStatus RegisterSubclass (CFStringRef inID, ConstructProc inProc)
 This routine should be called by subclasses so they can be created as HIObjects.
static OSStatus UnRegisterSubclass (CFStringRef inID)
 This routine should be called by subclasses to unregister themself.
static void SetClassBundle (CFBundleRef sBundle)
template<class V>
static CFStringRef CopyClassIDForBundleID (CFStringRef bundleID)
 See AUGUI::CopyClassForBundleID().
template<class V>
static CFStringRef CopyCanonicalClassID ()
 See AUGUI::CopyCanonicalClassID().
template<class V>
static void RegisterClassForBundleID (CFStringRef str)
 Register the given class.
template<class V>
static void UnRegisterClassForBundleID (CFStringRef str)
static OSStatus NewView (HIViewRef *outControl, const HIRect *inBounds, HIViewRef inView, CFStringRef classID)
static OSStatus NewViewForCurrentBundle (HIViewRef *outControl, const HIRect *inBounds, HIViewRef inView, CFStringRef className)
template<class V>
static OSStatus Construct (HIObjectRef inBaseObject, TObject **outInstance)
template<class V>
static OSStatus CreateInView (HIViewRef *outControl, const HIRect *inBounds, HIViewRef inRoot, CFStringRef classID)
template<class V>
static OSStatus Create (HIViewRef *outControl, const HIRect *inBounds, WindowRef inWindow, CFStringRef classID)
template<class V>
static TViewNoCompositingCompatibleCreateForCurrentBundle (const HIRect *inBounds, HIViewRef inRoot)
static void UnRegisterAllClasses ()
static void SetWindowReady (bool ready)

Static Public Attributes

static const OSType theViewTag = 'TVew'

Protected Member Functions

virtual bool Prerender ()
bool IsWindowReady () const
virtual OSStatus mouseDragged (TCarbonEvent &inEvent)
 Our static mouseDragged event handler proc.
virtual OSStatus mouseUp (TCarbonEvent &inEvent)
 Our static mouseUp event handler proc.
virtual void PrerenderStaticBackground ()
 Create the offscreen CGImageRef containing the background of the control to speed up redraw.

Protected Attributes

CFBundleRef mBundleRef
int mCurrentFocusPart
CGImageRef mStaticBackground

Static Protected Attributes

static const AUGUI::property_t mPropertiesList []
static const size_t mPropertiesListSize = sizeof(mPropertiesList)/sizeof(AUGUI::property_t)-1

Detailed Description

Base class for all the controls of the SDK.

The custom controls classes you to use non standard controls for your GUI, like knobs, customs sliders or others.

One of the easiest way for developing custom controls, is to use Apple's HIFramework, available on Apple sample code site.

Unfortunately, it not compatible for controls embedded in windows with compositing flag.

In order to solve this problem, the SDK is offering a TViewNoCompositingCompatible class.

Just inherit from this class instead of TView, and replace your Draw( RgnHandle inLimitRgn, CGContextRef inContext) method by CompatibleDraw( RgnHandle * inLimitRgn, CGContextRef inContext,bool inCompositing ). The additional "inCompositing" flag let your control knows the kind of windows it does belongs to, if it does need it. The TViewNoCompositingCompatible class automatically build a context and release it if it is needed.

If you control needs mouse tracking (slider, knob...), instead of overriding Track and using TrackMouseLocation, you should override StillTracking, which is called each time the mouse is dragged, in a non-blocking way. That makes your host happier, since it still run while you are tracking. You can add additionnal code in StartTracking, called at the beginning of the tracking, and StopTracking, called at the end.

All custom control classes should provide a GetControlName() method that return the unique ID of the class. And a non static GetType method that just return GetControlName

For example, if you choose to define a "slider" class, you could define : static CFStringRef mySliderClass::GetControlName() { return CFSTR("myslider");}; virtual CFStringRef mySliderClass::GetType() { return GetControlName();};

To register your class, the RegisterClassForBundleID template method should be called in your InitWindows GUI class : TViewNoCompositingCompatible::RegisterClassForBundleID<mySliderClass>(mBundleID);

And you should set the classID of your sliders in you .nib file to "your_AU_bundle_id.myslider"


Member Enumeration Documentation

enum TViewNoCompositingCompatible::tPropertyType
 

Enumerator:
kPropertyTypeInt 
kPropertyTypeDouble 
kPropertyTypeString 


Constructor & Destructor Documentation

TViewNoCompositingCompatible::TViewNoCompositingCompatible HIViewRef  inControl  ) 
 

TViewNoCompositingCompatible::~TViewNoCompositingCompatible  )  [virtual]
 


Member Function Documentation

virtual void TViewNoCompositingCompatible::CompatibleDraw RgnHandle  inLimitRgn,
CGContextRef  inContext,
bool  inCompositing
[pure virtual]
 

Implemented in ColorSwatch, OpenGLViewDemo, TArcSliderControl, TArcSliderControl2, TDragTextControl, TImageButton, TImagePopup, TKnobArcControl, TKnobControl, TMeterControl, TMeterPartialControl, TMinMaxSlider, TMultiButton, TMultiPane, TPMMatrixPane, TPMTexturedCell, TPngPictControl, TSliderControl, TSwitch, TTextPopup, TTimeLineControl, TTransparentEditText, TValuePictControl, TValueTextControl, and TXYControl.

template<class V>
OSStatus TViewNoCompositingCompatible::Construct HIObjectRef  inBaseObject,
TObject **  outInstance
[static]
 

OSStatus TViewNoCompositingCompatible::ControlHit ControlPartCode  inPart,
UInt32  inModifiers
[virtual]
 

Reimplemented in ColorSwatch, TImageButton, TPMMatrixPane, and TPushButton.

void TViewNoCompositingCompatible::ConvertToGlobal HIPoint &  thePoint  ) 
 

Convert the local point to window (x,y).

void TViewNoCompositingCompatible::ConvertToLocal HIPoint &  thePoint  ) 
 

Convert the point to view local (x,y).

template<class V>
CFStringRef TViewNoCompositingCompatible::CopyCanonicalClassID  )  [static]
 

See AUGUI::CopyCanonicalClassID().

template<class V>
CFStringRef TViewNoCompositingCompatible::CopyClassIDForBundleID CFStringRef  bundleID  )  [static]
 

See AUGUI::CopyClassForBundleID().

template<class V>
OSStatus TViewNoCompositingCompatible::Create HIViewRef *  outControl,
const HIRect *  inBounds,
WindowRef  inWindow,
CFStringRef  classID
[static]
 

template<class V>
TViewNoCompositingCompatible * TViewNoCompositingCompatible::CreateForCurrentBundle const HIRect *  inBounds,
HIViewRef  inRoot
[static]
 

template<class V>
OSStatus TViewNoCompositingCompatible::CreateInView HIViewRef *  outControl,
const HIRect *  inBounds,
HIViewRef  inRoot,
CFStringRef  classID
[static]
 

void TViewNoCompositingCompatible::Draw RgnHandle  inLimitRgn,
CGContextRef  inContext
[virtual]
 

Build a context for non-compositing window, draw the background and call the CompatibleDraw method.

Reimplemented in TMultiPane, and TPMMatrixPane.

void TViewNoCompositingCompatible::DrawBackgroundImage CGContextRef  context  )  [virtual]
 

Draw background image into the context.

Only the background part of the image hierarchy is taken in account (we suppose no visible part of controls are overlapping)

virtual void TViewNoCompositingCompatible::DrawStaticBackground RgnHandle  inLimitRgn,
CGContextRef  inContext,
bool  inCompositing
[inline, virtual]
 

Reimplemented in OpenGLViewDemo, TArcSliderControl, TArcSliderControl2, TDragTextControl, TKnobControl, TMultiButton, TPngPictControl, TSliderControl, TSwitch, TTextPopup, TTimeLineControl, TTransparentEditText, and TXYControl.

void TViewNoCompositingCompatible::EraseBackground CGContextRef  inContext,
bool  inCompositing
[virtual]
 

Reimplemented in TArcSliderControl2.

void TViewNoCompositingCompatible::FlushStaticBackground  )  [virtual]
 

Force the static background to be rebuild.

void TViewNoCompositingCompatible::ForceRedraw  ) 
 

void TViewNoCompositingCompatible::ForceValueChange  ) 
 

virtual UInt32 TViewNoCompositingCompatible::GetBehaviors  )  [inline, virtual]
 

GetBehaviors

Reimplemented in ColorSwatch, TImageButton, TMultiPane, TPMMatrixPane, TPngPictControl, TSliderControl, TTransparentEditText, TValuePictControl, and TValueTextControl.

OSStatus TViewNoCompositingCompatible::GetData OSType  inTag,
ControlPartCode  inPart,
Size  inSize,
Size *  outSize,
void *  inPtr
[virtual]
 

Get some data about the view Only 'TVew' is supported.

It is returning the C++ object.

Reimplemented in ColorSwatch, TImageButton, TImagePopup, TMinMaxSlider, TMultiPane, TPMTexturedCell, TPngPictControl, TSliderControl, TTextPopup, TTimeLineControl, TTransparentEditText, and TXYControl.

virtual size_t TViewNoCompositingCompatible::GetPropertiesListSize  )  const [inline, virtual]
 

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
AUGUI::point_t value
[virtual]
 

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
AUGUI::color_t value
[virtual]
 

Reimplemented in TKnobArcControl, TKnobControl, and TTextPopup.

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
AUGUI::rect_t value
[virtual]
 

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
AUGUI::font_t value
[virtual]
 

Reimplemented in TTextPopup.

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
CFStringRef &  value
[virtual]
 

Reimplemented in TKnobControl, TSliderControl, and TTextPopup.

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
int32_t &  value
[virtual]
 

Reimplemented in TKnobArcControl, TKnobControl, TSliderControl, and TTextPopup.

bool TViewNoCompositingCompatible::GetProperty OSType  propID,
double &  value
[virtual]
 

Reimplemented in TArcSliderControl2, TKnobArcControl, TKnobControl, TSliderControl, and TTextPopup.

virtual const AUGUI::property_t& TViewNoCompositingCompatible::GetPropertyDefinition unsigned int  i  )  const [inline, virtual]
 

virtual CFStringRef TViewNoCompositingCompatible::GetType  )  [pure virtual]
 

ControlPartCode TViewNoCompositingCompatible::HitTest const HIPoint &  inWhere  )  [virtual]
 

Reimplemented in ColorSwatch, TImagePopup, TPMMatrixPane, TTextPopup, and TTransparentEditText.

bool TViewNoCompositingCompatible::IsCompositing  ) 
 

Return true if the view is in a compositing window.

bool TViewNoCompositingCompatible::IsWindowReady  )  const [inline, protected]
 

OSStatus TViewNoCompositingCompatible::mouseDragged TCarbonEvent &  inEvent  )  [protected, virtual]
 

Our static mouseDragged event handler proc.

Reimplemented in TPMMatrixPane.

OSStatus TViewNoCompositingCompatible::mouseUp TCarbonEvent &  inEvent  )  [protected, virtual]
 

Our static mouseUp event handler proc.

Reimplemented in TPMMatrixPane.

OSStatus TViewNoCompositingCompatible::NewView HIViewRef *  outControl,
const HIRect *  inBounds,
HIViewRef  inView,
CFStringRef  classID
[static]
 

OSStatus TViewNoCompositingCompatible::NewViewForCurrentBundle HIViewRef *  outControl,
const HIRect *  inBounds,
HIViewRef  inView,
CFStringRef  className
[static]
 

virtual bool TViewNoCompositingCompatible::Prerender  )  [inline, protected, virtual]
 

Reimplemented in TArcSliderControl2.

void TViewNoCompositingCompatible::PrerenderStaticBackground  )  [protected, virtual]
 

Create the offscreen CGImageRef containing the background of the control to speed up redraw.

It does include the window background and the static part of the control, drawn by DrawStaticBackground method

virtual void TViewNoCompositingCompatible::PropertiesChanged  )  [inline, virtual]
 

void TViewNoCompositingCompatible::ReadFromDictionary CACFDictionary &  dict  )  [virtual]
 

template<class V>
void TViewNoCompositingCompatible::RegisterClassForBundleID CFStringRef  str  )  [static]
 

Register the given class.

OSStatus TViewNoCompositingCompatible::RegisterSubclass CFStringRef  inID,
ConstructProc  inProc
[static]
 

This routine should be called by subclasses so they can be created as HIObjects.

void TViewNoCompositingCompatible::SaveMinMaxVal bool  save  )  [inline]
 

void TViewNoCompositingCompatible::SetClassBundle CFBundleRef  sBundle  )  [static]
 

OSStatus TViewNoCompositingCompatible::SetFocusPart ControlPartCode  inDesiredFocus,
Boolean  inFocusEverything,
ControlPartCode *  outActualFocus
[virtual]
 

Reimplemented in TTransparentEditText.

void TViewNoCompositingCompatible::SetProperty OSType  propID,
AUGUI::point_t value
[virtual]
 

void TViewNoCompositingCompatible::SetProperty OSType  propID,
AUGUI::color_t value
[virtual]
 

Reimplemented in TKnobArcControl, TKnobControl, and TTextPopup.

void TViewNoCompositingCompatible::SetProperty OSType  propID,
AUGUI::rect_t value
[virtual]
 

void TViewNoCompositingCompatible::SetProperty OSType  propID,
AUGUI::font_t value
[virtual]
 

Reimplemented in TTextPopup.

void TViewNoCompositingCompatible::SetProperty OSType  propID,
CFStringRef  value
[virtual]
 

Reimplemented in TKnobControl, TSliderControl, and TTextPopup.

void TViewNoCompositingCompatible::SetProperty OSType  propID,
int32_t  value
[virtual]
 

Reimplemented in TKnobArcControl, TKnobControl, TSliderControl, and TTextPopup.

void TViewNoCompositingCompatible::SetProperty OSType  propID,
double  value
[virtual]
 

Reimplemented in TArcSliderControl2, TKnobArcControl, TKnobControl, TSliderControl, and TTextPopup.

OSStatus TViewNoCompositingCompatible::SetUpTracking TCarbonEvent &  inEvent  )  [virtual]
 

This method will be called by Track() if a subclass has overridden UseNonblockingTracking() to return false.

Subclasses that do not call this will inherit the default tracking behaviour. Handlers for the MouseUp and MouseDragged events are installed. The control subclass must then override StillTracking instead of Track in order to get this behavior.

See also:
UseDefaultTracking()

static void TViewNoCompositingCompatible::SetWindowReady bool  ready  )  [inline, static]
 

OSStatus TViewNoCompositingCompatible::StartTracking TCarbonEvent &  inEvent,
HIPoint &  from
[virtual]
 

Called at the beginning of tracking.

Reimplemented in TArcSliderControl2, TMeterControl, TMinMaxSlider, TMultiButton, TPushButton, TSliderControl, TSwitch, TTimeLineControl, TTransparentEditText, TValuePictButtonControl, and TXYControl.

OSStatus TViewNoCompositingCompatible::StillTracking TCarbonEvent &  inEvent,
HIPoint &  from
[virtual]
 

Called whenever the mouse is moving during tracking.

Reimplemented in TArcSliderControl2, TDragTextControl, TKnobControl, TMeterControl, TMinMaxSlider, TSliderControl, TTimeLineControl, TTransparentEditText, TValuePictControl, TValueTextControl, and TXYControl.

OSStatus TViewNoCompositingCompatible::StopTracking TCarbonEvent &  inEvent,
HIPoint &  from
[virtual]
 

Called at the end of tracking.

Our default implementation calls the HitTest() method to determine which part of the control the mouse was over when the button was released. This part code is set in inEvent.

Reimplemented in TMultiButton, TPushButton, and TValuePictButtonControl.

OSStatus TViewNoCompositingCompatible::Track TCarbonEvent &  inEvent,
ControlPartCode *  outPartHit
[virtual]
 

Will automatically call SetUpTracking() if the result of UseNonblockingTracking() is true.

If false, this method will return the eventNotHandledErr error code to invoke default mouse tracking.

Reimplemented in ColorSwatch, TImageButton, TImagePopup, and TTextPopup.

void TViewNoCompositingCompatible::UnRegisterAllClasses  )  [static]
 

template<class V>
void TViewNoCompositingCompatible::UnRegisterClassForBundleID CFStringRef  str  )  [static]
 

OSStatus TViewNoCompositingCompatible::UnRegisterSubclass CFStringRef  inID  )  [static]
 

This routine should be called by subclasses to unregister themself.

virtual bool TViewNoCompositingCompatible::UseNonblockingTracking  )  [inline, virtual]
 

To enable the non-blocking tracking a subclass must override this method to return true.

Reimplemented in OpenGLViewDemo, TDragTextControl, TKnobControl, TMultiButton, TPMMatrixPane, TPushButton, TSliderControl, TSwitch, TTimeLineControl, TTransparentEditText, TValuePictControl, TValueTextControl, and TXYControl.

void TViewNoCompositingCompatible::WriteToDictionary CACFDictionary &  dict  )  [virtual]
 


Member Data Documentation

CFBundleRef TViewNoCompositingCompatible::mBundleRef [protected]
 

int TViewNoCompositingCompatible::mCurrentFocusPart [protected]
 

const AUGUI::property_t TViewNoCompositingCompatible::mPropertiesList [static, protected]
 

Initial value:

 {
                                AUGUI::property_t('titl', CFSTR("title"), CFSTR("Title"), AUGUI::kString),
                                AUGUI::property_t('fram', CFSTR("frame"), CFSTR("Frame"), AUGUI::kRect),
                                AUGUI::property_t('enab', CFSTR("enabled"), CFSTR("Enabled"), AUGUI::kBool),
                                AUGUI::property_t('min ', CFSTR("min"), CFSTR("Minimum"), AUGUI::kInteger),
                                AUGUI::property_t('max ', CFSTR("max"), CFSTR("Maximum"), AUGUI::kInteger),
                                AUGUI::property_t('val ', CFSTR("val"), CFSTR("Value"), AUGUI::kInteger),
                                AUGUI::property_t()
}

const size_t TViewNoCompositingCompatible::mPropertiesListSize = sizeof(mPropertiesList)/sizeof(AUGUI::property_t)-1 [static, protected]
 

CGImageRef TViewNoCompositingCompatible::mStaticBackground [protected]
 

const OSType TViewNoCompositingCompatible::theViewTag = 'TVew' [static]
 


The documentation for this class was generated from the following files:




Generated on Sat Jul 8 13:11:28 2006 for AUGUI Framework by doxygen1.4.6

hosted on SourceForge.net Logo