LibreOffice Module svx (master) 1
sdrattributecreator.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
21#include <svl/itemset.hxx>
22#include <svx/sdmetitm.hxx>
23#include <svx/sdooitm.hxx>
24#include <svx/sdprcitm.hxx>
25#include <svx/xdef.hxx>
27#include <svx/xlineit0.hxx>
28#include <svx/xfillit0.hxx>
29#include <svx/xflbmpit.hxx>
30#include <svx/xlntrit.hxx>
31#include <svx/xlnwtit.hxx>
32#include <svx/xlinjoit.hxx>
33#include <svx/xlncapit.hxx>
34#include <svx/xlnclit.hxx>
35#include <svx/xlnstwit.hxx>
36#include <svx/xlnedwit.hxx>
37#include <svx/xlnstit.hxx>
38#include <svx/xlnstcit.hxx>
39#include <svx/xlnedit.hxx>
40#include <svx/xlnedcit.hxx>
41#include <svx/xdash.hxx>
42#include <svx/xlndsit.hxx>
44#include <svx/xfltrit.hxx>
45#include <svx/xflftrit.hxx>
46#include <svx/xflclit.hxx>
47#include <svx/xgrscit.hxx>
48#include <svx/xflhtit.hxx>
49#include <svx/xflbckit.hxx>
50#include <svx/xflbmsxy.hxx>
51#include <svx/xflbtoxy.hxx>
52#include <svx/xflboxy.hxx>
53#include <svx/xflbmtit.hxx>
54#include <svx/xflbstit.hxx>
55#include <svx/xtextit0.hxx>
58#include <svx/svdotext.hxx>
60#include <svx/xbtmpit.hxx>
61#include <svl/itempool.hxx>
62#include <vcl/svapp.hxx>
63#include <vcl/GraphicLoader.hxx>
66#include <svx/svx3ditems.hxx>
67#include <com/sun/star/drawing/ProjectionMode.hpp>
68#include <com/sun/star/drawing/ShadeMode.hpp>
70#include <svx/rectenum.hxx>
71#include <svx/sdtfchim.hxx>
72#include <svx/svdoutl.hxx>
73#include <svx/svdmodel.hxx>
74#include <svx/xflbmsli.hxx>
75#include <editeng/editstat.hxx>
76#include <osl/diagnose.h>
88#include <com/sun/star/drawing/LineCap.hpp>
89
90using namespace com::sun::star;
91
92namespace drawinglayer
93{
94 namespace
95 {
96 attribute::HatchStyle XHatchStyleToHatchStyle(css::drawing::HatchStyle eStyle)
97 {
98 switch(eStyle)
99 {
100 case css::drawing::HatchStyle_SINGLE :
101 {
103 }
104 case css::drawing::HatchStyle_DOUBLE :
105 {
107 }
108 default :
109 {
110 return attribute::HatchStyle::Triple; // css::drawing::HatchStyle_TRIPLE
111 }
112 }
113 }
114
115 basegfx::B2DLineJoin LineJointToB2DLineJoin(css::drawing::LineJoint eLineJoint)
116 {
117 switch(eLineJoint)
118 {
119 case css::drawing::LineJoint_BEVEL :
120 {
122 }
123 case css::drawing::LineJoint_MIDDLE :
124 case css::drawing::LineJoint_MITER :
125 {
127 }
128 case css::drawing::LineJoint_ROUND :
129 {
131 }
132 default : // css::drawing::LineJoint_NONE
133 {
135 }
136 }
137 }
138
139 basegfx::B2DVector RectPointToB2DVector(RectPoint eRectPoint)
140 {
141 basegfx::B2DVector aRetval(0.0, 0.0);
142
143 // position changes X
144 switch(eRectPoint)
145 {
147 {
148 aRetval.setX(-1.0);
149 break;
150 }
151
153 {
154 aRetval.setX(1.0);
155 break;
156 }
157
158 default :
159 {
160 break;
161 }
162 }
163
164 // position changes Y
165 switch(eRectPoint)
166 {
168 {
169 aRetval.setY(-1.0);
170 break;
171 }
172
174 {
175 aRetval.setY(1.0);
176 break;
177 }
178
179 default :
180 {
181 break;
182 }
183 }
184
185 return aRetval;
186 }
187
188 attribute::SdrGlowAttribute createNewSdrGlowAttribute(const SfxItemSet& rSet)
189 {
190 sal_Int32 nRadius = rSet.Get(SDRATTR_GLOW_RADIUS).GetValue();
191 if (!nRadius)
192 return attribute::SdrGlowAttribute();
193 Color aColor(rSet.Get(SDRATTR_GLOW_COLOR).GetColorValue());
194 sal_uInt16 nTransparency(rSet.Get(SDRATTR_GLOW_TRANSPARENCY).GetValue());
195 if (nTransparency)
196 aColor.SetAlpha(255 - std::round(nTransparency / 100.0 * 255.0));
197
198 attribute::SdrGlowAttribute glowAttr{ nRadius, aColor };
199 return glowAttr;
200 }
201
202 sal_Int32 getSoftEdgeRadius(const SfxItemSet& rSet)
203 {
204 return rSet.Get(SDRATTR_SOFTEDGE_RADIUS).GetValue();
205 }
206 } // end of anonymous namespace
207} // end of namespace drawinglayer
208
209
211{
213 {
214 const css::drawing::LineStyle eStyle(rSet.Get(XATTR_LINESTYLE).GetValue());
215
216 if(drawing::LineStyle_NONE != eStyle)
217 {
218 sal_uInt16 nTransparence(rSet.Get(XATTR_LINETRANSPARENCE).GetValue());
219
220 if(nTransparence > 100)
221 {
222 nTransparence = 100;
223 }
224
225 if(100 != nTransparence)
226 {
227 const sal_uInt32 nWidth(rSet.Get(XATTR_LINEWIDTH).GetValue());
228 const Color aColor(rSet.Get(XATTR_LINECOLOR).GetColorValue());
229 const css::drawing::LineJoint eJoint(rSet.Get(XATTR_LINEJOINT).GetValue());
230 const css::drawing::LineCap eCap(rSet.Get(XATTR_LINECAP).GetValue());
231 ::std::vector< double > aDotDashArray;
232 double fFullDotDashLen(0.0);
233
234 if(drawing::LineStyle_DASH == eStyle)
235 {
236 const XDash& rDash = rSet.Get(XATTR_LINEDASH).GetDashValue();
237
238 if(rDash.GetDots() || rDash.GetDashes())
239 {
240 fFullDotDashLen = rDash.CreateDotDashArray(aDotDashArray, static_cast<double>(nWidth));
241 }
242 }
243
245 LineJointToB2DLineJoin(eJoint),
246 static_cast<double>(nWidth),
247 static_cast<double>(nTransparence) * 0.01,
248 aColor.getBColor(),
249 eCap,
250 std::move(aDotDashArray),
251 fFullDotDashLen);
252 }
253 }
254
256 }
257
259 const SfxItemSet& rSet,
260 double fWidth)
261 {
262 const sal_Int32 nTempStartWidth(rSet.Get(XATTR_LINESTARTWIDTH).GetValue());
263 const sal_Int32 nTempEndWidth(rSet.Get(XATTR_LINEENDWIDTH).GetValue());
264 basegfx::B2DPolyPolygon aStartPolyPolygon;
265 basegfx::B2DPolyPolygon aEndPolyPolygon;
266 double fStartWidth(0.0);
267 double fEndWidth(0.0);
268 bool bStartActive(false);
269 bool bEndActive(false);
270 bool bStartCentered(true);
271 bool bEndCentered(true);
272
273 if(nTempStartWidth)
274 {
275 if(nTempStartWidth < 0)
276 {
277 fStartWidth = (static_cast<double>(-nTempStartWidth) * fWidth) * 0.01;
278 }
279 else
280 {
281 fStartWidth = static_cast<double>(nTempStartWidth);
282 }
283
284 if(0.0 != fStartWidth)
285 {
286 aStartPolyPolygon = rSet.Get(XATTR_LINESTART).GetLineStartValue();
287
288 if(aStartPolyPolygon.count() && aStartPolyPolygon.getB2DPolygon(0).count())
289 {
290 bStartActive = true;
291 bStartCentered = rSet.Get(XATTR_LINESTARTCENTER).GetValue();
292 }
293 }
294 }
295
296 if(nTempEndWidth)
297 {
298 if(nTempEndWidth < 0)
299 {
300 fEndWidth = (static_cast<double>(-nTempEndWidth) * fWidth) * 0.01;
301 }
302 else
303 {
304 fEndWidth = static_cast<double>(nTempEndWidth);
305 }
306
307 if(0.0 != fEndWidth)
308 {
309 aEndPolyPolygon = rSet.Get(XATTR_LINEEND).GetLineEndValue();
310
311 if(aEndPolyPolygon.count() && aEndPolyPolygon.getB2DPolygon(0).count())
312 {
313 bEndActive = true;
314 bEndCentered = rSet.Get(XATTR_LINEENDCENTER).GetValue();
315 }
316 }
317 }
318
319 if(bStartActive || bEndActive)
320 {
322 aStartPolyPolygon, aEndPolyPolygon, fStartWidth, fEndWidth,
323 bStartActive, bEndActive, bStartCentered, bEndCentered);
324 }
325
327 }
328
330 {
331 const bool bShadow(rSet.Get(SDRATTR_SHADOW).GetValue());
332
333 if(bShadow)
334 {
335 sal_uInt16 nTransparence(rSet.Get(SDRATTR_SHADOWTRANSPARENCE).GetValue());
336
337 if(nTransparence > 100)
338 {
339 nTransparence = 100;
340 }
341
342 if(nTransparence)
343 {
344 sal_uInt16 nFillTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
345
346 if(nFillTransparence > 100)
347 {
348 nFillTransparence = 100;
349 }
350
351 if(nTransparence == nFillTransparence)
352 {
353 // shadow does not really have an own transparence, but the application
354 // sets the shadow transparence equal to the object transparence for
355 // convenience. This is not useful for primitive creation, so take
356 // this as no shadow transparence
357 nTransparence = 0;
358 }
359 }
360
361 if(100 != nTransparence)
362 {
363 const basegfx::B2DVector aOffset(
364 static_cast<double>(rSet.Get(SDRATTR_SHADOWXDIST).GetValue()),
365 static_cast<double>(rSet.Get(SDRATTR_SHADOWYDIST).GetValue()));
366
367 const basegfx::B2DVector aSize(
368 static_cast<double>(rSet.Get(SDRATTR_SHADOWSIZEX).GetValue()),
369 static_cast<double>(rSet.Get(SDRATTR_SHADOWSIZEY).GetValue()));
370
371 const Color aColor(rSet.Get(SDRATTR_SHADOWCOLOR).GetColorValue());
372
373 sal_Int32 nBlur(rSet.Get(SDRATTR_SHADOWBLUR).GetValue());
374
376
377 return attribute::SdrShadowAttribute(aOffset, aSize, static_cast<double>(nTransparence) * 0.01, nBlur, eAlignment, aColor.getBColor());
378 }
379 }
380
382 }
383
385 {
386 const drawing::FillStyle eStyle(rSet.Get(XATTR_FILLSTYLE).GetValue());
387
388 sal_uInt16 nTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
389
390 if(nTransparence > 100)
391 {
392 nTransparence = 100;
393 }
394
395 if(drawing::FillStyle_NONE == eStyle)
396 {
398 const bool bSlideBackgroundFill(aBckItem.GetValue());
399
400 if(bSlideBackgroundFill)
401 {
402 // we have SlideBackgroundFill mode, create a
403 // SdrFillAttribute accordingly
404 return attribute::SdrFillAttribute(true);
405 }
406 }
407
408 if(drawing::FillStyle_NONE != eStyle)
409 {
410 if(100 != nTransparence)
411 {
412 // need to check XFillFloatTransparence, object fill may still be completely transparent
413 const XFillFloatTransparenceItem* pGradientItem;
414
415 if((pGradientItem = rSet.GetItemIfSet(XATTR_FILLFLOATTRANSPARENCE, true))
416 && pGradientItem->IsEnabled())
417 {
418 const basegfx::BGradient& rGradient = pGradientItem->GetGradientValue();
419 basegfx::BColor aSingleColor;
420 const bool bSingleColor(rGradient.GetColorStops().isSingleColor(aSingleColor));
421 const bool bCompletelyTransparent(bSingleColor && basegfx::fTools::equal(aSingleColor.luminance(), 1.0));
422
423 if(bCompletelyTransparent)
424 {
425 nTransparence = 100;
426 }
427 }
428 }
429
430 if(100 != nTransparence)
431 {
432 const Color aColor(rSet.Get(XATTR_FILLCOLOR).GetColorValue());
436
437 switch(eStyle)
438 {
439 default:
440 {
441 // nothing to do, color is defined
442 break;
443 }
444 case drawing::FillStyle_GRADIENT :
445 {
446 basegfx::BGradient aBGradient(rSet.Get(XATTR_FILLGRADIENT).GetGradientValue());
447 basegfx::BColorStops aColorStops(aBGradient.GetColorStops());
448
449
450 if (aBGradient.GetStartIntens() != 100 || aBGradient.GetEndIntens() != 100)
451 {
452 // Need to do the (old, crazy) blend against black for a
453 // used intensity, but now for all ColorStops relative to their
454 // offsets, where 0 means black and 100 means original color
455 aColorStops.blendToIntensity(
456 aBGradient.GetStartIntens() * 0.01,
457 aBGradient.GetEndIntens() * 0.01,
458 basegfx::BColor()); // COL_BLACK
459 }
460
462 aBGradient.GetGradientStyle(),
463 static_cast<double>(aBGradient.GetBorder()) * 0.01,
464 static_cast<double>(aBGradient.GetXOffset()) * 0.01,
465 static_cast<double>(aBGradient.GetYOffset()) * 0.01,
466 toRadians(aBGradient.GetAngle()),
467 aColorStops,
468 rSet.Get(XATTR_GRADIENTSTEPCOUNT).GetValue());
469
470 break;
471 }
472 case drawing::FillStyle_HATCH :
473 {
474 const XHatch& rHatch(rSet.Get(XATTR_FILLHATCH).GetHatchValue());
475 const Color aColorB(rHatch.GetColor());
476
478 XHatchStyleToHatchStyle(rHatch.GetHatchStyle()),
479 static_cast<double>(rHatch.GetDistance()),
480 toRadians(rHatch.GetAngle()),
481 aColorB.getBColor(),
482 3, // same default as VCL, a minimum of three discrete units (pixels) offset
483 rSet.Get(XATTR_FILLBACKGROUND).GetValue());
484
485 break;
486 }
487 case drawing::FillStyle_BITMAP :
488 {
490 break;
491 }
492 }
493
495 static_cast<double>(nTransparence) * 0.01,
496 aColor.getBColor(),
497 aGradient,
498 aHatch,
499 aFillGraphic);
500 }
501 }
502
503 if(nTransparence == 100)
504 {
509 1,
510 basegfx::BColor( 0, 0, 0 ),
511 aGradient,
512 aHatch,
513 aFillGraphic);
514 }
515
517 }
518
519 // #i101508# Support handing over given text-to-border distances
521 const SfxItemSet& rSet,
522 const SdrText& rText,
523 const sal_Int32* pLeft,
524 const sal_Int32* pUpper,
525 const sal_Int32* pRight,
526 const sal_Int32* pLower)
527 {
528 const SdrTextObj& rTextObj = rText.GetObject();
529
530 // Save chaining attributes
531 bool bChainable = rTextObj.IsChainable();
532
533
534 if(rText.GetOutlinerParaObject())
535 {
536 // added TextEdit text suppression
537 bool bInEditMode(false);
538
539 if(rText.GetObject().getTextCount() > 1)
540 {
541 bInEditMode = rTextObj.IsInEditMode() && rText.GetObject().getActiveText() == &rText;
542 }
543 else
544 {
545 bInEditMode = rTextObj.IsInEditMode();
546 }
547
548 OutlinerParaObject aOutlinerParaObject(*rText.GetOutlinerParaObject());
549
550 if(bInEditMode)
551 {
553
554 if(pTempObj)
555 {
556 aOutlinerParaObject = *pTempObj;
557 }
558 else
559 {
560 // #i100537#
561 // CreateEditOutlinerParaObject() returning no object does not mean that
562 // text edit mode is not active. Do not reset the flag here
563 // bInEditMode = false;
564 }
565 }
566
567 const SdrTextAniKind eAniKind(rTextObj.GetTextAniKind());
568
569 // #i107346#
570 const SdrOutliner& rDrawTextOutliner(rText.GetObject().getSdrModelFromSdrObject().GetDrawOutliner(&rTextObj));
571 const bool bWrongSpell(rDrawTextOutliner.GetControlWord() & EEControlBits::ONLINESPELLING);
572
574 rText,
575 aOutlinerParaObject,
576 rSet.Get(XATTR_FORMTXTSTYLE).GetValue(),
577 pLeft ? *pLeft : rTextObj.GetTextLeftDistance(),
578 pUpper ? *pUpper : rTextObj.GetTextUpperDistance(),
579 pRight ? *pRight : rTextObj.GetTextRightDistance(),
580 pLower ? *pLower : rTextObj.GetTextLowerDistance(),
582 rTextObj.GetTextVerticalAdjust(rSet),
584 rTextObj.IsFitToSize(),
585 rTextObj.IsAutoFit(),
586 rSet.Get(XATTR_FORMTXTHIDEFORM).GetValue(),
587 SdrTextAniKind::Blink == eAniKind,
588 SdrTextAniKind::Scroll == eAniKind || SdrTextAniKind::Alternate == eAniKind || SdrTextAniKind::Slide == eAniKind,
589 bInEditMode,
591 bWrongSpell,
592 bChainable);
593 }
594
596 }
597
599 {
600 const XFillFloatTransparenceItem* pGradientItem;
601
602 if((pGradientItem = rSet.GetItemIfSet(XATTR_FILLFLOATTRANSPARENCE))
603 && pGradientItem->IsEnabled())
604 {
605 // test if float transparency is completely transparent
606 const basegfx::BGradient& rGradient(pGradientItem->GetGradientValue());
607 basegfx::BColor aSingleColor;
608 const bool bSingleColor(rGradient.GetColorStops().isSingleColor(aSingleColor));
609 const bool bCompletelyTransparent(bSingleColor && basegfx::fTools::equal(aSingleColor.luminance(), 1.0));
610 const bool bNotTransparent(bSingleColor && basegfx::fTools::equalZero(aSingleColor.luminance()));
611
612 // create nothing when completely transparent: This case is already checked for the
613 // normal fill attributes, XFILL_NONE will be used.
614 // create nothing when not transparent: use normal fill, no need t create a FillGradientAttribute.
615 // Both cases are optimizations, always creating FillGradientAttribute will work, too
616 if (!bNotTransparent && !bCompletelyTransparent)
617 {
618 basegfx::BColorStops aColorStops(rGradient.GetColorStops());
619
620 if (rGradient.GetStartIntens() != 100 || rGradient.GetEndIntens() != 100)
621 {
622 // this may also be set for transparence, so need to take care of it
623 aColorStops.blendToIntensity(
624 rGradient.GetStartIntens() * 0.01,
625 rGradient.GetEndIntens() * 0.01,
626 basegfx::BColor()); // COL_BLACK
627 }
628
630 rGradient.GetGradientStyle(),
631 static_cast<double>(rGradient.GetBorder()) * 0.01,
632 static_cast<double>(rGradient.GetXOffset()) * 0.01,
633 static_cast<double>(rGradient.GetYOffset()) * 0.01,
634 toRadians(rGradient.GetAngle()),
635 aColorStops,
636 // oops - the gradientStepCount was missing here. If we want to use
637 // a combination of gradient & transparencyGradient to represent
638 // imported gradients of formats which do originally support transparency
639 // in gradients, then the gradient has to be exactly defined the same,
640 // including the (evtl. used) gradientStepCount
641 rSet.Get(XATTR_GRADIENTSTEPCOUNT).GetValue());
642 }
643 }
644
646 }
647
649 {
650 Graphic aGraphic(rSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic());
651
652 OUString aOriginURL = aGraphic.getOriginURL();
653 if (aGraphic.GetType() == GraphicType::Default && !aOriginURL.isEmpty())
654 {
655 aGraphic = vcl::graphic::loadFromURL(aGraphic.getOriginURL());
656 aGraphic.setOriginURL(aOriginURL);
657 }
658
659 if(GraphicType::Bitmap != aGraphic.GetType() && GraphicType::GdiMetafile != aGraphic.GetType())
660 {
661 // no content if not bitmap or metafile
662 OSL_ENSURE(false, "No fill graphic in SfxItemSet (!)");
664 }
665
666 Size aPrefSize(aGraphic.GetPrefSize());
667
668 if(!aPrefSize.Width() || !aPrefSize.Height())
669 {
670 // if there is no logical size, create a size from pixel size and set MapMode accordingly
671 if(GraphicType::Bitmap == aGraphic.GetType())
672 {
673 aGraphic.SetPrefSize(aGraphic.GetBitmapEx().GetSizePixel());
674 aGraphic.SetPrefMapMode(MapMode(MapUnit::MapPixel));
675 aPrefSize = aGraphic.GetPrefSize();
676 }
677 }
678
679 if(!aPrefSize.Width() || !aPrefSize.Height())
680 {
681 // no content if no size
682 OSL_ENSURE(false, "Graphic has no size in SfxItemSet (!)");
684 }
685
686 // convert size and MapMode to destination logical size and MapMode
687 const MapUnit aDestinationMapUnit(rSet.GetPool()->GetMetric(0));
688 basegfx::B2DVector aGraphicLogicSize(aGraphic.GetPrefSize().Width(), aGraphic.GetPrefSize().Height());
689
690 if (aGraphic.GetPrefMapMode().GetMapUnit() != aDestinationMapUnit)
691 {
692 // #i100360# for MapUnit::MapPixel, LogicToLogic will not work properly,
693 // so fallback to Application::GetDefaultDevice()
694 Size aNewSize(0, 0);
695
696 if(MapUnit::MapPixel == aGraphic.GetPrefMapMode().GetMapUnit())
697 {
699 aGraphic.GetPrefSize(),
700 MapMode(aDestinationMapUnit));
701 }
702 else
703 {
705 aGraphic.GetPrefSize(),
706 aGraphic.GetPrefMapMode(),
707 MapMode(aDestinationMapUnit));
708 }
709
710 // #i124002# do not set new size using SetPrefSize at the graphic, this will lead to problems.
711 // Instead, adapt the GraphicLogicSize which will be used for further decompositions
712 aGraphicLogicSize = basegfx::B2DVector(aNewSize.Width(), aNewSize.Height());
713 }
714
715 // get size
716 const basegfx::B2DVector aSize(
717 static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEX).GetValue()),
718 static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEY).GetValue()));
719 const basegfx::B2DVector aOffset(
720 static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETX).GetValue()),
721 static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETY).GetValue()));
722 const basegfx::B2DVector aOffsetPosition(
723 static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETX).GetValue()),
724 static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETY).GetValue()));
725
727 aGraphic,
728 aGraphicLogicSize,
729 aSize,
730 aOffset,
731 aOffsetPosition,
732 RectPointToB2DVector(rSet.GetItem<XFillBmpPosItem>(XATTR_FILLBMP_POS)->GetValue()),
733 rSet.Get(XATTR_FILLBMP_TILE).GetValue(),
734 rSet.Get(XATTR_FILLBMP_STRETCH).GetValue(),
735 rSet.Get(XATTR_FILLBMP_SIZELOG).GetValue());
736 }
737
739 const SfxItemSet& rSet,
740 const SdrText* pText,
741 bool bSuppressText)
742 {
744
745 // #i98072# added option to suppress text
746 // look for text first
747 if(!bSuppressText && pText)
748 {
749 aText = createNewSdrTextAttribute(rSet, *pText);
750 }
751
752 // try shadow
754 const attribute::SdrGlowAttribute aGlow(createNewSdrGlowAttribute(rSet));
755 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
756
757 return attribute::SdrEffectsTextAttribute(aShadow, aText, aGlow, nSoftEdgeRadius);
758 }
759
761 const SfxItemSet& rSet,
762 const SdrText* pText)
763 {
767 bool bFontworkHideContour(false);
768
769 // look for text first
770 if(pText)
771 {
772 aText = createNewSdrTextAttribute(rSet, *pText);
773
774 // when object has text and text is fontwork and hide contour is set for fontwork, force
775 // line and fill style to empty
776 if(!aText.isDefault()
778 && aText.isHideContour())
779 {
780 bFontworkHideContour = true;
781 }
782 }
783
784 // try line style
785 if(!bFontworkHideContour)
786 {
788
789 if(!aLine.isDefault())
790 {
791 // try LineStartEnd
792 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
793 }
794 }
795
796 if(!aLine.isDefault() || !aText.isDefault())
797 {
798 // try shadow
800 const attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet);
801 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
802
803 return attribute::SdrLineEffectsTextAttribute(aLine, aLineStartEnd, aShadow, aText,
804 aGlow, nSoftEdgeRadius);
805 }
806
808 }
809
811 const SfxItemSet& rSet,
812 const SdrText* pText,
813 bool bHasContent,
814 bool bSuppressShadow)
815 {
819 attribute::FillGradientAttribute aFillFloatTransGradient;
821 bool bFontworkHideContour(false);
822
823 // look for text first
824 if(pText)
825 {
826 aText = createNewSdrTextAttribute(rSet, *pText);
827
828 // when object has text and text is fontwork and hide contour is set for fontwork, force
829 // line and fill style to empty
830 if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
831 {
832 bFontworkHideContour = true;
833 }
834 }
835
836 if(!bFontworkHideContour)
837 {
838 // try line style
840
841 if(!aLine.isDefault())
842 {
843 // try LineStartEnd
844 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
845 }
846
847 // try fill style
849
850 if(!aFill.isDefault())
851 {
852 // try fillfloattransparence
853 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
854 }
855 }
856
857 // bHasContent is used from OLE and graphic objects. Normally a possible shadow
858 // depends on line, fill or text to be set, but for these objects it is possible
859 // to have none of these, but still content which needs to have a shadow (if set),
860 // so shadow needs to be tried
861 if(bHasContent || !aLine.isDefault() || !aFill.isDefault() || !aText.isDefault())
862 {
863 // try shadow
864 const attribute::SdrShadowAttribute aShadow = !bSuppressShadow ?
866
867 // glow
868 const attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet);
869
870 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
871
872 return attribute::SdrLineFillEffectsTextAttribute(aLine, aFill, aLineStartEnd,
873 aShadow, aFillFloatTransGradient,
874 aText, aGlow, nSoftEdgeRadius);
875 }
876
878 }
879
881 {
885 attribute::FillGradientAttribute aFillFloatTransGradient;
886
887 // try line style
889
890 if(!aLine.isDefault())
891 {
892 // try LineStartEnd
893 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
894 }
895
896 // try fill style
897 if(!bSuppressFill)
898 {
900
901 if(!aFill.isDefault())
902 {
903 // try fillfloattransparence
904 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
905 }
906 }
907
908 if(!aLine.isDefault() || !aFill.isDefault())
909 {
910 // try shadow
912
914 aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient);
915 }
916
918 }
919
921 {
922 // get perspective
923 css::drawing::ProjectionMode aProjectionMode(css::drawing::ProjectionMode_PARALLEL);
924 const sal_uInt16 nProjectionValue(rSet.Get(SDRATTR_3DSCENE_PERSPECTIVE).GetValue());
925
926 if(1 == nProjectionValue)
927 {
928 aProjectionMode = css::drawing::ProjectionMode_PERSPECTIVE;
929 }
930
931 // get distance
932 const double fDistance(rSet.Get(SDRATTR_3DSCENE_DISTANCE).GetValue());
933
934 // get shadow slant
935 const double fShadowSlant(
937
938 // get shade mode
939 css::drawing::ShadeMode aShadeMode(css::drawing::ShadeMode_FLAT);
940 const sal_uInt16 nShadeValue(rSet.Get(SDRATTR_3DSCENE_SHADE_MODE).GetValue());
941
942 if(1 == nShadeValue)
943 {
944 aShadeMode = css::drawing::ShadeMode_PHONG;
945 }
946 else if(2 == nShadeValue)
947 {
948 aShadeMode = css::drawing::ShadeMode_SMOOTH;
949 }
950 else if(3 == nShadeValue)
951 {
952 aShadeMode = css::drawing::ShadeMode_DRAFT;
953 }
954
955 // get two sided lighting
956 const bool bTwoSidedLighting(rSet.Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING).GetValue());
957
958 return attribute::SdrSceneAttribute(fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting);
959 }
960
962 {
963 // extract lights from given SfxItemSet (from scene)
964 ::std::vector< attribute::Sdr3DLightAttribute > aLightVector;
965
966 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_1).GetValue())
967 {
968 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1).GetValue().getBColor());
970 aLightVector.emplace_back(aColor, aDirection, true);
971 }
972
973 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_2).GetValue())
974 {
975 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2).GetValue().getBColor());
977 aLightVector.emplace_back(aColor, aDirection, false);
978 }
979
980 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_3).GetValue())
981 {
982 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3).GetValue().getBColor());
984 aLightVector.emplace_back(aColor, aDirection, false);
985 }
986
987 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_4).GetValue())
988 {
989 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4).GetValue().getBColor());
991 aLightVector.emplace_back(aColor, aDirection, false);
992 }
993
994 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_5).GetValue())
995 {
996 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5).GetValue().getBColor());
998 aLightVector.emplace_back(aColor, aDirection, false);
999 }
1000
1001 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_6).GetValue())
1002 {
1003 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6).GetValue().getBColor());
1005 aLightVector.emplace_back(aColor, aDirection, false);
1006 }
1007
1008 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_7).GetValue())
1009 {
1010 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7).GetValue().getBColor());
1012 aLightVector.emplace_back(aColor, aDirection, false);
1013 }
1014
1015 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_8).GetValue())
1016 {
1017 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8).GetValue().getBColor());
1019 aLightVector.emplace_back(aColor, aDirection, false);
1020 }
1021
1022 // get ambient color
1023 const Color aAmbientValue(rSet.Get(SDRATTR_3DSCENE_AMBIENTCOLOR).GetValue());
1024 const basegfx::BColor aAmbientLight(aAmbientValue.getBColor());
1025
1026 return attribute::SdrLightingAttribute(aAmbientLight, std::move(aLightVector));
1027 }
1028
1029 void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange& rObjectRange, double& rfCornerRadiusX, double& rfCornerRadiusY)
1030 {
1031 rfCornerRadiusX = rfCornerRadiusY = static_cast<double>(nRadius);
1032
1033 if(0.0 != rfCornerRadiusX)
1034 {
1035 const double fHalfObjectWidth(rObjectRange.getWidth() * 0.5);
1036
1037 if(0.0 != fHalfObjectWidth)
1038 {
1039 if(rfCornerRadiusX < 0.0)
1040 {
1041 rfCornerRadiusX = 0.0;
1042 }
1043
1044 if(rfCornerRadiusX > fHalfObjectWidth)
1045 {
1046 rfCornerRadiusX = fHalfObjectWidth;
1047 }
1048
1049 rfCornerRadiusX /= fHalfObjectWidth;
1050 }
1051 else
1052 {
1053 rfCornerRadiusX = 0.0;
1054 }
1055 }
1056
1057 if(0.0 == rfCornerRadiusY)
1058 return;
1059
1060 const double fHalfObjectHeight(rObjectRange.getHeight() * 0.5);
1061
1062 if(0.0 != fHalfObjectHeight)
1063 {
1064 if(rfCornerRadiusY < 0.0)
1065 {
1066 rfCornerRadiusY = 0.0;
1067 }
1068
1069 if(rfCornerRadiusY > fHalfObjectHeight)
1070 {
1071 rfCornerRadiusY = fHalfObjectHeight;
1072 }
1073
1074 rfCornerRadiusY /= fHalfObjectHeight;
1075 }
1076 else
1077 {
1078 rfCornerRadiusY = 0.0;
1079 }
1080 }
1081
1082 // #i101508# Support handing over given text-to-border distances
1084 const SfxItemSet& rSet,
1085 const SdrText* pText,
1086 const sal_Int32* pLeft,
1087 const sal_Int32* pUpper,
1088 const sal_Int32* pRight,
1089 const sal_Int32* pLower)
1090 {
1092 attribute::FillGradientAttribute aFillFloatTransGradient;
1094 bool bFontworkHideContour(false);
1095
1096 // look for text first
1097 if(pText)
1098 {
1099 aText = createNewSdrTextAttribute(rSet, *pText, pLeft, pUpper, pRight, pLower);
1100
1101 // when object has text and text is fontwork and hide contour is set for fontwork, force
1102 // fill style to empty
1103 if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
1104 {
1105 bFontworkHideContour = true;
1106 }
1107 }
1108
1109 if(!bFontworkHideContour)
1110 {
1111 // try fill style
1113
1114 if(!aFill.isDefault())
1115 {
1116 // try fillfloattransparence
1117 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
1118 }
1119 }
1120
1121 if(!aFill.isDefault() || !aText.isDefault())
1122 {
1123 return attribute::SdrFillTextAttribute(aFill, aFillFloatTransGradient, aText);
1124 }
1125
1127 }
1128
1129} // end of namespace
1130
1131/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static OutputDevice * GetDefaultDevice()
const Size & GetSizePixel() const
basegfx::BColor getBColor() const
Size GetPrefSize() const
OUString getOriginURL() const
void SetPrefMapMode(const MapMode &rPrefMapMode)
GraphicType GetType() const
BitmapEx GetBitmapEx(const GraphicConversionParameters &rParameters=GraphicConversionParameters()) const
MapMode GetPrefMapMode() const
void SetPrefSize(const Size &rPrefSize)
void setOriginURL(OUString const &rOriginURL)
MapUnit GetMapUnit() const
EEControlBits GetControlWord() const
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
SdrOutliner & GetDrawOutliner(const SdrTextObj *pObj=nullptr) const
Definition: svdmodel.cxx:664
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:289
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1834
bool IsChainable() const
Definition: svdotext.cxx:2023
SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:351
bool IsAutoFit() const
returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
Definition: svdotext.cxx:1935
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled....
Definition: svdotext.cxx:1940
bool IsInEditMode() const
Definition: svdotext.hxx:339
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2147
tools::Long GetTextLeftDistance() const
Left inner spacing to borders
Definition: svdotext.cxx:1819
std::optional< OutlinerParaObject > CreateEditOutlinerParaObject() const
Definition: svdotext.cxx:862
tools::Long GetTextRightDistance() const
Right inner spacing to borders
Definition: svdotext.cxx:1824
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2171
SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:383
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1839
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1829
OutlinerParaObject * GetOutlinerParaObject()
Definition: svdtext.cxx:78
SdrTextObj & GetObject() const
Definition: svdtext.hxx:63
bool GetValue() const
EnumT GetValue() const
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
SfxItemPool * GetPool() const
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
Definition: xdash.hxx:32
double CreateDotDashArray(::std::vector< double > &rDotDashArray, double fLineWidth) const
Definition: xattr.cxx:456
sal_uInt16 GetDots() const
Definition: xdash.hxx:55
sal_uInt16 GetDashes() const
Definition: xdash.hxx:57
const basegfx::BGradient & GetGradientValue() const
Definition: xattr.cxx:2134
Item to enable slide background for filled objects.
const Color & GetColor() const
Definition: xhatch.hxx:52
tools::Long GetDistance() const
Definition: xhatch.hxx:53
css::drawing::HatchStyle GetHatchStyle() const
Definition: xhatch.hxx:51
Degree10 GetAngle() const
Definition: xhatch.hxx:54
B2DPolygon const & getB2DPolygon(sal_uInt32 nIndex) const
sal_uInt32 count() const
sal_uInt32 count() const
void blendToIntensity(double fStartIntensity, double fEndIntensity, const BColor &rBlendColor)
bool isSingleColor(BColor &rSingleColor) const
double luminance() const
sal_uInt16 GetBorder() const
sal_uInt16 GetStartIntens() const
sal_uInt16 GetXOffset() const
const basegfx::BColorStops & GetColorStops() const
sal_uInt16 GetEndIntens() const
Degree10 GetAngle() const
css::awt::GradientStyle GetGradientStyle() const
sal_uInt16 GetYOffset() const
TYPE getWidth() const
TYPE getHeight() const
const SdrFormTextAttribute & getSdrFormTextAttribute() const
double toRadians(D x)
MapUnit
bool equalZero(const T &rfVal)
bool equal(T const &rfValA, T const &rfValB)
constexpr double deg2rad(double v)
attribute::SdrLineAttribute createNewSdrLineAttribute(const SfxItemSet &rSet)
attribute::SdrLineFillShadowAttribute3D createNewSdrLineFillShadowAttribute(const SfxItemSet &rSet, bool bSuppressFill)
attribute::SdrSceneAttribute createNewSdrSceneAttribute(const SfxItemSet &rSet)
attribute::FillGradientAttribute createNewTransparenceGradientAttribute(const SfxItemSet &rSet)
attribute::SdrFillAttribute createNewSdrFillAttribute(const SfxItemSet &rSet)
attribute::SdrLightingAttribute createNewSdrLightingAttribute(const SfxItemSet &rSet)
attribute::SdrShadowAttribute createNewSdrShadowAttribute(const SfxItemSet &rSet)
void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange &rObjectRange, double &rfCornerRadiusX, double &rfCornerRadiusY)
attribute::SdrEffectsTextAttribute createNewSdrEffectsTextAttribute(const SfxItemSet &rSet, const SdrText *pText, bool bSuppressText)
attribute::SdrLineEffectsTextAttribute createNewSdrLineEffectsTextAttribute(const SfxItemSet &rSet, const SdrText *pText)
attribute::SdrLineStartEndAttribute createNewSdrLineStartEndAttribute(const SfxItemSet &rSet, double fWidth)
attribute::SdrTextAttribute createNewSdrTextAttribute(const SfxItemSet &rSet, const SdrText &rText, const sal_Int32 *pLeft, const sal_Int32 *pUpper, const sal_Int32 *pRight, const sal_Int32 *pLower)
attribute::SdrFillGraphicAttribute createNewSdrFillGraphicAttribute(const SfxItemSet &rSet)
attribute::SdrLineFillEffectsTextAttribute createNewSdrLineFillEffectsTextAttribute(const SfxItemSet &rSet, const SdrText *pText, bool bHasContent, bool bSuppressShadow)
attribute::SdrFillTextAttribute createNewSdrFillTextAttribute(const SfxItemSet &rSet, const SdrText *pText, const sal_Int32 *pLeft, const sal_Int32 *pUpper, const sal_Int32 *pRight, const sal_Int32 *pLower)
RectangleAlignment
Graphic loadFromURL(OUString const &rURL, weld::Window *pParentWin)
RectPoint
Definition: rectenum.hxx:23
SdrTextAniKind
Animation type for text frame.
Definition: sdtakitm.hxx:29
@ Scroll
blinking
@ Slide
scroll back and forth
@ Alternate
scroll through
@ Blink
no animation
static SfxItemSet & rSet
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_8(SDRATTR_3DSCENE_FIRST+20)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_4(SDRATTR_3DSCENE_FIRST+16)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_SHADOW(SDRATTR_SHADOW_FIRST+0)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_1(SDRATTR_3DSCENE_FIRST+21)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_3(SDRATTR_3DSCENE_FIRST+23)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_1(SDRATTR_3DSCENE_FIRST+13)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_2(SDRATTR_3DSCENE_FIRST+22)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWSIZEX(SDRATTR_SHADOW_FIRST+7)
constexpr TypedWhichId< Svx3DPerspectiveItem > SDRATTR_3DSCENE_PERSPECTIVE(SDRATTR_3DSCENE_FIRST+0)
constexpr TypedWhichId< SdrPercentItem > SDRATTR_SHADOWTRANSPARENCE(SDRATTR_SHADOW_FIRST+4)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_TWO_SIDED_LIGHTING(SDRATTR_3DSCENE_FIRST+3)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_1(SDRATTR_3DSCENE_FIRST+4)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_3(SDRATTR_3DSCENE_FIRST+15)
constexpr TypedWhichId< SdrPercentItem > SDRATTR_GLOW_TRANSPARENCY(SDRATTR_GLOW_FIRST+2)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_5(SDRATTR_3DSCENE_FIRST+8)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_5(SDRATTR_3DSCENE_FIRST+17)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWYDIST(SDRATTR_SHADOW_FIRST+3)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_7(SDRATTR_3DSCENE_FIRST+27)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_6(SDRATTR_3DSCENE_FIRST+26)
constexpr TypedWhichId< SdrTextFixedCellHeightItem > SDRATTR_TEXT_USEFIXEDCELLHEIGHT(SDRATTR_MISC_FIRST+23)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_6(SDRATTR_3DSCENE_FIRST+9)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_4(SDRATTR_3DSCENE_FIRST+7)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_7(SDRATTR_3DSCENE_FIRST+10)
constexpr TypedWhichId< Svx3DShadeModeItem > SDRATTR_3DSCENE_SHADE_MODE(SDRATTR_3DSCENE_FIRST+30)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_6(SDRATTR_3DSCENE_FIRST+18)
constexpr TypedWhichId< SfxUInt16Item > SDRATTR_3DSCENE_SHADOW_SLANT(SDRATTR_3DSCENE_FIRST+29)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_AMBIENTCOLOR(SDRATTR_3DSCENE_FIRST+12)
constexpr TypedWhichId< SfxUInt32Item > SDRATTR_3DSCENE_DISTANCE(SDRATTR_3DSCENE_FIRST+1)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_2(SDRATTR_3DSCENE_FIRST+14)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_GLOW_RADIUS(SDRATTR_GLOW_FIRST+0)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWBLUR(SDRATTR_SHADOW_FIRST+9)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_8(SDRATTR_3DSCENE_FIRST+11)
constexpr TypedWhichId< XColorItem > SDRATTR_GLOW_COLOR(SDRATTR_GLOW_FIRST+1)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SOFTEDGE_RADIUS(SDRATTR_SOFTEDGE_FIRST+0)
constexpr TypedWhichId< XColorItem > SDRATTR_SHADOWCOLOR(SDRATTR_SHADOW_FIRST+1)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_8(SDRATTR_3DSCENE_FIRST+28)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_4(SDRATTR_3DSCENE_FIRST+24)
constexpr TypedWhichId< SvxB3DVectorItem > SDRATTR_3DSCENE_LIGHTDIRECTION_5(SDRATTR_3DSCENE_FIRST+25)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_2(SDRATTR_3DSCENE_FIRST+5)
constexpr TypedWhichId< SvxRectangleAlignmentItem > SDRATTR_SHADOWALIGNMENT(SDRATTR_SHADOW_FIRST+10)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWSIZEY(SDRATTR_SHADOW_FIRST+8)
constexpr TypedWhichId< SvxColorItem > SDRATTR_3DSCENE_LIGHTCOLOR_3(SDRATTR_3DSCENE_FIRST+6)
constexpr TypedWhichId< SdrMetricItem > SDRATTR_SHADOWXDIST(SDRATTR_SHADOW_FIRST+2)
constexpr TypedWhichId< SfxBoolItem > SDRATTR_3DSCENE_LIGHTON_7(SDRATTR_3DSCENE_FIRST+19)
constexpr TypedWhichId< SdrOnOffItem > SDRATTR_TEXT_CONTOURFRAME(SDRATTR_MISC_FIRST+21)
css::drawing::Direction3D aDirection
constexpr TypedWhichId< XFillBmpPosOffsetYItem > XATTR_FILLBMP_POSOFFSETY(XATTR_FILL_FIRST+18)
constexpr TypedWhichId< XGradientStepCountItem > XATTR_GRADIENTSTEPCOUNT(XATTR_FILL_FIRST+6)
constexpr TypedWhichId< XFillBmpPosItem > XATTR_FILLBMP_POS(XATTR_FILL_FIRST+8)
constexpr TypedWhichId< XFillUseSlideBackgroundItem > XATTR_FILLUSESLIDEBACKGROUND(XATTR_FILL_FIRST+20)
constexpr TypedWhichId< XLineJointItem > XATTR_LINEJOINT(XATTR_LINE_FIRST+11)
constexpr TypedWhichId< XFillColorItem > XATTR_FILLCOLOR(XATTR_FILL_FIRST+1)
constexpr TypedWhichId< XFillBmpTileOffsetXItem > XATTR_FILLBMP_TILEOFFSETX(XATTR_FILL_FIRST+14)
constexpr TypedWhichId< XFillTransparenceItem > XATTR_FILLTRANSPARENCE(XATTR_FILL_FIRST+5)
constexpr TypedWhichId< XFormTextStyleItem > XATTR_FORMTXTSTYLE(XATTR_TEXT_FIRST)
constexpr TypedWhichId< XLineColorItem > XATTR_LINECOLOR(XATTR_LINE_FIRST+3)
constexpr TypedWhichId< XLineStartWidthItem > XATTR_LINESTARTWIDTH(XATTR_LINE_FIRST+6)
constexpr TypedWhichId< SfxMetricItem > XATTR_FILLBMP_SIZEX(XATTR_FILL_FIRST+9)
constexpr TypedWhichId< XLineCapItem > XATTR_LINECAP(XATTR_LINE_FIRST+12)
constexpr TypedWhichId< XFormTextHideFormItem > XATTR_FORMTXTHIDEFORM(XATTR_TEXT_FIRST+10)
constexpr TypedWhichId< XLineDashItem > XATTR_LINEDASH(XATTR_LINE_FIRST+1)
constexpr TypedWhichId< XLineWidthItem > XATTR_LINEWIDTH(XATTR_LINE_FIRST+2)
constexpr TypedWhichId< XLineEndItem > XATTR_LINEEND(XATTR_LINE_FIRST+5)
constexpr TypedWhichId< XFillBmpPosOffsetXItem > XATTR_FILLBMP_POSOFFSETX(XATTR_FILL_FIRST+17)
constexpr TypedWhichId< XFillBmpTileOffsetYItem > XATTR_FILLBMP_TILEOFFSETY(XATTR_FILL_FIRST+15)
constexpr TypedWhichId< XLineStartItem > XATTR_LINESTART(XATTR_LINE_FIRST+4)
constexpr TypedWhichId< XFillBmpSizeYItem > XATTR_FILLBMP_SIZEY(XATTR_FILL_FIRST+10)
constexpr TypedWhichId< XFillBmpStretchItem > XATTR_FILLBMP_STRETCH(XATTR_FILL_FIRST+16)
constexpr TypedWhichId< XLineEndCenterItem > XATTR_LINEENDCENTER(XATTR_LINE_FIRST+9)
constexpr TypedWhichId< XFillHatchItem > XATTR_FILLHATCH(XATTR_FILL_FIRST+3)
constexpr TypedWhichId< XFillBmpSizeLogItem > XATTR_FILLBMP_SIZELOG(XATTR_FILL_FIRST+13)
constexpr TypedWhichId< XLineStartCenterItem > XATTR_LINESTARTCENTER(XATTR_LINE_FIRST+8)
constexpr TypedWhichId< XFillBmpTileItem > XATTR_FILLBMP_TILE(XATTR_FILL_FIRST+7)
constexpr TypedWhichId< XFillBitmapItem > XATTR_FILLBITMAP(XATTR_FILL_FIRST+4)
constexpr TypedWhichId< XFillBackgroundItem > XATTR_FILLBACKGROUND(XATTR_FILL_FIRST+19)
constexpr TypedWhichId< XFillFloatTransparenceItem > XATTR_FILLFLOATTRANSPARENCE(XATTR_FILL_FIRST+11)
constexpr TypedWhichId< XLineStyleItem > XATTR_LINESTYLE(XATTR_LINE_FIRST)
constexpr TypedWhichId< XFillStyleItem > XATTR_FILLSTYLE(XATTR_FILL_FIRST)
constexpr TypedWhichId< XFillGradientItem > XATTR_FILLGRADIENT(XATTR_FILL_FIRST+2)
constexpr TypedWhichId< XLineEndWidthItem > XATTR_LINEENDWIDTH(XATTR_LINE_FIRST+7)
constexpr TypedWhichId< XLineTransparenceItem > XATTR_LINETRANSPARENCE(XATTR_LINE_FIRST+10)