[Libreoffice-commits] core.git: 2 commits - include/vcl vcl/inc vcl/qa vcl/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Tue Mar 26 00:30:55 UTC 2019
include/vcl/GestureEvent.hxx | 42 ++++++
include/vcl/commandevent.hxx | 24 +++
include/vcl/svapp.hxx | 3
include/vcl/vclevent.hxx | 1
vcl/inc/salwtype.hxx | 14 +-
vcl/inc/widgetdraw/WidgetDefinition.hxx | 66 ++++------
vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx | 13 +
vcl/qa/cppunit/widgetdraw/data/definition1.xml | 8 -
vcl/source/app/svapp.cxx | 68 +++++++++-
vcl/source/gdi/FileDefinitionWidgetDraw.cxx | 99 ++++++---------
vcl/source/gdi/WidgetDefinition.cxx | 31 +---
vcl/source/gdi/WidgetDefinitionReader.cxx | 25 ---
vcl/source/window/commandevent.cxx | 9 +
vcl/source/window/winproc.cxx | 44 ++++++
14 files changed, 284 insertions(+), 163 deletions(-)
New commits:
commit 6b476080da0678faa59606ef814760bd4235de24
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon Mar 25 18:05:35 2019 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Tue Mar 26 01:30:45 2019 +0100
tdf#124146 add (general) gesture event support to VCL
Change-Id: I766930bb35071442e132b91477cd3d55e8f00f48
Reviewed-on: https://gerrit.libreoffice.org/69655
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/include/vcl/GestureEvent.hxx b/include/vcl/GestureEvent.hxx
new file mode 100644
index 000000000000..2070fc76d39a
--- /dev/null
+++ b/include/vcl/GestureEvent.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ */
+
+#ifndef INCLUDED_VCL_GESTUREEVENT_HXX
+#define INCLUDED_VCL_GESTUREEVENT_HXX
+
+#include <vcl/dllapi.h>
+
+enum class GestureEventType
+{
+ PanningBegin,
+ PanningUpdate,
+ PanningEnd
+};
+
+enum class PanningOrientation
+{
+ Horizontal,
+ Vertical
+};
+
+class VCL_DLLPUBLIC GestureEvent
+{
+public:
+ sal_Int32 mnX;
+ sal_Int32 mnY;
+ GestureEventType meEventType;
+
+ sal_Int32 mnOffset;
+ PanningOrientation meOrientation;
+};
+
+#endif // INCLUDED_VCL_GESTUREEVENT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/vcl/commandevent.hxx b/include/vcl/commandevent.hxx
index 88185efde077..a3ee2fb73c99 100644
--- a/include/vcl/commandevent.hxx
+++ b/include/vcl/commandevent.hxx
@@ -27,6 +27,7 @@
#include <vcl/keycodes.hxx>
#include <o3tl/typed_flags_set.hxx>
#include <rtl/ustring.hxx>
+#include <vcl/GestureEvent.hxx>
class CommandExtTextInputData;
class CommandWheelData;
@@ -37,6 +38,8 @@ class CommandMediaData;
class CommandSelectionChangeData;
class CommandSwipeData;
class CommandLongPressData;
+class CommandGestureData;
+
enum class CommandEventId;
enum class ExtTextInputAttr {
@@ -86,6 +89,7 @@ public:
const CommandSelectionChangeData* GetSelectionChangeData() const;
const CommandSwipeData* GetSwipeData() const;
const CommandLongPressData* GetLongPressData() const;
+ const CommandGestureData* GetGestureData() const;
};
class VCL_DLLPUBLIC CommandExtTextInputData
@@ -300,6 +304,25 @@ public:
double getY() const { return mnY; }
};
+class VCL_DLLPUBLIC CommandGestureData
+{
+public:
+ double const mfX;
+ double const mfY;
+ GestureEventType const meEventType;
+
+ double const mfOffset;
+ PanningOrientation const meOrientation;
+
+ CommandGestureData(double fX, double fY, GestureEventType eEventType, double fOffset, PanningOrientation eOrientation)
+ : mfX(fX)
+ , mfY(fY)
+ , meEventType(eEventType)
+ , mfOffset(fOffset)
+ , meOrientation(eOrientation)
+ {}
+};
+
enum class CommandEventId
{
NONE = 0,
@@ -323,6 +346,7 @@ enum class CommandEventId
QueryCharPosition = 20,
Swipe = 21,
LongPress = 22,
+ Gesture = 23,
};
#endif // INCLUDED_VCL_COMMANDEVENT_HXX
diff --git a/include/vcl/svapp.hxx b/include/vcl/svapp.hxx
index 712f75a0f09d..d89a23e54a13 100644
--- a/include/vcl/svapp.hxx
+++ b/include/vcl/svapp.hxx
@@ -63,6 +63,7 @@ class WorkWindow;
class NotifyEvent;
class KeyEvent;
class MouseEvent;
+class GestureEvent;
struct ImplSVEvent;
struct ConvertData;
@@ -747,6 +748,8 @@ public:
*/
static ImplSVEvent * PostMouseEvent( VclEventId nEvent, vcl::Window *pWin, MouseEvent const * pMouseEvent );
+ static ImplSVEvent* PostGestureEvent(VclEventId nEvent, vcl::Window* pWin, GestureEvent const * pGestureEvent);
+
/** Remove mouse and keypress events from a window... any also zoom and scroll events
if the platform supports it.
diff --git a/include/vcl/vclevent.hxx b/include/vcl/vclevent.hxx
index 26cf1a681c2b..4ba071715b6a 100644
--- a/include/vcl/vclevent.hxx
+++ b/include/vcl/vclevent.hxx
@@ -170,6 +170,7 @@ enum class VclEventId
WindowShow,
WindowStartDocking, // pData = DockingData
WindowToggleFloating,
+ WindowGestureEvent,
};
class VCL_DLLPUBLIC VclSimpleEvent
diff --git a/vcl/inc/salwtype.hxx b/vcl/inc/salwtype.hxx
index 4fab141bbca3..3585c018ba52 100644
--- a/vcl/inc/salwtype.hxx
+++ b/vcl/inc/salwtype.hxx
@@ -24,6 +24,7 @@
#include <rtl/ref.hxx>
#include <rtl/ustring.hxx>
#include <tools/solar.h>
+#include <vcl/GestureEvent.hxx>
class LogicalFontInstance;
class SalGraphics;
@@ -82,7 +83,9 @@ enum class SalEvent {
StartReconversion,
QueryCharPosition,
Swipe,
- LongPress
+ LongPress,
+ ExternalGesture,
+ Gesture,
};
// MOUSELEAVE must send, when the pointer leave the client area and
@@ -255,6 +258,15 @@ struct SalLongPressEvent
long mnY;
};
+struct SalGestureEvent
+{
+ GestureEventType meEventType;
+ PanningOrientation meOrientation;
+ double mfOffset;
+ long mnX;
+ long mnY;
+};
+
typedef void (*SALTIMERPROC)();
#endif // INCLUDED_VCL_INC_SALWTYPE_HXX
diff --git a/vcl/source/app/svapp.cxx b/vcl/source/app/svapp.cxx
index c3f3b07827f0..ca29108bc37e 100644
--- a/vcl/source/app/svapp.cxx
+++ b/vcl/source/app/svapp.cxx
@@ -133,11 +133,26 @@ struct ImplPostEventData
ImplSVEvent * mnEventId;
KeyEvent maKeyEvent;
MouseEvent maMouseEvent;
-
- ImplPostEventData( VclEventId nEvent, vcl::Window* pWin, const KeyEvent& rKeyEvent ) :
- mnEvent( nEvent ), mpWin( pWin ), mnEventId( nullptr ), maKeyEvent( rKeyEvent ) {}
- ImplPostEventData( VclEventId nEvent, vcl::Window* pWin, const MouseEvent& rMouseEvent ) :
- mnEvent( nEvent ), mpWin( pWin ), mnEventId( nullptr ), maMouseEvent( rMouseEvent ) {}
+ GestureEvent maGestureEvent;
+
+ ImplPostEventData(VclEventId nEvent, vcl::Window* pWin, const KeyEvent& rKeyEvent)
+ : mnEvent(nEvent)
+ , mpWin(pWin)
+ , mnEventId(nullptr)
+ , maKeyEvent(rKeyEvent)
+ {}
+ ImplPostEventData(VclEventId nEvent, vcl::Window* pWin, const MouseEvent& rMouseEvent)
+ : mnEvent(nEvent)
+ , mpWin(pWin)
+ , mnEventId(nullptr)
+ , maMouseEvent(rMouseEvent)
+ {}
+ ImplPostEventData(VclEventId nEvent, vcl::Window* pWin, const GestureEvent& rGestureEvent)
+ : mnEvent(nEvent)
+ , mpWin(pWin)
+ , mnEventId(nullptr)
+ , maGestureEvent(rGestureEvent)
+ {}
};
Application* GetpApp()
@@ -829,7 +844,43 @@ ImplSVEvent * Application::PostKeyEvent( VclEventId nEvent, vcl::Window *pWin, K
return nEventId;
}
-ImplSVEvent * Application::PostMouseEvent( VclEventId nEvent, vcl::Window *pWin, MouseEvent const * pMouseEvent )
+ImplSVEvent* Application::PostGestureEvent(VclEventId nEvent, vcl::Window* pWin, GestureEvent const * pGestureEvent)
+{
+ const SolarMutexGuard aGuard;
+ ImplSVEvent * nEventId = nullptr;
+
+ if (pWin && pGestureEvent)
+ {
+ Point aTransformedPosition(pGestureEvent->mnX, pGestureEvent->mnY);
+
+ aTransformedPosition.AdjustX(pWin->GetOutOffXPixel());
+ aTransformedPosition.AdjustY(pWin->GetOutOffYPixel());
+
+ const GestureEvent aGestureEvent{
+ sal_Int32(aTransformedPosition.X()),
+ sal_Int32(aTransformedPosition.Y()),
+ pGestureEvent->meEventType,
+ pGestureEvent->mnOffset,
+ pGestureEvent->meOrientation
+ };
+
+ std::unique_ptr<ImplPostEventData> pPostEventData(new ImplPostEventData(nEvent, pWin, aGestureEvent));
+
+ nEventId = PostUserEvent(
+ LINK( nullptr, Application, PostEventHandler ),
+ pPostEventData.get());
+
+ if (nEventId)
+ {
+ pPostEventData->mnEventId = nEventId;
+ ImplGetSVData()->maAppData.maPostedEventList.emplace_back(pWin, pPostEventData.release());
+ }
+ }
+
+ return nEventId;
+}
+
+ImplSVEvent* Application::PostMouseEvent( VclEventId nEvent, vcl::Window *pWin, MouseEvent const * pMouseEvent )
{
const SolarMutexGuard aGuard;
ImplSVEvent * nEventId = nullptr;
@@ -896,6 +947,11 @@ IMPL_STATIC_LINK( Application, PostEventHandler, void*, pCallData, void )
pEventData = &pData->maKeyEvent;
break;
+ case VclEventId::WindowGestureEvent:
+ nEvent = SalEvent::ExternalGesture;
+ pEventData = &pData->maGestureEvent;
+ break;
+
default:
nEvent = SalEvent::NONE;
pEventData = nullptr;
diff --git a/vcl/source/window/commandevent.cxx b/vcl/source/window/commandevent.cxx
index c8b486e7fc59..06e974c9fc6a 100644
--- a/vcl/source/window/commandevent.cxx
+++ b/vcl/source/window/commandevent.cxx
@@ -186,4 +186,13 @@ const CommandLongPressData* CommandEvent::GetLongPressData() const
return nullptr;
}
+const CommandGestureData* CommandEvent::GetGestureData() const
+{
+ if (mnCommand == CommandEventId::Gesture)
+ return static_cast<const CommandGestureData*>(mpData);
+ else
+ return nullptr;
+}
+
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/window/winproc.cxx b/vcl/source/window/winproc.cxx
index b0e1ea918115..3ebcc2650d4a 100644
--- a/vcl/source/window/winproc.cxx
+++ b/vcl/source/window/winproc.cxx
@@ -28,6 +28,7 @@
#include <vcl/unohelp.hxx>
#include <vcl/timer.hxx>
#include <vcl/event.hxx>
+#include <vcl/GestureEvent.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <vcl/cursor.hxx>
@@ -1550,6 +1551,30 @@ static bool ImplHandleLongPress(vcl::Window *pWindow, const SalLongPressEvent& r
return aHandler.HandleEvent();
}
+class HandleGeneralGestureEvent : public HandleGestureEvent
+{
+private:
+ CommandGestureData m_aGestureData;
+
+public:
+ HandleGeneralGestureEvent(vcl::Window* pWindow, const SalGestureEvent& rEvent)
+ : HandleGestureEvent(pWindow, Point(rEvent.mnX, rEvent.mnY))
+ , m_aGestureData(rEvent.mnX, rEvent.mnY, rEvent.meEventType, rEvent.mfOffset, rEvent.meOrientation)
+ {
+ }
+
+ virtual bool CallCommand(vcl::Window* pWindow, const Point& /*rMousePos*/) override
+ {
+ return ImplCallCommand(pWindow, CommandEventId::Gesture, &m_aGestureData);
+ }
+};
+
+static bool ImplHandleGestureEvent(vcl::Window* pWindow, const SalGestureEvent& rEvent)
+{
+ HandleGeneralGestureEvent aHandler(pWindow, rEvent);
+ return aHandler.HandleEvent();
+}
+
static void ImplHandlePaint( vcl::Window* pWindow, const tools::Rectangle& rBoundRect, bool bImmediateUpdate )
{
// system paint events must be checked for re-mirroring
@@ -2537,7 +2562,26 @@ bool ImplWindowFrameProc( vcl::Window* _pWindow, SalEvent nEvent, const void* pE
bRet = ImplHandleLongPress(pWindow, *static_cast<const SalLongPressEvent*>(pEvent));
break;
+ case SalEvent::ExternalGesture:
+ {
+ auto const * pGestureEvent = static_cast<GestureEvent const *>(pEvent);
+
+ SalGestureEvent aSalGestureEvent;
+ aSalGestureEvent.mfOffset = pGestureEvent->mnOffset;
+ aSalGestureEvent.mnX = pGestureEvent->mnX;
+ aSalGestureEvent.mnY = pGestureEvent->mnY;
+ aSalGestureEvent.meEventType = pGestureEvent->meEventType;
+ aSalGestureEvent.meOrientation = pGestureEvent->meOrientation;
+ bRet = ImplHandleGestureEvent(pWindow, aSalGestureEvent);
+ }
+ break;
+ case SalEvent::Gesture:
+ {
+ auto const * aSalGestureEvent = static_cast<SalGestureEvent const *>(pEvent);
+ bRet = ImplHandleGestureEvent(pWindow, *aSalGestureEvent);
+ }
+ break;
default:
SAL_WARN( "vcl.layout", "ImplWindowFrameProc(): unknown event (" << static_cast<int>(nEvent) << ")" );
break;
commit d3922a93a096e07ab54e91fd0dd7c86302f33b78
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Fri Mar 22 10:16:39 2019 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Tue Mar 26 01:30:31 2019 +0100
Rename DrawCommand* to WidgetDrawAction*, remove unused circ draw
Change-Id: Icef900e75255d477812a198fdb29e0cdebba35b8
Reviewed-on: https://gerrit.libreoffice.org/69654
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/vcl/inc/widgetdraw/WidgetDefinition.hxx b/vcl/inc/widgetdraw/WidgetDefinition.hxx
index 77baf0922cd8..d5f5b3728abd 100644
--- a/vcl/inc/widgetdraw/WidgetDefinition.hxx
+++ b/vcl/inc/widgetdraw/WidgetDefinition.hxx
@@ -24,32 +24,40 @@
namespace vcl
{
-enum class DrawCommandType
+enum class WidgetDrawActionType
{
RECTANGLE,
- CIRCLE,
LINE,
IMAGE,
EXTERNAL
};
-class VCL_DLLPUBLIC DrawCommand
+class VCL_DLLPUBLIC WidgetDrawAction
{
public:
- DrawCommand(DrawCommandType aType)
+ WidgetDrawAction(WidgetDrawActionType aType)
: maType(aType)
- , mnStrokeWidth(-1)
{
}
- DrawCommandType maType;
+ WidgetDrawActionType maType;
+};
+
+class VCL_DLLPUBLIC WidgetDrawActionShape : public WidgetDrawAction
+{
+public:
+ WidgetDrawActionShape(WidgetDrawActionType aType)
+ : WidgetDrawAction(aType)
+ , mnStrokeWidth(-1)
+ {
+ }
Color maStrokeColor;
Color maFillColor;
sal_Int32 mnStrokeWidth;
};
-class VCL_DLLPUBLIC RectangleDrawCommand : public DrawCommand
+class VCL_DLLPUBLIC WidgetDrawActionRectangle : public WidgetDrawActionShape
{
public:
sal_Int32 mnRx;
@@ -60,8 +68,8 @@ public:
float mfX2;
float mfY2;
- RectangleDrawCommand()
- : DrawCommand(DrawCommandType::RECTANGLE)
+ WidgetDrawActionRectangle()
+ : WidgetDrawActionShape(WidgetDrawActionType::RECTANGLE)
, mnRx(0)
, mnRy(0)
, mfX1(0.0f)
@@ -72,25 +80,7 @@ public:
}
};
-class VCL_DLLPUBLIC CircleDrawCommand : public DrawCommand
-{
-public:
- float mfX1;
- float mfY1;
- float mfX2;
- float mfY2;
-
- CircleDrawCommand()
- : DrawCommand(DrawCommandType::CIRCLE)
- , mfX1(0.0f)
- , mfY1(0.0f)
- , mfX2(1.0f)
- , mfY2(1.0f)
- {
- }
-};
-
-class VCL_DLLPUBLIC LineDrawCommand : public DrawCommand
+class VCL_DLLPUBLIC WidgetDrawActionLine : public WidgetDrawActionShape
{
public:
float mfX1;
@@ -98,30 +88,30 @@ public:
float mfX2;
float mfY2;
- LineDrawCommand()
- : DrawCommand(DrawCommandType::LINE)
+ WidgetDrawActionLine()
+ : WidgetDrawActionShape(WidgetDrawActionType::LINE)
{
}
};
-class VCL_DLLPUBLIC ImageDrawCommand : public DrawCommand
+class VCL_DLLPUBLIC WidgetDrawActionImage : public WidgetDrawAction
{
public:
OUString msSource;
- ImageDrawCommand()
- : DrawCommand(DrawCommandType::IMAGE)
+ WidgetDrawActionImage()
+ : WidgetDrawAction(WidgetDrawActionType::IMAGE)
{
}
};
-class VCL_DLLPUBLIC ExternalSourceDrawCommand : public DrawCommand
+class VCL_DLLPUBLIC WidgetDrawActionExternal : public WidgetDrawAction
{
public:
OUString msSource;
- ExternalSourceDrawCommand()
- : DrawCommand(DrawCommandType::EXTERNAL)
+ WidgetDrawActionExternal()
+ : WidgetDrawAction(WidgetDrawActionType::EXTERNAL)
{
}
};
@@ -179,12 +169,10 @@ public:
OString const& sSelected, OString const& sButtonValue,
OString const& sExtra);
- std::vector<std::shared_ptr<DrawCommand>> mpDrawCommands;
+ std::vector<std::shared_ptr<WidgetDrawAction>> mpWidgetDrawActions;
void addDrawRectangle(Color aStrokeColor, sal_Int32 nStrokeWidth, Color aFillColor, float fX1,
float fY1, float fX2, float fY2, sal_Int32 nRx, sal_Int32 nRy);
- void addDrawCircle(Color aStrokeColor, sal_Int32 nStrokeWidth, Color aFillColor, float fX1,
- float fY1, float fX2, float fY2);
void addDrawLine(Color aStrokeColor, sal_Int32 nStrokeWidth, float fX1, float fY1, float fX2,
float fY2);
diff --git a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
index 75dc559067fc..843f449b7901 100644
--- a/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
+++ b/vcl/qa/cppunit/widgetdraw/WidgetDefinitionReaderTest.cxx
@@ -62,10 +62,11 @@ void WidgetDefinitionReaderTest::testRead()
CPPUNIT_ASSERT_EQUAL(size_t(2), aStates.size());
- CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpDrawCommands.size());
- CPPUNIT_ASSERT_EQUAL(vcl::DrawCommandType::RECTANGLE,
- aStates[0]->mpDrawCommands[0]->maType);
- CPPUNIT_ASSERT_EQUAL(vcl::DrawCommandType::CIRCLE, aStates[0]->mpDrawCommands[1]->maType);
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpWidgetDrawActions.size());
+ CPPUNIT_ASSERT_EQUAL(vcl::WidgetDrawActionType::RECTANGLE,
+ aStates[0]->mpWidgetDrawActions[0]->maType);
+ CPPUNIT_ASSERT_EQUAL(vcl::WidgetDrawActionType::LINE,
+ aStates[0]->mpWidgetDrawActions[1]->maType);
}
// Radiobutton
@@ -75,7 +76,7 @@ void WidgetDefinitionReaderTest::testRead()
->getStates(ControlType::Radiobutton, ControlPart::Entire, ControlState::NONE,
ImplControlValue(ButtonValue::On));
CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
- CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpDrawCommands.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(2), aStates[0]->mpWidgetDrawActions.size());
}
{
@@ -84,7 +85,7 @@ void WidgetDefinitionReaderTest::testRead()
->getStates(ControlType::Radiobutton, ControlPart::Entire, ControlState::NONE,
ImplControlValue(ButtonValue::Off));
CPPUNIT_ASSERT_EQUAL(size_t(1), aStates.size());
- CPPUNIT_ASSERT_EQUAL(size_t(1), aStates[0]->mpDrawCommands.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(1), aStates[0]->mpWidgetDrawActions.size());
}
}
diff --git a/vcl/qa/cppunit/widgetdraw/data/definition1.xml b/vcl/qa/cppunit/widgetdraw/data/definition1.xml
index 4fb1c4230853..041e8fc24754 100644
--- a/vcl/qa/cppunit/widgetdraw/data/definition1.xml
+++ b/vcl/qa/cppunit/widgetdraw/data/definition1.xml
@@ -56,7 +56,7 @@
<part value="Entire">
<state enabled="any" focused="any" pressed="any" rollover="any" default="any" selected="any" button-value="any">
<rect stroke="#808080" fill="#FFFFFF" stroke-width="1.0" rx="5" ry="5" margin="1"/>
- <circ stroke="#808080" fill="#808080" stroke-width="1.0" margin="1"/>
+ <line stroke="#808080" fill="#808080" stroke-width="1.0"/>
</state>
<state enabled="true" focused="any" pressed="any" rollover="true" default="true" selected="any" button-value="any">
<rect stroke="#808080" fill="#808080" stroke-width="1.0" rx="5" ry="5" margin="1"/>
@@ -71,11 +71,11 @@
<radiobutton>
<part value="Entire">
<state enabled="any" focused="any" pressed="any" rollover="any" default="any" selected="any" button-value="false">
- <circ stroke="#007AFF" fill="#FFFFFF" stroke-width="1" margin="0"/>
+ <rect stroke="#007AFF" fill="#FFFFFF" stroke-width="1" margin="0"/>
</state>
<state enabled="any" focused="any" pressed="any" rollover="any" default="any" selected="any" button-value="true">
- <circ stroke="#007AFF" fill="#FFFFFF" stroke-width="1" margin="0"/>
- <circ stroke="#007AFF" fill="#007AFF" stroke-width="1" margin="3"/>
+ <rect stroke="#007AFF" fill="#FFFFFF" stroke-width="1" margin="0"/>
+ <rect stroke="#007AFF" fill="#007AFF" stroke-width="1" margin="3"/>
</state>
</part>
</radiobutton>
diff --git a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
index 1263c1a12aee..0cfe446f53a3 100644
--- a/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
+++ b/vcl/source/gdi/FileDefinitionWidgetDraw.cxx
@@ -253,97 +253,76 @@ void drawFromDrawCommands(gfx::DrawRoot const& rDrawRoot, SalGraphics& rGraphics
}
}
-void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCommands,
+void munchDrawCommands(std::vector<std::shared_ptr<WidgetDrawAction>> const& rDrawActions,
SalGraphics& rGraphics, long nX, long nY, long nWidth, long nHeight)
{
- for (std::shared_ptr<DrawCommand> const& pDrawCommand : rDrawCommands)
+ for (std::shared_ptr<WidgetDrawAction> const& pDrawAction : rDrawActions)
{
- switch (pDrawCommand->maType)
+ switch (pDrawAction->maType)
{
- case DrawCommandType::RECTANGLE:
+ case WidgetDrawActionType::RECTANGLE:
{
- auto const& rRectDrawCommand
- = static_cast<RectangleDrawCommand const&>(*pDrawCommand);
+ auto const& rWidgetDraw
+ = static_cast<WidgetDrawActionRectangle const&>(*pDrawAction);
basegfx::B2DRectangle rRect(
- nX + (nWidth * rRectDrawCommand.mfX1), nY + (nHeight * rRectDrawCommand.mfY1),
- nX + (nWidth * rRectDrawCommand.mfX2), nY + (nHeight * rRectDrawCommand.mfY2));
+ nX + (nWidth * rWidgetDraw.mfX1), nY + (nHeight * rWidgetDraw.mfY1),
+ nX + (nWidth * rWidgetDraw.mfX2), nY + (nHeight * rWidgetDraw.mfY2));
basegfx::B2DPolygon aB2DPolygon = basegfx::utils::createPolygonFromRect(
- rRect, rRectDrawCommand.mnRx / rRect.getWidth() * 2.0,
- rRectDrawCommand.mnRy / rRect.getHeight() * 2.0);
+ rRect, rWidgetDraw.mnRx / rRect.getWidth() * 2.0,
+ rWidgetDraw.mnRy / rRect.getHeight() * 2.0);
rGraphics.SetLineColor();
- rGraphics.SetFillColor(rRectDrawCommand.maFillColor);
+ rGraphics.SetFillColor(rWidgetDraw.maFillColor);
rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
- rGraphics.SetLineColor(rRectDrawCommand.maStrokeColor);
+ rGraphics.SetLineColor(rWidgetDraw.maStrokeColor);
rGraphics.SetFillColor();
- rGraphics.DrawPolyLine(basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
- basegfx::B2DVector(rRectDrawCommand.mnStrokeWidth,
- rRectDrawCommand.mnStrokeWidth),
- basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND,
- 0.0f, false, nullptr);
+ rGraphics.DrawPolyLine(
+ basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+ basegfx::B2DVector(rWidgetDraw.mnStrokeWidth, rWidgetDraw.mnStrokeWidth),
+ basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false, nullptr);
}
break;
- case DrawCommandType::CIRCLE:
+ case WidgetDrawActionType::LINE:
{
- auto const& rCircleDrawCommand
- = static_cast<CircleDrawCommand const&>(*pDrawCommand);
-
- basegfx::B2DRectangle rRect(nX + (nWidth * rCircleDrawCommand.mfX1),
- nY + (nHeight * rCircleDrawCommand.mfY1),
- nX + (nWidth * rCircleDrawCommand.mfX2),
- nY + (nHeight * rCircleDrawCommand.mfY2));
-
- basegfx::B2DPolygon aB2DPolygon = basegfx::utils::createPolygonFromEllipse(
- rRect.getCenter(), rRect.getWidth() / 2.0, rRect.getHeight() / 2.0);
-
- rGraphics.SetLineColor(rCircleDrawCommand.maStrokeColor);
- rGraphics.SetFillColor(rCircleDrawCommand.maFillColor);
- rGraphics.DrawPolyPolygon(basegfx::B2DHomMatrix(),
- basegfx::B2DPolyPolygon(aB2DPolygon), 0.0f, nullptr);
- }
- break;
- case DrawCommandType::LINE:
- {
- auto const& rLineDrawCommand = static_cast<LineDrawCommand const&>(*pDrawCommand);
+ auto const& rWidgetDraw = static_cast<WidgetDrawActionLine const&>(*pDrawAction);
Point aRectPoint(nX + 1, nY + 1);
Size aRectSize(nWidth - 1, nHeight - 1);
rGraphics.SetFillColor();
- rGraphics.SetLineColor(rLineDrawCommand.maStrokeColor);
+ rGraphics.SetLineColor(rWidgetDraw.maStrokeColor);
basegfx::B2DPolygon aB2DPolygon{
- { aRectPoint.X() + (aRectSize.Width() * rLineDrawCommand.mfX1),
- aRectPoint.Y() + (aRectSize.Height() * rLineDrawCommand.mfY1) },
- { aRectPoint.X() + (aRectSize.Width() * rLineDrawCommand.mfX2),
- aRectPoint.Y() + (aRectSize.Height() * rLineDrawCommand.mfY2) },
+ { aRectPoint.X() + (aRectSize.Width() * rWidgetDraw.mfX1),
+ aRectPoint.Y() + (aRectSize.Height() * rWidgetDraw.mfY1) },
+ { aRectPoint.X() + (aRectSize.Width() * rWidgetDraw.mfX2),
+ aRectPoint.Y() + (aRectSize.Height() * rWidgetDraw.mfY2) },
};
- rGraphics.DrawPolyLine(basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
- basegfx::B2DVector(rLineDrawCommand.mnStrokeWidth,
- rLineDrawCommand.mnStrokeWidth),
- basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND,
- 0.0f, false, nullptr);
+ rGraphics.DrawPolyLine(
+ basegfx::B2DHomMatrix(), aB2DPolygon, 0.0f,
+ basegfx::B2DVector(rWidgetDraw.mnStrokeWidth, rWidgetDraw.mnStrokeWidth),
+ basegfx::B2DLineJoin::Round, css::drawing::LineCap_ROUND, 0.0f, false, nullptr);
}
break;
- case DrawCommandType::IMAGE:
+ case WidgetDrawActionType::IMAGE:
{
- double nScaleFactor = 1.0;
+ double nScaleFactor = 2.0;
if (comphelper::LibreOfficeKit::isActive())
nScaleFactor = comphelper::LibreOfficeKit::getDPIScale();
- auto const& rDrawCommand = static_cast<ImageDrawCommand const&>(*pDrawCommand);
+ auto const& rWidgetDraw = static_cast<WidgetDrawActionImage const&>(*pDrawAction);
auto& rCacheImages = ImplGetSVData()->maGDIData.maThemeImageCache;
- OUString rCacheKey = rDrawCommand.msSource + "@" + OUString::number(nScaleFactor);
+ OUString rCacheKey = rWidgetDraw.msSource + "@" + OUString::number(nScaleFactor);
auto& aIterator = rCacheImages.find(rCacheKey);
BitmapEx aBitmap;
if (aIterator == rCacheImages.end())
{
- SvFileStream aFileStream(rDrawCommand.msSource, StreamMode::READ);
+ SvFileStream aFileStream(rWidgetDraw.msSource, StreamMode::READ);
vcl::bitmap::loadFromSvg(aFileStream, "", aBitmap, nScaleFactor);
if (!!aBitmap)
@@ -377,19 +356,20 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
}
}
break;
- case DrawCommandType::EXTERNAL:
+ case WidgetDrawActionType::EXTERNAL:
{
- auto const& rDrawCommand = static_cast<ImageDrawCommand const&>(*pDrawCommand);
+ auto const& rWidgetDraw
+ = static_cast<WidgetDrawActionExternal const&>(*pDrawAction);
auto& rCacheDrawCommands = ImplGetSVData()->maGDIData.maThemeDrawCommandsCache;
- auto& aIterator = rCacheDrawCommands.find(rDrawCommand.msSource);
+ auto& aIterator = rCacheDrawCommands.find(rWidgetDraw.msSource);
gfx::DrawRoot aDrawRoot;
if (aIterator == rCacheDrawCommands.end())
{
- SvFileStream aFileStream(rDrawCommand.msSource, StreamMode::READ);
+ SvFileStream aFileStream(rWidgetDraw.msSource, StreamMode::READ);
uno::Reference<uno::XComponentContext> xContext(
comphelper::getProcessComponentContext());
@@ -412,7 +392,7 @@ void munchDrawCommands(std::vector<std::shared_ptr<DrawCommand>> const& rDrawCom
if (pDrawRoot)
{
rCacheDrawCommands.insert(
- std::make_pair(rDrawCommand.msSource, *pDrawRoot));
+ std::make_pair(rWidgetDraw.msSource, *pDrawRoot));
drawFromDrawCommands(*pDrawRoot, rGraphics, nX, nY, nWidth, nHeight);
}
}
@@ -444,7 +424,8 @@ bool FileDefinitionWidgetDraw::resolveDefinition(ControlType eType, ControlPart
// use last defined state
auto const& pState = aStates.back();
{
- munchDrawCommands(pState->mpDrawCommands, m_rGraphics, nX, nY, nWidth, nHeight);
+ munchDrawCommands(pState->mpWidgetDrawActions, m_rGraphics, nX, nY, nWidth,
+ nHeight);
bOK = true;
}
}
diff --git a/vcl/source/gdi/WidgetDefinition.cxx b/vcl/source/gdi/WidgetDefinition.cxx
index 668fe74bf403..6eb6ae7fa3ac 100644
--- a/vcl/source/gdi/WidgetDefinition.cxx
+++ b/vcl/source/gdi/WidgetDefinition.cxx
@@ -134,7 +134,7 @@ void WidgetDefinitionState::addDrawRectangle(Color aStrokeColor, sal_Int32 nStro
Color aFillColor, float fX1, float fY1, float fX2,
float fY2, sal_Int32 nRx, sal_Int32 nRy)
{
- auto pCommand(std::make_shared<RectangleDrawCommand>());
+ auto pCommand(std::make_shared<WidgetDrawActionRectangle>());
pCommand->maStrokeColor = aStrokeColor;
pCommand->maFillColor = aFillColor;
pCommand->mnStrokeWidth = nStrokeWidth;
@@ -144,49 +144,34 @@ void WidgetDefinitionState::addDrawRectangle(Color aStrokeColor, sal_Int32 nStro
pCommand->mfY1 = fY1;
pCommand->mfX2 = fX2;
pCommand->mfY2 = fY2;
- mpDrawCommands.push_back(std::move(pCommand));
-}
-
-void WidgetDefinitionState::addDrawCircle(Color aStrokeColor, sal_Int32 nStrokeWidth,
- Color aFillColor, float fX1, float fY1, float fX2,
- float fY2)
-{
- auto pCommand(std::make_shared<CircleDrawCommand>());
- pCommand->maStrokeColor = aStrokeColor;
- pCommand->maFillColor = aFillColor;
- pCommand->mnStrokeWidth = nStrokeWidth;
- pCommand->mfX1 = fX1;
- pCommand->mfY1 = fY1;
- pCommand->mfX2 = fX2;
- pCommand->mfY2 = fY2;
- mpDrawCommands.push_back(std::move(pCommand));
+ mpWidgetDrawActions.push_back(std::move(pCommand));
}
void WidgetDefinitionState::addDrawLine(Color aStrokeColor, sal_Int32 nStrokeWidth, float fX1,
float fY1, float fX2, float fY2)
{
- auto pCommand(std::make_shared<LineDrawCommand>());
+ auto pCommand(std::make_shared<WidgetDrawActionLine>());
pCommand->maStrokeColor = aStrokeColor;
pCommand->mnStrokeWidth = nStrokeWidth;
pCommand->mfX1 = fX1;
pCommand->mfY1 = fY1;
pCommand->mfX2 = fX2;
pCommand->mfY2 = fY2;
- mpDrawCommands.push_back(std::move(pCommand));
+ mpWidgetDrawActions.push_back(std::move(pCommand));
}
void WidgetDefinitionState::addDrawImage(OUString const& sSource)
{
- auto pCommand(std::make_shared<ImageDrawCommand>());
+ auto pCommand(std::make_shared<WidgetDrawActionImage>());
pCommand->msSource = sSource;
- mpDrawCommands.push_back(std::move(pCommand));
+ mpWidgetDrawActions.push_back(std::move(pCommand));
}
void WidgetDefinitionState::addDrawExternal(OUString const& sSource)
{
- auto pCommand(std::make_unique<ExternalSourceDrawCommand>());
+ auto pCommand(std::make_unique<WidgetDrawActionExternal>());
pCommand->msSource = sSource;
- mpDrawCommands.push_back(std::move(pCommand));
+ mpWidgetDrawActions.push_back(std::move(pCommand));
}
} // end vcl namespace
diff --git a/vcl/source/gdi/WidgetDefinitionReader.cxx b/vcl/source/gdi/WidgetDefinitionReader.cxx
index c183cb717e9c..f825addd0042 100644
--- a/vcl/source/gdi/WidgetDefinitionReader.cxx
+++ b/vcl/source/gdi/WidgetDefinitionReader.cxx
@@ -226,31 +226,6 @@ void WidgetDefinitionReader::readDrawingDefinition(tools::XmlWalker& rWalker,
rpState->addDrawRectangle(aStrokeColor, nStrokeWidth, aFillColor, fX1, fY1, fX2, fY2,
nRx, nRy);
}
- else if (rWalker.name() == "circ")
- {
- Color aStrokeColor;
- readColor(rWalker.attribute("stroke"), aStrokeColor);
- Color aFillColor;
- readColor(rWalker.attribute("fill"), aFillColor);
- OString sStrokeWidth = rWalker.attribute("stroke-width");
- sal_Int32 nStrokeWidth = -1;
- if (!sStrokeWidth.isEmpty())
- nStrokeWidth = sStrokeWidth.toInt32();
-
- OString sX1 = rWalker.attribute("x1");
- float fX1 = sX1.isEmpty() ? 0.0 : sX1.toFloat();
-
- OString sY1 = rWalker.attribute("y1");
- float fY1 = sY1.isEmpty() ? 0.0 : sY1.toFloat();
-
- OString sX2 = rWalker.attribute("x2");
- float fX2 = sX2.isEmpty() ? 1.0 : sX2.toFloat();
-
- OString sY2 = rWalker.attribute("y2");
- float fY2 = sY2.isEmpty() ? 1.0 : sY2.toFloat();
-
- rpState->addDrawCircle(aStrokeColor, nStrokeWidth, aFillColor, fX1, fY1, fX2, fY2);
- }
else if (rWalker.name() == "line")
{
Color aStrokeColor;
More information about the Libreoffice-commits
mailing list