[vtkusers] Problem QVTKWidget using vtkCarbonRenderWindow instead of vtkCocoaRenderWindow

Elvis Dowson elvis.dowson at mac.com
Sat Sep 27 11:06:47 EDT 2008


Hi Clint,
                   I manually applied the patch line by line, and got  
your updated patch file only later.

Anyway, the patch allowed vtk-5.3.x to compile with no problems.  
However, there is a problem with Qt-4.5.x. It doesn't use cocoa for 32- 
bits even if you try to compile for it. There is also a problem  
compiling it for 64-bits for some files, and the QT_MAC_USE_COCOA is  
only activated when you compile for 64-bits.

So I'm stuck at the moment and cannot proceed!!

Best regards,

Elvis Dowson


On Sep 26, 2008, at 8:22 PM, clinton at elemtech.com wrote:

>
> Try this one.
>
> Clint
>
> On Friday 26 September 2008 9:53:26 am Michael Jackson wrote:
>> patching file QVTKWidget.cxx
>> patch: **** malformed patch at line 22: @@ -131,7 +134,7 @@
>>
>> On Sep 26, 2008, at 11:42 AM, clinton at elemtech.com wrote:
>>> Run patch in the GUISupport/Qt directory, because that's where I
>>> made the
>>> patch this time.
>>>
>>> cd VTK/GUISupport/Qt
>>> patch < /path/to/QVTKWidget.diff
>>>
>>> Clint
>>>
>>> On Friday 26 September 2008 9:32:26 am Elvis Dowson wrote:
>>>> 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*);
>
>
> <qvtk.patch>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20080927/c55f496a/attachment.htm>


More information about the vtkusers mailing list