[Libreoffice-commits] core.git: 4 commits - android/experimental vcl/android vcl/README vcl/source

Tor Lillqvist tml at iki.fi
Thu Mar 7 00:16:21 PST 2013


 android/experimental/desktop/src/org/libreoffice/experimental/desktop/Desktop.java |   48 -
 vcl/README                                                                         |   46 
 vcl/android/androidinst.cxx                                                        |  463 ----------
 vcl/source/app/svapp.cxx                                                           |   25 
 vcl/source/window/winproc.cxx                                                      |   29 
 5 files changed, 138 insertions(+), 473 deletions(-)

New commits:
commit e669502dcf2f825842ba87ee4a14a0be26883e28
Author: Tor Lillqvist <tml at iki.fi>
Date:   Thu Mar 7 10:15:28 2013 +0200

    Start hacking on scrolling
    
    Change-Id: I74f1d7feb935be65629bdbd7464f9882229948e5

diff --git a/android/experimental/desktop/src/org/libreoffice/experimental/desktop/Desktop.java b/android/experimental/desktop/src/org/libreoffice/experimental/desktop/Desktop.java
index c10df22..ace4efe 100644
--- a/android/experimental/desktop/src/org/libreoffice/experimental/desktop/Desktop.java
+++ b/android/experimental/desktop/src/org/libreoffice/experimental/desktop/Desktop.java
@@ -50,6 +50,7 @@ public class Desktop
     public static native void key(char c);
     public static native void touch(int action, int x, int y);
     public static native void zoom(float scale, int x, int y);
+    public static native void scroll(int x, int y);
 
     /**
      * This class contains the state that is initialized once and never changes
@@ -165,7 +166,8 @@ public class Desktop
         GestureDetector gestureDetector;
         ScaleGestureDetector scaleDetector;
 
-        boolean scalingInProgress;
+        boolean scrollInProgress, scalingInProgress;
+        float translateX = 0, translateY = 0;
         float accumulatedScale = 1;
         float pivotX = 0, pivotY = 0;
 
@@ -179,14 +181,18 @@ public class Desktop
                                     new GestureDetector.SimpleOnGestureListener() {
                                         @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
                                         {
-                                            Log.i(TAG, "onFling: events:" + e1 + ", " + e2 + ", velocity: (" + velocityX + ", " + velocityY + ")");
+                                            Log.i(TAG, "onFling: (" + velocityX + ", " + velocityY + ")");
                                             return false;
                                         }
 
-                                        @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)
+                                        @Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY)
                                         {
-                                            Log.i(TAG, "onScroll: events:" + e1 + ", " + e2 + ", velocity: (" + velocityX + ", " + velocityY + ")");
-                                            return false;
+                                            Log.i(TAG, "onScroll: (" + distanceX + ", " + distanceY + ")");
+                                            translateX += -distanceX;
+                                            translateY += -distanceY;
+                                            scrollInProgress = true;
+                                            invalidate();
+                                            return true;
                                         }
                                     });
 
@@ -202,7 +208,7 @@ public class Desktop
 
                                              @Override public boolean onScale(ScaleGestureDetector detector)
                                              {
-                                                 accumulatedScale *= detector.getScaleFactor();;
+                                                 accumulatedScale *= detector.getScaleFactor();
                                                  pivotX = detector.getFocusX();
                                                  pivotY = detector.getFocusY();
                                                  invalidate();
@@ -229,10 +235,19 @@ public class Desktop
                 setViewSize(getWidth(), getHeight());
             }
             renderVCL(mBitmap);
-            canvas.save();
-            canvas.scale(accumulatedScale, accumulatedScale, pivotX, pivotY);
-            canvas.drawBitmap(mBitmap, 0, 0, null);
-            canvas.restore();
+            if (scrollInProgress) {
+                canvas.save();
+                canvas.translate(translateX, translateY);
+                canvas.drawBitmap(mBitmap, 0, 0, null);
+                canvas.restore();
+            } else if (scalingInProgress) {
+                canvas.save();
+                canvas.scale(accumulatedScale, accumulatedScale, pivotX, pivotY);
+                canvas.drawBitmap(mBitmap, 0, 0, null);
+                canvas.restore();
+            } else {
+                canvas.drawBitmap(mBitmap, 0, 0, null);
+            }
             renderedOnce = true;
         }
 
@@ -270,6 +285,19 @@ public class Desktop
             if (gestureDetector.onTouchEvent(event))
                 return true;
 
+            // There is no callback in SimpleOnGestureListener for end
+            // of scroll. Is this a good way to detect it? Assume that
+            // as long as the scrolling gesture is in progress, the
+            // Gesturedetector.onTouchEvent() will keep returning
+            // true, so if scrollInProgress is true and we get here,
+            // the scroll must have ended.
+
+            if (scrollInProgress) {
+                Desktop.scroll((int) translateX, (int) translateY);
+                translateX = translateY = 0;
+                scrollInProgress = false;
+            }
+
             // If a scaling gesture is in progress no other touch
             // processing should be done.
             if (scaleDetector.onTouchEvent(event) && scalingInProgress)
diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index 3dbdce1..89a8e68 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -554,4 +554,21 @@ Java_org_libreoffice_experimental_desktop_Desktop_zoom(JNIEnv * /* env */,
         LOGW("No focused frame to emit event on");
 }
 
+// public static native void scroll(int x, int y);
+extern "C" SAL_JNI_EXPORT void JNICALL
+Java_org_libreoffice_experimental_desktop_Desktop_scroll(JNIEnv * /* env */,
+                                                         jobject /* clazz */,
+                                                         jint x,
+                                                         jint y)
+{
+    SalFrame *pFocus = AndroidSalInstance::getInstance()->getFocusFrame();
+    if (pFocus) {
+        SAL_INFO( "vcl.androidinst", "scroll: " << "(" << x << "," << y << ")" );
+        ScrollEvent aEvent( x, y );
+        Application::PostScrollEvent(VCLEVENT_WINDOW_SCROLL, pFocus->GetWindow(), &aEvent);
+    }
+    else
+        LOGW("No focused frame to emit event on");
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index 2dbb2de..cba609d 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -912,6 +912,31 @@ sal_uLong Application::PostZoomEvent( sal_uLong nEvent, Window *pWin, ZoomEvent*
     return nEventId;
 }
 
+sal_uLong Application::PostScrollEvent( sal_uLong nEvent, Window *pWin, ScrollEvent* pScrollEvent )
+{
+    const SolarMutexGuard aGuard;
+    sal_uLong               nEventId = 0;
+
+    if( pWin && pScrollEvent )
+    {
+        ImplPostEventData* pPostEventData = new ImplPostEventData( nEvent, pWin, *pScrollEvent );
+
+        PostUserEvent( nEventId,
+                       STATIC_LINK( NULL, Application, PostEventHandler ),
+                       pPostEventData );
+
+        if( nEventId )
+        {
+            pPostEventData->mnEventId = nEventId;
+            aPostedEventList.push_back( ImplPostEventPair( pWin, pPostEventData ) );
+        }
+        else
+            delete pPostEventData;
+    }
+
+    return nEventId;
+}
+
 // -----------------------------------------------------------------------------
 
 IMPL_STATIC_LINK_NOINSTANCE( Application, PostEventHandler, void*, pCallData )
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index 1ecbbb1..d4a6fa8 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -2606,10 +2606,39 @@ long ImplWindowFrameProc( Window* pWindow, SalFrame* /*pFrame*/,
             // Pass on the scale as a percentage of current zoom factor
             aSalWheelMouseEvent.mnDelta = (long) (pZoomEvent->GetScale() * 100);
 
+            // Other SalWheelMouseEvent fields ignored when the
+            // scaleDirectly parameter to ImplHandleWheelEvent() is
+            // true.
             nRet = ImplHandleWheelEvent( pWindow, aSalWheelMouseEvent, true );
             }
             break;
         case SALEVENT_EXTERNALSCROLL:
+            {
+            ScrollEvent* pScrollEvent = (ScrollEvent*) pEvent;
+            SalWheelMouseEvent aSalWheelMouseEvent;
+
+            aSalWheelMouseEvent.mnTime = Time::GetSystemTicks();
+            aSalWheelMouseEvent.mnX = 0; // ???
+            aSalWheelMouseEvent.mnY = 0;
+
+            aSalWheelMouseEvent.mbDeltaIsPixel = sal_False;
+
+            // First scroll vertically, then horizontally
+            aSalWheelMouseEvent.mnDelta = (long) pScrollEvent->GetYOffset();
+            if (aSalWheelMouseEvent.mnDelta != 0)
+            {
+                aSalWheelMouseEvent.mnCode = 0;
+                aSalWheelMouseEvent.mbHorz = sal_False;
+                nRet = ImplHandleWheelEvent( pWindow, aSalWheelMouseEvent );
+            }
+            aSalWheelMouseEvent.mnDelta = (long) pScrollEvent->GetXOffset();
+            if (aSalWheelMouseEvent.mnDelta != 0)
+            {
+                aSalWheelMouseEvent.mnCode = 0;
+                aSalWheelMouseEvent.mbHorz = sal_True;
+                nRet = ImplHandleWheelEvent( pWindow, aSalWheelMouseEvent );
+            }
+            }
             break;
 #ifdef DBG_UTIL
         default:
commit bcbe5fe88593473ff4d12633c52e34f2f8054594
Author: Tor Lillqvist <tml at iki.fi>
Date:   Thu Mar 7 08:37:27 2013 +0200

    Use view size for "work area" size
    
    Don't know what this affects, though. Things seem to have worked as expected
    even with the hardcoded bogus value?
    
    Change-Id: I945bdcd53260fc5f43cf0031dfd96637168475f0

diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index 1874450..3dbdce1 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -167,7 +167,7 @@ void AndroidSalInstance::damaged(AndroidSalFrame */* frame */)
 void AndroidSalInstance::GetWorkArea( Rectangle& rRect )
 {
     rRect = Rectangle( Point( 0, 0 ),
-                       Size( 1280, 750 ) );
+                       Size( viewWidth, viewHeight ) );
 }
 
 /*
commit 1192381595f449a383c792846ccc52a920aea84a
Author: Tor Lillqvist <tml at iki.fi>
Date:   Thu Mar 7 08:17:17 2013 +0200

    Now get rid of the #if 0 blocks
    
    Change-Id: I815cc4a703b7ca6d2894807396a06a3394b40676

diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx
index c353215..1874450 100644
--- a/vcl/android/androidinst.cxx
+++ b/vcl/android/androidinst.cxx
@@ -53,156 +53,6 @@ public:
     virtual bool ErrorTrapPop( bool ) { return false; }
 };
 
-#if 0  // Code from NativeActivity-based times left for reference inside #if 0 here and later
-
-static rtl::OString MotionEdgeFlagsToString(int32_t nFlags)
-{
-    rtl::OStringBuffer aStr;
-    if (nFlags == AMOTION_EVENT_EDGE_FLAG_NONE)
-        aStr.append ("no-edge");
-    if (nFlags & AMOTION_EVENT_EDGE_FLAG_TOP)
-        aStr.append (":top");
-    if (nFlags & AMOTION_EVENT_EDGE_FLAG_BOTTOM)
-        aStr.append (":bottom");
-    if (nFlags & AMOTION_EVENT_EDGE_FLAG_LEFT)
-        aStr.append (":left");
-    if (nFlags & AMOTION_EVENT_EDGE_FLAG_RIGHT)
-        aStr.append (":right");
-    return aStr.makeStringAndClear();
-}
-
-static rtl::OString KeyMetaStateToString(int32_t nFlags)
-{
-    rtl::OStringBuffer aStr;
-    if (nFlags == AMETA_NONE)
-        aStr.append ("no-meta");
-    if (nFlags & AMETA_ALT_ON)
-        aStr.append (":alt");
-    if (nFlags & AMETA_SHIFT_ON)
-        aStr.append (":shift");
-    if (nFlags & AMETA_SYM_ON)
-        aStr.append (":sym");
-    return aStr.makeStringAndClear();
-}
-
-static sal_uInt16 KeyMetaStateToCode(AInputEvent *event)
-{
-    sal_uInt16 nCode = 0;
-    int32_t nFlags = AKeyEvent_getMetaState(event);
-    if (nFlags & AMETA_SHIFT_ON)
-        nCode |= KEY_SHIFT;
-    if (nFlags & AMETA_SYM_ON)
-        nCode |= KEY_MOD1;
-    if (nFlags & AMETA_ALT_ON)
-        nCode |= KEY_MOD2;
-    return nCode;
-}
-
-static sal_uInt16 KeyToCode(AInputEvent *event)
-{
-    sal_uInt16 nCode = 0;
-    switch (AKeyEvent_getKeyCode(event)) {
-#define MAP(a,b)                                 \
-    case AKEYCODE_##a: nCode = KEY_##b; break
-#define MAP_SAME(a) MAP(a,a)
-
-    MAP_SAME(HOME);
-    MAP_SAME(0); MAP_SAME(1); MAP_SAME(2); MAP_SAME(3); MAP_SAME(4);
-    MAP_SAME(5); MAP_SAME(6); MAP_SAME(7); MAP_SAME(8); MAP_SAME(9);
-
-    MAP_SAME(A); MAP_SAME(B); MAP_SAME(C); MAP_SAME(D);
-    MAP_SAME(E); MAP_SAME(F); MAP_SAME(G); MAP_SAME(H);
-    MAP_SAME(I); MAP_SAME(J); MAP_SAME(K); MAP_SAME(L);
-    MAP_SAME(M); MAP_SAME(N); MAP_SAME(O); MAP_SAME(P);
-    MAP_SAME(Q); MAP_SAME(R); MAP_SAME(S); MAP_SAME(T);
-    MAP_SAME(U); MAP_SAME(V); MAP_SAME(W); MAP_SAME(X);
-    MAP_SAME(Y); MAP_SAME(Z);
-
-    MAP_SAME(TAB); MAP_SAME(SPACE); MAP_SAME(COMMA);
-
-    MAP(ENTER,RETURN);
-    MAP(PAGE_UP, PAGEUP);
-    MAP(PAGE_DOWN, PAGEDOWN);
-    MAP(DEL, DELETE);
-    MAP(PERIOD, POINT);
-
-    MAP(DPAD_UP, UP); MAP(DPAD_DOWN, DOWN);
-    MAP(DPAD_LEFT, LEFT); MAP(DPAD_RIGHT, RIGHT);
-
-    case AKEYCODE_BACK: // escape ?
-    case AKEYCODE_UNKNOWN:
-    case AKEYCODE_SOFT_LEFT:
-    case AKEYCODE_SOFT_RIGHT:
-    case AKEYCODE_CALL:
-    case AKEYCODE_ENDCALL:
-    case AKEYCODE_STAR:
-    case AKEYCODE_POUND:
-    case AKEYCODE_VOLUME_UP:
-    case AKEYCODE_VOLUME_DOWN:
-    case AKEYCODE_DPAD_CENTER:
-    case AKEYCODE_POWER:
-    case AKEYCODE_CAMERA:
-    case AKEYCODE_CLEAR:
-    case AKEYCODE_ALT_LEFT:
-    case AKEYCODE_ALT_RIGHT:
-    case AKEYCODE_SHIFT_LEFT:
-    case AKEYCODE_SHIFT_RIGHT:
-    case AKEYCODE_SYM:
-    case AKEYCODE_EXPLORER:
-    case AKEYCODE_ENVELOPE:
-    case AKEYCODE_GRAVE:
-    case AKEYCODE_MINUS:
-    case AKEYCODE_EQUALS:
-    case AKEYCODE_LEFT_BRACKET:
-    case AKEYCODE_RIGHT_BRACKET:
-    case AKEYCODE_BACKSLASH:
-    case AKEYCODE_SEMICOLON:
-    case AKEYCODE_APOSTROPHE:
-    case AKEYCODE_SLASH:
-    case AKEYCODE_AT:
-    case AKEYCODE_NUM:
-    case AKEYCODE_HEADSETHOOK:
-    case AKEYCODE_FOCUS: // not widget, but camera focus
-    case AKEYCODE_PLUS:
-    case AKEYCODE_MENU:
-    case AKEYCODE_NOTIFICATION:
-    case AKEYCODE_SEARCH:
-    case AKEYCODE_MEDIA_PLAY_PAUSE:
-    case AKEYCODE_MEDIA_STOP:
-    case AKEYCODE_MEDIA_NEXT:
-    case AKEYCODE_MEDIA_PREVIOUS:
-    case AKEYCODE_MEDIA_REWIND:
-    case AKEYCODE_MEDIA_FAST_FORWARD:
-    case AKEYCODE_MUTE:
-    case AKEYCODE_PICTSYMBOLS:
-    case AKEYCODE_SWITCH_CHARSET:
-    case AKEYCODE_BUTTON_A:
-    case AKEYCODE_BUTTON_B:
-    case AKEYCODE_BUTTON_C:
-    case AKEYCODE_BUTTON_X:
-    case AKEYCODE_BUTTON_Y:
-    case AKEYCODE_BUTTON_Z:
-    case AKEYCODE_BUTTON_L1:
-    case AKEYCODE_BUTTON_R1:
-    case AKEYCODE_BUTTON_L2:
-    case AKEYCODE_BUTTON_R2:
-    case AKEYCODE_BUTTON_THUMBL:
-    case AKEYCODE_BUTTON_THUMBR:
-    case AKEYCODE_BUTTON_START:
-    case AKEYCODE_BUTTON_SELECT:
-    case AKEYCODE_BUTTON_MODE:
-        LOGI("un-mapped keycode %d", nCode);
-        nCode = 0;
-        break;
-#undef MAP_SAME
-#undef MAP
-    }
-    LOGI("mapped %d -> %d", AKeyEvent_getKeyCode(event), nCode);
-    return nCode;
-}
-
-#endif
-
 static void BlitFrameRegionToWindow(ANativeWindow_Buffer *pOutBuffer,
                                     const basebmp::BitmapDeviceSharedPtr& aDev,
                                     const ARect &rSrcRect,
@@ -314,107 +164,12 @@ void AndroidSalInstance::damaged(AndroidSalFrame */* frame */)
         m_pJNIEnv->CallStaticVoidMethod(m_nDesktopClass, m_nCallbackDamaged);
 }
 
-#if 0
-
-static const char *app_cmd_name(int cmd)
-{
-    switch (cmd) {
-    case APP_CMD_INPUT_CHANGED: return "INPUT_CHANGED";
-    case APP_CMD_INIT_WINDOW: return "INIT_WINDOW";
-    case APP_CMD_TERM_WINDOW: return "TERM_WINDOW";
-    case APP_CMD_WINDOW_RESIZED: return "WINDOW_RESIZED";
-    case APP_CMD_WINDOW_REDRAW_NEEDED: return "WINDOW_REDRAW_NEEDED";
-    case APP_CMD_CONTENT_RECT_CHANGED: return "CONTENT_RECT_CHANGED";
-    case APP_CMD_GAINED_FOCUS: return "GAINED_FOCUS";
-    case APP_CMD_LOST_FOCUS: return "LOST_FOCUS";
-    case APP_CMD_CONFIG_CHANGED: return "CONFIG_CHANGED";
-    case APP_CMD_LOW_MEMORY: return "LOW_MEMORY";
-    case APP_CMD_START: return "START";
-    case APP_CMD_RESUME: return "RESUME";
-    case APP_CMD_SAVE_STATE: return "SAVE_STATE";
-    case APP_CMD_PAUSE: return "PAUSE";
-    case APP_CMD_STOP: return "STOP";
-    case APP_CMD_DESTROY: return "DESTROY";
-    default:
-        static char buf[10];
-        sprintf(buf, "%d", cmd);
-        return buf;
-    }
-}
-
-#endif
-
 void AndroidSalInstance::GetWorkArea( Rectangle& rRect )
 {
     rRect = Rectangle( Point( 0, 0 ),
                        Size( 1280, 750 ) );
-
-#if 0
-    rRect = Rectangle( Point( 0, 0 ),
-                       Size( ANativeWindow_getWidth( mpApp->window ),
-                             ANativeWindow_getHeight( mpApp->window ) ) );
-#endif
 }
 
-#if 0
-
-void AndroidSalInstance::onAppCmd (struct android_app* app, int32_t cmd)
-{
-        LOGI("app cmd for app %p: %s", app, app_cmd_name(cmd));
-        ANativeWindow *pWindow = mpApp->window;
-        switch (cmd) {
-        case APP_CMD_INIT_WINDOW:
-        {
-            ARect aRect = { 0, 0, 0, 0 };
-            aRect.right = ANativeWindow_getWidth(pWindow);
-            aRect.bottom = ANativeWindow_getHeight(pWindow);
-            int nRet = ANativeWindow_setBuffersGeometry(
-                                pWindow, ANativeWindow_getWidth(pWindow),
-                                ANativeWindow_getHeight(pWindow),
-                                WINDOW_FORMAT_RGBA_8888);
-            LOGI("we have an app window ! %p %dx%x (%d) set %d",
-                     pWindow, aRect.right, aRect.bottom,
-                     ANativeWindow_getFormat(pWindow), nRet);
-            maRedrawRegion = Region( Rectangle( 0, 0, ANativeWindow_getWidth(pWindow),
-                                                ANativeWindow_getHeight(pWindow) ) );
-            mbQueueReDraw = true;
-            break;
-        }
-        case APP_CMD_WINDOW_RESIZED:
-        {
-            ARect aRect = { 0, 0, 0, 0 };
-            aRect.right = ANativeWindow_getWidth(pWindow);
-            aRect.bottom = ANativeWindow_getHeight(pWindow);
-            LOGI("app window resized to ! %p %dx%x (%d)",
-                 pWindow, aRect.right, aRect.bottom,
-                 ANativeWindow_getFormat(pWindow));
-            break;
-        }
-
-        case APP_CMD_WINDOW_REDRAW_NEEDED:
-        {
-            LOGI("redraw needed");
-            maRedrawRegion = Region( Rectangle( 0, 0, ANativeWindow_getWidth(pWindow),
-                                                ANativeWindow_getHeight(pWindow) ) );
-            mbQueueReDraw = true;
-            break;
-        }
-
-        case APP_CMD_CONTENT_RECT_CHANGED:
-        {
-            ARect aRect = mpApp->contentRect;
-            LOGI("content rect changed [ k/b popped up etc. ] %d,%d->%d,%d",
-                 aRect.left, aRect.top, aRect.right, aRect.bottom);
-            break;
-        }
-        default:
-            LOGI("unhandled app cmd %d", cmd);
-            break;
-        }
-}
-
-#endif
-
 /*
  * Try too hard to get a frame, in the absence of anything better to do
  */
@@ -438,123 +193,6 @@ SalFrame *AndroidSalInstance::getFocusFrame() const
     return pFocus;
 }
 
-#if 0
-
-int32_t AndroidSalInstance::onInputEvent (struct android_app* app, AInputEvent* event)
-{
-    bool bHandled = false;
-    LOGI("input event for app %p, event %p type %d source %d device id %d",
-         app, event,
-         AInputEvent_getType(event),
-         AInputEvent_getSource(event),
-         AInputEvent_getDeviceId(event));
-
-    switch (AInputEvent_getType(event))
-    {
-    case AINPUT_EVENT_TYPE_KEY:
-    {
-        int32_t nAction = AKeyEvent_getAction(event);
-        LOGI("key event keycode %d '%s' %s flags (0x%x) 0x%x",
-             AKeyEvent_getKeyCode(event),
-             nAction == AKEY_EVENT_ACTION_DOWN ? "down" :
-             nAction == AKEY_EVENT_ACTION_UP ? "up" : "multiple",
-             KeyMetaStateToString(AKeyEvent_getMetaState(event)).getStr(),
-             AKeyEvent_getMetaState (event),
-             AKeyEvent_getFlags (event));
-
-        // FIXME: the whole SALEVENT_KEYMODCHANGE stuff is going to be interesting
-        // can we really emit that ? no input method madness required though.
-        sal_uInt16 nEvent;
-        SalKeyEvent aEvent;
-        int64_t nNsTime = AKeyEvent_getEventTime(event);
-
-        // FIXME: really we need a Java wrapper app as Mozilla has that does
-        // key event translation for us, and provides -much- cleaner events.
-        nEvent = (AKeyEvent_getAction(event) == AKEY_EVENT_ACTION_UP ?
-                  SALEVENT_KEYUP : SALEVENT_KEYINPUT);
-        sal_uInt16 nCode = KeyToCode(event);
-        sal_uInt16 nMetaState = KeyMetaStateToCode(event);
-        if (nCode >= KEY_0 && nCode <= KEY_9)
-            aEvent.mnCharCode = '0' + nCode - KEY_0;
-        else if (nCode >= KEY_A && nCode <= KEY_Z)
-            aEvent.mnCharCode = (nMetaState & KEY_SHIFT ? 'A' : 'a') + nCode - KEY_A;
-        else if (nCode == KEY_SPACE)
-            aEvent.mnCharCode = ' ';
-        else if (nCode == KEY_COMMA)
-            aEvent.mnCharCode = ',';
-        else if (nCode == KEY_POINT)
-            aEvent.mnCharCode = '.';
-        else
-            aEvent.mnCharCode = 0;
-        aEvent.mnTime = nNsTime / (1000 * 1000);
-        aEvent.mnCode = nMetaState | nCode;
-        aEvent.mnRepeat = AKeyEvent_getRepeatCount(event);
-
-        SalFrame *pFocus = getFocusFrame();
-        if (pFocus)
-            bHandled = pFocus->CallCallback( nEvent, &aEvent );
-        else
-            LOGI("no focused frame to emit event on");
-
-        LOGI("bHandled == %s", bHandled? "true": "false" );
-        break;
-    }
-    case AINPUT_EVENT_TYPE_MOTION:
-    {
-        size_t nPoints = AMotionEvent_getPointerCount(event);
-        LOGI("motion event %d %g,%g %d points: %s",
-             AMotionEvent_getAction(event),
-             AMotionEvent_getXOffset(event),
-             AMotionEvent_getYOffset(event),
-             (int)nPoints,
-             MotionEdgeFlagsToString(AMotionEvent_getEdgeFlags(event)).getStr());
-        for (size_t i = 0; i < nPoints; i++)
-            LOGI("\t%d: %g,%g - pressure %g",
-                 (int)i,
-                 AMotionEvent_getX(event, i),
-                 AMotionEvent_getY(event, i),
-                 AMotionEvent_getPressure(event, i));
-
-        SalMouseEvent aMouseEvent;
-        sal_uInt16 nEvent = 0;
-
-        // FIXME: all this filing the nEvent and aMouseEvent has to be cleaned up
-        nEvent = AMotionEvent_getAction(event)? SALEVENT_MOUSEBUTTONUP: SALEVENT_MOUSEBUTTONDOWN;
-
-        if (nPoints > 0)
-        {
-            aMouseEvent.mnX = AMotionEvent_getX(event, 0);
-            aMouseEvent.mnY = AMotionEvent_getY(event, 0);
-        } else {
-            aMouseEvent.mnX = AMotionEvent_getXOffset(event);
-            aMouseEvent.mnY = AMotionEvent_getYOffset(event);
-        }
-
-        int64_t nNsTime = AMotionEvent_getEventTime(event);
-        aMouseEvent.mnTime = nNsTime / (1000 * 1000);
-        aMouseEvent.mnCode = 0; // FIXME
-        aMouseEvent.mnButton = MOUSE_LEFT; // FIXME
-
-        SalFrame *pFocus = getFocusFrame();
-        if (pFocus)
-            bHandled = pFocus->CallCallback( nEvent, &aMouseEvent );
-        else
-            LOGI("no focused frame to emit event on");
-
-        LOGI("bHandled == %s", bHandled? "true": "false" );
-
-        break;
-    }
-    default:
-        LOGI("unknown input event type %p %d",
-             event, AInputEvent_getType(event));
-        break;
-    }
-    return bHandled ? 1 : 0;
-}
-
-#endif
-
 AndroidSalInstance *AndroidSalInstance::getInstance()
 {
     if (!ImplGetSVData())
@@ -565,22 +203,6 @@ AndroidSalInstance *AndroidSalInstance::getInstance()
     return static_cast<AndroidSalInstance *>(pData->m_pInstance);
 }
 
-#if 0
-
-extern "C" {
-    void onAppCmd_cb (struct android_app *app, int32_t cmd)
-    {
-        AndroidSalInstance::getInstance()->onAppCmd(app, cmd);
-    }
-
-    int32_t onInputEvent_cb (struct android_app *app, AInputEvent *event)
-    {
-        return AndroidSalInstance::getInstance()->onInputEvent(app, event);
-    }
-}
-
-#endif
-
 AndroidSalInstance::AndroidSalInstance( SalYieldMutex *pMutex )
     : SvpSalInstance( pMutex )
 {
@@ -611,65 +233,6 @@ void AndroidSalInstance::Wakeup()
     LOGI("busted - no global looper");
 }
 
-#if 0
-
-void AndroidSalInstance::DoReleaseYield (int nTimeoutMS)
-{
-    if (!bHitIdle)
-        LOGI("hit idle !" );
-    bHitIdle = true;
-
-#if 1
-    // Presumably this should never be called at all except in
-    // NativeActivity-based apps with a GUI, where the message pump is
-    // run here in vcl, but we don't have any NativeActivitry-based
-    // apps any more.
-
-    (void) nTimeoutMS;
-
-    {
-        static bool beenhere = false;
-        if (!beenhere)
-        {
-            LOGI("**** Huh, %s called in non-NativeActivity app", __FUNCTION__);
-            beenhere = true;
-        }
-        return;
-    }
-#else
-    // release yield mutex
-    sal_uLong nAcquireCount = ReleaseYieldMutex();
-
-    LOGI("DoReleaseYield #3 %d thread: %d ms",
-         nTimeoutMS, (int)pthread_self());
-
-    struct android_poll_source *pSource = NULL;
-    int outFd = 0, outEvents = 0;
-
-    if (mbQueueReDraw)
-        nTimeoutMS = 0;
-
-    int nRet;
-    nRet = ALooper_pollAll (nTimeoutMS, &outFd, &outEvents, (void**)&pSource);
-    LOGI("ret #6 %d %d %d %p", nRet, outFd, outEvents, pSource);
-
-    // acquire yield mutex again
-    AcquireYieldMutex(nAcquireCount);
-
-    if (nRet >= 0)
-    {
-        // Process this event.
-        if (pSource != NULL)
-            pSource->process(mpApp, pSource);
-    }
-
-    if (mbQueueReDraw && mpApp && mpApp->window)
-        AndroidSalInstance::getInstance()->RedrawWindows (mpApp->window);
-#endif
-}
-
-#endif
-
 bool AndroidSalInstance::AnyInput( sal_uInt16 nType )
 {
     if( (nType & VCL_INPUT_TIMER) != 0 )
@@ -871,13 +434,6 @@ Java_org_libreoffice_experimental_desktop_Desktop_renderVCL(JNIEnv *env,
         return;
     }
 
-#if 0
-    if (info.format != ANDROID_BITMAP_FORMAT_RGB_565) {
-        LOGI("Bitmap format is not RGB_565 !");
-        return;
-    }
-#endif
-
     if ((ret = AndroidBitmap_lockPixels(env, bitmap, &pixels)) < 0) {
         LOGI("AndroidBitmap_lockPixels() failed ! error=%d", ret);
     }
commit 54d3aa2785d0fd9e8b61a27fcb451b919935bd22
Author: Tor Lillqvist <tml at iki.fi>
Date:   Thu Mar 7 08:12:56 2013 +0200

    Improve vcl/README
    
    Change-Id: I9031ab98f263bcc32b747c85e1715b80c7059ae9

diff --git a/vcl/README b/vcl/README
index effde51..a868f2a 100644
--- a/vcl/README
+++ b/vcl/README
@@ -1,38 +1,47 @@
 Visual Components Library is responsible for the widgets (windowing, buttons, controls, file-pickers etc.) operating system abstraction, including basic rendering (e.g. the output device).
 
-Welcome to the Visual Class Libraries (vcl) code
-
 source/
 	+ the main cross-platform chunk of source
+
 inc/
-	+ cross-platform abstraction headers / definition
+	+ cross-platform abstraction headers
 	vcl/
-		+ external headers
+		+ public headers ("public" to the rest of LibreOffice, that is)
+
 generic/
-	+ shared helper code for backends,
-	  actually built into vcl
+	+ shared helper code for *some* of the backends, actually built into vcl.
+
 headless/
 	+ a backend renderer that draws to bitmaps
+
+android/
+	+ Android backend (work in progress, does work to some extent)
+
 aqua/
-	+ OS/X backend
+	+ OS X backend
+
 ios/
-	+ skeleton Android backend
+	+ iOS backend (work in progres, does not work, needs re-think
+	and re-write)
+
 win/
-	+ windows backend
+	+ Windows backend
+
 unx/
-	+ unix specific platform backend code and its' sub-platforms
+	+ X11 backend and its sub-platforms
+
 	plugadapt/
 		+ pluggable framework to select correct unx backend
 	gtk/
-		+ gtk2 support
+		+ GTK2 support
 	gtk3/
-		+ gtk3.2+ support
+		+ GTK3.2+ support
 	kde/
-		+ kde3 support
+		+ KDE3 support
 	kde4/
-		+ kde4 support
+		+ KDE4 support
 	generic/
-		+ raw X support
+		+ raw X11 support
 
 
 How the platform abstraction works
@@ -48,6 +57,7 @@ How the platform abstraction works
 		  Timers, the SolarMutexe, Drag&Drop and other
 		  objects, as well as the primary event loop wrapper.
 
-Note: references to "SV" in the code are in relation to StarView, which is a
-portable C++ class library for GUIs, with very old roots, that was developed
-by StarDivision.
+Note: references to "SV" in the code mean StarView, which was a
+portable C++ class library for GUIs, with very old roots, that was
+developed by StarDivision. Nowadays it is not used by anything except
+LibreOffice (and OpenOffice).


More information about the Libreoffice-commits mailing list