From 7f5ca4c9e1061a626039d1042e71c34fc3f61005 Mon Sep 17 00:00:00 2001 From: Noel Power Date: Wed, 5 Sep 2012 20:19:03 +0100 Subject: fix scroll top & scroll left Change-Id: If333932a0f3cfde6e8459ca3506a609207982f96 --- toolkit/source/awt/scrollabledialog.cxx | 9 +++++---- toolkit/source/controls/dialogcontrol.cxx | 10 ++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) (limited to 'toolkit') diff --git a/toolkit/source/awt/scrollabledialog.cxx b/toolkit/source/awt/scrollabledialog.cxx index 2ffc793287c4..202a561cfaf1 100644 --- a/toolkit/source/awt/scrollabledialog.cxx +++ b/toolkit/source/awt/scrollabledialog.cxx @@ -56,12 +56,11 @@ void ScrollableDialog::lcl_Scroll( long nX, long nY ) { long nXScroll = mnScrollPos.X() - nX; long nYScroll = mnScrollPos.Y() - nY; - printf( "ScrollableDialog::lcl_Scroll %d, %d nXScroll %d, nYScroll %d\n", nX, nY, nXScroll, nYScroll ); + printf( "ScrollableDialog::lcl_Scroll %d, %d resulting in delta nXScroll %d, nYScroll %d for ( %d ) children\n", nX, nY, nXScroll, nYScroll, GetChildCount() -2 ); mnScrollPos = Point( nX, nY ); Rectangle aScrollableArea( 0, 0, maScrollArea.Width(), maScrollArea.Height() ); Window::Scroll(nXScroll, nYScroll, aScrollableArea ); - // Manually scroll all children ( except the scrollbars ) for ( int index = 0; index < GetChildCount(); ++index ) { @@ -89,18 +88,20 @@ void ScrollableDialog::SetScrollTop( long nTop ) { printf("ScrollableDialog::SetScrollTop(%d)\n", nTop ); Point aOld = mnScrollPos; - lcl_Scroll( mnScrollPos.X() , nTop ); + lcl_Scroll( mnScrollPos.X() , mnScrollPos.Y() - nTop ); printf("about to set thumb\n"); maHScrollBar.SetThumbPos( 0 ); + // new pos is 0,0 mnScrollPos = aOld; } void ScrollableDialog::SetScrollLeft( long nLeft ) { printf("ScrollableDialog::SetScrollLeft(%d)\n", nLeft ); Point aOld = mnScrollPos; - lcl_Scroll( nLeft , mnScrollPos.Y() ); + lcl_Scroll( mnScrollPos.X() - nLeft , mnScrollPos.Y() ); printf("about to set thumb\n"); maVScrollBar.SetThumbPos( 0 ); + // new pos is 0,0 mnScrollPos = aOld; } void ScrollableDialog::SetScrollWidth( long nWidth ) diff --git a/toolkit/source/controls/dialogcontrol.cxx b/toolkit/source/controls/dialogcontrol.cxx index 67d794fbcb2b..d8efe4fed850 100644 --- a/toolkit/source/controls/dialogcontrol.cxx +++ b/toolkit/source/controls/dialogcontrol.cxx @@ -358,6 +358,15 @@ void UnoDialogControl::createPeer( const Reference< XToolkit > & rxToolkit, cons if ( maTopWindowListeners.getLength() ) xTW->addTopWindowListener( &maTopWindowListeners ); + // there must be a better way than doing this, we can't + // process the scrolltop & scrollleft in XDialog because + // the children haven't been added when those props are applied + Reference< XPropertySet > xDlgProps( getModel(), UNO_QUERY ); + Reference< XPropertySet > xPeerProps( getPeer(), uno::UNO_QUERY ); + + ImplSetPeerProperty( GetPropertyName( BASEPROPERTY_SCROLLTOP ), ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLTOP ) ) ); + ImplSetPeerProperty( GetPropertyName( BASEPROPERTY_SCROLLLEFT ), ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_SCROLLLEFT ) ) ); + } } @@ -1089,6 +1098,7 @@ void UnoFrameControl::ImplSetPosSize( Reference< XControl >& rxCtrl ) SimpleFontMetric aFM; FontDescriptor aFD; Any aVal = ImplGetPropertyValue( GetPropertyName( BASEPROPERTY_FONTDESCRIPTOR ) ); + aVal >>= aFD; if ( !aFD.StyleName.isEmpty() ) { -- cgit