Difference between revisions of "Mac OS X Implementing HIView"

From Apache OpenOffice Wiki
Jump to: navigation, search
(Introduction)
Line 14: Line 14:
  
 
Event handler implementation in HandleHIViewEvent()
 
Event handler implementation in HandleHIViewEvent()
 +
 +
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()
 +
 +
The use of HI* controls, in vcl
  
  

Revision as of 16:22, 12 March 2007

Contributors

Eric Bachard[ericb]

Sébastien Plisson [plipli]

Introduction

This page is part of [Native Controls Implementation] and the objective is to use HIView for HIComboboxes or other HI* controls.

The generic implmentation, under tests (and not fully working), uses :

Definition in aquavclevents.hxx

Event handler implementation in HandleHIViewEvent()

The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()

The use of HI* controls, in vcl


Note : we "or"- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. [FIXME] : investigate, because use this attribute causes refresh issues

Current code implementation

Events for HIView

Two sorts of events are needed:

  • for objects (ClasskEventClassHIObject )  :
kEventHIObjectConstruct

kEventHIObjectInitialize

kEventHIObjectDestruct
  • for controls themselves ( Class kEventClassControl ) :
kEventControlDraw 

kEventControlInitialize

kEventControlHitTest

kEventControlGetPartRegion

kEventControlBoundsChanged


Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.

Install Event Handler

Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :


InstallEventHandler (
                 GetControlEventTarget (mhView),
                	NewEventHandlerUPP (HandleHIViewEvent),
            		GetEventTypeCount (cHIViewEvent),
                 cHIViewEvent,
                 (void*)mhView,
	               	NULL
                 );

The HI* Event Handler

The Handler is OSStatus type, and is used when events are detected.

e.g.  : we created HandleHIViewEvent()

using GetEventParameter, itself using the parameters described in Apple documentation.

Code sample :

OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)
{ 
    //lock
    ImplSalYieldMutexAcquire();
    
    
    OSStatus status = noErr;
    
    // we use mrContext, global and seen from everywhere 
    CGContextRef mrContext; 
    
    // create HIRect, contianing the control bounds ( in local coordinates) 
    HIRect bounds;  

    status = GetEventParameter (inEvent, 
                                kEventParamCGContextRef, 
                                typeCGContextRef, 
                                NULL, 
                                sizeof (CGContextRef), 
                                NULL, 
                                &mrContext); 

    // not used, but usefull
    //require_noerr(status, CantGetGraphicsContext); // 2
    
   
    // We need to know the bounds containing the current control 
    HIViewGetBounds ((HIViewRef) inUserData, &bounds); 

    // not used, but usefull
    //require_noerr(status, CantGetBoundingRectangle);

    // unlock 
    ImplSalYieldMutexRelease();
    
    return status;  
} 

HIView use in AquaSalFrame::CreateNewSystemWindow()

Code sample :

   
    //  TEST HIVIew part 
    // Set mhView with HIView Content ViewRef
  
        HIRect myViewRect;
        myViewRect.origin.x = aContentRect.left; 
        myViewRect.origin.y = aContentRect.right; 
        myViewRect.size.width = aContentRect.right-aContentRect.left; 
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; 
        OSStatus errval;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &mhView); 

        // make the view visible                        
        HIViewSetVisible (mhView, true); 
        
        // set the frame
        HIViewSetFrame (mhView, &myViewRect);

Controls

[FIXME]

Usefull Links

Reference

HIVIew  : [reference]

or : [same in .pdf format]

Code sample

Personal tools