[libreoffice] center current slide after changing zoom

Caolán McNamara caolanm at fedoraproject.org
Thu May 8 14:18:31 UTC 2014


commit fbc285d9a2fd6a2783c03f5d983ffa4950cf88c5
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed May 7 16:44:24 2014 +0100

    center current slide after changing zoom
    
    and add a status bar icon to fit slide to window

 ...-a-status-bar-icon-to-fit-slide-to-window.patch |  232 ++++++++++++++++++++
 0001-center-slide-after-changing-zoom.patch        |   77 +++++++
 libreoffice.spec                                   |    8 +-
 3 files changed, 316 insertions(+), 1 deletions(-)
---
diff --git a/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch b/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch
new file mode 100644
index 0000000..d8f445b
--- /dev/null
+++ b/0001-add-a-status-bar-icon-to-fit-slide-to-window.patch
@@ -0,0 +1,232 @@
+From d6f5d4ee2cd0654497f1af37421d788411db762c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Thu, 8 May 2014 14:27:53 +0100
+Subject: [PATCH] add a status bar icon to fit slide to window
+
+Change-Id: I2c1d1fc7425b0aaad2a2445e0ac71ddc38410fdb
+---
+ icon-themes/galaxy/svx/res/zoom_page_statusbar.png | Bin 0 -> 418 bytes
+ include/svx/dialogs.hrc                            |   6 ++-
+ include/svx/zoomctrl.hxx                           |  15 ++++++-
+ sd/source/ui/app/sddll.cxx                         |   1 +
+ sd/uiconfig/simpress/statusbar/statusbar.xml       |   1 +
+ svx/source/stbctrls/modctrl.cxx                    |   7 ----
+ svx/source/stbctrls/stbctrls.src                   |  13 ++++++
+ svx/source/stbctrls/zoomctrl.cxx                   |  46 +++++++++++++++++----
+ 8 files changed, 70 insertions(+), 19 deletions(-)
+ create mode 100644 icon-themes/galaxy/svx/res/zoom_page_statusbar.png
+
+diff --git a/icon-themes/galaxy/svx/res/zoom_page_statusbar.png b/icon-themes/galaxy/svx/res/zoom_page_statusbar.png
+new file mode 100644
+index 0000000000000000000000000000000000000000..5fb2d59cf7549dbb665e9efc81f7a94c0f4e4980
+GIT binary patch
+literal 418
+zcmeAS at N?(olHy`uVBq!ia0vp^d>}Rl8<3oNC%zs?aTa()76ZkPfH31!Z9ZwBAbW|Y
+zuPggKRt_Em37r=8g+L+M%#er@=ltB<)VvZPmw~~#C^fMpHASI3vm`^o-P1Q9MK6_|
+zfq_xN)5S4F<9zQVMQ;~Jf#dbYn_qus^<|gZlVlLhn=WYb!{o$M=H~ea)HIsH)+Pzs
+zA7O3wT<!RQnWHN9NYYN((@OU~+wN#=ygT#n`E&LEns;A*lE%|;bX!fb0n4?}O5<dX
+zBP$yYG;y3?)w5~73FFjRqO6}+&3XR1*2|{TW5xd8YXhd0oV`(6ZYBHdQ~vRt-H{3P
+zO?(bLo2Cj)Kj7T+iE+x#cR at XuxEqyJ&pA!l`f-MH`F|l}t at 3pYiCo3ckIt24FnsJV
+zH9R!$%!)HFo`>b1UD040>XycHdeXZiA&sHNY`QYup??3pE~^|b;>byRP|ES8VP<`l
+z`Gp^To!vF}*zE59-5A<;>sii<PkM)B1AO)tz3bC*Kj0PpkDZ at gvQdmDelaNUJYD@<
+J);T3K0RSRFrP=@h
+
+literal 0
+HcmV?d00001
+
+diff --git a/include/svx/dialogs.hrc b/include/svx/dialogs.hrc
+index 4c3d681..797acfa 100644
+--- a/include/svx/dialogs.hrc
++++ b/include/svx/dialogs.hrc
+@@ -996,12 +996,14 @@
+ #define RID_SVXSTR_DOC_LOAD              (SVX_OOO_BUILD_START + 6) // 1236
+ #define RID_SVXSTR_ERR_OLD_PASSWD        (SVX_OOO_BUILD_START + 7) // 1237
+ #define RID_SVXSTR_ERR_REPEAT_PASSWD     (SVX_OOO_BUILD_START + 8) // 1238
++#define RID_SVXBMP_ZOOM_PAGE             (SVX_OOO_BUILD_START + 9) // 1239
++#define RID_SVXSTR_FIT_SLIDE             (SVX_OOO_BUILD_START + 10) // 1240
+ 
+ // sidebar-related resources (defined in the appropriate .hrc's)
+-#define RID_SVX_SIDEBAR_BEGIN            (RID_SVX_START + 1240)
++#define RID_SVX_SIDEBAR_BEGIN            (RID_SVX_START + 1241)
+ 
+ // !!! IMPORTANT: consider and update RID_SVXSTR_NEXTFREE when introducing new RIDs for Strings !!!
+-#define RID_SVXSTR_NEXTFREE              (RID_SVX_START + 1270)
++#define RID_SVXSTR_NEXTFREE              (RID_SVX_START + 1271)
+ 
+ // ----------------------------------------------------------------------------
+ // if we have _a_lot_ time, we should group the resource ids by type, instead
+diff --git a/include/svx/zoomctrl.hxx b/include/svx/zoomctrl.hxx
+index 429ee9c..5d7950f 100644
+--- a/include/svx/zoomctrl.hxx
++++ b/include/svx/zoomctrl.hxx
+@@ -21,8 +21,7 @@
+ 
+ #include <sfx2/stbitem.hxx>
+ #include <svx/svxdllapi.h>
+-
+-// class SvxZoomToolBoxControl -------------------------------------------
++#include <vcl/image.hxx>
+ 
+ class SVX_DLLPUBLIC SvxZoomStatusBarControl : public SfxStatusBarControl
+ {
+@@ -42,6 +41,18 @@ public:
+ 
+ };
+ 
++class SVX_DLLPUBLIC SvxZoomPageStatusBarControl : public SfxStatusBarControl
++{
++private:
++    Image maImage;
++public:
++    virtual void    Paint( const UserDrawEvent& rEvt ) SAL_OVERRIDE;
++    virtual bool    MouseButtonDown( const MouseEvent & rEvt ) SAL_OVERRIDE;
++
++    SFX_DECL_STATUSBAR_CONTROL();
++
++    SvxZoomPageStatusBarControl(sal_uInt16 nSlotId, sal_uInt16 nId, StatusBar& rStb);
++};
+ 
+ #endif
+ 
+diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx
+index f7a27c0..b37d934 100644
+--- a/sd/source/ui/app/sddll.cxx
++++ b/sd/source/ui/app/sddll.cxx
+@@ -242,6 +242,7 @@ void SdDLL::RegisterControllers()
+     SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod);
+ 
+     // register StatusBarControls
++    SvxZoomPageStatusBarControl::RegisterControl( SID_ZOOM_ENTIRE_PAGE, pMod );
+     SvxZoomStatusBarControl::RegisterControl( SID_ATTR_ZOOM, pMod );
+     SvxPosSizeStatusBarControl::RegisterControl( SID_ATTR_SIZE, pMod );
+     SvxModifyControl::RegisterControl( SID_DOC_MODIFIED, pMod );
+diff --git a/sd/uiconfig/simpress/statusbar/statusbar.xml b/sd/uiconfig/simpress/statusbar/statusbar.xml
+index 24224fe..78042ef 100644
+--- a/sd/uiconfig/simpress/statusbar/statusbar.xml
++++ b/sd/uiconfig/simpress/statusbar/statusbar.xml
+@@ -24,6 +24,7 @@
+  <statusbar:statusbaritem xlink:href=".uno:Signature" statusbar:align="center" statusbar:ownerdraw="true" statusbar:width="16"/>
+  <statusbar:statusbaritem xlink:href=".uno:PageStatus" statusbar:align="left" statusbar:width="124"/>
+  <statusbar:statusbaritem xlink:href=".uno:LayoutStatus" statusbar:align="left" statusbar:autosize="true" statusbar:width="54"/>
++ <statusbar:statusbaritem xlink:href=".uno:ZoomPage" statusbar:align="center" statusbar:ownerdraw="true" statusbar:width="9"/>
+  <statusbar:statusbaritem xlink:href=".uno:ZoomSlider" statusbar:align="center" statusbar:ownerdraw="true" statusbar:width="130"/>
+  <statusbar:statusbaritem xlink:href=".uno:Zoom" statusbar:align="center" statusbar:width="36"/>
+ </statusbar:statusbar>
+diff --git a/svx/source/stbctrls/modctrl.cxx b/svx/source/stbctrls/modctrl.cxx
+index db94f49..aff7e75 100644
+--- a/svx/source/stbctrls/modctrl.cxx
++++ b/svx/source/stbctrls/modctrl.cxx
+@@ -137,8 +137,6 @@ void SvxModifyControl::_repaint()
+ 
+ // -----------------------------------------------------------------------
+ 
+-namespace {
+-
+ /**
+  * Given a bounding rectangle and an image, determine the top-left position
+  * of the image so that the image would look centered both horizontally and
+@@ -160,9 +158,6 @@ Point centerImage(const Rectangle& rBoundingRect, const Image& rImg)
+     return aPt;
+ }
+ 
+-}
+-
+-
+ void SvxModifyControl::Paint( const UserDrawEvent& rUsrEvt )
+ {
+     OutputDevice*       pDev =  rUsrEvt.GetDevice();
+diff --git a/svx/source/stbctrls/stbctrls.src b/svx/source/stbctrls/stbctrls.src
+index 8d5beeb..5987d7a 100644
+--- a/svx/source/stbctrls/stbctrls.src
++++ b/svx/source/stbctrls/stbctrls.src
+@@ -120,6 +120,11 @@ String RID_SVXSTR_DOC_LOAD
+     Text [ en-US ] = "Loading document...";
+ };
+ 
++String RID_SVXSTR_FIT_SLIDE
++{
++    Text [ en-US ] = "Fit slide to current window.";
++};
++
+  // PopupMenu -------------------------------------------------------------
+ Menu RID_SVXMNU_ZOOM
+ {
+@@ -337,5 +342,13 @@ Image RID_SVXBMP_DOC_MODIFIED_FEEDBACK
+     };
+     MaskColor = STD_MASKCOLOR;
+ };
++Image RID_SVXBMP_ZOOM_PAGE
++{
++    ImageBitmap = Bitmap
++    {
++        File = "zoom_page_statusbar.png" ;
++    };
++    MaskColor = STD_MASKCOLOR;
++};
+ 
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff --git a/svx/source/stbctrls/zoomctrl.cxx b/svx/source/stbctrls/zoomctrl.cxx
+index b5be076..229f98d 100644
+--- a/svx/source/stbctrls/zoomctrl.cxx
++++ b/svx/source/stbctrls/zoomctrl.cxx
+@@ -25,7 +25,8 @@
+ 
+ #include <svx/dialogs.hrc>
+ 
+-#include "svx/zoomctrl.hxx"
++#include <svx/zoomctrl.hxx>
++#include <svx/zoomslideritem.hxx>
+ #include <sfx2/zoomitem.hxx>
+ #include "stbctrls.h"
+ #include <svx/dialmgr.hxx>
+@@ -95,7 +96,6 @@ void ZoomPopup_Impl::Select()
+ }
+ 
+ // class SvxZoomStatusBarControl ------------------------------------------
+-
+ SvxZoomStatusBarControl::SvxZoomStatusBarControl( sal_uInt16 _nSlotId,
+                                                   sal_uInt16 _nId,
+                                                   StatusBar& rStb ) :
+@@ -183,5 +183,41 @@ void SvxZoomStatusBarControl::Command( const CommandEvent& rCEvt )
+         SfxStatusBarControl::Command( rCEvt );
+ }
+ 
++SFX_IMPL_STATUSBAR_CONTROL(SvxZoomPageStatusBarControl,SfxVoidItem);
++
++SvxZoomPageStatusBarControl::SvxZoomPageStatusBarControl(sal_uInt16 _nSlotId,
++    sal_uInt16 _nId, StatusBar& rStb)
++    : SfxStatusBarControl(_nSlotId, _nId, rStb)
++    , maImage(SVX_RES(RID_SVXBMP_ZOOM_PAGE))
++{
++    GetStatusBar().SetQuickHelpText(GetId(), SVX_RESSTR(RID_SVXSTR_FIT_SLIDE));
++}
++
++extern Point centerImage(const Rectangle& rBoundingRect, const Image& rImg);
++
++void SvxZoomPageStatusBarControl::Paint(const UserDrawEvent& rUsrEvt)
++{
++    OutputDevice* pDev = rUsrEvt.GetDevice();
++    Rectangle aRect = rUsrEvt.GetRect();
++    Point aPt = centerImage(aRect, maImage);
++    pDev->DrawImage(aPt, maImage);
++}
++
++bool SvxZoomPageStatusBarControl::MouseButtonDown(const MouseEvent&)
++{
++    SvxZoomItem aZoom( SVX_ZOOM_WHOLEPAGE, 0, GetId() );
++
++    ::com::sun::star::uno::Any a;
++    INetURLObject aObj( m_aCommandURL );
++
++    ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aArgs( 1 );
++    aArgs[0].Name  = aObj.GetURLPath();
++    aZoom.QueryValue( a );
++    aArgs[0].Value = a;
++
++    execute( aArgs );
++
++    return true;
++}
+ 
+ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+
diff --git a/0001-center-slide-after-changing-zoom.patch b/0001-center-slide-after-changing-zoom.patch
new file mode 100644
index 0000000..7afaf0d
--- /dev/null
+++ b/0001-center-slide-after-changing-zoom.patch
@@ -0,0 +1,77 @@
+From b179235f702e474b115ca479b603052f422346fd Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm at redhat.com>
+Date: Wed, 7 May 2014 16:16:17 +0100
+Subject: [PATCH] center slide after changing zoom
+
+Change-Id: I08698b06d0485d2cd3573af665e0621b42d37349
+---
+ sd/source/ui/inc/ViewShell.hxx |  1 +
+ sd/source/ui/view/viewshe2.cxx | 27 +++++++++++++++++++++++++++
+ sd/source/ui/view/viewshel.cxx |  1 +
+ 3 files changed, 29 insertions(+)
+
+diff --git a/sd/source/ui/inc/ViewShell.hxx b/sd/source/ui/inc/ViewShell.hxx
+index ce5ea31..87edbc5 100644
+--- a/sd/source/ui/inc/ViewShell.hxx
++++ b/sd/source/ui/inc/ViewShell.hxx
+@@ -206,6 +206,7 @@ public:
+     virtual void UpdateScrollBars (void);
+     void    Scroll(long nX, long nY);
+     void    ScrollLines(long nX, long nY);
++    void    ScrollCenter();
+     virtual void    SetZoom(long nZoom);
+     virtual void    SetZoomRect(const Rectangle& rZoomRect);
+     void    InitWindows(const Point& rViewOrigin, const Size& rViewSize,
+diff --git a/sd/source/ui/view/viewshe2.cxx b/sd/source/ui/view/viewshe2.cxx
+index 5f98d68..8f91d6c 100644
+--- a/sd/source/ui/view/viewshe2.cxx
++++ b/sd/source/ui/view/viewshe2.cxx
+@@ -365,6 +365,33 @@ void ViewShell::SetZoom(long nZoom)
+     UpdateScrollBars();
+ }
+ 
++namespace
++{
++    void CenterScrollBar(ScrollBar *pBar)
++    {
++        long nVisSize = pBar->GetVisibleSize();
++        long nMin = pBar->GetRangeMin();
++        long nMax = pBar->GetRangeMax();
++        long nLen = nMax - nMin - nVisSize;
++        long nPos = nMin + nLen/2;
++        pBar->DoScroll(nPos);
++    }
++}
++
++void ViewShell::ScrollCenter()
++{
++    if (mpHorizontalScrollBar.get() != NULL)
++        CenterScrollBar(mpHorizontalScrollBar.get());
++
++    //zoom mode with no panning of the current slide, i.e. the
++    //scrollbar is in change slide mode not pan slide mode
++    if (IsPageFlipMode())
++        return;
++
++    if (mpVerticalScrollBar.get() != NULL)
++        CenterScrollBar(mpVerticalScrollBar.get());
++}
++
+ /**
+  * Set zoom rectangle for active window. Sets all split windows to the same zoom
+  * factor.
+diff --git a/sd/source/ui/view/viewshel.cxx b/sd/source/ui/view/viewshel.cxx
+index 28e272e..17bcf5f 100644
+--- a/sd/source/ui/view/viewshel.cxx
++++ b/sd/source/ui/view/viewshel.cxx
+@@ -683,6 +683,7 @@ bool ViewShell::HandleScrollCommand(const CommandEvent& rCEvt, ::sd::Window* pWi
+                             nNewZoom = std::min( (long) pWin->GetMaxZoom(), basegfx::zoomtools::zoomIn( nOldZoom ));
+ 
+                         SetZoom( nNewZoom );
++                        ScrollCenter(); //center slide after changing zoom
+                         Invalidate( SID_ATTR_ZOOM );
+                         Invalidate( SID_ATTR_ZOOMSLIDER );
+ 
+-- 
+1.9.0
+
diff --git a/libreoffice.spec b/libreoffice.spec
index df9248e..bd8ad0d 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -37,7 +37,7 @@ Summary:        Free Software Productivity Suite
 Name:           libreoffice
 Epoch:          1
 Version:        %{libo_version}.2
-Release:        5%{?libo_prerelease}%{?dist}
+Release:        6%{?libo_prerelease}%{?dist}
 License:        (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and Public Domain and ASL 2.0 and Artistic and MPLv2.0
 Group:          Applications/Productivity
 URL:            http://www.libreoffice.org/
@@ -299,6 +299,8 @@ Patch38: 0001-add-X-TryExec-entries-to-desktop-files.patch
 Patch39: 0001-resolved-fdo-78294-default-null-date-for-document-im.patch
 Patch40: 0001-Related-fdo-36815-clip-overlarge-comment-contents.patch
 Patch41: 0001-Resolves-rhbz-1092589-Thoroughly-check-whether-JRE-i.patch
+Patch42: 0001-center-slide-after-changing-zoom.patch
+Patch43: 0001-add-a-status-bar-icon-to-fit-slide-to-window.patch
 
 %define instdir %{_libdir}
 %define baseinstdir %{instdir}/libreoffice
@@ -2262,6 +2264,10 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
 %endif
 
 %changelog
+* Thu May 08 2014 Caolán McNamara <caolanm at redhat.com> - 1:4.2.4.2-6
+- center current slide after changing zoom
+- add a status bar icon to fit slide to window
+
 * Thu May 08 2014 Stephan Bergmann <sbergman at redhat.com> - 1:4.2.4.2-5
 - Resolves: rhbz#1092589 Thoroughly check whether JRE is still present
 


More information about the scm-commits mailing list