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>
57#include <svx/svdotext.hxx>
59#include <svx/xbtmpit.hxx>
60#include <svl/itempool.hxx>
61#include <vcl/svapp.hxx>
62#include <vcl/GraphicLoader.hxx>
64#include <svx/svx3ditems.hxx>
65#include <com/sun/star/drawing/ProjectionMode.hpp>
66#include <com/sun/star/drawing/ShadeMode.hpp>
68#include <svx/rectenum.hxx>
69#include <svx/sdtfchim.hxx>
70#include <svx/svdoutl.hxx>
71#include <svx/svdmodel.hxx>
72#include <svx/xflbmsli.hxx>
73#include <editeng/editstat.hxx>
74#include <osl/diagnose.h>
86#include <com/sun/star/drawing/LineCap.hpp>
87
88using namespace com::sun::star;
89
90namespace drawinglayer
91{
92 namespace
93 {
94 attribute::GradientStyle XGradientStyleToGradientStyle(css::awt::GradientStyle eStyle)
95 {
96 switch(eStyle)
97 {
98 case css::awt::GradientStyle_LINEAR :
99 {
101 }
102 case css::awt::GradientStyle_AXIAL :
103 {
105 }
106 case css::awt::GradientStyle_RADIAL :
107 {
109 }
110 case css::awt::GradientStyle_ELLIPTICAL :
111 {
113 }
114 case css::awt::GradientStyle_SQUARE :
115 {
117 }
118 default :
119 {
120 return attribute::GradientStyle::Rect; // css::awt::GradientStyle_RECT
121 }
122 }
123 }
124
125 attribute::HatchStyle XHatchStyleToHatchStyle(css::drawing::HatchStyle eStyle)
126 {
127 switch(eStyle)
128 {
129 case css::drawing::HatchStyle_SINGLE :
130 {
132 }
133 case css::drawing::HatchStyle_DOUBLE :
134 {
136 }
137 default :
138 {
139 return attribute::HatchStyle::Triple; // css::drawing::HatchStyle_TRIPLE
140 }
141 }
142 }
143
144 basegfx::B2DLineJoin LineJointToB2DLineJoin(css::drawing::LineJoint eLineJoint)
145 {
146 switch(eLineJoint)
147 {
148 case css::drawing::LineJoint_BEVEL :
149 {
151 }
152 case css::drawing::LineJoint_MIDDLE :
153 case css::drawing::LineJoint_MITER :
154 {
156 }
157 case css::drawing::LineJoint_ROUND :
158 {
160 }
161 default : // css::drawing::LineJoint_NONE
162 {
164 }
165 }
166 }
167
168 basegfx::B2DVector RectPointToB2DVector(RectPoint eRectPoint)
169 {
170 basegfx::B2DVector aRetval(0.0, 0.0);
171
172 // position changes X
173 switch(eRectPoint)
174 {
176 {
177 aRetval.setX(-1.0);
178 break;
179 }
180
182 {
183 aRetval.setX(1.0);
184 break;
185 }
186
187 default :
188 {
189 break;
190 }
191 }
192
193 // position changes Y
194 switch(eRectPoint)
195 {
197 {
198 aRetval.setY(-1.0);
199 break;
200 }
201
203 {
204 aRetval.setY(1.0);
205 break;
206 }
207
208 default :
209 {
210 break;
211 }
212 }
213
214 return aRetval;
215 }
216
217 attribute::SdrGlowAttribute createNewSdrGlowAttribute(const SfxItemSet& rSet)
218 {
219 sal_Int32 nRadius = rSet.Get(SDRATTR_GLOW_RADIUS).GetValue();
220 if (!nRadius)
221 return attribute::SdrGlowAttribute();
222 Color aColor(rSet.Get(SDRATTR_GLOW_COLOR).GetColorValue());
223 sal_uInt16 nTransparency(rSet.Get(SDRATTR_GLOW_TRANSPARENCY).GetValue());
224 if (nTransparency)
225 aColor.SetAlpha(255 - std::round(nTransparency / 100.0 * 255.0));
226
227 attribute::SdrGlowAttribute glowAttr{ nRadius, aColor };
228 return glowAttr;
229 }
230
231 sal_Int32 getSoftEdgeRadius(const SfxItemSet& rSet)
232 {
233 return rSet.Get(SDRATTR_SOFTEDGE_RADIUS).GetValue();
234 }
235 } // end of anonymous namespace
236} // end of namespace drawinglayer
237
238
240{
242 {
243 const css::drawing::LineStyle eStyle(rSet.Get(XATTR_LINESTYLE).GetValue());
244
245 if(drawing::LineStyle_NONE != eStyle)
246 {
247 sal_uInt16 nTransparence(rSet.Get(XATTR_LINETRANSPARENCE).GetValue());
248
249 if(nTransparence > 100)
250 {
251 nTransparence = 100;
252 }
253
254 if(100 != nTransparence)
255 {
256 const sal_uInt32 nWidth(rSet.Get(XATTR_LINEWIDTH).GetValue());
257 const Color aColor(rSet.Get(XATTR_LINECOLOR).GetColorValue());
258 const css::drawing::LineJoint eJoint(rSet.Get(XATTR_LINEJOINT).GetValue());
259 const css::drawing::LineCap eCap(rSet.Get(XATTR_LINECAP).GetValue());
260 ::std::vector< double > aDotDashArray;
261 double fFullDotDashLen(0.0);
262
263 if(drawing::LineStyle_DASH == eStyle)
264 {
265 const XDash& rDash = rSet.Get(XATTR_LINEDASH).GetDashValue();
266
267 if(rDash.GetDots() || rDash.GetDashes())
268 {
269 fFullDotDashLen = rDash.CreateDotDashArray(aDotDashArray, static_cast<double>(nWidth));
270 }
271 }
272
274 LineJointToB2DLineJoin(eJoint),
275 static_cast<double>(nWidth),
276 static_cast<double>(nTransparence) * 0.01,
277 aColor.getBColor(),
278 eCap,
279 std::move(aDotDashArray),
280 fFullDotDashLen);
281 }
282 }
283
285 }
286
288 const SfxItemSet& rSet,
289 double fWidth)
290 {
291 const sal_Int32 nTempStartWidth(rSet.Get(XATTR_LINESTARTWIDTH).GetValue());
292 const sal_Int32 nTempEndWidth(rSet.Get(XATTR_LINEENDWIDTH).GetValue());
293 basegfx::B2DPolyPolygon aStartPolyPolygon;
294 basegfx::B2DPolyPolygon aEndPolyPolygon;
295 double fStartWidth(0.0);
296 double fEndWidth(0.0);
297 bool bStartActive(false);
298 bool bEndActive(false);
299 bool bStartCentered(true);
300 bool bEndCentered(true);
301
302 if(nTempStartWidth)
303 {
304 if(nTempStartWidth < 0)
305 {
306 fStartWidth = (static_cast<double>(-nTempStartWidth) * fWidth) * 0.01;
307 }
308 else
309 {
310 fStartWidth = static_cast<double>(nTempStartWidth);
311 }
312
313 if(0.0 != fStartWidth)
314 {
315 aStartPolyPolygon = rSet.Get(XATTR_LINESTART).GetLineStartValue();
316
317 if(aStartPolyPolygon.count() && aStartPolyPolygon.getB2DPolygon(0).count())
318 {
319 bStartActive = true;
320 bStartCentered = rSet.Get(XATTR_LINESTARTCENTER).GetValue();
321 }
322 }
323 }
324
325 if(nTempEndWidth)
326 {
327 if(nTempEndWidth < 0)
328 {
329 fEndWidth = (static_cast<double>(-nTempEndWidth) * fWidth) * 0.01;
330 }
331 else
332 {
333 fEndWidth = static_cast<double>(nTempEndWidth);
334 }
335
336 if(0.0 != fEndWidth)
337 {
338 aEndPolyPolygon = rSet.Get(XATTR_LINEEND).GetLineEndValue();
339
340 if(aEndPolyPolygon.count() && aEndPolyPolygon.getB2DPolygon(0).count())
341 {
342 bEndActive = true;
343 bEndCentered = rSet.Get(XATTR_LINEENDCENTER).GetValue();
344 }
345 }
346 }
347
348 if(bStartActive || bEndActive)
349 {
351 aStartPolyPolygon, aEndPolyPolygon, fStartWidth, fEndWidth,
352 bStartActive, bEndActive, bStartCentered, bEndCentered);
353 }
354
356 }
357
359 {
360 const bool bShadow(rSet.Get(SDRATTR_SHADOW).GetValue());
361
362 if(bShadow)
363 {
364 sal_uInt16 nTransparence(rSet.Get(SDRATTR_SHADOWTRANSPARENCE).GetValue());
365
366 if(nTransparence > 100)
367 {
368 nTransparence = 100;
369 }
370
371 if(nTransparence)
372 {
373 sal_uInt16 nFillTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
374
375 if(nFillTransparence > 100)
376 {
377 nFillTransparence = 100;
378 }
379
380 if(nTransparence == nFillTransparence)
381 {
382 // shadow does not really have an own transparence, but the application
383 // sets the shadow transparence equal to the object transparence for
384 // convenience. This is not useful for primitive creation, so take
385 // this as no shadow transparence
386 nTransparence = 0;
387 }
388 }
389
390 if(100 != nTransparence)
391 {
392 const basegfx::B2DVector aOffset(
393 static_cast<double>(rSet.Get(SDRATTR_SHADOWXDIST).GetValue()),
394 static_cast<double>(rSet.Get(SDRATTR_SHADOWYDIST).GetValue()));
395
396 const basegfx::B2DVector aSize(
397 static_cast<double>(rSet.Get(SDRATTR_SHADOWSIZEX).GetValue()),
398 static_cast<double>(rSet.Get(SDRATTR_SHADOWSIZEY).GetValue()));
399
400 const Color aColor(rSet.Get(SDRATTR_SHADOWCOLOR).GetColorValue());
401
402 sal_Int32 nBlur(rSet.Get(SDRATTR_SHADOWBLUR).GetValue());
403
404 return attribute::SdrShadowAttribute(aOffset, aSize, static_cast<double>(nTransparence) * 0.01,nBlur, aColor.getBColor());
405 }
406 }
407
409 }
410
412 {
413 const drawing::FillStyle eStyle(rSet.Get(XATTR_FILLSTYLE).GetValue());
414
415 sal_uInt16 nTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
416
417 if(nTransparence > 100)
418 {
419 nTransparence = 100;
420 }
421
422 if(drawing::FillStyle_NONE == eStyle)
423 {
425 const bool bSlideBackgroundFill(aBckItem.GetValue());
426
427 if(bSlideBackgroundFill)
428 {
429 // we have SlideBackgroundFill mode, create a
430 // SdrFillAttribute accordingly
431 return attribute::SdrFillAttribute(true);
432 }
433 }
434
435 if(drawing::FillStyle_NONE != eStyle)
436 {
437 if(100 != nTransparence)
438 {
439 // need to check XFillFloatTransparence, object fill may still be completely transparent
440 const XFillFloatTransparenceItem* pGradientItem;
441
442 if((pGradientItem = rSet.GetItemIfSet(XATTR_FILLFLOATTRANSPARENCE, true))
443 && pGradientItem->IsEnabled())
444 {
445 const XGradient& rGradient = pGradientItem->GetGradientValue();
446 const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
447 const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
448 const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
449
450 if(bCompletelyTransparent)
451 {
452 nTransparence = 100;
453 }
454 }
455 }
456
457 if(100 != nTransparence)
458 {
459 const Color aColor(rSet.Get(XATTR_FILLCOLOR).GetColorValue());
463
464 switch(eStyle)
465 {
466 default:
467 {
468 // nothing to do, color is defined
469 break;
470 }
471 case drawing::FillStyle_GRADIENT :
472 {
473 XGradient aXGradient(rSet.Get(XATTR_FILLGRADIENT).GetGradientValue());
474
475 const Color aStartColor(aXGradient.GetStartColor());
476 const sal_uInt16 nStartIntens(aXGradient.GetStartIntens());
477 basegfx::BColor aStart(aStartColor.getBColor());
478
479 if(nStartIntens != 100)
480 {
481 const basegfx::BColor aBlack;
482 aStart = interpolate(aBlack, aStart, static_cast<double>(nStartIntens) * 0.01);
483 }
484
485 const Color aEndColor(aXGradient.GetEndColor());
486 const sal_uInt16 nEndIntens(aXGradient.GetEndIntens());
487 basegfx::BColor aEnd(aEndColor.getBColor());
488
489 if(nEndIntens != 100)
490 {
491 const basegfx::BColor aBlack;
492 aEnd = interpolate(aBlack, aEnd, static_cast<double>(nEndIntens) * 0.01);
493 }
494
496 XGradientStyleToGradientStyle(aXGradient.GetGradientStyle()),
497 static_cast<double>(aXGradient.GetBorder()) * 0.01,
498 static_cast<double>(aXGradient.GetXOffset()) * 0.01,
499 static_cast<double>(aXGradient.GetYOffset()) * 0.01,
500 toRadians(aXGradient.GetAngle()),
501 aStart,
502 aEnd,
503 rSet.Get(XATTR_GRADIENTSTEPCOUNT).GetValue());
504
505 break;
506 }
507 case drawing::FillStyle_HATCH :
508 {
509 const XHatch& rHatch(rSet.Get(XATTR_FILLHATCH).GetHatchValue());
510 const Color aColorB(rHatch.GetColor());
511
513 XHatchStyleToHatchStyle(rHatch.GetHatchStyle()),
514 static_cast<double>(rHatch.GetDistance()),
515 toRadians(rHatch.GetAngle()),
516 aColorB.getBColor(),
517 3, // same default as VCL, a minimum of three discrete units (pixels) offset
518 rSet.Get(XATTR_FILLBACKGROUND).GetValue());
519
520 break;
521 }
522 case drawing::FillStyle_BITMAP :
523 {
525 break;
526 }
527 }
528
530 static_cast<double>(nTransparence) * 0.01,
531 aColor.getBColor(),
532 aGradient,
533 aHatch,
534 aFillGraphic);
535 }
536 }
537
538 if(nTransparence == 100)
539 {
544 1,
545 basegfx::BColor( 0, 0, 0 ),
546 aGradient,
547 aHatch,
548 aFillGraphic);
549 }
550
552 }
553
554 // #i101508# Support handing over given text-to-border distances
556 const SfxItemSet& rSet,
557 const SdrText& rText,
558 const sal_Int32* pLeft,
559 const sal_Int32* pUpper,
560 const sal_Int32* pRight,
561 const sal_Int32* pLower)
562 {
563 const SdrTextObj& rTextObj = rText.GetObject();
564
565 // Save chaining attributes
566 bool bChainable = rTextObj.IsChainable();
567
568
569 if(rText.GetOutlinerParaObject())
570 {
571 // added TextEdit text suppression
572 bool bInEditMode(false);
573
574 if(rText.GetObject().getTextCount() > 1)
575 {
576 bInEditMode = rTextObj.IsInEditMode() && rText.GetObject().getActiveText() == &rText;
577 }
578 else
579 {
580 bInEditMode = rTextObj.IsInEditMode();
581 }
582
583 OutlinerParaObject aOutlinerParaObject(*rText.GetOutlinerParaObject());
584
585 if(bInEditMode)
586 {
588
589 if(pTempObj)
590 {
591 aOutlinerParaObject = *pTempObj;
592 }
593 else
594 {
595 // #i100537#
596 // CreateEditOutlinerParaObject() returning no object does not mean that
597 // text edit mode is not active. Do not reset the flag here
598 // bInEditMode = false;
599 }
600 }
601
602 const SdrTextAniKind eAniKind(rTextObj.GetTextAniKind());
603
604 // #i107346#
605 const SdrOutliner& rDrawTextOutliner(rText.GetObject().getSdrModelFromSdrObject().GetDrawOutliner(&rTextObj));
606 const bool bWrongSpell(rDrawTextOutliner.GetControlWord() & EEControlBits::ONLINESPELLING);
607
609 rText,
610 aOutlinerParaObject,
611 rSet.Get(XATTR_FORMTXTSTYLE).GetValue(),
612 pLeft ? *pLeft : rTextObj.GetTextLeftDistance(),
613 pUpper ? *pUpper : rTextObj.GetTextUpperDistance(),
614 pRight ? *pRight : rTextObj.GetTextRightDistance(),
615 pLower ? *pLower : rTextObj.GetTextLowerDistance(),
617 rTextObj.GetTextVerticalAdjust(rSet),
619 rTextObj.IsFitToSize(),
620 rTextObj.IsAutoFit(),
621 rSet.Get(XATTR_FORMTXTHIDEFORM).GetValue(),
622 SdrTextAniKind::Blink == eAniKind,
623 SdrTextAniKind::Scroll == eAniKind || SdrTextAniKind::Alternate == eAniKind || SdrTextAniKind::Slide == eAniKind,
624 bInEditMode,
626 bWrongSpell,
627 bChainable);
628 }
629
631 }
632
634 {
635 const XFillFloatTransparenceItem* pGradientItem;
636
637 if((pGradientItem = rSet.GetItemIfSet(XATTR_FILLFLOATTRANSPARENCE))
638 && pGradientItem->IsEnabled())
639 {
640 // test if float transparence is completely transparent
641 const XGradient& rGradient = pGradientItem->GetGradientValue();
642 const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
643 const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
644 const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
645 const bool bNotTransparent(0x00 == nStartLuminance && 0x00 == nEndLuminance);
646
647 // create nothing when completely transparent: This case is already checked for the
648 // normal fill attributes, XFILL_NONE will be used.
649 // create nothing when not transparent: use normal fill, no need t create a FillGradientAttribute.
650 // Both cases are optimizations, always creating FillGradientAttribute will work, too
651 if(!bNotTransparent && !bCompletelyTransparent)
652 {
653 const double fStartLum(nStartLuminance / 255.0);
654 const double fEndLum(nEndLuminance / 255.0);
655
657 XGradientStyleToGradientStyle(rGradient.GetGradientStyle()),
658 static_cast<double>(rGradient.GetBorder()) * 0.01,
659 static_cast<double>(rGradient.GetXOffset()) * 0.01,
660 static_cast<double>(rGradient.GetYOffset()) * 0.01,
661 toRadians(rGradient.GetAngle()),
662 basegfx::BColor(fStartLum, fStartLum, fStartLum),
663 basegfx::BColor(fEndLum, fEndLum, fEndLum));
664 }
665 }
666
668 }
669
671 {
672 Graphic aGraphic(rSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic());
673
674 OUString aOriginURL = aGraphic.getOriginURL();
675 if (aGraphic.GetType() == GraphicType::Default && !aOriginURL.isEmpty())
676 {
677 aGraphic = vcl::graphic::loadFromURL(aGraphic.getOriginURL());
678 aGraphic.setOriginURL(aOriginURL);
679 }
680
681 if(GraphicType::Bitmap != aGraphic.GetType() && GraphicType::GdiMetafile != aGraphic.GetType())
682 {
683 // no content if not bitmap or metafile
684 OSL_ENSURE(false, "No fill graphic in SfxItemSet (!)");
686 }
687
688 Size aPrefSize(aGraphic.GetPrefSize());
689
690 if(!aPrefSize.Width() || !aPrefSize.Height())
691 {
692 // if there is no logical size, create a size from pixel size and set MapMode accordingly
693 if(GraphicType::Bitmap == aGraphic.GetType())
694 {
695 aGraphic.SetPrefSize(aGraphic.GetBitmapEx().GetSizePixel());
696 aGraphic.SetPrefMapMode(MapMode(MapUnit::MapPixel));
697 aPrefSize = aGraphic.GetPrefSize();
698 }
699 }
700
701 if(!aPrefSize.Width() || !aPrefSize.Height())
702 {
703 // no content if no size
704 OSL_ENSURE(false, "Graphic has no size in SfxItemSet (!)");
706 }
707
708 // convert size and MapMode to destination logical size and MapMode
709 const MapUnit aDestinationMapUnit(rSet.GetPool()->GetMetric(0));
710 basegfx::B2DVector aGraphicLogicSize(aGraphic.GetPrefSize().Width(), aGraphic.GetPrefSize().Height());
711
712 if (aGraphic.GetPrefMapMode().GetMapUnit() != aDestinationMapUnit)
713 {
714 // #i100360# for MapUnit::MapPixel, LogicToLogic will not work properly,
715 // so fallback to Application::GetDefaultDevice()
716 Size aNewSize(0, 0);
717
718 if(MapUnit::MapPixel == aGraphic.GetPrefMapMode().GetMapUnit())
719 {
721 aGraphic.GetPrefSize(),
722 MapMode(aDestinationMapUnit));
723 }
724 else
725 {
727 aGraphic.GetPrefSize(),
728 aGraphic.GetPrefMapMode(),
729 MapMode(aDestinationMapUnit));
730 }
731
732 // #i124002# do not set new size using SetPrefSize at the graphic, this will lead to problems.
733 // Instead, adapt the GraphicLogicSize which will be used for further decompositions
734 aGraphicLogicSize = basegfx::B2DVector(aNewSize.Width(), aNewSize.Height());
735 }
736
737 // get size
738 const basegfx::B2DVector aSize(
739 static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEX).GetValue()),
740 static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEY).GetValue()));
741 const basegfx::B2DVector aOffset(
742 static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETX).GetValue()),
743 static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETY).GetValue()));
744 const basegfx::B2DVector aOffsetPosition(
745 static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETX).GetValue()),
746 static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETY).GetValue()));
747
749 aGraphic,
750 aGraphicLogicSize,
751 aSize,
752 aOffset,
753 aOffsetPosition,
754 RectPointToB2DVector(rSet.GetItem<XFillBmpPosItem>(XATTR_FILLBMP_POS)->GetValue()),
755 rSet.Get(XATTR_FILLBMP_TILE).GetValue(),
756 rSet.Get(XATTR_FILLBMP_STRETCH).GetValue(),
757 rSet.Get(XATTR_FILLBMP_SIZELOG).GetValue());
758 }
759
761 const SfxItemSet& rSet,
762 const SdrText* pText,
763 bool bSuppressText)
764 {
766
767 // #i98072# added option to suppress text
768 // look for text first
769 if(!bSuppressText && pText)
770 {
771 aText = createNewSdrTextAttribute(rSet, *pText);
772 }
773
774 // try shadow
776 const attribute::SdrGlowAttribute aGlow(createNewSdrGlowAttribute(rSet));
777 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
778
779 return attribute::SdrEffectsTextAttribute(aShadow, aText, aGlow, nSoftEdgeRadius);
780 }
781
783 const SfxItemSet& rSet,
784 const SdrText* pText)
785 {
789 bool bFontworkHideContour(false);
790
791 // look for text first
792 if(pText)
793 {
794 aText = createNewSdrTextAttribute(rSet, *pText);
795
796 // when object has text and text is fontwork and hide contour is set for fontwork, force
797 // line and fill style to empty
798 if(!aText.isDefault()
800 && aText.isHideContour())
801 {
802 bFontworkHideContour = true;
803 }
804 }
805
806 // try line style
807 if(!bFontworkHideContour)
808 {
810
811 if(!aLine.isDefault())
812 {
813 // try LineStartEnd
814 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
815 }
816 }
817
818 if(!aLine.isDefault() || !aText.isDefault())
819 {
820 // try shadow
822 const attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet);
823 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
824
825 return attribute::SdrLineEffectsTextAttribute(aLine, aLineStartEnd, aShadow, aText,
826 aGlow, nSoftEdgeRadius);
827 }
828
830 }
831
833 const SfxItemSet& rSet,
834 const SdrText* pText,
835 bool bHasContent)
836 {
840 attribute::FillGradientAttribute aFillFloatTransGradient;
842 bool bFontworkHideContour(false);
843
844 // look for text first
845 if(pText)
846 {
847 aText = createNewSdrTextAttribute(rSet, *pText);
848
849 // when object has text and text is fontwork and hide contour is set for fontwork, force
850 // line and fill style to empty
851 if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
852 {
853 bFontworkHideContour = true;
854 }
855 }
856
857 if(!bFontworkHideContour)
858 {
859 // try line style
861
862 if(!aLine.isDefault())
863 {
864 // try LineStartEnd
865 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
866 }
867
868 // try fill style
870
871 if(!aFill.isDefault())
872 {
873 // try fillfloattransparence
874 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
875 }
876 }
877
878 // bHasContent is used from OLE and graphic objects. Normally a possible shadow
879 // depends on line, fill or text to be set, but for these objects it is possible
880 // to have none of these, but still content which needs to have a shadow (if set),
881 // so shadow needs to be tried
882 if(bHasContent || !aLine.isDefault() || !aFill.isDefault() || !aText.isDefault())
883 {
884 // try shadow
886
887 // glow
888 const attribute::SdrGlowAttribute aGlow = createNewSdrGlowAttribute(rSet);
889
890 const sal_Int32 nSoftEdgeRadius(getSoftEdgeRadius(rSet));
891
892 return attribute::SdrLineFillEffectsTextAttribute(aLine, aFill, aLineStartEnd,
893 aShadow, aFillFloatTransGradient,
894 aText, aGlow, nSoftEdgeRadius);
895 }
896
898 }
899
901 {
905 attribute::FillGradientAttribute aFillFloatTransGradient;
906
907 // try line style
909
910 if(!aLine.isDefault())
911 {
912 // try LineStartEnd
913 aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
914 }
915
916 // try fill style
917 if(!bSuppressFill)
918 {
920
921 if(!aFill.isDefault())
922 {
923 // try fillfloattransparence
924 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
925 }
926 }
927
928 if(!aLine.isDefault() || !aFill.isDefault())
929 {
930 // try shadow
932
934 aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient);
935 }
936
938 }
939
941 {
942 // get perspective
943 css::drawing::ProjectionMode aProjectionMode(css::drawing::ProjectionMode_PARALLEL);
944 const sal_uInt16 nProjectionValue(rSet.Get(SDRATTR_3DSCENE_PERSPECTIVE).GetValue());
945
946 if(1 == nProjectionValue)
947 {
948 aProjectionMode = css::drawing::ProjectionMode_PERSPECTIVE;
949 }
950
951 // get distance
952 const double fDistance(rSet.Get(SDRATTR_3DSCENE_DISTANCE).GetValue());
953
954 // get shadow slant
955 const double fShadowSlant(
957
958 // get shade mode
959 css::drawing::ShadeMode aShadeMode(css::drawing::ShadeMode_FLAT);
960 const sal_uInt16 nShadeValue(rSet.Get(SDRATTR_3DSCENE_SHADE_MODE).GetValue());
961
962 if(1 == nShadeValue)
963 {
964 aShadeMode = css::drawing::ShadeMode_PHONG;
965 }
966 else if(2 == nShadeValue)
967 {
968 aShadeMode = css::drawing::ShadeMode_SMOOTH;
969 }
970 else if(3 == nShadeValue)
971 {
972 aShadeMode = css::drawing::ShadeMode_DRAFT;
973 }
974
975 // get two sided lighting
976 const bool bTwoSidedLighting(rSet.Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING).GetValue());
977
978 return attribute::SdrSceneAttribute(fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting);
979 }
980
982 {
983 // extract lights from given SfxItemSet (from scene)
984 ::std::vector< attribute::Sdr3DLightAttribute > aLightVector;
985
986 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_1).GetValue())
987 {
988 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1).GetValue().getBColor());
990 aLightVector.emplace_back(aColor, aDirection, true);
991 }
992
993 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_2).GetValue())
994 {
995 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2).GetValue().getBColor());
997 aLightVector.emplace_back(aColor, aDirection, false);
998 }
999
1000 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_3).GetValue())
1001 {
1002 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3).GetValue().getBColor());
1004 aLightVector.emplace_back(aColor, aDirection, false);
1005 }
1006
1007 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_4).GetValue())
1008 {
1009 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4).GetValue().getBColor());
1011 aLightVector.emplace_back(aColor, aDirection, false);
1012 }
1013
1014 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_5).GetValue())
1015 {
1016 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5).GetValue().getBColor());
1018 aLightVector.emplace_back(aColor, aDirection, false);
1019 }
1020
1021 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_6).GetValue())
1022 {
1023 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6).GetValue().getBColor());
1025 aLightVector.emplace_back(aColor, aDirection, false);
1026 }
1027
1028 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_7).GetValue())
1029 {
1030 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7).GetValue().getBColor());
1032 aLightVector.emplace_back(aColor, aDirection, false);
1033 }
1034
1035 if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_8).GetValue())
1036 {
1037 const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8).GetValue().getBColor());
1039 aLightVector.emplace_back(aColor, aDirection, false);
1040 }
1041
1042 // get ambient color
1043 const Color aAmbientValue(rSet.Get(SDRATTR_3DSCENE_AMBIENTCOLOR).GetValue());
1044 const basegfx::BColor aAmbientLight(aAmbientValue.getBColor());
1045
1046 return attribute::SdrLightingAttribute(aAmbientLight, std::move(aLightVector));
1047 }
1048
1049 void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange& rObjectRange, double& rfCornerRadiusX, double& rfCornerRadiusY)
1050 {
1051 rfCornerRadiusX = rfCornerRadiusY = static_cast<double>(nRadius);
1052
1053 if(0.0 != rfCornerRadiusX)
1054 {
1055 const double fHalfObjectWidth(rObjectRange.getWidth() * 0.5);
1056
1057 if(0.0 != fHalfObjectWidth)
1058 {
1059 if(rfCornerRadiusX < 0.0)
1060 {
1061 rfCornerRadiusX = 0.0;
1062 }
1063
1064 if(rfCornerRadiusX > fHalfObjectWidth)
1065 {
1066 rfCornerRadiusX = fHalfObjectWidth;
1067 }
1068
1069 rfCornerRadiusX /= fHalfObjectWidth;
1070 }
1071 else
1072 {
1073 rfCornerRadiusX = 0.0;
1074 }
1075 }
1076
1077 if(0.0 == rfCornerRadiusY)
1078 return;
1079
1080 const double fHalfObjectHeight(rObjectRange.getHeight() * 0.5);
1081
1082 if(0.0 != fHalfObjectHeight)
1083 {
1084 if(rfCornerRadiusY < 0.0)
1085 {
1086 rfCornerRadiusY = 0.0;
1087 }
1088
1089 if(rfCornerRadiusY > fHalfObjectHeight)
1090 {
1091 rfCornerRadiusY = fHalfObjectHeight;
1092 }
1093
1094 rfCornerRadiusY /= fHalfObjectHeight;
1095 }
1096 else
1097 {
1098 rfCornerRadiusY = 0.0;
1099 }
1100 }
1101
1102 // #i101508# Support handing over given text-to-border distances
1104 const SfxItemSet& rSet,
1105 const SdrText* pText,
1106 const sal_Int32* pLeft,
1107 const sal_Int32* pUpper,
1108 const sal_Int32* pRight,
1109 const sal_Int32* pLower)
1110 {
1112 attribute::FillGradientAttribute aFillFloatTransGradient;
1114 bool bFontworkHideContour(false);
1115
1116 // look for text first
1117 if(pText)
1118 {
1119 aText = createNewSdrTextAttribute(rSet, *pText, pLeft, pUpper, pRight, pLower);
1120
1121 // when object has text and text is fontwork and hide contour is set for fontwork, force
1122 // fill style to empty
1123 if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
1124 {
1125 bFontworkHideContour = true;
1126 }
1127 }
1128
1129 if(!bFontworkHideContour)
1130 {
1131 // try fill style
1133
1134 if(!aFill.isDefault())
1135 {
1136 // try fillfloattransparence
1137 aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
1138 }
1139 }
1140
1141 if(!aFill.isDefault() || !aText.isDefault())
1142 {
1143 return attribute::SdrFillTextAttribute(aFill, aFillFloatTransGradient, aText);
1144 }
1145
1147 }
1148
1149} // end of namespace
1150
1151/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static OutputDevice * GetDefaultDevice()
const Size & GetSizePixel() const
sal_uInt8 GetLuminance() 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:647
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:289
tools::Long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1766
bool IsChainable() const
Definition: svdotext.cxx:1955
SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:345
bool IsAutoFit() const
returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false!
Definition: svdotext.cxx:1867
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled....
Definition: svdotext.cxx:1872
bool IsInEditMode() const
Definition: svdotext.hxx:312
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2079
tools::Long GetTextLeftDistance() const
Left inner spacing to borders
Definition: svdotext.cxx:1751
std::optional< OutlinerParaObject > CreateEditOutlinerParaObject() const
Definition: svdotext.cxx:856
tools::Long GetTextRightDistance() const
Right inner spacing to borders
Definition: svdotext.cxx:1756
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2103
SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:377
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1771
tools::Long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1761
OutlinerParaObject * GetOutlinerParaObject()
Definition: svdtext.cxx:88
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 XGradient & GetGradientValue() const
Definition: xattr.cxx:2300
Item to enable slide background for filled objects.
const Color & GetEndColor() const
Definition: xgrad.hxx:70
sal_uInt16 GetYOffset() const
Definition: xgrad.hxx:74
sal_uInt16 GetStartIntens() const
Definition: xgrad.hxx:75
css::awt::GradientStyle GetGradientStyle() const
Definition: xgrad.hxx:68
const Color & GetStartColor() const
Definition: xgrad.hxx:69
sal_uInt16 GetBorder() const
Definition: xgrad.hxx:72
sal_uInt16 GetEndIntens() const
Definition: xgrad.hxx:76
Degree10 GetAngle() const
Definition: xgrad.hxx:71
sal_uInt16 GetXOffset() const
Definition: xgrad.hxx:73
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
TYPE getWidth() const
TYPE getHeight() const
const SdrFormTextAttribute & getSdrFormTextAttribute() const
double toRadians(D x)
MapUnit
constexpr double deg2rad(double v)
attribute::SdrLineFillEffectsTextAttribute createNewSdrLineFillEffectsTextAttribute(const SfxItemSet &rSet, const SdrText *pText, bool bHasContent)
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::SdrFillTextAttribute createNewSdrFillTextAttribute(const SfxItemSet &rSet, const SdrText *pText, const sal_Int32 *pLeft, const sal_Int32 *pUpper, const sal_Int32 *pRight, const sal_Int32 *pLower)
HSLColor interpolate(const HSLColor &rFrom, const HSLColor &rTo, double t, bool bCCW)
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< 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
unsigned char sal_uInt8
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)