summaryrefslogtreecommitdiff
path: root/drawinglayer/source/primitive2d/controlprimitive2d.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'drawinglayer/source/primitive2d/controlprimitive2d.cxx')
-rw-r--r--drawinglayer/source/primitive2d/controlprimitive2d.cxx147
1 files changed, 67 insertions, 80 deletions
diff --git a/drawinglayer/source/primitive2d/controlprimitive2d.cxx b/drawinglayer/source/primitive2d/controlprimitive2d.cxx
index c3b030dcf1ac..730e522dc6f6 100644
--- a/drawinglayer/source/primitive2d/controlprimitive2d.cxx
+++ b/drawinglayer/source/primitive2d/controlprimitive2d.cxx
@@ -18,26 +18,29 @@
*/
#include <drawinglayer/primitive2d/controlprimitive2d.hxx>
+#include <com/sun/star/awt/XWindow.hpp>
+#include <com/sun/star/awt/XVclWindowPeer.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/awt/XControl.hpp>
#include <com/sun/star/uno/XComponentContext.hpp>
#include <drawinglayer/geometry/viewinformation2d.hxx>
+#include <utility>
+#include <rtl/ustrbuf.hxx>
#include <vcl/virdev.hxx>
#include <vcl/svapp.hxx>
#include <com/sun/star/awt/PosSize.hpp>
#include <vcl/bitmapex.hxx>
#include <drawinglayer/primitive2d/bitmapprimitive2d.hxx>
-#include <tools/diagnose_ex.h>
+#include <comphelper/diagnose_ex.hxx>
#include <basegfx/polygon/b2dpolygontools.hxx>
#include <basegfx/polygon/b2dpolygon.hxx>
-#include <drawinglayer/primitive2d/polygonprimitive2d.hxx>
+#include <drawinglayer/primitive2d/PolygonHairlinePrimitive2D.hxx>
#include <drawinglayer/primitive2d/drawinglayer_primitivetypes2d.hxx>
-#include <svtools/optionsdrawinglayer.hxx>
-#include <toolkit/awt/vclxwindow.hxx>
#include <vcl/window.hxx>
#include <basegfx/matrix/b2dhommatrixtools.hxx>
#include <toolkit/helper/vclunohelper.hxx>
+#include <officecfg/Office/Common.hxx>
using namespace com::sun::star;
@@ -45,7 +48,7 @@ namespace drawinglayer::primitive2d
{
void ControlPrimitive2D::createXControl()
{
- if(!(!mxXControl.is() && getControlModel().is()))
+ if(mxXControl.is() || !getControlModel().is())
return;
uno::Reference< beans::XPropertySet > xSet(getControlModel(), uno::UNO_QUERY);
@@ -96,8 +99,7 @@ namespace drawinglayer::primitive2d
basegfx::B2DVector aDiscreteSize(rViewInformation.getObjectToViewTransformation() * aScale);
// limit to a maximum square size, e.g. 300x150 pixels (45000)
- const SvtOptionsDrawinglayer aDrawinglayerOpt;
- const double fDiscreteMax(aDrawinglayerOpt.GetQuadraticFormControlRenderLimit());
+ const double fDiscreteMax(officecfg::Office::Common::Drawinglayer::QuadraticFormControlRenderLimit::get());
const double fDiscreteQuadratic(aDiscreteSize.getX() * aDiscreteSize.getY());
const bool bScaleUsed(fDiscreteQuadratic > fDiscreteMax);
double fFactor(1.0);
@@ -144,26 +146,12 @@ namespace drawinglayer::primitive2d
if(xControl.is())
{
- uno::Reference< awt::XWindowPeer > xWindowPeer(xControl->getPeer());
-
- if(xWindowPeer.is())
+ uno::Reference<awt::XWindowPeer> xWindowPeer(xControl->getPeer());
+ if (xWindowPeer)
{
- VCLXWindow* pVCLXWindow = comphelper::getUnoTunnelImplementation<VCLXWindow>(xWindowPeer);
-
- if(pVCLXWindow)
- {
- VclPtr<vcl::Window> pWindow = pVCLXWindow->GetWindow();
-
- if(pWindow)
- {
- pWindow = pWindow->GetParent();
-
- if(pWindow && MapUnit::Map100thMM == pWindow->GetMapMode().GetMapUnit())
- {
- bUserIs100thmm = true;
- }
- }
- }
+ uno::Reference<awt::XVclWindowPeer> xPeerProps(xWindowPeer, uno::UNO_QUERY_THROW);
+ uno::Any aAny = xPeerProps->getProperty("ParentIs100thmm"); // see VCLXWindow::getProperty
+ aAny >>= bUserIs100thmm;
}
}
@@ -207,7 +195,7 @@ namespace drawinglayer::primitive2d
// create primitive
xRetval = new BitmapPrimitive2D(
- VCLUnoHelper::CreateVCLXBitmap(aContent),
+ aContent,
aBitmapTransform);
}
catch( const uno::Exception& )
@@ -227,16 +215,16 @@ namespace drawinglayer::primitive2d
// create a gray placeholder hairline polygon in object size
basegfx::B2DRange aObjectRange(0.0, 0.0, 1.0, 1.0);
aObjectRange.transform(getTransform());
- const basegfx::B2DPolygon aOutline(basegfx::utils::createPolygonFromRect(aObjectRange));
+ basegfx::B2DPolygon aOutline(basegfx::utils::createPolygonFromRect(aObjectRange));
const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0);
// The replacement object may also get a text like 'empty group' here later
- Primitive2DReference xRetval(new PolygonHairlinePrimitive2D(aOutline, aGrayTone));
+ Primitive2DReference xRetval(new PolygonHairlinePrimitive2D(std::move(aOutline), aGrayTone));
return xRetval;
}
- void ControlPrimitive2D::create2DDecomposition(Primitive2DContainer& rContainer, const geometry::ViewInformation2D& rViewInformation) const
+ Primitive2DReference ControlPrimitive2D::create2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const
{
// try to create a bitmap decomposition. If that fails for some reason,
// at least create a replacement decomposition.
@@ -247,30 +235,28 @@ namespace drawinglayer::primitive2d
xReference = createPlaceholderDecomposition();
}
- rContainer.push_back(xReference);
- }
-
- ControlPrimitive2D::ControlPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const uno::Reference< awt::XControlModel >& rxControlModel)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- mxControlModel(rxControlModel),
- mxXControl(),
- maLastViewScaling()
- {
+ return xReference;
}
ControlPrimitive2D::ControlPrimitive2D(
- const basegfx::B2DHomMatrix& rTransform,
- const uno::Reference< awt::XControlModel >& rxControlModel,
- const uno::Reference< awt::XControl >& rxXControl)
- : BufferedDecompositionPrimitive2D(),
- maTransform(rTransform),
- mxControlModel(rxControlModel),
- mxXControl(rxXControl),
- maLastViewScaling()
+ basegfx::B2DHomMatrix aTransform,
+ uno::Reference< awt::XControlModel > xControlModel,
+ uno::Reference<awt::XControl> xXControl,
+ ::std::u16string_view const rTitle,
+ ::std::u16string_view const rDescription,
+ void const*const pAnchorKey)
+ : maTransform(std::move(aTransform)),
+ mxControlModel(std::move(xControlModel)),
+ mxXControl(std::move(xXControl))
+ , m_pAnchorStructureElementKey(pAnchorKey)
{
+ ::rtl::OUStringBuffer buf(rTitle);
+ if (!rTitle.empty() && !rDescription.empty())
+ {
+ buf.append(" - ");
+ }
+ buf.append(rDescription);
+ m_AltText = buf.makeStringAndClear();
}
const uno::Reference< awt::XControl >& ControlPrimitive2D::getXControl() const
@@ -286,38 +272,37 @@ namespace drawinglayer::primitive2d
bool ControlPrimitive2D::operator==(const BasePrimitive2D& rPrimitive) const
{
// use base class compare operator
- if(BufferedDecompositionPrimitive2D::operator==(rPrimitive))
- {
- const ControlPrimitive2D& rCompare = static_cast<const ControlPrimitive2D&>(rPrimitive);
+ if(!BufferedDecompositionPrimitive2D::operator==(rPrimitive))
+ return false;
- if(getTransform() == rCompare.getTransform())
- {
- // check if ControlModel references both are/are not
- bool bRetval(getControlModel().is() == rCompare.getControlModel().is());
+ const ControlPrimitive2D& rCompare = static_cast<const ControlPrimitive2D&>(rPrimitive);
- if(bRetval && getControlModel().is())
- {
- // both exist, check for equality
- bRetval = (getControlModel() == rCompare.getControlModel());
- }
+ if(getTransform() != rCompare.getTransform())
+ return false;
- if(bRetval)
- {
- // check if XControl references both are/are not
- bRetval = (getXControl().is() == rCompare.getXControl().is());
- }
+ // check if ControlModel references both are/are not
+ if (getControlModel().is() != rCompare.getControlModel().is())
+ return false;
- if(bRetval && getXControl().is())
- {
- // both exist, check for equality
- bRetval = (getXControl() == rCompare.getXControl());
- }
+ if(getControlModel().is())
+ {
+ // both exist, check for equality
+ if (getControlModel() != rCompare.getControlModel())
+ return false;
+ }
- return bRetval;
- }
+ // check if XControl references both are/are not
+ if (getXControl().is() != rCompare.getXControl().is())
+ return false;
+
+ if(getXControl().is())
+ {
+ // both exist, check for equality
+ if (getXControl() != rCompare.getXControl())
+ return false;
}
- return false;
+ return true;
}
basegfx::B2DRange ControlPrimitive2D::getB2DRange(const geometry::ViewInformation2D& /*rViewInformation*/) const
@@ -332,19 +317,18 @@ namespace drawinglayer::primitive2d
{
// this primitive is view-dependent related to the scaling. If scaling has changed,
// destroy existing decomposition. To detect change, use size of unit size in view coordinates
- ::osl::MutexGuard aGuard( m_aMutex );
const basegfx::B2DVector aNewScaling(rViewInformation.getObjectToViewTransformation() * basegfx::B2DVector(1.0, 1.0));
- if(!getBuffered2DDecomposition().empty())
+ if(getBuffered2DDecomposition())
{
if(!maLastViewScaling.equal(aNewScaling))
{
// conditions of last local decomposition have changed, delete
- const_cast< ControlPrimitive2D* >(this)->setBuffered2DDecomposition(Primitive2DContainer());
+ const_cast< ControlPrimitive2D* >(this)->setBuffered2DDecomposition(nullptr);
}
}
- if(getBuffered2DDecomposition().empty())
+ if(!getBuffered2DDecomposition())
{
// remember ViewTransformation
const_cast< ControlPrimitive2D* >(this)->maLastViewScaling = aNewScaling;
@@ -355,7 +339,10 @@ namespace drawinglayer::primitive2d
}
// provide unique ID
- ImplPrimitive2DIDBlock(ControlPrimitive2D, PRIMITIVE2D_ID_CONTROLPRIMITIVE2D)
+ sal_uInt32 ControlPrimitive2D::getPrimitive2DID() const
+ {
+ return PRIMITIVE2D_ID_CONTROLPRIMITIVE2D;
+ }
} // end of namespace