36 #include <svx/strings.hrc>
71 #include <bitmaps.hlst>
89 ::std::vector< BitmapEx > maRealMarkers;
95 explicit SdrHdlBitmapSet();
102 #define KIND_COUNT (14)
103 #define INDEX_COUNT (6)
104 #define INDIVIDUAL_COUNT (5)
106 SdrHdlBitmapSet::SdrHdlBitmapSet()
107 : maMarkersBitmap(SIP_SA_MARKERS),
115 BitmapEx& rTargetBitmap = maRealMarkers[nIndex];
119 rTargetBitmap = maMarkersBitmap;
120 rTargetBitmap.
Crop(rRectangle);
123 return rTargetBitmap;
130 const sal_uInt16 nYPos(nInd * 11);
132 switch(eKindOfMarker)
136 OSL_FAIL(
"Unknown kind of marker." );
284 mbMoveOutside(false),
303 mbMoveOutside(false),
552 Point aMoveOutsideOffset(0, 0);
574 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject;
578 switch (eKindOfMarker)
618 aPosition, eColIndex, eKindOfMarker,
624 std::move(pNewOverlayObject),
675 switch(eKindOfMarker)
715 return "anchor-pressed";
717 return "glue-selected";
719 return "glue-unselected";
753 OUString sMarkerPrefix(
"svx/res/marker-");
755 OUString sMarkerName = appendMarkerName(eKindOfMarker);
756 if (!sMarkerName.isEmpty())
783 return aModernSet.get()->GetBitmapEx(eKindOfMarker, sal_uInt16(eIndex));
792 std::unique_ptr<sdr::overlay::OverlayObject> pRetval;
795 bool bForceBiggerSize(
false);
799 switch(eKindOfMarker)
810 bForceBiggerSize =
true;
816 bForceBiggerSize =
true;
833 if(eNextBigger == eKindOfMarker)
837 switch(eKindOfMarker)
861 BitmapEx aBmpEx1 = ImpGetBitmapEx(eKindOfMarker, eColIndex);
862 BitmapEx aBmpEx2 = ImpGetBitmapEx(eNextBigger, eColIndex);
893 BitmapEx aBmpEx = ImpGetBitmapEx(eKindOfMarker, eColIndex);
921 sal_uInt16 nCenX(static_cast<sal_uInt16>(aBmpEx.
GetSizePixel().
Width() - 1) >> 1);
924 if(aMoveOutsideOffset.
X() > 0)
928 else if(aMoveOutsideOffset.
X() < 0)
933 if(aMoveOutsideOffset.
Y() > 0)
937 else if(aMoveOutsideOffset.
Y() < 0)
963 if (bSize &&
pHdlList!=
nullptr && (bRot || bDis)) {
991 switch (static_cast<sal_uInt8>(nHdlAngle)) {
992 case 0: ePtr=PointerStyle::ESize;
break;
993 case 1: ePtr=PointerStyle::NESize;
break;
994 case 2: ePtr=PointerStyle::NSize;
break;
995 case 3: ePtr=PointerStyle::NWSize;
break;
996 case 4: ePtr=PointerStyle::WSize;
break;
997 case 5: ePtr=PointerStyle::SWSize;
break;
998 case 6: ePtr=PointerStyle::SSize;
break;
999 case 7: ePtr=PointerStyle::SESize;
break;
1084 std::unique_ptr<sdr::overlay::OverlayObject> pOverlayObject,
1099 const_cast<sdr::contact::ObjectContact&>(rObjectContact)));
1105 pOverlayObject->setOffset(aOffset);
1110 rOverlayManager.
add(*pOverlayObject);
1158 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1168 std::move(pNewOverlayObject),
1199 const Color aLightColor(
1200 static_cast<sal_uInt8>(::std::min(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetRed()) + sal_Int16(0x0040)), sal_Int16(0x00ff))),
1201 static_cast<sal_uInt8>(::std::min(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetGreen()) + sal_Int16(0x0040)), sal_Int16(0x00ff))),
1202 static_cast<sal_uInt8>(::std::min(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetBlue()) + sal_Int16(0x0040)), sal_Int16(0x00ff))));
1208 const Color aDarkColor(
1209 static_cast<sal_uInt8>(::std::max(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetRed()) - sal_Int16(0x0040)), sal_Int16(0x0000))),
1210 static_cast<sal_uInt8>(::std::max(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetGreen()) - sal_Int16(0x0040)), sal_Int16(0x0000))),
1211 static_cast<sal_uInt8>(::std::max(static_cast<sal_Int16>(static_cast<sal_Int16>(aCol.
GetBlue()) - sal_Int16(0x0040)), sal_Int16(0x0000))));
1222 Color aRetval(aLum, aLum, aLum);
1263 , bMoveSingleHandle(false)
1264 , bMoveFirstHandle(false)
1311 double fLongPercentArrow = (1.0 - 0.05) * fVecLen;
1312 double fHalfArrowWidth = (0.05 * 0.5) * fVecLen;
1315 sal_Int32 nMidX =
static_cast<sal_Int32
>(
aPos.
X() + aVec.getX() * fLongPercentArrow);
1316 sal_Int32 nMidY =
static_cast<sal_Int32
>(
aPos.
Y() + aVec.getY() * fLongPercentArrow);
1317 Point aMidPoint(nMidX, nMidY);
1322 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1331 std::move(pNewOverlayObject),
1336 Point aLeft(aMidPoint.
X() +
static_cast<sal_Int32
>(aPerpend.getX() * fHalfArrowWidth),
1337 aMidPoint.
Y() +
static_cast<sal_Int32
>(aPerpend.getY() * fHalfArrowWidth));
1338 Point aRight(aMidPoint.
X() -
static_cast<sal_Int32
>(aPerpend.getX() * fHalfArrowWidth),
1339 aMidPoint.
Y() -
static_cast<sal_Int32
>(aPerpend.getY() * fHalfArrowWidth));
1345 pNewOverlayObject.reset(
new
1355 std::move(pNewOverlayObject),
1369 FromIAOToItem(GetObj(),
true,
true);
1398 if(bSetItemOnObject)
1407 aNewSet.Put(aNewGradItem);
1413 aNewSet.Put(aNewTransItem);
1416 if(bUndo && rModel.IsUndoEnabled())
1418 rModel.BegUndo(
SvxResId(
IsGradient() ? SIP_XA_FILLGRADIENT : SIP_XA_FILLTRANSPARENCE));
1419 rModel.AddUndo(rModel.GetSdrUndoFactory().CreateUndoAttrObject(*_pObj));
1473 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1484 std::move(pNewOverlayObject),
1497 return PointerStyle::RefHand;
1531 if(!aPosition1.equal(aPosition2))
1533 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1540 pNewOverlayObject->setHittable(
false);
1547 std::move(pNewOverlayObject),
1587 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1591 pNewOverlayObject->setBaseColor(
COL_BLACK);
1595 std::move(pNewOverlayObject),
1659 std::move(pNewOverlayObject),
1694 return PointerStyle::MovePoint;
1696 return PointerStyle::ESize;
1698 return PointerStyle::SSize;
1719 return nAngle==0 || nAngle==18000;
1774 std::move(pNewOverlayObject),
1789 case 0:
case 1:
return PointerStyle::Hand;
1790 case 2:
case 3:
return PointerStyle::MovePoint;
1793 return PointerStyle::NotAllowed;
1830 const Color aHilightColor(aSvtOptionsDrawinglayer.getHilightColor());
1831 const double fTransparence(aSvtOptionsDrawinglayer.GetTransparentSelectionPercent() * 0.01);
1843 pNewOverlayObject->setHittable(
false);
1847 std::move(pNewOverlayObject),
1877 if (lhs->IsPlusHdl()) n1=4;
1878 if (rhs->IsPlusHdl()) n2=4;
1891 sal_uInt32 nNum1=lhs->GetObjHdlNum();
1892 sal_uInt32 nNum2=rhs->GetObjHdlNum();
1897 return static_cast<sal_uInt16
>(eKind1)<static_cast<sal_uInt16>(eKind2);
1921 struct ImplHdlAndIndex
1935 const ImplHdlAndIndex* p1 =
static_cast<ImplHdlAndIndex
const *
>(pVoid1);
1936 const ImplHdlAndIndex* p2 =
static_cast<ImplHdlAndIndex
const *
>(pVoid2);
1938 if(p1->mpHdl->GetObj() == p2->mpHdl->GetObj())
1940 if(p1->mpHdl->GetObj() &&
dynamic_cast<const SdrPathObj*
>(p1->mpHdl->GetObj()) !=
nullptr)
1947 if(p1->mpHdl->GetPolyNum() == p2->mpHdl->GetPolyNum())
1949 if(p1->mpHdl->GetPointNum() < p2->mpHdl->GetPointNum())
1958 else if(p1->mpHdl->GetPolyNum() < p2->mpHdl->GetPolyNum())
1971 if(!p1->mpHdl->GetObj())
1975 else if(!p2->mpHdl->GetObj())
1982 const sal_uInt32 nOrdNum1 = p1->mpHdl->GetObj()->GetOrdNum();
1983 const sal_uInt32 nOrdNum2 = p2->mpHdl->GetObj()->GetOrdNum();
1985 if(nOrdNum1 < nOrdNum2)
1997 if(p1->mnIndex < p2->mnIndex)
2022 pOld =
GetHdl(nOldHdlNum);
2032 std::unique_ptr<ImplHdlAndIndex[]> pHdlAndIndex(
new ImplHdlAndIndex[
maList.size()]);
2035 for(
size_t a = 0;
a <
maList.size(); ++
a)
2037 pHdlAndIndex[
a].mpHdl =
maList[
a].get();
2038 pHdlAndIndex[
a].mnIndex =
a;
2044 size_t nOldHdl(nOldHdlNum);
2046 if(nOldHdlNum != SAL_MAX_SIZE)
2048 for(
size_t a = 0;
a <
maList.size(); ++
a)
2050 if(pHdlAndIndex[
a].mpHdl == pOld)
2059 size_t nNewHdl(nOldHdl);
2064 if(nOldHdl != SAL_MAX_SIZE)
2066 if(nOldHdl ==
maList.size() - 1)
2069 nNewHdl = SAL_MAX_SIZE;
2085 if(nOldHdl == SAL_MAX_SIZE)
2088 nNewHdl =
maList.size() - 1;
2096 nNewHdl = SAL_MAX_SIZE;
2107 sal_uIntPtr nNewHdlNum(nNewHdl);
2110 if(nNewHdl != SAL_MAX_SIZE)
2112 SdrHdl* pNew = pHdlAndIndex[nNewHdl].mpHdl;
2114 for(
size_t a = 0;
a <
maList.size(); ++
a)
2125 if(nOldHdlNum != nNewHdlNum)
2150 if(!pActual || pActual != pNew)
2152 const size_t nNewHdlNum =
GetHdlNum(pNew);
2154 if(nNewHdlNum != SAL_MAX_SIZE)
2183 : mnFocusIndex(SAL_MAX_SIZE),
2241 std::unique_ptr<SdrHdl> pRetval = std::move(
maList[nNum]);
2250 [&eKind](std::unique_ptr<SdrHdl>& rItem) {
return rItem->GetKind() == eKind; }),
2290 return SAL_MAX_SIZE;
2292 [&](
const std::unique_ptr<SdrHdl> &
p) {
return p.get() == pHdl; });
2293 assert(it !=
maList.end());
2295 return SAL_MAX_SIZE;
2296 return it -
maList.begin();
2302 pHdl->SetHdlList(
this);
2303 maList.push_back(std::move(pHdl));
2311 while (nNum>0 && pRet==
nullptr)
2335 for (
auto & pHdl :
maList)
2336 pHdl->SetHdlList(&rOther);
2338 std::make_move_iterator(maList.begin()), std::make_move_iterator(maList.end()));
2347 :
SdrHdl(rPnt, eNewKind),
2349 mfRotation(fRotation)
2356 int nPixelSize = 0, nX = 0, nY = 0, nOffset = 0;
2363 else if( nSize <=4 )
2390 aRetval.
Crop(aSourceRect);
2408 const BitmapEx aHandlesBitmap(SIP_SA_CROP_MARKERS);
2422 std::unique_ptr<sdr::overlay::OverlayObject> pOverlayObject;
2461 std::move(pOverlayObject),
2482 maObjectTransform(rObjectTransform),
2484 mfCropLeft(fCropLeft),
2485 mfCropTop(fCropTop),
2486 mfCropRight(fCropRight),
2487 mfCropBottom(fCropBottom)
2494 assert(rotate !=
nullptr);
2524 double fRotate, fShearX;
2533 translateRotationToMirroring(aScale, &fRotate);
2539 const bool bMirroredX(aScale.
getX() < 0.0);
2540 const bool bMirroredY(aScale.
getY() < 0.0);
2558 aScale.
getX() + fCropRight + fCropLeft,
2559 aScale.
getY() + fCropBottom + fCropTop);
2561 aTranslate.
getX() - fCropLeft,
2562 aTranslate.
getY() - fCropTop);
2566 aTranslate.
getX(), aTranslate.
getY(),
2569 aTargetTranslate.getX(), aTargetTranslate.getY(),
2570 aTargetTranslate.getX() + aTargetScale.getX(), aTargetTranslate.getY() + aTargetScale.getY());
2572 if(aCropped.isEmpty())
2578 if(aCurrentForCompare.equal(aCropped))
2592 aCropped.transform(aBackToUnit);
2619 aCroppedTransform.
scale(
2620 aCropped.getWidth(),
2621 aCropped.getHeight());
2624 aCropped.getMinY());
2638 aGraphicOutlinePolygon,
2643 aCombination[0] = aGraphic;
2644 aCombination[1] = aGraphicOutline;
2673 pNew->setHittable(
false);
std::unique_ptr< SdrHdl > RemoveHdl(size_t nNum)
BitmapEx GetBitmapForHandle(const BitmapEx &rBitmap, int nSize)
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
SdrHdlGradient(const Point &rRef1, const Point &rRef2, bool bGrad)
bool Erase(const Color &rFillColor)
size_t GetHdlNum(const SdrHdl *pHdl) const
virtual void CreateB2dIAObject() override
constexpr::Color COL_BLACK(0x00, 0x00, 0x00)
bool IsMoveOutside() const
void SetPos(const Point &rPnt)
virtual void CreateB2dIAObject() override
double const mfCropBottom
SdrMarkView * GetView() const
void insertNewlyCreatedOverlayObjectForSdrHdl(std::unique_ptr< sdr::overlay::OverlayObject > pOverlayObject, const sdr::contact::ObjectContact &rObjectContact, sdr::overlay::OverlayManager &rOverlayManager)
long AdjustX(long nHorzMove)
basegfx::B2DPoint maPositionB
void Set2ndPos(const Point &rPnt)
constexpr::Color COL_LIGHTGREEN(0x00, 0xFF, 0x00)
constexpr::Color COL_RED(0x80, 0x00, 0x00)
virtual ~ImpEdgeHdl() override
Utility class SdrEdgeInfoRec.
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
sal_uInt8 GetLuminance() const
#define XATTR_FILLGRADIENT
virtual bool IsFocusHdl() const
void SetSelected(bool bJa=true)
#define XATTR_FILLFLOATTRANSPARENCE
constexpr::Color COL_GRAY(0x80, 0x80, 0x80)
SdrObject * GetObj() const
SdrCropViewHdl(const basegfx::B2DHomMatrix &rObjectTransform, const Graphic &rGraphic, double fCropLeft, double fCropTop, double fCropRight, double fCropBottom)
constexpr::Color COL_LIGHTRED(0xFF, 0x00, 0x00)
void append(std::unique_ptr< OverlayObject > pOverlayObject)
basegfx::B2DPolyPolygon aWireframePoly
const Point & GetPos() const
constexpr::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
bool IsUseLuminance() const
bool IsRotateShear() const
constexpr::Color COL_YELLOW(0xFF, 0xFF, 0x00)
long NormAngle36000(long a)
Normalize angle to -180.00..179.99.
virtual void CreateB2dIAObject() override
virtual PointerStyle GetPointer() const
const Point & Get2ndPos() const
void add(OverlayObject &rOverlayObject)
static OutputDevice * GetDefaultDevice()
SdrPageWindow * GetPageWindow(sal_uInt32 nIndex) const
constexpr::Color COL_LIGHTCYAN(0x00, 0xFF, 0xFF)
OUString SvxResId(const char *pId)
const Color & GetColor() const
bool OutputToWindow() const
constexpr::Color COL_CYAN(0x00, 0x80, 0x80)
IMPL_LINK_NOARG(SdrHdlGradient, ColorChangeHdl, SdrHdlColor *, void)
SdrHdlColor(const Point &rRef, Color aCol, const Size &rSize, bool bLuminance)
sal_uInt16 GetHdlSize() const
virtual PointerStyle GetPointer() const override
void DrawLine(const Point &rStartPt, const Point &rEndPt)
sal_uInt8 GetBlue() const
virtual PointerStyle GetPointer() const override
void SetDistortShear(bool bOn)
bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
virtual void CreateB2dIAObject() override
SdrObject * GetConnectedNode(bool bTail1) const override
void Set1PixMore(bool bJa=true)
void SetHdlList(SdrHdlList *pList)
const tools::Rectangle maRect
SdrHdl * IsHdlListHit(const Point &rPnt) const
static int ImplSortHdlFunc(const void *pVoid1, const void *pVoid2)
const SfxPoolItem & GetObjectItem(const sal_uInt16 nWhich) const
E3dVolumeMarker(const basegfx::B2DPolyPolygon &rWireframePoly)
virtual void CreateB2dIAObject()
void SetColor(Color aNew, bool bCallLink=false)
void SetRotationAngle(long n)
void SetObj(SdrObject *pNewObj)
long AdjustY(long nVertMove)
void MoveTo(SdrHdlList &rOther)
virtual void CreateB2dIAObject() override
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
basegfx::B2DPoint maPositionA
bool SetOutputSizePixel(const Size &rNewSize, bool bErase=true)
virtual void onHelpRequest()
is called when help is requested for the area of this handle
B2DPolygon createPolygonFromRect(const B2DRectangle &rRect, double fRadiusX, double fRadiusY)
void RemoveAllByKind(SdrHdlKind eKind)
void FromIAOToItem(SdrObject *pObj, bool bSetItemOnObject, bool bUndo)
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
void TravelFocusHdl(bool bForward)
basegfx::B2DHomMatrix const maObjectTransform
void scale(double fX, double fY)
SdrModel & getSdrModelFromSdrObject() const
void transform(const basegfx::B2DHomMatrix &rMatrix)
std::deque< std::unique_ptr< SdrHdl > > maList
void SetMoveOutside(bool bOn)
SVX_DLLPRIVATE SdrHdlList(const SdrHdlList &)=delete
void SetHdlSize(sal_uInt16 nSiz)
void SetMoveOutside(bool bMoveOutside)
const sdr::contact::ObjectContact & GetObjectContact() const
void intersect(const B2DRange &rRange)
float GetDPIScaleFactor() const
void transform(const basegfx::B2DHomMatrix &rMatrix)
virtual void CreateB2dIAObject() override
Point PixelToLogic(const Point &rDevicePt) const
sal_uInt8 GetGreen() const
SdrHdl * GetFocusHdl() const
virtual void CreateB2dIAObject() override
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
size_t GetHdlCount() const
SdrHdl * GetHdl(size_t nNum) const
sdr::overlay::OverlayObjectList maOverlayGroup
virtual ~SdrHdlLine() override
std::unique_ptr< XPolygon > pEdgeTrack
sal_uInt64 GetCursorBlinkTime() const
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
const SfxItemSet & GetMergedItemSet() const
virtual SVX_DLLPRIVATE void CreateB2dIAObject() override
SdrPaintWindow & GetPaintWindow() const
void SetFocusHdl(SdrHdl *pNew)
bool IsHdlHit(const Point &rPnt) const
bool IsDistortShear() const
css::uno::Reference< css::graphic::XPrimitive2D > Primitive2DReference
bool areMarkHandlesHidden() const
virtual void CreateB2dIAObject() override
static BitmapEx createGluePointBitmap()
void translate(double fX, double fY)
virtual ~SdrHdlColor() override
basegfx::BColor getBColor() const
SdrPageView * GetSdrPageView() const
constexpr::Color COL_LIGHTBLUE(0x00, 0x00, 0xFF)
BitmapEx GetBitmapEx(const Point &rSrcPt, const Size &rSize) const
BitmapEx loadFromName(const OUString &rFileName, const ImageLoadFlags eFlags)
std::unique_ptr< sdr::overlay::OverlayObject > CreateOverlayObject(const basegfx::B2DPoint &rPos, BitmapColorIndex eColIndex, BitmapMarkerKind eKindOfMarker, Point aMoveOutsideOffset=Point())
Link< SdrHdlColor *, void > aColorChangeHdl
static BitmapMarkerKind GetNextBigger(BitmapMarkerKind eKnd)
virtual void onMouseEnter(const MouseEvent &rMEvt)
is called when the mouse enters the area of this handle.
constexpr::Color COL_BLUE(0x00, 0x00, 0x80)
static bool ImpSdrHdlListSorter(std::unique_ptr< SdrHdl > const &lhs, std::unique_ptr< SdrHdl > const &rhs)
SdrEdgeLineCode eLineCode
void SetLineCode(SdrEdgeLineCode eCode)
virtual ~SdrHdlBezWgt() override
ImpTextframeHdl(const tools::Rectangle &rRect)
SVX_DLLPRIVATE BitmapEx CreateColorDropper(Color aCol)
bool isHitLogic(const basegfx::B2DPoint &rLogicPosition, double fLogicTolerance=0.0) const
virtual void CreateB2dIAObject() override
virtual ~ImpMeasureHdl() override
virtual void onMouseLeave()
is called when the mouse leaves the area of this handle.
const Size & GetSizePixel() const
SdrCropHdl(const Point &rPnt, SdrHdlKind eNewKind, double fShearX, double fRotation)
bool Crop(const tools::Rectangle &rRectPixel)
void SetSize(const Size &rNew)
OutputDevice & GetOutputDevice() const
void SetRotateShear(bool bOn)
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
SdrHdlKind GetKind() const
virtual PointerStyle GetPointer() const override
Utility class SdrEdgeObj.
static SVX_DLLPRIVATE Color GetLuminance(const Color &rCol)
Color getHilightColor() const
virtual ~SdrHdlGradient() override
sal_uInt32 PageWindowCount() const