diff options
author | Tor Lillqvist <tml@iki.fi> | 2013-03-07 10:15:28 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2013-03-07 10:15:58 +0200 |
commit | e669502dcf2f825842ba87ee4a14a0be26883e28 (patch) | |
tree | 6110cd5b3dd240d510234d4cae82d50bf21f6f54 /vcl | |
parent | bcbe5fe88593473ff4d12633c52e34f2f8054594 (diff) |
Start hacking on scrolling
Change-Id: I74f1d7feb935be65629bdbd7464f9882229948e5
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/android/androidinst.cxx | 17 | ||||
-rw-r--r-- | vcl/source/app/svapp.cxx | 25 | ||||
-rw-r--r-- | vcl/source/window/winproc.cxx | 29 |
3 files changed, 71 insertions, 0 deletions
diff --git a/vcl/android/androidinst.cxx b/vcl/android/androidinst.cxx index 3dbdce141851..89a8e684607f 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 2dbb2de6c90e..cba609dbb688 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 1ecbbb14feb3..d4a6fa8637a7 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: |