21#include <com/sun/star/awt/XWindow.hpp>
22#include <com/sun/star/awt/XVclWindowPeer.hpp>
23#include <com/sun/star/beans/XPropertySet.hpp>
25#include <com/sun/star/awt/XControl.hpp>
26#include <com/sun/star/uno/XComponentContext.hpp>
29#include <rtl/ustrbuf.hxx>
32#include <com/sun/star/awt/PosSize.hpp>
54 uno::Reference< beans::XPropertySet > xSet(
getControlModel(), uno::UNO_QUERY);
59 uno::Any aValue(xSet->getPropertyValue(
"DefaultControl"));
60 OUString aUnoControlTypeName;
62 if(!(aValue >>= aUnoControlTypeName))
65 if(aUnoControlTypeName.isEmpty())
68 uno::Reference< uno::XComponentContext > xContext( ::comphelper::getProcessComponentContext() );
69 uno::Reference< awt::XControl > xXControl(
70 xContext->getServiceManager()->createInstanceWithContext(aUnoControlTypeName, xContext), uno::UNO_QUERY);
84 const uno::Reference< awt::XControl >& rXControl(
getXControl());
88 uno::Reference< awt::XWindow > xControlWindow(rXControl, uno::UNO_QUERY);
90 if(xControlWindow.is())
94 double fRotate, fShearX;
103 const double fDiscreteQuadratic(aDiscreteSize.
getX() * aDiscreteSize.
getY());
104 const bool bScaleUsed(fDiscreteQuadratic > fDiscreteMax);
110 fFactor = sqrt(fDiscreteMax / fDiscreteQuadratic);
111 aDiscreteSize *= fFactor;
118 if(nSizeX > 0 && nSizeY > 0)
122 const Size aSizePixel(nSizeX, nSizeY);
123 aVirtualDevice->SetOutputSizePixel(aSizePixel);
126 xControlWindow->setPosSize(0, 0, nSizeX, nSizeY, awt::PosSize::POSSIZE);
129 uno::Reference< awt::XGraphics > xGraphics(aVirtualDevice->CreateUnoGraphics());
130 uno::Reference< awt::XView > xControlView(rXControl, uno::UNO_QUERY);
132 if(xGraphics.is() && xControlView.is())
135 xControlView->setGraphics(xGraphics);
144 bool bUserIs100thmm(
false);
145 const uno::Reference< awt::XControl > xControl(xControlView, uno::UNO_QUERY);
149 uno::Reference<awt::XWindowPeer> xWindowPeer(xControl->getPeer());
152 uno::Reference<awt::XVclWindowPeer> xPeerProps(xWindowPeer, uno::UNO_QUERY_THROW);
153 uno::Any aAny = xPeerProps->getProperty(
"ParentIs100thmm");
154 aAny >>= bUserIs100thmm;
164 static const double fZoomScale(28.0);
165 aScreenZoom *= fZoomScale;
168 xControlView->setZoom(
static_cast<float>(aScreenZoom.
getX()),
static_cast<float>(aScreenZoom.
getY()));
175 xControlView->draw(0, 0);
178 const BitmapEx aContent(aVirtualDevice->GetBitmapEx(
Point(), aSizePixel));
189 aBitmapSizeLogic /= fFactor;
194 aBitmapSizeLogic.
getX(), aBitmapSizeLogic.
getY(), aTranslate.
getX(), aTranslate.
getY()));
201 catch(
const uno::Exception& )
219 const basegfx::BColor aGrayTone(0xc0 / 255.0, 0xc0 / 255.0, 0xc0 / 255.0);
238 rContainer.push_back(xReference);
243 uno::Reference< awt::XControlModel > xControlModel,
244 uno::Reference<awt::XControl> xXControl,
245 ::std::u16string_view
const rTitle,
246 ::std::u16string_view
const rDescription)
248 mxControlModel(
std::move(xControlModel)),
249 mxXControl(
std::move(xXControl))
251 ::rtl::OUStringBuffer buf(rTitle);
252 if (!rTitle.empty() && !rDescription.empty())
256 buf.append(rDescription);
273 if(!BufferedDecompositionPrimitive2D::operator==(rPrimitive))
static OutputDevice * GetDefaultDevice()
const Size & GetSizePixel() const
constexpr tools::Long getHeight() const
constexpr tools::Long getWidth() const
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
bool equal(const Tuple2D< TYPE > &rTup) const
const Primitive2DContainer & getBuffered2DDecomposition() const
access methods to maBuffered2DDecomposition.
void setBuffered2DDecomposition(Primitive2DContainer &&rNew)
virtual void get2DDecomposition(Primitive2DDecompositionVisitor &rVisitor, const geometry::ViewInformation2D &rViewInformation) const override
The getDecomposition default implementation will on demand use create2DDecomposition() if maBuffered2...
ControlPrimitive2D class.
virtual void create2DDecomposition(Primitive2DContainer &rContainer, const geometry::ViewInformation2D &rViewInformation) const override
local decomposition
const css::uno::Reference< css::awt::XControl > & getXControl() const
mxControl access.
virtual bool operator==(const BasePrimitive2D &rPrimitive) const override
compare operator
virtual sal_uInt32 getPrimitive2DID() const override
provide unique ID
virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D &rViewInformation) const override
get range
basegfx::B2DVector maLastViewScaling
the last used scaling, used from getDecomposition for buffering
ControlPrimitive2D(basegfx::B2DHomMatrix aTransform, css::uno::Reference< css::awt::XControlModel > xControlModel, css::uno::Reference< css::awt::XControl > xXControl, ::std::u16string_view rTitle, ::std::u16string_view rDescription)
constructor with an optional XControl as parameter to allow to hand it over at incarnation time if it...
OUString m_AltText
yet another special snowflake way to generate PDF Alt text
const basegfx::B2DHomMatrix & getTransform() const
data read access
Primitive2DReference createPlaceholderDecomposition() const
css::uno::Reference< css::awt::XControl > mxXControl
the created and cached awt::XControl
virtual void get2DDecomposition(Primitive2DDecompositionVisitor &rVisitor, const geometry::ViewInformation2D &rViewInformation) const override
Override standard getDecomposition to be view-dependent here.
void createXControl()
used from getXControl() to create a local awt::XControl which is remembered in mxXControl and from th...
Primitive2DReference createBitmapDecomposition(const geometry::ViewInformation2D &rViewInformation) const
single local decompositions, used from create2DDecomposition()
const css::uno::Reference< css::awt::XControlModel > & getControlModel() const
PolygonHairlinePrimitive2D class.
#define DBG_UNHANDLED_EXCEPTION(...)
#define PRIMITIVE2D_ID_CONTROLPRIMITIVE2D
basegfx::B2DHomMatrix maTransform
the geometric definition
sal_uInt32 GetQuadraticFormControlRenderLimit()
B2DHomMatrix createScaleTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fTranslateX, double fTranslateY)
B2DPolygon createPolygonFromRect(const B2DRectangle &rRect, double fRadiusX, double fRadiusY)
B2DTuple absolute(const B2DTuple &rTup)
B2IRange fround(const B2DRange &rRange)