23 #include <rtl/ustrbuf.hxx>
33 #include <svx/strings.hrc>
68 virtual void Closed()
override;
70 virtual ::sfx2::SvBaseLink::UpdateResult
DataChanged(
71 const OUString& rMimeType,
const css::uno::Any & rValue )
override;
84 const OUString& rMimeType,
const css::uno::Any & rValue )
89 if( pLinkManager && rValue.hasValue() )
94 if (pLinkManager->GetGraphicFromAny(rMimeType, rValue, aGraphic,
nullptr))
113 SvBaseLink::Closed();
118 return std::make_unique<sdr::properties::GraphicProperties>(*this);
126 return std::make_unique<sdr::contact::ViewContactOfGraphic>(*this);
137 auto const & rVectorGraphicDataPtr =
mpGraphicObject->GetGraphic().getVectorGraphicData();
139 if (!rVectorGraphicDataPtr)
145 if (rVectorGraphicDataPtr->getType() == VectorGraphicDataType::Pdf)
150 if (aSequence.empty())
164 OUString aTitle = pResult->
getTitle();
165 OUString aDesc = pResult->
getDesc();
172 if(!aTitle.isEmpty())
186 ,pGraphicLink(nullptr)
188 ,mbIsSignatureLine(false)
189 ,mbIsSignatureLineShowSignDate(true)
190 ,mbIsSignatureLineCanAddComment(false)
191 ,mbSignatureLineIsSigned(false)
210 ,pGraphicLink(nullptr)
267 ,pGraphicLink(nullptr)
269 ,mbIsSignatureLine(false)
270 ,mbIsSignatureLineShowSignDate(true)
271 ,mbIsSignatureLineCanAddComment(false)
272 ,mbSignatureLineIsSigned(false)
293 ,pGraphicLink(nullptr)
295 ,mbIsSignatureLine(false)
296 ,mbIsSignatureLineShowSignDate(true)
297 ,mbIsSignatureLineCanAddComment(false)
298 ,mbSignatureLineIsSigned(false)
340 auto const & rVectorGraphicDataPtr =
mpGraphicObject->GetGraphic().getVectorGraphicData();
342 if (rVectorGraphicDataPtr)
346 else if (
mpGraphicObject->GetGraphic().GetType() == GraphicType::GdiMetafile)
415 GraphicType::NONE != eType )
431 bool bHMirr = nMirrorCase == 2 || nMirrorCase == 4;
432 bool bVMirr = nMirrorCase == 3 || nMirrorCase == 4;
434 aActAttr.
SetMirrorFlags( ( bHMirr ? BmpMirrorFlags::Horizontal : BmpMirrorFlags::NONE ) | ( bVMirr ? BmpMirrorFlags::Vertical : BmpMirrorFlags::NONE ) );
466 if( rGraphicStreamURL.isEmpty() )
494 aSize =
Size ( aCroppedWidth, aCroppedHeight);
519 if( pLinkManager !=
nullptr &&
pGraphicLink ==
nullptr )
608 auto const & rVectorGraphicDataPtr =
mpGraphicObject->GetGraphic().getVectorGraphicData();
610 OUStringBuffer
sName;
612 if (rVectorGraphicDataPtr)
614 switch (rVectorGraphicDataPtr->getType())
616 case VectorGraphicDataType::Svg:
618 sName.append(
SvxResId(STR_ObjNameSingulGRAFSVG));
621 case VectorGraphicDataType::Wmf:
623 sName.append(
SvxResId(STR_ObjNameSingulGRAFWMF));
626 case VectorGraphicDataType::Emf:
628 sName.append(
SvxResId(STR_ObjNameSingulGRAFEMF));
631 case VectorGraphicDataType::Pdf:
633 sName.append(
SvxResId(STR_ObjNameSingulGRAFPDF));
642 case GraphicType::Bitmap:
645 (
IsLinkedGraphic() ? STR_ObjNameSingulGRAFBMPTRANSLNK : STR_ObjNameSingulGRAFBMPTRANS ) :
646 (
IsLinkedGraphic() ? STR_ObjNameSingulGRAFBMPLNK : STR_ObjNameSingulGRAFBMP ) );
652 case GraphicType::GdiMetafile:
656 case GraphicType::NONE:
668 if (!aName.isEmpty())
675 return sName.makeStringAndClear();
683 auto const & rVectorGraphicDataPtr =
mpGraphicObject->GetGraphic().getVectorGraphicData();
685 OUStringBuffer
sName;
687 if (rVectorGraphicDataPtr)
689 switch (rVectorGraphicDataPtr->getType())
691 case VectorGraphicDataType::Svg:
693 sName.append(
SvxResId(STR_ObjNamePluralGRAFSVG));
696 case VectorGraphicDataType::Wmf:
698 sName.append(
SvxResId(STR_ObjNamePluralGRAFWMF));
701 case VectorGraphicDataType::Emf:
703 sName.append(
SvxResId(STR_ObjNamePluralGRAFEMF));
706 case VectorGraphicDataType::Pdf:
708 sName.append(
SvxResId(STR_ObjNamePluralGRAFPDF));
717 case GraphicType::Bitmap:
720 (
IsLinkedGraphic() ? STR_ObjNamePluralGRAFBMPTRANSLNK : STR_ObjNamePluralGRAFBMPTRANS ) :
721 (
IsLinkedGraphic() ? STR_ObjNamePluralGRAFBMPLNK : STR_ObjNamePluralGRAFBMP ) );
727 case GraphicType::GdiMetafile:
731 case GraphicType::NONE:
743 if (!aName.isEmpty())
750 return sName.makeStringAndClear();
784 tempList.
MoveTo(rHdlList);
794 if( bMirrX != bMirrY )
806 return std::make_unique<SdrGrafObjGeoData>();
825 const bool bRemove(pNewPage ==
nullptr && pOldPage !=
nullptr);
826 const bool bInsert(pNewPage !=
nullptr && pOldPage ==
nullptr);
876 pOut->EnableOutput(
false);
877 pOut->SetMapMode(aMap);
882 aRetval.
Move(-aBoundRect.
Left(), -aBoundRect.
Top());
899 rGraphicType = GraphicType::GdiMetafile;
902 else if (GraphicType::GdiMetafile == rGraphicType)
916 case GraphicType::GdiMetafile:
998 pRetval = pLineFill.release();
1004 case GraphicType::Bitmap:
1024 case GraphicType::NONE:
1025 case GraphicType::Default:
1063 aGrafInfo.
SetCrop( rCrop.GetLeft(), rCrop.GetTop(), rCrop.GetRight(), rCrop.GetBottom() );
1073 if (
mpGraphicObject->GetPrefMapMode().GetMapUnit() == MapUnit::MapPixel)
1078 MapMode( MapUnit::Map100thMM ) );
1086 if ( (!bShrinkOnly ||
1087 ( aSize.
Height() > aMaxSize.Height() ) ||
1088 ( aSize.
Width() > aMaxSize.Width() ) )&&
1089 aSize.
Height() && aMaxSize.Height() )
1091 float fGrfWH =
static_cast<float>(aSize.
Width()) /
1092 static_cast<float>(aSize.
Height());
1093 float fWinWH =
static_cast<float>(aMaxSize.Width()) /
1094 static_cast<float>(aMaxSize.Height());
1097 if ( fGrfWH < fWinWH )
1099 aSize.
setWidth( static_cast<tools::Long>(aMaxSize.Height() * fGrfWH) );
1102 else if ( fGrfWH > 0.
F )
1104 aSize.
setWidth( aMaxSize.Width() );
1105 aSize.
setHeight( static_cast<tools::Long>(aMaxSize.Width() / fGrfWH) );
1108 aPos = rMaxRect.
Center();
1114 aPos.AdjustX( -(aSize.
Width() / 2) );
1115 aPos.AdjustY( -(aSize.
Height() / 2) );
1137 const void* pSourceData =
static_cast<const void*
>(aLink.GetData());
1138 if( nSize && pSourceData )
1141 memcpy( pBuffer, pSourceData, nSize );
1149 if (!xStream.is() && !
aFileName.isEmpty())
1168 double fShearX(0.0), fRotate(0.0);
1174 aMatrix.
decompose(aScale, aTranslate, fRotate, fShearX);
1192 if(rCrop.GetLeft() || rCrop.GetTop() || rCrop.GetRight() ||rCrop.GetBottom())
1196 double fLclRotate, fLclShearX;
1198 aMatrix.
decompose(aScale, aTranslate, fLclRotate, fLclShearX);
1210 rCrop.GetBottom()));
1213 const double fCropLeft(rCrop.GetLeft() * aCropScaleFactor.
getX());
1214 const double fCropTop(rCrop.GetTop() * aCropScaleFactor.
getY());
1215 const double fCropRight(rCrop.GetRight() * aCropScaleFactor.
getX());
1216 const double fCropBottom(rCrop.GetBottom() * aCropScaleFactor.
getY());
1233 aPreMultiply.
scale(-1.0, 1.0);
1236 aMatrixForCropViewHdl = aMatrixForCropViewHdl * aPreMultiply;
1240 std::make_unique<SdrCropViewHdl>(
1241 aMatrixForCropViewHdl,
1254 aPos = aMatrix * basegfx::B2DPoint(0.5, 0.0);
1256 aPos = aMatrix * basegfx::B2DPoint(1.0, 0.0);
1258 aPos = aMatrix * basegfx::B2DPoint(0.0, 0.5);
1260 aPos = aMatrix * basegfx::B2DPoint(1.0, 0.5);
1262 aPos = aMatrix * basegfx::B2DPoint(0.0, 1.0);
1264 aPos = aMatrix * basegfx::B2DPoint(0.5, 1.0);
1266 aPos = aMatrix * basegfx::B2DPoint(1.0, 1.0);
std::unique_ptr< SdrHdl > RemoveHdl(size_t nNum)
virtual void AdjustToMaxRect(const tools::Rectangle &rMaxRect, bool bShrinkOnly=false) override
tools::Long GetBottomCrop() const
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
const OUString & getTitle() const
void SetGamma(double fGamma)
bool mbIsSignatureLineCanAddComment
constexpr TypedWhichId< SdrGrafGamma100Item > SDRATTR_GRAFGAMMA(SDRATTR_GRAF_FIRST+5)
GDIMetaFile getMetafileFromEmbeddedVectorGraphicData() const
OUString maSignatureLineId
virtual void addCropHandles(SdrHdlList &rTarget) const override
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
virtual void NbcShear(const Point &rRef, Degree100 nAngle, double tn, bool bVShear) override
void NbcSetGraphic(const Graphic &rGrf)
virtual const tools::Rectangle & GetCurrentBoundRect() const
void setWidth(tools::Long nWidth)
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
friend class SdrGraphicLink
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
void SetName(const OUString &rStr, const bool bSetChanged=true)
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
tools::Long getWidth() const
GDIMetaFile GetMetaFile(GraphicType &rGraphicType) const
void SetMirrored(bool _bMirrored)
void InsertFileLink(sfx2::SvBaseLink &, SvBaseLinkObjectType nFileType, std::u16string_view rFileNm, const OUString *pFilterNm=nullptr, const OUString *pRange=nullptr)
void SetInvert(bool bInvert)
virtual void NbcInsertObject(SdrObject *pObj, size_t nPos=SAL_MAX_SIZE)
virtual void NbcSetLayer(SdrLayerID nLayer) override
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const
double mfSinRotationAngle
Size getOriginalSize() const
void SetMirrorFlags(BmpMirrorFlags nMirrFlags)
void setOriginURL(OUString const &rOriginURL)
constexpr TypedWhichId< SdrGrafRedItem > SDRATTR_GRAFRED(SDRATTR_GRAF_FIRST+0)
SdrObjectUniquePtr ImpConvertAddText(SdrObjectUniquePtr pObj, bool bBezier) const
tools::Long GetTopCrop() const
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
const GraphicObject & GetGraphicObject(bool bForceSwapIn=false) const
std::unique_ptr< GraphicObject > mpGraphicObject
static void Free(SdrObject *&_rpObject)
OUString maSignatureLineSuggestedSignerEmail
virtual SdrObjectUniquePtr getFullDragClone() const override
GraphicType GetGraphicType() const
All geometrical data of an arbitrary object for use in undo/redo.
void SetDrawMode(GraphicDrawMode eDrawMode)
virtual SdrObjList * GetSubList() const
const OUString & getName() const
Graphic GetTransformedGraphic(const Size &rDestSize, const MapMode &rDestMap, const GraphicAttr &rAttr) const
Size GetGrafPrefSize() const
virtual SdrObjectUniquePtr getFullDragClone() const override
void ImpSetLinkedGraphic(const Graphic &rGraphic)
Rectangle objects (rectangle, circle, ...)
static OutputDevice * GetDefaultDevice()
HashMap_OWString_Interface aMap
MapUnit GetScaleUnit() const
OUString SvxResId(const char *pId)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
B2DHomMatrix createScaleShearXRotateTranslateB2DHomMatrix(double fScaleX, double fScaleY, double fShearX, double fRadiant, double fTranslateX, double fTranslateY)
virtual std::unique_ptr< sdr::contact::ViewContact > CreateObjectSpecificViewContact() override
The transformation of a rectangle into a polygon, by using angle parameters from GeoStat.
Degree10 toDegree10(Degree100 x)
void SetGraphic(const Graphic &rGrf)
virtual SdrObjectUniquePtr DoConvertToPolyObj(bool bBezier, bool bAddText) const override
void SetGraphicObject(const GraphicObject &rGrfObj)
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
const SfxItemSet & GetObjectItemSet() const
virtual OUString TakeObjNameSingul() const override
const GDIMetaFile & GetGDIMetaFile() const
void SetMergedItemSet(const SfxItemSet &rSet, bool bClearAllItems=false)
void SetGrafStreamURL(const OUString &rGraphicStreamURL)
const GeoStat & GetGeoStat() const
bool mbSignatureLineIsSigned
virtual void SetChanged(bool bFlg=true)
virtual void RestoreGeoData(const SdrObjGeoData &rGeo) override
B2IRange fround(const B2DRange &rRange)
OUString maSignatureLineSigningInstructions
const SfxPoolItem & GetObjectItem(const sal_uInt16 nWhich) const
tools::Long getHeight() const
SdrGraphicLink(SdrGrafObj &rObj)
virtual void SaveGeoData(SdrObjGeoData &rGeo) const override
constexpr TypedWhichId< SdrGrafTransparenceItem > SDRATTR_GRAFTRANSPARENCE(SDRATTR_GRAF_FIRST+6)
virtual void handlePageChange(SdrPage *pOldPage, SdrPage *pNewPage) override
UNDERLYING_TYPE get() const
Graphic GetTransformedGraphic(SdrGrafObjTransformsAttrs nTransformFlags=SdrGrafObjTransformsAttrs::ALL) const
bool mbSupportTextIndentingOnLineWidthChange
OUString maSignatureLineSuggestedSignerName
virtual void NbcRotate(const Point &rRef, Degree100 nAngle, double sn, double cs) override
css::uno::Reference< css::graphic::XGraphic > mpSignatureLineUnsignedGraphic
constexpr TypedWhichId< SdrGrafLuminanceItem > SDRATTR_GRAFLUMINANCE(SDRATTR_GRAF_FIRST+3)
void SetAlpha(sal_uInt8 cAlpha)
void MoveTo(SdrHdlList &rOther)
void Remove(SvBaseLink const *pLink)
void SetContrast(short nContrastPercent)
void SingleObjectPainter(OutputDevice &rOut) const
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
tools::Long FRound(double fVal)
const GraphicObject * GetReplacementGraphicObject() const
const Graphic & GetGraphic() const
void SetRotation(Degree10 nRotate10)
void BroadcastObjectChange() const
constexpr TypedWhichId< SdrGrafBlueItem > SDRATTR_GRAFBLUE(SDRATTR_GRAF_FIRST+2)
tools::Long GetRightCrop() const
virtual std::unique_ptr< SdrObjGeoData > NewGeoData() const override
A derived class must override these 3 methods if it has own geometric data that must be saved for Und...
OutlineText, special text object for StarDraw.
void ActionChanged() const
virtual std::unique_ptr< sdr::properties::BaseProperties > CreateObjectSpecificProperties() override
void SetChannelG(short nChannelGPercent)
tools::Long Width() const
virtual ~SdrGrafObj() override
SvLinkSource * GetRealObject()
SdrGraphicLink * pGraphicLink
constexpr TypedWhichId< SdrGrafModeItem > SDRATTR_GRAFMODE(SDRATTR_GRAF_FIRST+8)
void scale(double fX, double fY)
SdrModel & getSdrModelFromSdrObject() const
void process(const primitive2d::Primitive2DContainer &rSource)
virtual void SetLogicRect(const tools::Rectangle &rRect)
virtual SdrObjList * GetSubList() const override
OUString getOriginURL() const
MapUnit GetMapUnit() const
virtual void TakeObjInfo(SdrObjTransformInfoRec &rInfo) const override
virtual SdrObjKind GetObjIdentifier() const override
const SfxPoolItem & GetMergedItem(const sal_uInt16 nWhich) const
void SetChannelR(short nChannelRPercent)
This class represents an embedded or linked bitmap graphic object.
GfxLink GetGfxLink() const
SdrGrafObjTransformsAttrs
Options for GetTransformedGraphic()
constexpr TypedWhichId< SdrGrafCropItem > SDRATTR_GRAFCROP(SDRATTR_GRAF_FIRST+9)
void SetGrafAnimationAllowed(bool bNew)
void SetGraphicLink(const OUString &rFileName)
void SetChannelB(short nChannelBPercent)
virtual SdrLayerID GetLayer() const
constexpr TypedWhichId< SdrGrafGreenItem > SDRATTR_GRAFGREEN(SDRATTR_GRAF_FIRST+1)
Point PixelToLogic(const Point &rDevicePt) const
css::uno::Reference< css::io::XInputStream > getInputStream() const
bool IsLinkedGraphic() const
static bool GetDisplayNames(const SvBaseLink *, OUString *pType, OUString *pFile=nullptr, OUString *pLink=nullptr, OUString *pFilter=nullptr)
std::unique_ptr< css::drawing::QRCode > mpQrCode
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual void NbcResize(const Point &rRef, const Fraction &xFact, const Fraction &yFact) override
virtual OUString TakeObjNamePlural() const override
static SotClipboardFormatId GetFormatIdFromMimeType(const OUString &rMimeType)
void SetLuminance(short nLuminancePercent)
std::unique_ptr< GraphicObject > mpReplacementGraphicObject
void ObjectOwnsMemory(bool bOwn)
bool HasGDIMetaFile() const
tools::Long GetLeftCrop() const
const OUString & getDesc() const
virtual SdrGrafObj * CloneSdrObject(SdrModel &rTargetModel) const override
double mfCosRotationAngle
void SetDescription(const OUString &rStr)
tools::Long Height() const
SdrGrafObj(SdrModel &rSdrModel)
sal_Int32 GetNumerator() const
std::unique_ptr< SdrObject, SdrObjectFreeOp > SdrObjectUniquePtr
void ReleaseGraphicLink()
void translate(double fX, double fY)
virtual void NbcMirror(const Point &rRef1, const Point &rRef2) override
virtual void SetRectsDirty(bool bNotMyself=false, bool bRecursive=true)
virtual void AddToHdlList(SdrHdlList &rHdlList) const override
void setHeight(tools::Long nHeight)
virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(const OUString &rMimeType, const css::uno::Any &rValue) override
sal_uInt32 GetDataSize() const
constexpr TypedWhichId< SdrGrafContrastItem > SDRATTR_GRAFCONTRAST(SDRATTR_GRAF_FIRST+4)
constexpr TypedWhichId< SdrGrafInvertItem > SDRATTR_GRAFINVERT(SDRATTR_GRAF_FIRST+7)
virtual bool TRGetBaseGeometry(basegfx::B2DHomMatrix &rMatrix, basegfx::B2DPolyPolygon &rPolyPolygon) const override
bool LineGeometryUsageIsNecessary() const
bool mbGrafAnimationAllowed
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
void ImpSetAttrToGrafInfo()
void SetSynchron(bool bFlag)
void SetCrop(tools::Long nLeft_100TH_MM, tools::Long nTop_100TH_MM, tools::Long nRight_100TH_MM, tools::Long nBottom_100TH_MM)
static SotClipboardFormatId RegisterStatusInfoId()
const std::shared_ptr< VectorGraphicData > & getVectorGraphicData() const
GraphicAttr GetGraphicAttr(SdrGrafObjTransformsAttrs nTransformFlags=SdrGrafObjTransformsAttrs::ALL) const
virtual void SetChanged()
bool isEmbeddedVectorGraphicData() const
void SetTitle(const OUString &rStr)
bool mbLineIsOutsideGeometry
virtual void Closed() override
OUString const & GetGrafStreamURL() const
OUString maSignatureLineSuggestedSignerTitle
MapMode GetGrafPrefMapMode() const
bool mbIsSignatureLineShowSignDate
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
void FlattenGroups()
Makes the object list flat, i.e.
virtual sal_uInt32 GetHdlCount() const override
Via GetHdlCount the number of Handles can be retrieved.
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Detects when a stylesheet is changed.
virtual const tools::Rectangle & GetLogicRect() const override