summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorTor Lillqvist <tml@iki.fi>2013-03-07 10:15:28 +0200
committerTor Lillqvist <tml@iki.fi>2013-03-07 10:15:58 +0200
commite669502dcf2f825842ba87ee4a14a0be26883e28 (patch)
tree6110cd5b3dd240d510234d4cae82d50bf21f6f54 /vcl
parentbcbe5fe88593473ff4d12633c52e34f2f8054594 (diff)
Start hacking on scrolling
Change-Id: I74f1d7feb935be65629bdbd7464f9882229948e5
Diffstat (limited to 'vcl')
-rw-r--r--vcl/android/androidinst.cxx17
-rw-r--r--vcl/source/app/svapp.cxx25
-rw-r--r--vcl/source/window/winproc.cxx29
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: