33#include <svx/strings.hrc>
59#include <osl/diagnose.h>
69#include <bitmaps.hlst>
87 ::std::vector< BitmapEx > maRealMarkers;
93 explicit SdrHdlBitmapSet();
100#define KIND_COUNT (14)
101#define INDEX_COUNT (6)
102#define INDIVIDUAL_COUNT (5)
104SdrHdlBitmapSet::SdrHdlBitmapSet()
105 : maMarkersBitmap(SIP_SA_MARKERS),
117 rTargetBitmap = maMarkersBitmap;
118 rTargetBitmap.
Crop(rRectangle);
121 return rTargetBitmap;
128 const sal_uInt16 nYPos(nInd * 11);
130 switch(eKindOfMarker)
134 OSL_FAIL(
"Unknown kind of marker." );
282 mbMoveOutside(false),
301 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),
673 switch(eKindOfMarker)
713 return "anchor-pressed";
715 return "glue-selected";
717 return "glue-unselected";
751 OUString sMarkerName = appendMarkerName(eKindOfMarker);
752 if (!sMarkerName.isEmpty())
754 OUString sMarkerPrefix(
"svx/res/marker-");
780 return aModernSet.
get()->GetBitmapEx(eKindOfMarker, sal_uInt16(eIndex));
789 std::unique_ptr<sdr::overlay::OverlayObject> pRetval;
792 bool bForceBiggerSize(
false);
796 switch(eKindOfMarker)
807 bForceBiggerSize =
true;
813 bForceBiggerSize =
true;
830 if(eNextBigger == eKindOfMarker)
834 switch(eKindOfMarker)
858 BitmapEx aBmpEx1 = ImpGetBitmapEx(eKindOfMarker, eColIndex);
859 BitmapEx aBmpEx2 = ImpGetBitmapEx(eNextBigger, eColIndex);
890 BitmapEx aBmpEx = ImpGetBitmapEx(eKindOfMarker, eColIndex);
918 sal_uInt16 nCenX(
static_cast<sal_uInt16
>(aBmpEx.
GetSizePixel().
Width() - 1) >> 1);
921 if(aMoveOutsideOffset.
X() > 0)
925 else if(aMoveOutsideOffset.
X() < 0)
930 if(aMoveOutsideOffset.
Y() > 0)
934 else if(aMoveOutsideOffset.
Y() < 0)
960 if (bSize &&
pHdlList!=
nullptr && (bRot || bDis)) {
987 nHdlAngle/=4500_deg100;
989 case 0: ePtr=PointerStyle::ESize;
break;
990 case 1: ePtr=PointerStyle::NESize;
break;
991 case 2: ePtr=PointerStyle::NSize;
break;
992 case 3: ePtr=PointerStyle::NWSize;
break;
993 case 4: ePtr=PointerStyle::WSize;
break;
994 case 5: ePtr=PointerStyle::SWSize;
break;
995 case 6: ePtr=PointerStyle::SSize;
break;
996 case 7: ePtr=PointerStyle::SESize;
break;
1081 std::unique_ptr<sdr::overlay::OverlayObject> pOverlayObject,
1102 pOverlayObject->setOffset(aOffset);
1107 rOverlayManager.
add(*pOverlayObject);
1158 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1168 std::move(pNewOverlayObject),
1181 pWrite->SetBackground(aCol);
1189 pWrite->DrawLine(
Point(0, 0),
Point(0, nHeight - 1));
1190 pWrite->DrawLine(
Point(1, 0),
Point(nWidth - 1, 0));
1192 pWrite->DrawLine(
Point(1, nHeight - 1),
Point(nWidth - 1, nHeight - 1));
1193 pWrite->DrawLine(
Point(nWidth - 1, 1),
Point(nWidth - 1, nHeight - 2));
1196 const Color aLightColor(
1197 static_cast<sal_uInt8>(::std::min(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetRed()) + sal_Int16(0x0040)), sal_Int16(0x00ff))),
1198 static_cast<sal_uInt8>(::std::min(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetGreen()) + sal_Int16(0x0040)), sal_Int16(0x00ff))),
1199 static_cast<sal_uInt8>(::std::min(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetBlue()) + sal_Int16(0x0040)), sal_Int16(0x00ff))));
1200 pWrite->SetLineColor(aLightColor);
1201 pWrite->DrawLine(
Point(1, 1),
Point(1, nHeight - 2));
1202 pWrite->DrawLine(
Point(2, 1),
Point(nWidth - 2, 1));
1205 const Color aDarkColor(
1206 static_cast<sal_uInt8>(::std::max(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetRed()) - sal_Int16(0x0040)), sal_Int16(0x0000))),
1207 static_cast<sal_uInt8>(::std::max(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetGreen()) - sal_Int16(0x0040)), sal_Int16(0x0000))),
1208 static_cast<sal_uInt8>(::std::max(
static_cast<sal_Int16
>(
static_cast<sal_Int16
>(aCol.
GetBlue()) - sal_Int16(0x0040)), sal_Int16(0x0000))));
1209 pWrite->SetLineColor(aDarkColor);
1210 pWrite->DrawLine(
Point(2, nHeight - 2),
Point(nWidth - 2, nHeight - 2));
1211 pWrite->DrawLine(
Point(nWidth - 2, 2),
Point(nWidth - 2, nHeight - 3));
1219 Color aRetval(aLum, aLum, aLum);
1260 , bMoveSingleHandle(false)
1261 , 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),
1366 FromIAOToItem(GetObj(),
true,
true);
1393 if(bSetItemOnObject)
1397 const OUString aString;
1402 aNewSet.
Put(aNewGradItem);
1407 aNewSet.
Put(aNewTransItem);
1470 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1481 std::move(pNewOverlayObject),
1491 return PointerStyle::RefHand;
1528 if(!aPosition1.
equal(aPosition2))
1530 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1537 pNewOverlayObject->setHittable(
false);
1544 std::move(pNewOverlayObject),
1584 std::unique_ptr<sdr::overlay::OverlayObject> pNewOverlayObject(
new
1588 pNewOverlayObject->setBaseColor(
COL_BLACK);
1592 std::move(pNewOverlayObject),
1653 std::move(pNewOverlayObject),
1688 return PointerStyle::MovePoint;
1690 return PointerStyle::ESize;
1692 return PointerStyle::SSize;
1713 return nAngle==0 || nAngle==18000;
1771 std::move(pNewOverlayObject),
1783 case 0:
case 1:
return PointerStyle::Hand;
1784 case 2:
case 3:
return PointerStyle::MovePoint;
1787 return PointerStyle::NotAllowed;
1839 pNewOverlayObject->setHittable(
false);
1843 std::move(pNewOverlayObject),
1870 if (lhs->IsPlusHdl())
n1=4;
1871 if (rhs->IsPlusHdl())
n2=4;
1884 sal_uInt32 nNum1=lhs->GetObjHdlNum();
1885 sal_uInt32 nNum2=rhs->GetObjHdlNum();
1890 return static_cast<sal_uInt16
>(eKind1)<
static_cast<sal_uInt16
>(eKind2);
1914struct ImplHdlAndIndex
1928 const ImplHdlAndIndex* p1 =
static_cast<ImplHdlAndIndex
const *
>(pVoid1);
1929 const ImplHdlAndIndex* p2 =
static_cast<ImplHdlAndIndex
const *
>(pVoid2);
1931 if(p1->mpHdl->GetObj() == p2->mpHdl->GetObj())
1933 if(p1->mpHdl->GetObj() &&
dynamic_cast<const SdrPathObj*
>(p1->mpHdl->GetObj()) !=
nullptr)
1940 if(p1->mpHdl->GetPolyNum() == p2->mpHdl->GetPolyNum())
1942 if(p1->mpHdl->GetPointNum() < p2->mpHdl->GetPointNum())
1951 else if(p1->mpHdl->GetPolyNum() < p2->mpHdl->GetPolyNum())
1964 if(!p1->mpHdl->GetObj())
1968 else if(!p2->mpHdl->GetObj())
1975 const sal_uInt32 nOrdNum1 = p1->mpHdl->GetObj()->GetOrdNum();
1976 const sal_uInt32 nOrdNum2 = p2->mpHdl->GetObj()->GetOrdNum();
1978 if(nOrdNum1 < nOrdNum2)
1990 if(p1->mnIndex < p2->mnIndex)
2015 pOld =
GetHdl(nOldHdlNum);
2025 std::unique_ptr<ImplHdlAndIndex[]> pHdlAndIndex(
new ImplHdlAndIndex[
maList.size()]);
2028 for(
size_t a = 0;
a <
maList.size(); ++
a)
2030 pHdlAndIndex[
a].mpHdl =
maList[
a].get();
2031 pHdlAndIndex[
a].mnIndex =
a;
2037 size_t nOldHdl(nOldHdlNum);
2039 if(nOldHdlNum != SAL_MAX_SIZE)
2041 for(
size_t a = 0;
a <
maList.size(); ++
a)
2043 if(pHdlAndIndex[
a].mpHdl == pOld)
2052 size_t nNewHdl(nOldHdl);
2057 if(nOldHdl != SAL_MAX_SIZE)
2059 if(nOldHdl ==
maList.size() - 1)
2062 nNewHdl = SAL_MAX_SIZE;
2078 if(nOldHdl == SAL_MAX_SIZE)
2081 nNewHdl =
maList.size() - 1;
2089 nNewHdl = SAL_MAX_SIZE;
2100 sal_uIntPtr nNewHdlNum(nNewHdl);
2103 if(nNewHdl != SAL_MAX_SIZE)
2105 SdrHdl* pNew = pHdlAndIndex[nNewHdl].mpHdl;
2107 for(
size_t a = 0;
a <
maList.size(); ++
a)
2118 if(nOldHdlNum != nNewHdlNum)
2144 if(pActual && pActual == pNew)
2147 const size_t nNewHdlNum =
GetHdlNum(pNew);
2149 if(nNewHdlNum != SAL_MAX_SIZE)
2176: mnFocusIndex(SAL_MAX_SIZE),
2234 std::unique_ptr<SdrHdl> pRetval = std::move(
maList[nNum]);
2243 [&eKind](std::unique_ptr<SdrHdl>& rItem) { return rItem->GetKind() == eKind; }),
2282 return SAL_MAX_SIZE;
2284 [&](
const std::unique_ptr<SdrHdl> &
p) { return p.get() == pHdl; });
2285 assert(it !=
maList.end());
2287 return SAL_MAX_SIZE;
2288 return it -
maList.begin();
2294 pHdl->SetHdlList(
this);
2295 maList.push_back(std::move(pHdl));
2303 while (nNum>0 && pRet==
nullptr)
2327 for (
auto & pHdl :
maList)
2328 pHdl->SetHdlList(&rOther);
2330 std::make_move_iterator(
maList.begin()), std::make_move_iterator(
maList.end()));
2341 mfRotation(fRotation)
2348 int nPixelSize = 0, nX = 0, nY = 0, nOffset = 0;
2355 else if( nSize <=4 )
2382 aRetval.
Crop(aSourceRect);
2401 const BitmapEx aHandlesBitmap(SIP_SA_CROP_MARKERS);
2415 std::unique_ptr<sdr::overlay::OverlayObject> pOverlayObject;
2454 std::move(pOverlayObject),
2474 maObjectTransform(
std::move(aObjectTransform)),
2476 mfCropLeft(fCropLeft),
2477 mfCropTop(fCropTop),
2478 mfCropRight(fCropRight),
2479 mfCropBottom(fCropBottom)
2486 assert(rotate !=
nullptr);
2516 double fRotate, fShearX;
2525 translateRotationToMirroring(aScale, &fRotate);
2531 const bool bMirroredX(aScale.
getX() < 0.0);
2532 const bool bMirroredY(aScale.
getY() < 0.0);
2550 aScale.
getX() + fCropRight + fCropLeft,
2551 aScale.
getY() + fCropBottom + fCropTop);
2553 aTranslate.
getX() - fCropLeft,
2554 aTranslate.
getY() - fCropTop);
2558 aTranslate.
getX(), aTranslate.
getY(),
2561 aTargetTranslate.
getX(), aTargetTranslate.
getY(),
2562 aTargetTranslate.
getX() + aTargetScale.
getX(), aTargetTranslate.
getY() + aTargetScale.
getY());
2570 if(aCurrentForCompare.
equal(aCropped))
2611 aCroppedTransform.
scale(
2629 std::move(aGraphicOutlinePolygon),
2634 aCombination[0] = aGraphic;
2635 aCombination[1] = aGraphicOutline;
2640 std::move(aCropPolyPolygon),
2641 std::move(aCombination)));
2664 pNew->setHittable(
false);
const StyleSettings & GetStyleSettings() const
static OutputDevice * GetDefaultDevice()
static const AllSettings & GetSettings()
bool Erase(const Color &rFillColor)
bool Crop(const tools::Rectangle &rRectPixel)
const Size & GetSizePixel() const
sal_uInt8 GetLuminance() const
sal_uInt8 GetBlue() const
sal_uInt8 GetGreen() const
virtual void CreateB2dIAObject() override
basegfx::B2DPolyPolygon aWireframePoly
E3dVolumeMarker(const basegfx::B2DPolyPolygon &rWireframePoly)
basegfx::BGradient aGradient
basegfx::B2DPoint maPositionA
basegfx::B2DPoint maPositionB
virtual PointerStyle GetPointer() const override
virtual ~ImpEdgeHdl() override
SdrEdgeLineCode eLineCode
virtual void CreateB2dIAObject() override
void SetLineCode(SdrEdgeLineCode eCode)
virtual void CreateB2dIAObject() override
virtual ~ImpMeasureHdl() override
virtual PointerStyle GetPointer() const override
ImpTextframeHdl(const tools::Rectangle &rRect)
virtual void CreateB2dIAObject() override
const tools::Rectangle maRect
float GetDPIScaleFactor() const
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
constexpr tools::Long Y() const
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
SdrCropHdl(const Point &rPnt, SdrHdlKind eNewKind, double fShearX, double fRotation)
BitmapEx GetBitmapForHandle(const BitmapEx &rBitmap, int nSize)
virtual void CreateB2dIAObject() override
SdrCropViewHdl(basegfx::B2DHomMatrix aObjectTransform, Graphic aGraphic, double fCropLeft, double fCropTop, double fCropRight, double fCropBottom)
basegfx::B2DHomMatrix maObjectTransform
virtual void CreateB2dIAObject() override
Utility class SdrEdgeInfoRec.
bool ImpIsHorzLine(SdrEdgeLineCode eLineCode, const XPolygon &rXP) const
Utility class SdrEdgeObj.
SdrObject * GetConnectedNode(bool bTail1) const override
std::optional< XPolygon > pEdgeTrack
virtual void CreateB2dIAObject() override
virtual ~SdrHdlBezWgt() override
const Color & GetColor() const
virtual SVX_DLLPRIVATE void CreateB2dIAObject() override
virtual ~SdrHdlColor() override
void SetSize(const Size &rNew)
SdrHdlColor(const Point &rRef, Color aCol, const Size &rSize, bool bLuminance)
void SetColor(Color aNew, bool bCallLink=false)
SVX_DLLPRIVATE BitmapEx CreateColorDropper(Color aCol)
static SVX_DLLPRIVATE Color GetLuminance(const Color &rCol)
bool IsUseLuminance() const
Link< SdrHdlColor *, void > aColorChangeHdl
void FromIAOToItem(SdrObject *pObj, bool bSetItemOnObject, bool bUndo)
virtual ~SdrHdlGradient() override
const Point & Get2ndPos() const
void Set2ndPos(const Point &rPnt)
virtual void CreateB2dIAObject() override
SdrHdlGradient(const Point &rRef1, const Point &rRef2, bool bGrad)
virtual ~SdrHdlLine() override
virtual PointerStyle GetPointer() const override
virtual void CreateB2dIAObject() override
size_t GetHdlNum(const SdrHdl *pHdl) const
void TravelFocusHdl(bool bForward)
void SetDistortShear(bool bOn)
void SetFocusHdl(SdrHdl *pNew)
bool IsMoveOutside() const
void MoveTo(SdrHdlList &rOther)
size_t GetHdlCount() const
std::deque< std::unique_ptr< SdrHdl > > maList
void SetHdlSize(sal_uInt16 nSiz)
sal_uInt16 GetHdlSize() const
void SetRotateShear(bool bOn)
std::unique_ptr< SdrHdl > RemoveHdl(size_t nNum)
bool IsRotateShear() const
SdrMarkView * GetView() const
SVX_DLLPRIVATE SdrHdlList(const SdrHdlList &)=delete
void AddHdl(std::unique_ptr< SdrHdl > pHdl)
SdrHdl * IsHdlListHit(const Point &rPnt) const
void RemoveAllByKind(SdrHdlKind eKind)
bool IsDistortShear() const
SdrHdl * GetFocusHdl() const
SdrHdl * GetHdl(size_t nNum) const
void SetMoveOutside(bool bOn)
std::unique_ptr< sdr::overlay::OverlayObject > CreateOverlayObject(const basegfx::B2DPoint &rPos, BitmapColorIndex eColIndex, BitmapMarkerKind eKindOfMarker, Point aMoveOutsideOffset=Point())
void SetSelected(bool bJa=true)
void SetRotationAngle(Degree100 n)
virtual void onHelpRequest()
is called when help is requested for the area of this handle
SdrHdlKind GetKind() const
void SetHdlList(SdrHdlList *pList)
static BitmapMarkerKind GetNextBigger(BitmapMarkerKind eKnd)
sdr::overlay::OverlayObjectList maOverlayGroup
virtual void onMouseEnter(const MouseEvent &rMEvt)
is called when the mouse enters the area of this handle.
static BitmapEx createGluePointBitmap()
void SetPos(const Point &rPnt)
void Set1PixMore(bool bJa=true)
virtual void CreateB2dIAObject()
virtual PointerStyle GetPointer() const
void SetMoveOutside(bool bMoveOutside)
SdrObject * GetObj() const
void SetObj(SdrObject *pNewObj)
virtual void onMouseLeave()
is called when the mouse leaves the area of this handle.
const Point & GetPos() const
void insertNewlyCreatedOverlayObjectForSdrHdl(std::unique_ptr< sdr::overlay::OverlayObject > pOverlayObject, const sdr::contact::ObjectContact &rObjectContact, sdr::overlay::OverlayManager &rOverlayManager)
virtual bool IsFocusHdl() const
bool IsHdlHit(const Point &rPnt) const
bool areMarkHandlesHidden() const
void AddUndo(std::unique_ptr< SdrUndoAction > pUndo)
const SfxItemPool & GetItemPool() const
SdrUndoFactory & GetSdrUndoFactory() const
returns the models undo factory.
bool IsUndoEnabled() const
returns true if undo is currently enabled This returns false if undo was disabled using EnableUndo( f...
const SfxPoolItem & GetObjectItem(const sal_uInt16 nWhich) const
SdrModel & getSdrModelFromSdrObject() const
void SetMergedItemSetAndBroadcast(const SfxItemSet &rSet, bool bClearAllItems=false)
const SfxItemSet & GetMergedItemSet() const
sal_uInt32 PageWindowCount() const
SdrPageWindow * GetPageWindow(sal_uInt32 nIndex) const
rtl::Reference< sdr::overlay::OverlayManager > const & GetOverlayManager() const
SdrPaintWindow & GetPaintWindow() const
const sdr::contact::ObjectContact & GetObjectContact() const
SdrPageView * GetSdrPageView() const
OutputDevice & GetOutputDevice() const
bool OutputToWindow() const
virtual std::unique_ptr< SdrUndoAction > CreateUndoAttrObject(SdrObject &rObject, bool bStyleSheet1=false, bool bSaveText=false)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
sal_uInt64 GetCursorBlinkTime() const
bool decompose(B2DTuple &rScale, B2DTuple &rTranslate, double &rRotate, double &rShearX) const
void translate(double fX, double fY)
void scale(double fX, double fY)
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
void transform(const basegfx::B2DHomMatrix &rMatrix)
void transform(const basegfx::B2DHomMatrix &rMatrix)
BASEGFX_DLLPUBLIC void transform(const B2DHomMatrix &rMatrix)
void intersect(const Range2D &rRange)
bool equal(const Range2D &rRange) const
bool equal(const Tuple2D< TYPE > &rTup) const
void add(OverlayObject &rOverlayObject)
void append(std::unique_ptr< OverlayObject > pOverlayObject)
bool isHitLogic(const basegfx::B2DPoint &rLogicPosition, double fLogicTolerance=0.0) const
constexpr ::Color COL_LIGHTRED(0xFF, 0x00, 0x00)
constexpr ::Color COL_GRAY(0x80, 0x80, 0x80)
constexpr ::Color COL_LIGHTCYAN(0x00, 0xFF, 0xFF)
constexpr ::Color COL_YELLOW(0xFF, 0xFF, 0x00)
constexpr ::Color COL_RED(0x80, 0x00, 0x00)
constexpr ::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
constexpr ::Color COL_LIGHTBLUE(0x00, 0x00, 0xFF)
constexpr ::Color COL_CYAN(0x00, 0x80, 0x80)
constexpr ::Color COL_LIGHTGREEN(0x00, 0xFF, 0x00)
constexpr ::Color COL_BLUE(0x00, 0x00, 0x80)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
OUString SvxResId(TranslateId aId)
tools::Long FRound(double fVal)
def rotate(shapename, deg)
sal_uInt16 GetTransparentSelectionPercent()
B2DPolygon createPolygonFromRect(const B2DRectangle &rRect, double fRadiusX, double fRadiusY)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
BitmapEx loadFromName(const OUString &rFileName, const ImageLoadFlags eFlags)
BitmapEx GetBitmapEx(BitmapEx const &rBitmapEx, DrawModeFlags nDrawMode)
UNDERLYING_TYPE get() const
constexpr TypedWhichId< SdrEdgeKindItem > SDRATTR_EDGEKIND(SDRATTR_EDGE_FIRST+0)
IMPL_LINK_NOARG(SdrHdlGradient, ColorChangeHdl, SdrHdlColor *, void)
static int ImplSortHdlFunc(const void *pVoid1, const void *pVoid2)
static bool ImpSdrHdlListSorter(std::unique_ptr< SdrHdl > const &lhs, std::unique_ptr< SdrHdl > const &rhs)
Degree100 NormAngle36000(Degree100 a)
Normalize angle to -180.00..179.99.
constexpr TypedWhichId< XFillFloatTransparenceItem > XATTR_FILLFLOATTRANSPARENCE(XATTR_FILL_FIRST+11)
constexpr TypedWhichId< XFillGradientItem > XATTR_FILLGRADIENT(XATTR_FILL_FIRST+2)