diff options
Diffstat (limited to 'drawinglayer/source/primitive2d/controlprimitive2d.cxx')
-rw-r--r-- | drawinglayer/source/primitive2d/controlprimitive2d.cxx | 147 |
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 |