Revision: 31303
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31303
Author:   merwin
Date:     2010-08-13 02:34:57 +0200 (Fri, 13 Aug 2010)

Log Message:
-----------
still working on tablet for Windows...

Modified Paths:
--------------
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.cpp
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.h
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_SystemWin32.cpp
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.cpp
    branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.h

Modified: branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.cpp      
2010-08-12 20:42:06 UTC (rev 31302)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.cpp      
2010-08-13 00:34:57 UTC (rev 31303)
@@ -71,4 +71,9 @@
     m_ButtonRight = false;
 }
 
+bool GHOST_Buttons::anyDown() const
+{
+       return m_ButtonLeft || m_ButtonMiddle || m_ButtonRight; 
+}
+
 GHOST_Buttons::~GHOST_Buttons() {}

Modified: branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.h
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.h        
2010-08-12 20:42:06 UTC (rev 31302)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_Buttons.h        
2010-08-13 00:34:57 UTC (rev 31303)
@@ -67,8 +67,13 @@
     /**
      * Sets the state of all buttons to up.
      */
-    virtual void clear(); 
-    
+    virtual void clear();
+
+    /**
+     * Are any buttons currently pressed?
+     */
+    bool anyDown() const;
+
     GHOST_TUns8 m_ButtonLeft           : 1;
     GHOST_TUns8 m_ButtonMiddle         : 1;
     GHOST_TUns8 m_ButtonRight          : 1;

Modified: branches/soc-2010-merwin/intern/ghost/intern/GHOST_SystemWin32.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_SystemWin32.cpp  
2010-08-12 20:42:06 UTC (rev 31302)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_SystemWin32.cpp  
2010-08-13 00:34:57 UTC (rev 31303)
@@ -506,8 +506,9 @@
 
 GHOST_EventButton* GHOST_SystemWin32::processButtonEvent(GHOST_TEventType 
type, GHOST_IWindow *window, GHOST_TButtonMask mask)
 {
-       if (eventIsFromTablet())
-               return NULL;
+       puts("ghost button event");
+//     if (eventIsFromTablet())
+//             return NULL;
 
        return new GHOST_EventButton (getSystem()->getMilliSeconds(), type, 
window, mask);
 }
@@ -932,7 +933,7 @@
                // Tablet events, processed
                
////////////////////////////////////////////////////////////////////////
                case WT_PACKET:
-                       m_tabletManager->processPackets((HCTX)lParam);
+                       m_tabletManager->processPackets(window);
                        break;
                case WT_CSRCHANGE:
                        m_tabletManager->changeTool((HCTX)lParam, wParam);
@@ -1002,10 +1003,10 @@
 
                                if (m_input_fidelity_hint == HI_FI)
                                        {
-                                       int buttons;
+                                       GHOST_Buttons buttons;
                                        getButtons(buttons);
                                        // don't bother grabbing extra mouse 
motion unless we're in a stroke
-                                       if (buttons)
+                                       if (buttons.anyDown())
                                                {
                                                // int n =
                                                getMoreMousePoints(mousePosX, 
mousePosY, xPrev, yPrev, window);

Modified: 
branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.cpp
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.cpp   
2010-08-12 20:42:06 UTC (rev 31302)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.cpp   
2010-08-13 00:34:57 UTC (rev 31303)
@@ -3,6 +3,9 @@
 
 #include "GHOST_TabletManagerWin32.h"
 #include "GHOST_WindowWin32.h"
+#include "GHOST_System.h"
+#include "GHOST_EventCursor.h"
+#include "GHOST_EventButton.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
@@ -162,20 +165,39 @@
 
        // set up context
        LOGCONTEXT archetype;
-       func_Info(WTI_DEFSYSCTX, 0, &archetype);
+//     func_Info(WTI_DEFSYSCTX, 0, &archetype);
+       func_Info(WTI_DEFCONTEXT, 0, &archetype);
 
        strcpy(archetype.lcName, "blender special");
        archetype.lcPktData = PACKETDATA;
        archetype.lcPktMode = PACKETMODE;
-       archetype.lcOptions |= CXO_MESSAGES | CXO_CSRMESSAGES;
+//     archetype.lcOptions |= CXO_MESSAGES | CXO_CSRMESSAGES;
+       archetype.lcOptions |= CXO_SYSTEM | CXO_MESSAGES | CXO_CSRMESSAGES;
 
-/*
-       if (hasTilt)
+       // we want first 5 buttons
+       archetype.lcBtnDnMask = 0x1f;
+       archetype.lcBtnUpMask = 0x1f;
+
+// BEGIN derived from Wacom's TILTTEST.C:
+       AXIS TabletX, TabletY;
+       func_Info(WTI_DEVICES,DVC_X,&TabletX);
+       func_Info(WTI_DEVICES,DVC_Y,&TabletY);
+       archetype.lcInOrgX = 0;
+       archetype.lcInOrgY = 0;
+       archetype.lcInExtX = TabletX.axMax;
+       archetype.lcInExtY = TabletY.axMax;
+    /* output the data in screen coords */
+       archetype.lcOutOrgX = archetype.lcOutOrgY = 0;
+       archetype.lcOutExtX = GetSystemMetrics(SM_CXSCREEN);
+    /* move origin to upper left */
+       archetype.lcOutExtY = -GetSystemMetrics(SM_CYSCREEN);
+// END
+
+/*     if (hasTilt)
                {
                archetype.lcPktData |= tiltMask;
                archetype.lcMoveMask |= tiltMask;
-               }
-*/
+               } */
 
        // open the context
        HCTX context = func_Open(window->getHWND(), &archetype, TRUE);
@@ -237,71 +259,117 @@
        data.tilt_y = sin(M_PI/2.0 - azmRad) * vecLen;
        }
 
-void GHOST_TabletManagerWin32::processPackets(HCTX context)
+void GHOST_TabletManagerWin32::processPackets(GHOST_WindowWin32* window)
        {
-       PACKET packets[MAX_QUEUE_SIZE];
-       int n = func_PacketsGet(context, MAX_QUEUE_SIZE, packets);
-//     printf("processing %d packets\n", n);
+       HCTX context = contextForWindow(window);
 
-       for (int i = 0; i < n; ++i)
+       if (context)
                {
-               PACKET const& packet = packets[i];
-               TabletToolData data = {activeTool};
-               int x = packet.pkX;
-               int y = packet.pkY;
-
-               if (activeTool.type == TABLET_MOUSE)
-                       if (x == prevMouseX && y == prevMouseY)
-                               // don't send any "mouse hasn't moved" events
-                               continue;
-                       else {
-                               prevMouseX = x;
-                               prevMouseY = y;
+               PACKET packets[MAX_QUEUE_SIZE];
+               int n = func_PacketsGet(context, MAX_QUEUE_SIZE, packets);
+       //      printf("processing %d packets\n", n);
+       
+               for (int i = 0; i < n; ++i)
+                       {
+                       PACKET const& packet = packets[i];
+                       TabletToolData data = {activeTool};
+                       int x = packet.pkX;
+                       int y = packet.pkY;
+       
+                       if (activeTool.type == TABLET_MOUSE)
+                               if (x == prevMouseX && y == prevMouseY)
+                                       // don't send any "mouse hasn't moved" 
events
+                                       continue;
+                               else {
+                                       prevMouseX = x;
+                                       prevMouseY = y;
+                                       }
+       
+                       // every packet from a WT_PACKET message comes from the 
same tool
+                       switch (activeTool.type)
+                               {
+                               case TABLET_MOUSE:
+                                       printf("mouse");
+                                       break;
+                               case TABLET_PEN:
+                                       printf("pen");
+                                       break;
+                               case TABLET_ERASER:
+                                       printf("eraser");
+                                       break;
+                               default:
+                                       printf("???");
                                }
+       
+                       printf(" (%d,%d)", x, y);
+       
+                       if (activeTool.hasPressure)
+                               {
+                               if (packet.pkNormalPressure)
+                                       {
+                                       data.pressure = pressureScale * 
packet.pkNormalPressure;
+                                       printf(" %d%%", (int)(100 * 
data.pressure));
+                                       }
+                               else
+                                       data.tool.hasPressure = false;
+                               }
+       
+                       if (activeTool.hasTilt)
+                               {
+                               // ORIENTATION const& tilt = 
packet.pkOrientation;
+                               // printf(" /%d,%d/", tilt.orAzimuth, 
tilt.orAltitude);
+                               convertTilt(packet.pkOrientation, data);
+       
+                               // data.tilt_x = tiltScaleX * 
packet.pkTilt.tiltX;
+                               // data.tilt_y = tiltScaleY * 
packet.pkTilt.tiltY;
+                               printf(" /%.2f,%.2f/", data.tilt_x, 
data.tilt_y);
+                               }
+       
+                       putchar('\n');
 
-               // every packet from a WT_PACKET message comes from the same 
tool
-               switch (activeTool.type)
-                       {
-                       case TABLET_MOUSE:
-                               printf("mouse");
-                               break;
-                       case TABLET_PEN:
-                               printf("pen");
-                               break;
-                       case TABLET_ERASER:
-                               printf("eraser");
-                               break;
-                       default:
-                               printf("???");
-                       }
+                       // at this point, construct a GHOST event and push it 
into the queue!
+                       // (having trouble with Wacom mouse scaling, so ignore 
it for now)
 
-               printf(" (%d,%d)", x, y);
-
-               if (activeTool.hasPressure)
-                       {
-                       if (packet.pkNormalPressure)
+//                     if (activeTool.type == TABLET_PEN || activeTool.type == 
TABLET_ERASER)
                                {
-                               data.pressure = pressureScale * 
packet.pkNormalPressure;
-                               printf(" %d%%", (int)(100 * data.pressure));
-                               }
-                       else
-                               data.tool.hasPressure = false;
-                       }
+                               GHOST_System* system = (GHOST_System*) 
GHOST_ISystem::getSystem();
 
-               if (activeTool.hasTilt)
-                       {
-                       // ORIENTATION const& tilt = packet.pkOrientation;
-                       // printf(" /%d,%d/", tilt.orAzimuth, tilt.orAltitude);
-                       convertTilt(packet.pkOrientation, data);
+                               if (packet.pkButtons)
+                                       {
+                                       // which button?
+                                       GHOST_TButtonMask e_button;
+                                       int buttonNumber = 
LOWORD(packet.pkButtons);
+                                       e_button = (GHOST_TButtonMask) 
buttonNumber;
 
-                       // data.tilt_x = tiltScaleX * packet.pkTilt.tiltX;
-                       // data.tilt_y = tiltScaleY * packet.pkTilt.tiltY;
-                       printf(" /%.2f,%.2f/", data.tilt_x, data.tilt_y);
-                       }
+                                       // pressed or released?
+                                       GHOST_TEventType e_action;
+                                       int buttonAction = 
HIWORD(packet.pkButtons);
+                                       if (buttonAction == TBN_DOWN)
+                                               e_action = 
GHOST_kEventButtonDown;
+                                       else
+                                               e_action = GHOST_kEventButtonUp;
 
-               putchar('\n');
+                                       printf("button %d %s\n", buttonNumber, 
buttonAction == TBN_DOWN ? "down" : "up");
 
-               // at this point, construct a GHOST event and push it into the 
queue!
+                                       GHOST_EventButton* e = new 
GHOST_EventButton(system->getMilliSeconds(), e_action, window, e_button);
+                                       
+//                                     system->pushEvent(e);
+                                       }
+                               else
+                                       {
+                                       GHOST_EventCursor* e = new 
GHOST_EventCursor(system->getMilliSeconds(), GHOST_kEventCursorMove, window, x, 
y);
+
+                                       // use older TabletData struct for 
testing until mine is in place
+                                       GHOST_TabletData& e_data = 
((GHOST_TEventCursorData*) e->getData())->tablet;
+                                       e_data.Active = (GHOST_TTabletMode) 
data.tool.type;
+                                       e_data.Pressure = data.pressure;
+                                       e_data.Xtilt = data.tilt_x;
+                                       e_data.Ytilt = data.tilt_y;
+
+//                                     system->pushEvent(e);
+                                       }
+                               }
+                       }
                }
        }
 

Modified: 
branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.h
===================================================================
--- branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.h     
2010-08-12 20:42:06 UTC (rev 31302)
+++ branches/soc-2010-merwin/intern/ghost/intern/GHOST_TabletManagerWin32.h     
2010-08-13 00:34:57 UTC (rev 31303)
@@ -90,7 +90,7 @@
        void openForWindow(GHOST_WindowWin32*);
        void closeForWindow(GHOST_WindowWin32*);
 
-       void processPackets(HCTX);
+       void processPackets(GHOST_WindowWin32*);
 
        void changeTool(HCTX, UINT serialNumber);
        void dropTool();


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to