[vtkusers] Problem QVTKWidget using vtkCarbonRenderWindow instead of vtkCocoaRenderWindow

Elvis Dowson elvis.dowson at mac.com
Fri Sep 26 11:32:26 EDT 2008


Hi,
          Could you tell me how I should apply the patch? I've saved  
the contents to QVTKWidget.diff

Should I use the command

patch -p0 <QVTKWidget.diff

from my top level source directory? My sources are located in /Users/ 
elvis/Tool/vtk-5.x/src

Inside that you have the VTK directory.

Where should I put the patch and execute the patch command?

Best regards,

Elvis Dowson

On Sep 26, 2008, at 5:37 PM, Clinton Stimpson wrote:

>
> That's the right flag, QT_MAC_USE_COCOA.  It is initially set in  
> qconfig.h, which is generated by the configure script, and only  
> forced on in qglobal.h if building 64 bit.
> I've attached a patch for you.  How far does that get you?
>
> Clint
>
> Elvis Dowson wrote:
>> Hi,
>>        In the file qglobal.h, I found a definition called  
>> QT_MAC_USE_COCOA that could be used  to switch to a vtkCocoa  
>> implementation for QVTKWidget.
>>
>> However, upon closer investigation, I find that it is only enable  
>> in Qt-4.5.x if 64-bit support is turned on.
>>
>> #ifdef AUTODETECT_COCOA
>> #  ifdef Q_OS_MAC64
>> #    define QT_MAC_USE_COCOA 1
>> #  endif
>> #endif
>>
>> I couldn't find any explicit definitions for Carbon, see code  
>> snippet from qglobal.h below
>>
>> #elif defined(Q_OS_UNIX)
>> #  if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && ! 
>> defined(Q_WS_QWS)
>> #    define Q_WS_MAC
>> #    define Q_WS_MACX
>> #    if defined(Q_OS_MAC64)
>> #      define Q_WS_MAC64
>> #    elif defined(Q_OS_MAC32)
>> #      define Q_WS_MAC32
>> #    endif
>> #  elif !defined(Q_WS_QWS)
>> #    define Q_WS_X11
>> #  endif
>> #endif
>>
>> So, I guess this implies that the quickest way to try to fix this  
>> issue is to add support for Cocoa bindings for QVTKWidget for 64- 
>> bits.
>>
>> Best regards,
>>
>> Elvis
>>
>>
>> On Sep 26, 2008, at 11:41 AM, Elvis Dowson wrote:
>>>
>>>
>>> Any ideas on which pre-processor symbol I can use to help switch  
>>> between Carbon and Cocoa. At the moment, there is only one symbol  
>>> Q_WS_MAC.
>>>
>
> Index: QVTKWidget.cxx
> ===================================================================
> RCS file: /cvsroot/VTK/VTK/GUISupport/Qt/QVTKWidget.cxx,v
> retrieving revision 1.36
> diff -u -r1.36 QVTKWidget.cxx
> --- QVTKWidget.cxx	19 Jun 2007 15:09:05 -0000	1.36
> +++ QVTKWidget.cxx	26 Sep 2008 13:28:19 -0000
> @@ -42,9 +42,12 @@
> #include "vtkstd/map"
> #include "vtkInteractorStyleTrackballCamera.h"
> #include "vtkRenderWindow.h"
> -#if defined(Q_WS_MAC)
> +#if defined(QVTK_USE_CARBON)
> #  include "vtkCarbonRenderWindow.h"
> #endif
> +#if defined(QVTK_USE_COCOA)
> +#  include "vtkCocoaRenderWindow.h"
> +#endif
> #include "vtkCommand.h"
> #include "vtkOStrStreamWrapper.h"
> #include "vtkObjectFactory.h"
> @@ -131,7 +134,7 @@
>   this->mCachedImage->SetOrigin(0,0,0);
>   this->mCachedImage->SetSpacing(1,1,1);
>
> -#if defined(Q_WS_MAC)
> +#if defined(QVTK_USE_CARBON)
>   this->DirtyRegionHandler = 0;
>   this->DirtyRegionHandlerUPP = 0;
> #endif
> @@ -223,7 +226,7 @@
>     this->mRenWin->SetWindowId( reinterpret_cast<void*>(this- 
> >winId()));
>
>     // mac compatibility issues
> -#if defined(Q_WS_MAC) && (QT_VERSION < 0x040000)
> +#if defined(QVTK_USE_CARBON) && (QT_VERSION < 0x040000)
>     this->mRenWin->SetWindowId( NULL );
>     static_cast<vtkCarbonRenderWindow*>(this->mRenWin)->SetRootWindow(
>       reinterpret_cast<WindowPtr>(this->handle()));
> @@ -238,7 +241,7 @@
>     if(isVisible())
>       {
>       this->mRenWin->Start();
> -#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000)
> +#if defined (QVTK_USE_CARBON) && (QT_VERSION < 0x040000)
>       macFixRect();
> #endif
>       }
> @@ -272,7 +275,7 @@
>     cbc->Delete();
>     }
>
> -#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000
> +#if defined(QVTK_USE_CARBON) && QT_VERSION >= 0x040000
>   if(mRenWin && !this->DirtyRegionHandlerUPP)
>     {
>     this->DirtyRegionHandlerUPP =  
> NewEventHandlerUPP(QVTKWidget::DirtyRegionProcessor);
> @@ -439,7 +442,7 @@
>     }
>   this->markCachedImageAsDirty();
>
> -#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000)
> +#if defined (QVTK_USE_CARBON) && (QT_VERSION < 0x040000)
>   macFixRect();
> #endif
> }
> @@ -456,7 +459,7 @@
>   // give the size to the interactor and vtk window
>   this->mRenWin->vtkRenderWindow::SetPosition(this->x(), this->y());
>
> -#if defined (Q_WS_MAC) && (QT_VERSION < 0x040000)
> +#if defined (QVTK_USE_CARBON) && (QT_VERSION < 0x040000)
>   macFixRect();
> #endif
> }
> @@ -973,7 +976,7 @@
>     x11_setup_window();
>
>     // connect to new window
> -#if defined(Q_WS_MAC)
> +#if defined(QVTK_USE_CARBON)
>     static_cast<vtkCarbonRenderWindow*>(this->mRenWin)->SetRootWindow(
>       reinterpret_cast<WindowPtr>(this->handle()));
>
> @@ -1415,7 +1418,7 @@
> #endif
> }
>
> -#if defined (Q_WS_MAC) && QT_VERSION >= 0x040000
> +#if defined (QVTK_USE_CARBON) && QT_VERSION >= 0x040000
> OSStatus QVTKWidget::DirtyRegionProcessor(EventHandlerCallRef,  
> EventRef event, void* wid)
> {
>   QVTKWidget* widget = reinterpret_cast<QVTKWidget*>(wid);
> @@ -1430,7 +1433,7 @@
>
> #endif
>
> -#if defined (Q_WS_MAC) && QT_VERSION < 0x040000
> +#if defined (QVTK_USE_CARBON) && QT_VERSION < 0x040000
>
> // gotta do some special stuff on the MAC to make it work right
> // this stuff will need changing when using Qt4 with HIViews
> @@ -1510,7 +1513,7 @@
> // slot to update the draw region and draw the scene
> void QVTKWidget::internalMacFixRect()
> {
> -#if defined(Q_WS_MAC) && QT_VERSION < 0x040000
> +#if defined(QVTK_USE_CARBON) && QT_VERSION < 0x040000
>   this->macFixRect();
>   this->update();
> #endif
> Index: QVTKWidget.h.in
> ===================================================================
> RCS file: /cvsroot/VTK/VTK/GUISupport/Qt/QVTKWidget.h.in,v
> retrieving revision 1.1
> diff -u -r1.1 QVTKWidget.h.in
> --- QVTKWidget.h.in	1 Apr 2008 16:43:24 -0000	1.1
> +++ QVTKWidget.h.in	26 Sep 2008 13:28:19 -0000
> @@ -41,7 +41,14 @@
> #include <vtkConfigure.h>
> class vtkImageData;
>
> -#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000
> +#if defined(Q_WS_MAC) && defined(QT_MAC_USE_COCOA)
> +# define QVTK_USE_COCOA
> +#elif defined(Q_WS_MAC)
> +# define QVTK_USE_CARBON
> +#endif
> +
> +
> +#if defined(QVTK_USE_CARBON) && QT_VERSION >= 0x040000
> #include <Carbon/Carbon.h>    // Event handling for dirty region
> #endif
>
> @@ -209,13 +216,13 @@
>   // that VTK chooses
>   void x11_setup_window();
>
> -#if defined(Q_WS_MAC) && QT_VERSION < 0x040000
> +#if defined(QVTK_USE_CARBON) && QT_VERSION < 0x040000
>   void macFixRect();
>   virtual void setRegionDirty(bool);
>   virtual void macWidgetChangedWindow();
> #endif
>
> -#if defined(Q_WS_MAC) && QT_VERSION >= 0x040000
> +#if defined(QVTK_USE_CARBON) && QT_VERSION >= 0x040000
>   EventHandlerUPP DirtyRegionHandlerUPP;
>   EventHandlerRef DirtyRegionHandler;
>   static OSStatus DirtyRegionProcessor(EventHandlerCallRef er,  
> EventRef event, void*);




More information about the vtkusers mailing list