summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@cib.de>2017-09-22 15:28:33 +0200
committerArmin Le Grand <Armin.Le.Grand@cib.de>2017-10-20 14:13:20 +0200
commita42b0985c7619efdc934bb1cf19e5e2c2b6faea2 (patch)
treeb91427e905792292220b01aba45fc80d66d19349
parent2e001b40ad0d19c8db528bb4df739e289163779d (diff)
RotGrfFlyFrame: Initial adaptions
To allow free rotation of Graphic FlyFrames in Writer, several adaptions are necessary. This change takes care of all needed changes to internally support a freely definable rotation angle for that case. Save/Load round trip is working, the graphic does no longer get modified and added in 90-degree-changed state to the object, the original will be preserved. Support for needed slot in core/ui is implemented. Rotation can be applied from Menus/Toolbars in the known 90/180 degree steps. Added a slot/Button/command to reset rotation in these cases. Added support in Sidebar to rotate using the rotation wheel and/or numeric field. These fields and support added to Image TabPage, too, fully functional. Missing now is a solution for displaying the rotated Graphic. For now, it just gets rotated, but this will not be the final state of this change. Change-Id: I6f3b85ebb5be2b4ad3311c536d54f27a37a494e7 RotGrfFlyFrame: Linux build adaptions Change-Id: I365287ecd6525b1972e8436d61332f7121d88649
-rw-r--r--include/svx/svxids.hrc2
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu8
-rw-r--r--svx/sdi/svx.sdi17
-rw-r--r--svx/source/sidebar/possize/PosSizePropertyPanel.cxx1
-rw-r--r--sw/sdi/_grfsh.sdi14
-rw-r--r--sw/source/core/doc/notxtfrm.cxx19
-rw-r--r--sw/source/ui/frmdlg/frmpage.cxx31
-rw-r--r--sw/source/uibase/frmdlg/frmmgr.cxx11
-rw-r--r--sw/source/uibase/inc/frmmgr.hxx3
-rw-r--r--sw/source/uibase/inc/frmpage.hxx6
-rw-r--r--sw/source/uibase/shells/frmsh.cxx17
-rw-r--r--sw/source/uibase/shells/grfsh.cxx150
-rw-r--r--sw/uiconfig/sglobal/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/sglobal/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml1
-rw-r--r--sw/uiconfig/sweb/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/sweb/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/swform/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/swform/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/swform/toolbar/graphicobjectbar.xml1
-rw-r--r--sw/uiconfig/swreport/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/swreport/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/swreport/toolbar/graphicobjectbar.xml1
-rw-r--r--sw/uiconfig/swriter/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/swriter/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/swriter/toolbar/graphicobjectbar.xml1
-rw-r--r--sw/uiconfig/swriter/ui/notebookbar.ui26
-rw-r--r--sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui7
-rw-r--r--sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui7
-rw-r--r--sw/uiconfig/swriter/ui/picturepage.ui149
-rw-r--r--sw/uiconfig/swxform/menubar/menubar.xml1
-rw-r--r--sw/uiconfig/swxform/popupmenu/graphic.xml1
-rw-r--r--sw/uiconfig/swxform/toolbar/graphicobjectbar.xml1
-rw-r--r--xmloff/source/text/XMLTextFrameContext.cxx5
34 files changed, 411 insertions, 79 deletions
diff --git a/include/svx/svxids.hrc b/include/svx/svxids.hrc
index 84103287e776..79ebc50726c1 100644
--- a/include/svx/svxids.hrc
+++ b/include/svx/svxids.hrc
@@ -919,7 +919,7 @@
#define SID_ROTATE_GRAPHIC_LEFT ( SID_SVX_START + 1121 )
#define SID_ROTATE_GRAPHIC_RIGHT ( SID_SVX_START + 1122 )
#define SID_ROTATE_GRAPHIC_180 ( SID_SVX_START + 1123 )
-
+#define SID_ROTATE_GRAPHIC_RESET ( SID_SVX_START + 1092 ) /* RotGrfFlyFrame: new slot */
// new slots for panels
#define SID_ATTR_FILL_TRANSPARENCE ( SID_SVX_START + 1124 )
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
index 5803979d41f8..52fec078a080 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/WriterCommands.xcu
@@ -983,6 +983,14 @@
<value>1</value>
</prop>
</node>
+ <node oor:name=".uno:RotateReset" oor:op="replace">
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Reset R~otation</value>
+ </prop>
+ <prop oor:name="Properties" oor:type="xs:int">
+ <value>1</value>
+ </prop>
+ </node>
<node oor:name=".uno:NewHtmlDoc" oor:op="replace">
<prop oor:name="Label" oor:type="xs:string">
<value xml:lang="en-US">Create ~HTML Document</value>
diff --git a/svx/sdi/svx.sdi b/svx/sdi/svx.sdi
index 932aef3cb2c2..acd7f4c91f6b 100644
--- a/svx/sdi/svx.sdi
+++ b/svx/sdi/svx.sdi
@@ -4305,6 +4305,23 @@ SfxVoidItem RotateRight SID_ROTATE_GRAPHIC_RIGHT
GroupId = SfxGroupId::Graphic;
]
+SfxVoidItem RotateReset SID_ROTATE_GRAPHIC_RESET
+
+[
+ AutoUpdate = FALSE,
+ FastCall = FALSE,
+ ReadOnlyDoc = TRUE,
+ Toggle = FALSE,
+ Container = FALSE,
+ RecordAbsolute = FALSE,
+ RecordPerSet;
+
+ AccelConfig = TRUE,
+ MenuConfig = TRUE,
+ ToolBoxConfig = TRUE,
+ GroupId = SfxGroupId::Graphic;
+]
+
SfxBoolItem Crop SID_OBJECT_CROP
()
[
diff --git a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
index ab27b80cdc68..3895b2a41208 100644
--- a/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
+++ b/svx/source/sidebar/possize/PosSizePropertyPanel.cxx
@@ -270,6 +270,7 @@ void PosSizePropertyPanel::HandleContextChange(
case CombinedEnumContext(Application::WriterVariants, Context::Graphic):
bShowFlip = true;
+ bShowAngle = true; // RotGrfFlyFrame: Writer FlyFrames for Graphics now support angle
break;
case CombinedEnumContext(Application::Calc, Context::Draw):
diff --git a/sw/sdi/_grfsh.sdi b/sw/sdi/_grfsh.sdi
index 1dc453608103..8291745966bb 100644
--- a/sw/sdi/_grfsh.sdi
+++ b/sw/sdi/_grfsh.sdi
@@ -94,6 +94,20 @@ interface BaseTextGraphic
DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
]
+ SID_ROTATE_GRAPHIC_RESET
+ [
+ ExecMethod = ExecuteRotation ;
+ StateMethod = GetAttrStateForRotation ;
+ DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
+ ]
+
+ SID_ATTR_TRANSFORM_ANGLE
+ [
+ ExecMethod = ExecuteRotation ;
+ StateMethod = GetAttrStateForRotation ;
+ DisableFlags="SfxDisableFlags::SwOnProtectedCursor";
+ ]
+
SID_OBJECT_CROP
[
ExecMethod = Execute ;
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx
index c4791e086d4b..a35f679d10be 100644
--- a/sw/source/core/doc/notxtfrm.cxx
+++ b/sw/source/core/doc/notxtfrm.cxx
@@ -768,10 +768,21 @@ void paintGraphicUsingPrimitivesHelper(vcl::RenderContext & rOutputDevice,
const basegfx::B2DRange aTargetRange(
rAlignedGrfArea.Left(), rAlignedGrfArea.Top(),
rAlignedGrfArea.Right(), rAlignedGrfArea.Bottom());
- const basegfx::B2DHomMatrix aTargetTransform(
- basegfx::utils::createScaleTranslateB2DHomMatrix(
- aTargetRange.getRange(),
- aTargetRange.getMinimum()));
+ basegfx::B2DHomMatrix aTargetTransform;
+
+ // RotGrfFlyFrame: Take rotation into account. Rotation is in 10th degrees
+ if(0 != rGraphicAttr.GetRotation())
+ {
+ const double fRotate(static_cast< double >(-rGraphicAttr.GetRotation()) * (M_PI/1800.0));
+ aTargetTransform.translate(-0.5, -0.5);
+ aTargetTransform.rotate(fRotate);
+ aTargetTransform.translate(0.5, 0.5);
+ }
+
+ // needed scale/translate
+ aTargetTransform *= basegfx::utils::createScaleTranslateB2DHomMatrix(
+ aTargetRange.getRange(),
+ aTargetRange.getMinimum());
drawinglayer::primitive2d::Primitive2DContainer aContent(1);
bool bDone(false);
diff --git a/sw/source/ui/frmdlg/frmpage.cxx b/sw/source/ui/frmdlg/frmpage.cxx
index e36595431cee..f1abe60c19fe 100644
--- a/sw/source/ui/frmdlg/frmpage.cxx
+++ b/sw/source/ui/frmdlg/frmpage.cxx
@@ -2388,6 +2388,12 @@ SwGrfExtPage::SwGrfExtPage(vcl::Window *pParent, const SfxItemSet &rSet)
get(m_pBmpWin, "preview");
m_pBmpWin->SetBitmapEx(get<FixedImage>("fallback")->GetImage().GetBitmapEx());
+ // RotGrfFlyFrame: Need Angle and RotateControls now
+ get(m_pFlAngle, "FL_ANGLE");
+ get(m_pNfAngle, "NF_ANGLE");
+ get(m_pCtlAngle, "CTL_ANGLE");
+ m_pCtlAngle->SetLinkedField( m_pNfAngle, 2 );
+
SetExchangeSupport();
m_pMirrorHorzBox->SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl));
m_pMirrorVertBox->SetClickHdl( LINK(this, SwGrfExtPage, MirrorHdl));
@@ -2411,6 +2417,12 @@ void SwGrfExtPage::dispose()
m_pBmpWin.clear();
m_pConnectED.clear();
m_pBrowseBT.clear();
+
+ // RotGrfFlyFrame: Support RotationAngle
+ m_pFlAngle.clear();
+ m_pNfAngle.clear();
+ m_pCtlAngle.clear();
+
SfxTabPage::dispose();
}
@@ -2432,6 +2444,17 @@ void SwGrfExtPage::Reset(const SfxItemSet *rSet)
m_pConnectED->SetReadOnly(false);
}
+ // RotGrfFlyFrame: Get RotationAngle and set at control
+ if(SfxItemState::SET == rSet->GetItemState( SID_ATTR_TRANSFORM_ANGLE, false, &pItem))
+ {
+ m_pCtlAngle->SetRotation(static_cast<const SfxInt32Item*>(pItem)->GetValue());
+ }
+ else
+ {
+ m_pCtlAngle->SetRotation(0);
+ }
+ m_pCtlAngle->SaveValue();
+
ActivatePage(*rSet);
}
@@ -2559,6 +2582,14 @@ bool SwGrfExtPage::FillItemSet( SfxItemSet *rSet )
rSet->Put( SvxBrushItem( aGrfName, aFilterName, GPOS_LT,
SID_ATTR_GRAF_GRAPHIC ));
}
+
+ // RotGrfFlyFrame: Safe rotation if modified
+ if(m_pCtlAngle->IsValueModified())
+ {
+ rSet->Put(SfxInt32Item(GetWhich(SID_ATTR_TRANSFORM_ANGLE), m_pCtlAngle->GetRotation()));
+ bModified = true;
+ }
+
return bModified;
}
diff --git a/sw/source/uibase/frmdlg/frmmgr.cxx b/sw/source/uibase/frmdlg/frmmgr.cxx
index 73df037c9fdf..fdc883b6a22a 100644
--- a/sw/source/uibase/frmdlg/frmmgr.cxx
+++ b/sw/source/uibase/frmdlg/frmmgr.cxx
@@ -41,6 +41,7 @@
#include <com/sun/star/text/HoriOrientation.hpp>
#include <com/sun/star/text/VertOrientation.hpp>
#include <com/sun/star/text/RelOrientation.hpp>
+#include <grfatr.hxx>
using namespace ::com::sun::star;
@@ -568,6 +569,16 @@ void SwFlyFrameAttrMgr::SetHeightSizeType( SwFrameSize eType )
m_aSet.Put( aSize );
}
+void SwFlyFrameAttrMgr::SetRotation(sal_uInt32 nOld, sal_uInt32 nNew, Size aUnrotatedSize)
+{
+ // RotGrfFlyFrame: Central handling of real change of rotation here. Adaption of pos/size
+ // may be wanted in the future
+ if(nOld != nNew)
+ {
+ m_pOwnSh->SetAttrItem(SwRotationGrf(static_cast<sal_uInt16>(nNew), aUnrotatedSize));
+ }
+}
+
void SwFlyFrameAttrMgr::SetSize( const Size& rSize )
{
SwFormatFrameSize aSize( GetFrameSize() );
diff --git a/sw/source/uibase/inc/frmmgr.hxx b/sw/source/uibase/inc/frmmgr.hxx
index 43a0d05c7286..cdc3680ab894 100644
--- a/sw/source/uibase/inc/frmmgr.hxx
+++ b/sw/source/uibase/inc/frmmgr.hxx
@@ -92,6 +92,9 @@ public:
void SetHeightSizeType(SwFrameSize eType);
+ // rotation
+ void SetRotation(sal_uInt32 nOld, sal_uInt32 nNew, Size aUnrotatedSize);
+
// space to content
void SetLRSpace( long nLeft,
long nRight );
diff --git a/sw/source/uibase/inc/frmpage.hxx b/sw/source/uibase/inc/frmpage.hxx
index 870ad0803b4d..45c5fd0c5cde 100644
--- a/sw/source/uibase/inc/frmpage.hxx
+++ b/sw/source/uibase/inc/frmpage.hxx
@@ -31,6 +31,7 @@
#include <svx/swframeexample.hxx>
#include <prcntfld.hxx>
#include <globals.hrc>
+#include <svx/dialcontrol.hxx>
namespace sfx2{class FileDialogHelper;}
class SwWrtShell;
@@ -212,6 +213,11 @@ class SwGrfExtPage: public SfxTabPage
VclPtr<Edit> m_pConnectED;
VclPtr<PushButton> m_pBrowseBT;
+ // RotGrfFlyFrame: Need Angle and RotateControls now
+ VclPtr<VclFrame> m_pFlAngle;
+ VclPtr<NumericField> m_pNfAngle;
+ VclPtr<svx::DialControl> m_pCtlAngle;
+
OUString aFilterName;
OUString aGrfName, aNewGrfName;
diff --git a/sw/source/uibase/shells/frmsh.cxx b/sw/source/uibase/shells/frmsh.cxx
index c995c01987ce..9e4761cd9da4 100644
--- a/sw/source/uibase/shells/frmsh.cxx
+++ b/sw/source/uibase/shells/frmsh.cxx
@@ -85,6 +85,7 @@
#define SwFrameShell
#include <sfx2/msg.hxx>
#include <swslots.hxx>
+#include <grfatr.hxx>
using ::editeng::SvxBorderLine;
using namespace ::com::sun::star;
@@ -363,6 +364,22 @@ void SwFrameShell::Execute(SfxRequest &rReq)
bApplyNewSize = true;
}
+ // RotGrfFlyFrame: Get Value and disable is in SwGrfShell::GetAttrStateForRotation, but the
+ // value setter uses SID_ATTR_TRANSFORM and a group of three values. Rotation is
+ // added now, so use it in this central place. Do no forget to convert angle from
+ // 100th degrees in SID_ATTR_TRANSFORM_ANGLE to 10th degrees in RES_GRFATR_ROTATION
+ if (pArgs && SfxItemState::SET == pArgs->GetItemState(SID_ATTR_TRANSFORM_ANGLE, false, &pItem))
+ {
+ const sal_uInt32 nNewRot(static_cast<const SfxUInt32Item*>(pItem)->GetValue() / 10);
+ SfxItemSet aSet(rSh.GetAttrPool(), svl::Items<RES_GRFATR_ROTATION, RES_GRFATR_ROTATION>{} );
+ rSh.GetCurAttr(aSet);
+ const SwRotationGrf& rRotation = static_cast<const SwRotationGrf&>(aSet.Get(RES_GRFATR_ROTATION));
+ const sal_uInt32 nOldRot(rRotation.GetValue());
+
+ // RotGrfFlyFrame: Rotation change here, SwFlyFrameAttrMgr aMgr is available
+ aMgr.SetRotation(nOldRot, nNewRot, rRotation.GetUnrotatedSize());
+ }
+
if ( bApplyNewSize )
{
aMgr.SetSize( aNewSize );
diff --git a/sw/source/uibase/shells/grfsh.cxx b/sw/source/uibase/shells/grfsh.cxx
index dafb8d4b643b..7b2e034ae670 100644
--- a/sw/source/uibase/shells/grfsh.cxx
+++ b/sw/source/uibase/shells/grfsh.cxx
@@ -68,7 +68,7 @@
#include <svx/graphichelper.hxx>
#include <doc.hxx>
#include <IDocumentDrawModelAccess.hxx>
-
+//#include <svx/svxids.hrc>
#include <svx/drawitem.hxx>
#define SwGrfShell
@@ -259,15 +259,17 @@ void SwGrfShell::Execute(SfxRequest &rReq)
SID_DOCFRAME, SID_DOCFRAME,
SID_REFERER, SID_REFERER,
SID_ATTR_BORDER_INNER, SID_ATTR_BORDER_INNER,
- SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE,
+ SID_ATTR_PAGE_SIZE, SID_ATTR_PAGE_SIZE, // 10051
+ // RotGrfFlyFrame: Need RotationAngle now
+ SID_ATTR_TRANSFORM_ANGLE, SID_ATTR_TRANSFORM_ANGLE, // 10095
// Items to hand over XPropertyList things like
// XColorList, XHatchList, XGradientList, and XBitmapList to
// the Area TabPage:
- SID_COLOR_TABLE, SID_PATTERN_LIST,
- SID_HTML_MODE, SID_HTML_MODE,
- SID_ATTR_GRAF_KEEP_ZOOM, SID_ATTR_GRAF_KEEP_ZOOM,
- SID_ATTR_GRAF_FRMSIZE, SID_ATTR_GRAF_GRAPHIC,
- // contains SID_ATTR_GRAF_FRMSIZE_PERCENT
+ SID_COLOR_TABLE, SID_PATTERN_LIST, //10179
+ SID_HTML_MODE, SID_HTML_MODE, //10414
+ SID_ATTR_GRAF_KEEP_ZOOM, SID_ATTR_GRAF_KEEP_ZOOM, //10882
+ SID_ATTR_GRAF_FRMSIZE, SID_ATTR_GRAF_GRAPHIC, // 10884
+ // contains SID_ATTR_GRAF_FRMSIZE_PERCENT
FN_GET_PRINT_AREA, FN_GET_PRINT_AREA,
FN_PARAM_GRF_CONNECT, FN_PARAM_GRF_CONNECT,
FN_PARAM_GRF_DIALOG, FN_PARAM_GRF_DIALOG,
@@ -375,6 +377,19 @@ void SwGrfShell::Execute(SfxRequest &rReq)
SfxStringItem(SID_REFERER, sh->GetMedium()->GetName()));
}
+ Size aUnrotatedSize;
+ sal_uInt16 nCurrentRotation(0);
+ { // RotGrfFlyFrame: Add current RotationAngle value, convert from
+ // RES_GRFATR_ROTATION to SID_ATTR_TRANSFORM_ANGLE. Do not forget to
+ // convert from 10th degrees to 100th degrees
+ SfxItemSet aTmpSet( rSh.GetAttrPool(), svl::Items<RES_GRFATR_ROTATION, RES_GRFATR_ROTATION>{} );
+ rSh.GetCurAttr( aTmpSet );
+ const SwRotationGrf& rRotation = static_cast<const SwRotationGrf&>(aTmpSet.Get(RES_GRFATR_ROTATION));
+ nCurrentRotation = rRotation.GetValue();
+ aUnrotatedSize = rRotation.GetUnrotatedSize();
+ aSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_ANGLE, nCurrentRotation * 10));
+ }
+
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
OSL_ENSURE(pFact, "no dialog factory!");
ScopedVclPtr<SfxAbstractTabDialog> pDlg(pFact->CreateFrameTabDialog("PictureDialog",
@@ -489,6 +504,15 @@ void SwGrfShell::Execute(SfxRequest &rReq)
FN_UNO_DESCRIPTION, true, &pItem ))
rSh.SetObjDescription( static_cast<const SfxStringItem*>(pItem)->GetValue() );
+ // RotGrfFlyFrame: Get and process evtl. changed RotationAngle
+ if ( SfxItemState::SET == pSet->GetItemState(SID_ATTR_TRANSFORM_ANGLE, false, &pItem ))
+ {
+ const sal_uInt32 aNewRotation((static_cast<const SfxUInt32Item*>(pItem)->GetValue() / 10) % 3600);
+
+ // RotGrfFlyFrame: Possible rotation change here, SwFlyFrameAttrMgr aMgr is available
+ aMgr.SetRotation(nCurrentRotation, aNewRotation, aUnrotatedSize);
+ }
+
SfxItemSet aGrfSet( rSh.GetAttrPool(), svl::Items<RES_GRFATR_BEGIN,
RES_GRFATR_END-1>{} );
aGrfSet.Put( *pSet );
@@ -868,9 +892,14 @@ void SwGrfShell::GetAttrState(SfxItemSet &rSet)
void SwGrfShell::ExecuteRotation(SfxRequest const &rReq)
{
- sal_uInt16 aRotation;
-
+ // RotGrfFlyFrame: Modify rotation attribute instead of manipulating the graphic
SwWrtShell& rShell = GetShell();
+ SfxItemSet aSet( rShell.GetAttrPool(), svl::Items<
+ RES_GRFATR_ROTATION, RES_GRFATR_ROTATION,
+ SID_ATTR_TRANSFORM_ANGLE, SID_ATTR_TRANSFORM_ANGLE>{} );
+ rShell.GetCurAttr( aSet );
+ const SwRotationGrf& rRotation = static_cast<const SwRotationGrf&>(aSet.Get(RES_GRFATR_ROTATION));
+ sal_uInt16 aRotation(0);
if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_LEFT)
{
@@ -884,59 +913,26 @@ void SwGrfShell::ExecuteRotation(SfxRequest const &rReq)
{
aRotation = 1800;
}
- else
- {
- return;
- }
-
- rShell.StartAllAction();
- rShell.StartUndo(SwUndoId::START);
- Graphic aGraphic = *rShell.GetGraphic();
- GraphicNativeTransform aTransform(aGraphic);
- aTransform.rotate(aRotation);
- rShell.ReRead(OUString(), OUString(), const_cast<const Graphic*>(&aGraphic));
+ if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_RESET || 0 != aRotation)
+ {
+ rShell.StartAllAction();
+ rShell.StartUndo(SwUndoId::START);
- SwFlyFrameAttrMgr aManager(false, &rShell, rShell.IsFrameSelected() ? Frmmgr_Type::NONE : Frmmgr_Type::GRF);
+ if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_RESET)
+ {
+ rShell.SetAttrItem(SwRotationGrf(0, rRotation.GetUnrotatedSize()));
+ }
+ else if(0 != aRotation)
+ {
+ sal_uInt16 aNewRotation((aRotation + rRotation.GetValue()) % 3600);
- long nRotatedWidth = aManager.GetSize().Height();
- long nRotatedHeight = aManager.GetSize().Width();
- if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_180)
- std::swap(nRotatedWidth, nRotatedHeight);
- Size aSize(nRotatedWidth, nRotatedHeight);
- aManager.SetSize(aSize);
- aManager.UpdateFlyFrame();
- SfxItemSet aSet( rShell.GetAttrPool(), svl::Items<RES_GRFATR_CROPGRF, RES_GRFATR_CROPGRF>{} );
- rShell.GetCurAttr( aSet );
- SwCropGrf aCrop( static_cast<const SwCropGrf&>( aSet.Get(RES_GRFATR_CROPGRF) ) );
- tools::Rectangle aCropRectangle(aCrop.GetLeft(), aCrop.GetTop(), aCrop.GetRight(), aCrop.GetBottom());
+ rShell.SetAttrItem(SwRotationGrf(aNewRotation, rRotation.GetUnrotatedSize()));
+ }
- if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_LEFT)
- {
- aCrop.SetLeft( aCropRectangle.Top() );
- aCrop.SetTop( aCropRectangle.Right() );
- aCrop.SetRight( aCropRectangle.Bottom() );
- aCrop.SetBottom( aCropRectangle.Left() );
- }
- else if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_RIGHT)
- {
- aCrop.SetLeft( aCropRectangle.Bottom() );
- aCrop.SetTop( aCropRectangle.Left() );
- aCrop.SetRight( aCropRectangle.Top() );
- aCrop.SetBottom( aCropRectangle.Right() );
- }
- else if (rReq.GetSlot() == SID_ROTATE_GRAPHIC_180)
- {
- aCrop.SetLeft( aCropRectangle.Right() );
- aCrop.SetTop( aCropRectangle.Bottom() );
- aCrop.SetRight( aCropRectangle.Left() );
- aCrop.SetBottom( aCropRectangle.Top() );
+ rShell.EndUndo(SwUndoId::END);
+ rShell.EndAllAction();
}
-
- rShell.SetAttrItem(aCrop);
-
- rShell.EndUndo(SwUndoId::END);
- rShell.EndAllAction();
}
void SwGrfShell::GetAttrStateForRotation(SfxItemSet &rSet)
@@ -953,25 +949,37 @@ void SwGrfShell::GetAttrStateForRotation(SfxItemSet &rSet)
bool bDisable = bIsParentContentProtected;
switch( nWhich )
{
- case SID_ROTATE_GRAPHIC_LEFT:
- case SID_ROTATE_GRAPHIC_RIGHT:
- case SID_ROTATE_GRAPHIC_180:
- if( rShell.GetGraphicType() == GraphicType::NONE )
- {
- bDisable = true;
- }
- else
+ case SID_ROTATE_GRAPHIC_LEFT:
+ case SID_ROTATE_GRAPHIC_RIGHT:
+ case SID_ROTATE_GRAPHIC_180:
{
- Graphic aGraphic = *rShell.GetGraphic();
- GraphicNativeTransform aTransform(aGraphic);
- if (!aTransform.canBeRotated())
+ if( rShell.GetGraphicType() == GraphicType::NONE )
{
bDisable = true;
}
+ break;
}
- break;
- default:
- bDisable = false;
+ case SID_ROTATE_GRAPHIC_RESET:
+ {
+ // RotGrfFlyFrame: disable when already no rotation
+ SfxItemSet aSet( rShell.GetAttrPool(), svl::Items<RES_GRFATR_ROTATION, RES_GRFATR_ROTATION>{} );
+ rShell.GetCurAttr( aSet );
+ const SwRotationGrf& rRotation = static_cast<const SwRotationGrf&>(aSet.Get(RES_GRFATR_ROTATION));
+ bDisable = (0 == rRotation.GetValue());
+ break;
+ }
+ case SID_ATTR_TRANSFORM_ANGLE:
+ {
+ // RotGrfFlyFrame: get rotation value from RES_GRFATR_ROTATION and copy to rSet as
+ // SID_ATTR_TRANSFORM_ANGLE, convert from 10th degrees to 100th degrees
+ SfxItemSet aSet( rShell.GetAttrPool(), svl::Items<RES_GRFATR_ROTATION, RES_GRFATR_ROTATION>{} );
+ rShell.GetCurAttr( aSet );
+ const SwRotationGrf& rRotation = static_cast<const SwRotationGrf&>(aSet.Get(RES_GRFATR_ROTATION));
+ rSet.Put(SfxInt32Item(SID_ATTR_TRANSFORM_ANGLE, rRotation.GetValue() * 10));
+ break;
+ }
+ default:
+ bDisable = false;
}
if( bDisable )
diff --git a/sw/uiconfig/sglobal/menubar/menubar.xml b/sw/uiconfig/sglobal/menubar/menubar.xml
index b8457d651c59..e492f604017c 100644
--- a/sw/uiconfig/sglobal/menubar/menubar.xml
+++ b/sw/uiconfig/sglobal/menubar/menubar.xml
@@ -551,6 +551,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/sglobal/popupmenu/graphic.xml b/sw/uiconfig/sglobal/popupmenu/graphic.xml
index 689b6a3fd358..05875fae43a6 100644
--- a/sw/uiconfig/sglobal/popupmenu/graphic.xml
+++ b/sw/uiconfig/sglobal/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
diff --git a/sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml b/sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml
index 287402963de5..10513be91e19 100644
--- a/sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml
+++ b/sw/uiconfig/sglobal/toolbar/graphicobjectbar.xml
@@ -28,6 +28,7 @@
<toolbar:toolbaritem xlink:href=".uno:FlipHorizontal"/>
<toolbar:toolbaritem xlink:href=".uno:RotateLeft"/>
<toolbar:toolbaritem xlink:href=".uno:RotateRight"/>
+ <toolbar:toolbaritem xlink:href=".uno:RotateReset"/>
<toolbar:toolbaritem xlink:href=".uno:Rotate180" toolbar:visible="false"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:GrafTransparence"/>
diff --git a/sw/uiconfig/sweb/menubar/menubar.xml b/sw/uiconfig/sweb/menubar/menubar.xml
index 25ff1afbac2d..ab677853ebb4 100644
--- a/sw/uiconfig/sweb/menubar/menubar.xml
+++ b/sw/uiconfig/sweb/menubar/menubar.xml
@@ -274,6 +274,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/sweb/popupmenu/graphic.xml b/sw/uiconfig/sweb/popupmenu/graphic.xml
index 689b6a3fd358..05875fae43a6 100644
--- a/sw/uiconfig/sweb/popupmenu/graphic.xml
+++ b/sw/uiconfig/sweb/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
diff --git a/sw/uiconfig/swform/menubar/menubar.xml b/sw/uiconfig/swform/menubar/menubar.xml
index 3f61b2e67d80..9bf743953dae 100644
--- a/sw/uiconfig/swform/menubar/menubar.xml
+++ b/sw/uiconfig/swform/menubar/menubar.xml
@@ -328,6 +328,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/swform/popupmenu/graphic.xml b/sw/uiconfig/swform/popupmenu/graphic.xml
index 689b6a3fd358..05875fae43a6 100644
--- a/sw/uiconfig/swform/popupmenu/graphic.xml
+++ b/sw/uiconfig/swform/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
diff --git a/sw/uiconfig/swform/toolbar/graphicobjectbar.xml b/sw/uiconfig/swform/toolbar/graphicobjectbar.xml
index 22257b203ee4..b972e9bf660e 100644
--- a/sw/uiconfig/swform/toolbar/graphicobjectbar.xml
+++ b/sw/uiconfig/swform/toolbar/graphicobjectbar.xml
@@ -30,6 +30,7 @@
<toolbar:toolbaritem xlink:href=".uno:FlipHorizontal"/>
<toolbar:toolbaritem xlink:href=".uno:RotateLeft"/>
<toolbar:toolbaritem xlink:href=".uno:RotateRight"/>
+ <toolbar:toolbaritem xlink:href=".uno:RotateReset"/>
<toolbar:toolbaritem xlink:href=".uno:Rotate180"/>
<toolbar:toolbaritem xlink:href=".uno:Crop"/>
<toolbar:toolbarseparator/>
diff --git a/sw/uiconfig/swreport/menubar/menubar.xml b/sw/uiconfig/swreport/menubar/menubar.xml
index 41e438cdebe3..bc1a26d036f4 100644
--- a/sw/uiconfig/swreport/menubar/menubar.xml
+++ b/sw/uiconfig/swreport/menubar/menubar.xml
@@ -330,6 +330,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/swreport/popupmenu/graphic.xml b/sw/uiconfig/swreport/popupmenu/graphic.xml
index 689b6a3fd358..05875fae43a6 100644
--- a/sw/uiconfig/swreport/popupmenu/graphic.xml
+++ b/sw/uiconfig/swreport/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
diff --git a/sw/uiconfig/swreport/toolbar/graphicobjectbar.xml b/sw/uiconfig/swreport/toolbar/graphicobjectbar.xml
index 22257b203ee4..6e2c6a2b4823 100644
--- a/sw/uiconfig/swreport/toolbar/graphicobjectbar.xml
+++ b/sw/uiconfig/swreport/toolbar/graphicobjectbar.xml
@@ -31,6 +31,7 @@
<toolbar:toolbaritem xlink:href=".uno:RotateLeft"/>
<toolbar:toolbaritem xlink:href=".uno:RotateRight"/>
<toolbar:toolbaritem xlink:href=".uno:Rotate180"/>
+ <toolbar:toolbaritem xlink:href=".uno:RotateReset"/>
<toolbar:toolbaritem xlink:href=".uno:Crop"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:FrameDialog"/>
diff --git a/sw/uiconfig/swriter/menubar/menubar.xml b/sw/uiconfig/swriter/menubar/menubar.xml
index ce25da98b5a2..b2e5bf54fea5 100644
--- a/sw/uiconfig/swriter/menubar/menubar.xml
+++ b/sw/uiconfig/swriter/menubar/menubar.xml
@@ -551,6 +551,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/swriter/popupmenu/graphic.xml b/sw/uiconfig/swriter/popupmenu/graphic.xml
index afd5b89285c2..2ab371239b7f 100644
--- a/sw/uiconfig/swriter/popupmenu/graphic.xml
+++ b/sw/uiconfig/swriter/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
<menu:menuseparator/>
<menu:menuitem menu:id=".uno:FlipVertical"/>
<menu:menuitem menu:id=".uno:FlipHorizontal"/>
diff --git a/sw/uiconfig/swriter/toolbar/graphicobjectbar.xml b/sw/uiconfig/swriter/toolbar/graphicobjectbar.xml
index 287402963de5..172d8b4d52b5 100644
--- a/sw/uiconfig/swriter/toolbar/graphicobjectbar.xml
+++ b/sw/uiconfig/swriter/toolbar/graphicobjectbar.xml
@@ -29,6 +29,7 @@
<toolbar:toolbaritem xlink:href=".uno:RotateLeft"/>
<toolbar:toolbaritem xlink:href=".uno:RotateRight"/>
<toolbar:toolbaritem xlink:href=".uno:Rotate180" toolbar:visible="false"/>
+ <toolbar:toolbaritem xlink:href=".uno:RotateReset"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:GrafTransparence"/>
<toolbar:toolbarseparator/>
diff --git a/sw/uiconfig/swriter/ui/notebookbar.ui b/sw/uiconfig/swriter/ui/notebookbar.ui
index 59da4b4acf4f..e2d8b1f36adc 100644
--- a/sw/uiconfig/swriter/ui/notebookbar.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar.ui
@@ -6347,6 +6347,32 @@
<property name="position">1</property>
</packing>
</child>
+ <child>
+ <object class="sfxlo-NotebookbarToolBox" id="rotate2">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="show_arrow">False</property>
+ <child>
+ <object class="GtkToolButton" id="RotateReset">
+ <property name="use_action_appearance">False</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="is_important">True</property>
+ <property name="action_name">.uno:RotateReset</property>
+ <property name="use_underline">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="homogeneous">True</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</object>
<packing>
<property name="expand">False</property>
diff --git a/sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui b/sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui
index dc396347ec7f..711d5e8b28ea 100644
--- a/sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar_groupedbar_compact.ui
@@ -1714,6 +1714,13 @@
</object>
</child>
<child>
+ <object class="GtkMenuItem" id="RotateResetD">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="action_name">.uno:RotateReset</property>
+ </object>
+ </child>
+ <child>
<object class="GtkMenuItem" id="FlipVerticalD">
<property name="visible">True</property>
<property name="can_focus">False</property>
diff --git a/sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui b/sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui
index 3e0c96a8d2a6..24e42699ccfe 100644
--- a/sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui
+++ b/sw/uiconfig/swriter/ui/notebookbar_groupedbar_full.ui
@@ -1645,6 +1645,13 @@
</object>
</child>
<child>
+ <object class="GtkMenuItem" id="RotateResetD">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="action_name">.uno:RotateReset</property>
+ </object>
+ </child>
+ <child>
<object class="GtkMenuItem" id="FlipVerticalD">
<property name="visible">True</property>
<property name="can_focus">False</property>
diff --git a/sw/uiconfig/swriter/ui/picturepage.ui b/sw/uiconfig/swriter/ui/picturepage.ui
index b710ae9d92b5..4a9364e8dffd 100644
--- a/sw/uiconfig/swriter/ui/picturepage.ui
+++ b/sw/uiconfig/swriter/ui/picturepage.ui
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.16.1 -->
<interface domain="sw">
<requires lib="gtk+" version="3.0"/>
- <requires lib="LibreOffice" version="1.0"/>
+ <!-- interface-requires LibreOffice 1.0 -->
<object class="GtkGrid" id="PicturePage">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -37,6 +37,8 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -49,6 +51,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -64,6 +68,7 @@
<property name="left_attach">0</property>
<property name="top_attach">0</property>
<property name="width">2</property>
+ <property name="height">1</property>
</packing>
</child>
</object>
@@ -84,6 +89,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -120,6 +127,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -135,6 +144,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">1</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -152,6 +163,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -168,6 +181,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">3</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -184,6 +199,8 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">4</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
<child>
@@ -217,6 +234,7 @@
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
+ <property name="width">1</property>
<property name="height">5</property>
</packing>
</child>
@@ -238,6 +256,133 @@
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkFrame" id="FL_ANGLE">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment" id="alignment1">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">6</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkBox" id="box4">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <property name="homogeneous">True</property>
+ <child>
+ <object class="GtkBox" id="box5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="valign">start</property>
+ <property name="spacing">12</property>
+ <child>
+ <object class="GtkLabel" id="FT_ANGLE">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" context="picturepage|FT_ANGLE">_Angle:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">NF_ANGLE</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkSpinButton" id="NF_ANGLE">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="invisible_char">•</property>
+ <property name="text" translatable="yes" context="picturepage">0,00</property>
+ <property name="adjustment">adjustmentANGLE</property>
+ <property name="digits">2</property>
+ <property name="wrap">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="box6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="FT_ANGLEPRESETS">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes" context="picturepage|FT_ANGLEPRESETS">Default _settings:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">CTL_ANGLE</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="svxlo-DialControl" id="CTL_ANGLE">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="tooltip_text" translatable="yes" context="picturepage|CTL_ANGLE|tooltip_text">Rotation Angle</property>
+ <property name="halign">center</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel" id="label3">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes" context="picturepage|label2">Rotation Angle</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="top_attach">2</property>
+ <property name="width">1</property>
+ <property name="height">1</property>
</packing>
</child>
</object>
diff --git a/sw/uiconfig/swxform/menubar/menubar.xml b/sw/uiconfig/swxform/menubar/menubar.xml
index f4b58ebe8b1b..151a9e6887a2 100644
--- a/sw/uiconfig/swxform/menubar/menubar.xml
+++ b/sw/uiconfig/swxform/menubar/menubar.xml
@@ -330,6 +330,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menu menu:id=".uno:GroupMenu">
diff --git a/sw/uiconfig/swxform/popupmenu/graphic.xml b/sw/uiconfig/swxform/popupmenu/graphic.xml
index 689b6a3fd358..05875fae43a6 100644
--- a/sw/uiconfig/swxform/popupmenu/graphic.xml
+++ b/sw/uiconfig/swxform/popupmenu/graphic.xml
@@ -59,6 +59,7 @@
<menu:menuitem menu:id=".uno:RotateLeft"/>
<menu:menuitem menu:id=".uno:RotateRight"/>
<menu:menuitem menu:id=".uno:Rotate180"/>
+ <menu:menuitem menu:id=".uno:RotateReset"/>
</menu:menupopup>
</menu:menu>
<menu:menuseparator/>
diff --git a/sw/uiconfig/swxform/toolbar/graphicobjectbar.xml b/sw/uiconfig/swxform/toolbar/graphicobjectbar.xml
index 22257b203ee4..6e2c6a2b4823 100644
--- a/sw/uiconfig/swxform/toolbar/graphicobjectbar.xml
+++ b/sw/uiconfig/swxform/toolbar/graphicobjectbar.xml
@@ -31,6 +31,7 @@
<toolbar:toolbaritem xlink:href=".uno:RotateLeft"/>
<toolbar:toolbaritem xlink:href=".uno:RotateRight"/>
<toolbar:toolbaritem xlink:href=".uno:Rotate180"/>
+ <toolbar:toolbaritem xlink:href=".uno:RotateReset"/>
<toolbar:toolbaritem xlink:href=".uno:Crop"/>
<toolbar:toolbarseparator/>
<toolbar:toolbaritem xlink:href=".uno:FrameDialog"/>
diff --git a/xmloff/source/text/XMLTextFrameContext.cxx b/xmloff/source/text/XMLTextFrameContext.cxx
index e6ca2f29864b..6526f9177e06 100644
--- a/xmloff/source/text/XMLTextFrameContext.cxx
+++ b/xmloff/source/text/XMLTextFrameContext.cxx
@@ -996,7 +996,10 @@ XMLTextFrameContext_Impl::XMLTextFrameContext_Impl(
sValue = sValue.trim();
sal_Int32 nVal;
if (::sax::Converter::convertNumber( nVal, sValue ))
- nRotation = (sal_Int16)(nVal % 360 );
+ {
+ // RotGrfFlyFrame: is in 10th degrees
+ nRotation = (sal_Int16)(nVal % 3600 );
+ }
}
}
break;