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>
43 #include <svx/xfltrit.hxx>
44 #include <svx/xflftrit.hxx>
45 #include <svx/xflclit.hxx>
46 #include <svx/xgrscit.hxx>
47 #include <svx/xflhtit.hxx>
48 #include <svx/xflbckit.hxx>
49 #include <svx/xflbmsxy.hxx>
50 #include <svx/xflbtoxy.hxx>
51 #include <svx/xflboxy.hxx>
52 #include <svx/xflbmtit.hxx>
53 #include <svx/xflbstit.hxx>
54 #include <svx/xtextit0.hxx>
56 #include <svx/svdotext.hxx>
58 #include <svx/xbtmpit.hxx>
59 #include <svl/itempool.hxx>
60 #include <vcl/svapp.hxx>
62 #include <svx/svx3ditems.hxx>
63 #include <com/sun/star/drawing/ProjectionMode.hpp>
64 #include <com/sun/star/drawing/ShadeMode.hpp>
66 #include <svx/rectenum.hxx>
67 #include <svx/sdtfchim.hxx>
68 #include <svx/svdoutl.hxx>
69 #include <svx/svdmodel.hxx>
70 #include <svx/xflbmsli.hxx>
71 #include <editeng/editstat.hxx>
83 #include <com/sun/star/drawing/LineCap.hpp>
84 
85 #include <sal/log.hxx>
86 
87 using namespace com::sun::star;
88 
89 namespace drawinglayer
90 {
91  namespace
92  {
93  attribute::GradientStyle XGradientStyleToGradientStyle(css::awt::GradientStyle eStyle)
94  {
95  switch(eStyle)
96  {
97  case css::awt::GradientStyle_LINEAR :
98  {
99  return attribute::GradientStyle::Linear;
100  }
101  case css::awt::GradientStyle_AXIAL :
102  {
103  return attribute::GradientStyle::Axial;
104  }
105  case css::awt::GradientStyle_RADIAL :
106  {
107  return attribute::GradientStyle::Radial;
108  }
109  case css::awt::GradientStyle_ELLIPTICAL :
110  {
111  return attribute::GradientStyle::Elliptical;
112  }
113  case css::awt::GradientStyle_SQUARE :
114  {
115  return attribute::GradientStyle::Square;
116  }
117  default :
118  {
119  return attribute::GradientStyle::Rect; // css::awt::GradientStyle_RECT
120  }
121  }
122  }
123 
124  attribute::HatchStyle XHatchStyleToHatchStyle(css::drawing::HatchStyle eStyle)
125  {
126  switch(eStyle)
127  {
128  case css::drawing::HatchStyle_SINGLE :
129  {
130  return attribute::HatchStyle::Single;
131  }
132  case css::drawing::HatchStyle_DOUBLE :
133  {
134  return attribute::HatchStyle::Double;
135  }
136  default :
137  {
138  return attribute::HatchStyle::Triple; // css::drawing::HatchStyle_TRIPLE
139  }
140  }
141  }
142 
143  basegfx::B2DLineJoin LineJointToB2DLineJoin(css::drawing::LineJoint eLineJoint)
144  {
145  switch(eLineJoint)
146  {
147  case css::drawing::LineJoint_BEVEL :
148  {
150  }
151  case css::drawing::LineJoint_MIDDLE :
152  case css::drawing::LineJoint_MITER :
153  {
155  }
156  case css::drawing::LineJoint_ROUND :
157  {
159  }
160  default : // css::drawing::LineJoint_NONE
161  {
163  }
164  }
165  }
166 
167  basegfx::B2DVector RectPointToB2DVector(RectPoint eRectPoint)
168  {
169  basegfx::B2DVector aRetval(0.0, 0.0);
170 
171  // position changes X
172  switch(eRectPoint)
173  {
174  case RectPoint::LT: case RectPoint::LM: case RectPoint::LB:
175  {
176  aRetval.setX(-1.0);
177  break;
178  }
179 
180  case RectPoint::RT: case RectPoint::RM: case RectPoint::RB:
181  {
182  aRetval.setX(1.0);
183  break;
184  }
185 
186  default :
187  {
188  break;
189  }
190  }
191 
192  // position changes Y
193  switch(eRectPoint)
194  {
195  case RectPoint::LT: case RectPoint::MT: case RectPoint::RT:
196  {
197  aRetval.setY(-1.0);
198  break;
199  }
200 
201  case RectPoint::LB: case RectPoint::MB: case RectPoint::RB:
202  {
203  aRetval.setY(1.0);
204  break;
205  }
206 
207  default :
208  {
209  break;
210  }
211  }
212 
213  return aRetval;
214  }
215  } // end of anonymous namespace
216 } // end of namespace drawinglayer
217 
218 
220 {
222  {
223  const css::drawing::LineStyle eStyle(rSet.Get(XATTR_LINESTYLE).GetValue());
224 
225  if(drawing::LineStyle_NONE != eStyle)
226  {
227  sal_uInt16 nTransparence(rSet.Get(XATTR_LINETRANSPARENCE).GetValue());
228 
229  if(nTransparence > 100)
230  {
231  nTransparence = 100;
232  }
233 
234  if(100 != nTransparence)
235  {
236  const sal_uInt32 nWidth(rSet.Get(XATTR_LINEWIDTH).GetValue());
237  const Color aColor(rSet.Get(XATTR_LINECOLOR).GetColorValue());
238  const css::drawing::LineJoint eJoint(rSet.Get(XATTR_LINEJOINT).GetValue());
239  const css::drawing::LineCap eCap(rSet.Get(XATTR_LINECAP).GetValue());
240  ::std::vector< double > aDotDashArray;
241  double fFullDotDashLen(0.0);
242 
243  if(drawing::LineStyle_DASH == eStyle)
244  {
245  const XDash& rDash = rSet.Get(XATTR_LINEDASH).GetDashValue();
246 
247  if(rDash.GetDots() || rDash.GetDashes())
248  {
249  fFullDotDashLen = rDash.CreateDotDashArray(aDotDashArray, static_cast<double>(nWidth));
250  }
251  }
252 
254  LineJointToB2DLineJoin(eJoint),
255  static_cast<double>(nWidth),
256  static_cast<double>(nTransparence) * 0.01,
257  aColor.getBColor(),
258  eCap,
259  aDotDashArray,
260  fFullDotDashLen);
261  }
262  }
263 
265  }
266 
268  const SfxItemSet& rSet,
269  double fWidth)
270  {
271  const sal_Int32 nTempStartWidth(rSet.Get(XATTR_LINESTARTWIDTH).GetValue());
272  const sal_Int32 nTempEndWidth(rSet.Get(XATTR_LINEENDWIDTH).GetValue());
273  basegfx::B2DPolyPolygon aStartPolyPolygon;
274  basegfx::B2DPolyPolygon aEndPolyPolygon;
275  double fStartWidth(0.0);
276  double fEndWidth(0.0);
277  bool bStartActive(false);
278  bool bEndActive(false);
279  bool bStartCentered(true);
280  bool bEndCentered(true);
281 
282  if(nTempStartWidth)
283  {
284  if(nTempStartWidth < 0)
285  {
286  fStartWidth = (static_cast<double>(-nTempStartWidth) * fWidth) * 0.01;
287  }
288  else
289  {
290  fStartWidth = static_cast<double>(nTempStartWidth);
291  }
292 
293  if(0.0 != fStartWidth)
294  {
295  aStartPolyPolygon = rSet.Get(XATTR_LINESTART).GetLineStartValue();
296 
297  if(aStartPolyPolygon.count() && aStartPolyPolygon.getB2DPolygon(0).count())
298  {
299  bStartActive = true;
300  bStartCentered = rSet.Get(XATTR_LINESTARTCENTER).GetValue();
301  }
302  }
303  }
304 
305  if(nTempEndWidth)
306  {
307  if(nTempEndWidth < 0)
308  {
309  fEndWidth = (static_cast<double>(-nTempEndWidth) * fWidth) * 0.01;
310  }
311  else
312  {
313  fEndWidth = static_cast<double>(nTempEndWidth);
314  }
315 
316  if(0.0 != fEndWidth)
317  {
318  aEndPolyPolygon = rSet.Get(XATTR_LINEEND).GetLineEndValue();
319 
320  if(aEndPolyPolygon.count() && aEndPolyPolygon.getB2DPolygon(0).count())
321  {
322  bEndActive = true;
323  bEndCentered = rSet.Get(XATTR_LINEENDCENTER).GetValue();
324  }
325  }
326  }
327 
328  if(bStartActive || bEndActive)
329  {
331  aStartPolyPolygon, aEndPolyPolygon, fStartWidth, fEndWidth,
332  bStartActive, bEndActive, bStartCentered, bEndCentered);
333  }
334 
336  }
337 
339  {
340  const bool bGlow(rSet.Get(SDRATTR_GLOW).GetValue());
341  if(!bGlow)
343  sal_Int32 nRadius = rSet.Get(SDRATTR_GLOW_RAD).GetValue();
344  const Color aColor(rSet.Get(SDRATTR_GLOW_COLOR).GetColorValue());
345 
346  attribute::SdrGlowAttribute glowAttr{ nRadius, aColor.getBColor() };
347  return glowAttr;
348  }
349 
351  {
352  const bool bShadow(rSet.Get(SDRATTR_SHADOW).GetValue());
353 
354  if(bShadow)
355  {
356  sal_uInt16 nTransparence(rSet.Get(SDRATTR_SHADOWTRANSPARENCE).GetValue());
357 
358  if(nTransparence > 100)
359  {
360  nTransparence = 100;
361  }
362 
363  if(nTransparence)
364  {
365  sal_uInt16 nFillTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
366 
367  if(nFillTransparence > 100)
368  {
369  nFillTransparence = 100;
370  }
371 
372  if(nTransparence == nFillTransparence)
373  {
374  // shadow does not really have an own transparence, but the application
375  // sets the shadow transparence equal to the object transparence for
376  // convenience. This is not useful for primitive creation, so take
377  // this as no shadow transparence
378  nTransparence = 0;
379  }
380  }
381 
382  if(100 != nTransparence)
383  {
384  const basegfx::B2DVector aOffset(
385  static_cast<double>(rSet.Get(SDRATTR_SHADOWXDIST).GetValue()),
386  static_cast<double>(rSet.Get(SDRATTR_SHADOWYDIST).GetValue()));
387  const Color aColor(rSet.Get(SDRATTR_SHADOWCOLOR).GetColorValue());
388 
389  return attribute::SdrShadowAttribute(aOffset, static_cast<double>(nTransparence) * 0.01, aColor.getBColor());
390  }
391  }
392 
394  }
395 
397  {
398  const drawing::FillStyle eStyle(rSet.Get(XATTR_FILLSTYLE).GetValue());
399 
400  sal_uInt16 nTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
401 
402  if(nTransparence > 100)
403  {
404  nTransparence = 100;
405  }
406 
407  if(drawing::FillStyle_NONE != eStyle)
408  {
409  if(100 != nTransparence)
410  {
411  // need to check XFillFloatTransparence, object fill may still be completely transparent
412  const SfxPoolItem* pGradientItem;
413 
414  if(SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE, true, &pGradientItem)
415  && static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->IsEnabled())
416  {
417  const XGradient& rGradient = static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->GetGradientValue();
418  const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
419  const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
420  const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
421 
422  if(bCompletelyTransparent)
423  {
424  nTransparence = 100;
425  }
426  }
427  }
428 
429  if(100 != nTransparence)
430  {
431  const Color aColor(rSet.Get(XATTR_FILLCOLOR).GetColorValue());
435 
436  switch(eStyle)
437  {
438  default:
439  {
440  // nothing to do, color is defined
441  break;
442  }
443  case drawing::FillStyle_GRADIENT :
444  {
445  XGradient aXGradient(rSet.Get(XATTR_FILLGRADIENT).GetGradientValue());
446 
447  const Color aStartColor(aXGradient.GetStartColor());
448  const sal_uInt16 nStartIntens(aXGradient.GetStartIntens());
449  basegfx::BColor aStart(aStartColor.getBColor());
450 
451  if(nStartIntens != 100)
452  {
453  const basegfx::BColor aBlack;
454  aStart = interpolate(aBlack, aStart, static_cast<double>(nStartIntens) * 0.01);
455  }
456 
457  const Color aEndColor(aXGradient.GetEndColor());
458  const sal_uInt16 nEndIntens(aXGradient.GetEndIntens());
459  basegfx::BColor aEnd(aEndColor.getBColor());
460 
461  if(nEndIntens != 100)
462  {
463  const basegfx::BColor aBlack;
464  aEnd = interpolate(aBlack, aEnd, static_cast<double>(nEndIntens) * 0.01);
465  }
466 
468  XGradientStyleToGradientStyle(aXGradient.GetGradientStyle()),
469  static_cast<double>(aXGradient.GetBorder()) * 0.01,
470  static_cast<double>(aXGradient.GetXOffset()) * 0.01,
471  static_cast<double>(aXGradient.GetYOffset()) * 0.01,
472  static_cast<double>(aXGradient.GetAngle()) * F_PI1800,
473  aStart,
474  aEnd,
475  rSet.Get(XATTR_GRADIENTSTEPCOUNT).GetValue());
476 
477  break;
478  }
479  case drawing::FillStyle_HATCH :
480  {
481  const XHatch& rHatch(rSet.Get(XATTR_FILLHATCH).GetHatchValue());
482  const Color aColorB(rHatch.GetColor());
483 
485  XHatchStyleToHatchStyle(rHatch.GetHatchStyle()),
486  static_cast<double>(rHatch.GetDistance()),
487  static_cast<double>(rHatch.GetAngle()) * F_PI1800,
488  aColorB.getBColor(),
489  3, // same default as VCL, a minimum of three discrete units (pixels) offset
490  rSet.Get(XATTR_FILLBACKGROUND).GetValue());
491 
492  break;
493  }
494  case drawing::FillStyle_BITMAP :
495  {
496  aFillGraphic = createNewSdrFillGraphicAttribute(rSet);
497  break;
498  }
499  }
500 
502  static_cast<double>(nTransparence) * 0.01,
503  aColor.getBColor(),
504  aGradient,
505  aHatch,
506  aFillGraphic);
507  }
508  }
509 
510  if(nTransparence == 100)
511  {
516  1,
517  basegfx::BColor( 0, 0, 0 ),
518  aGradient,
519  aHatch,
520  aFillGraphic);
521  }
522 
524  }
525 
526  // #i101508# Support handing over given text-to-border distances
528  const SfxItemSet& rSet,
529  const SdrText& rText,
530  const sal_Int32* pLeft,
531  const sal_Int32* pUpper,
532  const sal_Int32* pRight,
533  const sal_Int32* pLower)
534  {
535  const SdrTextObj& rTextObj = rText.GetObject();
536 
537  // Save chaining attributes
538  bool bChainable = rTextObj.IsChainable();
539 
540 
541  if(rText.GetOutlinerParaObject())
542  {
543  // added TextEdit text suppression
544  bool bInEditMode(false);
545 
546  if(rText.GetObject().getTextCount() > 1)
547  {
548  bInEditMode = rTextObj.IsInEditMode() && rText.GetObject().getActiveText() == &rText;
549  }
550  else
551  {
552  bInEditMode = rTextObj.IsInEditMode();
553  }
554 
555  OutlinerParaObject aOutlinerParaObject(*rText.GetOutlinerParaObject());
556 
557  if(bInEditMode)
558  {
559  std::unique_ptr<OutlinerParaObject> pTempObj = rTextObj.CreateEditOutlinerParaObject();
560 
561  if(pTempObj)
562  {
563  aOutlinerParaObject = *pTempObj;
564  }
565  else
566  {
567  // #i100537#
568  // CreateEditOutlinerParaObject() returning no object does not mean that
569  // text edit mode is not active. Do not reset the flag here
570  // bInEditMode = false;
571  }
572  }
573 
574  const SdrTextAniKind eAniKind(rTextObj.GetTextAniKind());
575 
576  // #i107346#
577  const SdrOutliner& rDrawTextOutliner(rText.GetObject().getSdrModelFromSdrObject().GetDrawOutliner(&rTextObj));
578  const bool bWrongSpell(rDrawTextOutliner.GetControlWord() & EEControlBits::ONLINESPELLING);
579 
581  rText,
582  aOutlinerParaObject,
583  rSet.Get(XATTR_FORMTXTSTYLE).GetValue(),
584  pLeft ? *pLeft : rTextObj.GetTextLeftDistance(),
585  pUpper ? *pUpper : rTextObj.GetTextUpperDistance(),
586  pRight ? *pRight : rTextObj.GetTextRightDistance(),
587  pLower ? *pLower : rTextObj.GetTextLowerDistance(),
588  rTextObj.GetTextHorizontalAdjust(rSet),
589  rTextObj.GetTextVerticalAdjust(rSet),
590  rSet.Get(SDRATTR_TEXT_CONTOURFRAME).GetValue(),
591  rTextObj.IsFitToSize(),
592  rTextObj.IsAutoFit(),
593  rSet.Get(XATTR_FORMTXTHIDEFORM).GetValue(),
594  SdrTextAniKind::Blink == eAniKind,
595  SdrTextAniKind::Scroll == eAniKind || SdrTextAniKind::Alternate == eAniKind || SdrTextAniKind::Slide == eAniKind,
596  bInEditMode,
597  rSet.Get(SDRATTR_TEXT_USEFIXEDCELLHEIGHT).GetValue(),
598  bWrongSpell,
599  bChainable);
600  }
601 
603  }
604 
606  {
607  const SfxPoolItem* pGradientItem;
608 
609  if(SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE, true, &pGradientItem)
610  && static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->IsEnabled())
611  {
612  // test if float transparence is completely transparent
613  const XGradient& rGradient = static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->GetGradientValue();
614  const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
615  const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
616  const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
617  const bool bNotTransparent(0x00 == nStartLuminance && 0x00 == nEndLuminance);
618 
619  // create nothing when completely transparent: This case is already checked for the
620  // normal fill attributes, XFILL_NONE will be used.
621  // create nothing when not transparent: use normal fill, no need t create a FillGradientAttribute.
622  // Both cases are optimizations, always creating FillGradientAttribute will work, too
623  if(!bNotTransparent && !bCompletelyTransparent)
624  {
625  const double fStartLum(nStartLuminance / 255.0);
626  const double fEndLum(nEndLuminance / 255.0);
627 
629  XGradientStyleToGradientStyle(rGradient.GetGradientStyle()),
630  static_cast<double>(rGradient.GetBorder()) * 0.01,
631  static_cast<double>(rGradient.GetXOffset()) * 0.01,
632  static_cast<double>(rGradient.GetYOffset()) * 0.01,
633  static_cast<double>(rGradient.GetAngle()) * F_PI1800,
634  basegfx::BColor(fStartLum, fStartLum, fStartLum),
635  basegfx::BColor(fEndLum, fEndLum, fEndLum),
636  0);
637  }
638  }
639 
641  }
642 
644  {
645  Graphic aGraphic(rSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic());
646 
647  if(!(GraphicType::Bitmap == aGraphic.GetType() || GraphicType::GdiMetafile == aGraphic.GetType()))
648  {
649  // no content if not bitmap or metafile
650  OSL_ENSURE(false, "No fill graphic in SfxItemSet (!)");
652  }
653 
654  Size aPrefSize(aGraphic.GetPrefSize());
655 
656  if(!aPrefSize.Width() || !aPrefSize.Height())
657  {
658  // if there is no logical size, create a size from pixel size and set MapMode accordingly
659  if(GraphicType::Bitmap == aGraphic.GetType())
660  {
661  aGraphic.SetPrefSize(aGraphic.GetBitmapEx().GetSizePixel());
662  aGraphic.SetPrefMapMode(MapMode(MapUnit::MapPixel));
663  aPrefSize = aGraphic.GetPrefSize();
664  }
665  }
666 
667  if(!aPrefSize.Width() || !aPrefSize.Height())
668  {
669  // no content if no size
670  OSL_ENSURE(false, "Graphic has no size in SfxItemSet (!)");
672  }
673 
674  // convert size and MapMode to destination logical size and MapMode
675  const MapUnit aDestinationMapUnit(rSet.GetPool()->GetMetric(0));
676  basegfx::B2DVector aGraphicLogicSize(aGraphic.GetPrefSize().Width(), aGraphic.GetPrefSize().Height());
677 
678  if (aGraphic.GetPrefMapMode().GetMapUnit() != aDestinationMapUnit)
679  {
680  // #i100360# for MapUnit::MapPixel, LogicToLogic will not work properly,
681  // so fallback to Application::GetDefaultDevice()
682  Size aNewSize(0, 0);
683 
684  if(MapUnit::MapPixel == aGraphic.GetPrefMapMode().GetMapUnit())
685  {
687  aGraphic.GetPrefSize(),
688  MapMode(aDestinationMapUnit));
689  }
690  else
691  {
692  aNewSize = OutputDevice::LogicToLogic(
693  aGraphic.GetPrefSize(),
694  aGraphic.GetPrefMapMode(),
695  MapMode(aDestinationMapUnit));
696  }
697 
698  // #i124002# do not set new size using SetPrefSize at the graphic, this will lead to problems.
699  // Instead, adapt the GraphicLogicSize which will be used for further decompositions
700  aGraphicLogicSize = basegfx::B2DVector(aNewSize.Width(), aNewSize.Height());
701  }
702 
703  // get size
704  const basegfx::B2DVector aSize(
705  static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEX).GetValue()),
706  static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEY).GetValue()));
707  const basegfx::B2DVector aOffset(
708  static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETX).GetValue()),
709  static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETY).GetValue()));
710  const basegfx::B2DVector aOffsetPosition(
711  static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETX).GetValue()),
712  static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETY).GetValue()));
713 
715  aGraphic,
716  aGraphicLogicSize,
717  aSize,
718  aOffset,
719  aOffsetPosition,
720  RectPointToB2DVector(rSet.GetItem<XFillBmpPosItem>(XATTR_FILLBMP_POS)->GetValue()),
721  rSet.Get(XATTR_FILLBMP_TILE).GetValue(),
722  rSet.Get(XATTR_FILLBMP_STRETCH).GetValue(),
723  rSet.Get(XATTR_FILLBMP_SIZELOG).GetValue());
724  }
725 
727  const SfxItemSet& rSet,
728  const SdrText* pText,
729  bool bSuppressText)
730  {
732 
733  // #i98072# added option to suppress text
734  // look for text first
735  if(!bSuppressText && pText)
736  {
737  aText = createNewSdrTextAttribute(rSet, *pText);
738  }
739 
740  // try shadow
743 
744  return attribute::SdrShadowTextAttribute(aShadow, aText, aGlow);
745  }
746 
748  const SfxItemSet& rSet,
749  const SdrText* pText)
750  {
755  bool bFontworkHideContour(false);
756 
757  // look for text first
758  if(pText)
759  {
760  aText = createNewSdrTextAttribute(rSet, *pText);
761 
762  // when object has text and text is fontwork and hide contour is set for fontwork, force
763  // line and fill style to empty
764  if(!aText.isDefault()
765  && !aText.getSdrFormTextAttribute().isDefault()
766  && aText.isHideContour())
767  {
768  bFontworkHideContour = true;
769  }
770  }
771 
772  // try line style
773  if(!bFontworkHideContour)
774  {
775  aLine = createNewSdrLineAttribute(rSet);
776 
777  if(!aLine.isDefault())
778  {
779  // try LineStartEnd
780  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
781  }
782  }
783 
784  if(!aLine.isDefault() || !aText.isDefault())
785  {
786  // try shadow
788  aGlow = createNewSdrGlowAttribute(rSet);
789 
790  return attribute::SdrLineShadowTextAttribute(aLine, aLineStartEnd, aShadow, aText, aGlow);
791  }
792 
794  }
795 
797  const SfxItemSet& rSet,
798  const SdrText* pText,
799  bool bHasContent)
800  {
805  attribute::FillGradientAttribute aFillFloatTransGradient;
808  bool bFontworkHideContour(false);
809 
810  // look for text first
811  if(pText)
812  {
813  aText = createNewSdrTextAttribute(rSet, *pText);
814 
815  // when object has text and text is fontwork and hide contour is set for fontwork, force
816  // line and fill style to empty
817  if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
818  {
819  bFontworkHideContour = true;
820  }
821  }
822 
823  if(!bFontworkHideContour)
824  {
825  // try line style
826  aLine = createNewSdrLineAttribute(rSet);
827 
828  if(!aLine.isDefault())
829  {
830  // try LineStartEnd
831  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
832  }
833 
834  // try fill style
835  aFill = createNewSdrFillAttribute(rSet);
836 
837  if(!aFill.isDefault())
838  {
839  // try fillfloattransparence
840  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
841  }
842  }
843 
844  // bHasContent is used from OLE and graphic objects. Normally a possible shadow
845  // depends on line, fill or text to be set, but for these objects it is possible
846  // to have none of these, but still content which needs to have a shadow (if set),
847  // so shadow needs to be tried
848  if(bHasContent || !aLine.isDefault() || !aFill.isDefault() || !aText.isDefault())
849  {
850  // try shadow
851  aShadow = createNewSdrShadowAttribute(rSet);
852 
853  // glow
854  aGlow = createNewSdrGlowAttribute(rSet);
855 
857  aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient, aText, aGlow);
858  }
859 
861  }
862 
864  {
868  attribute::FillGradientAttribute aFillFloatTransGradient;
869 
870  // try line style
872 
873  if(!aLine.isDefault())
874  {
875  // try LineStartEnd
876  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
877  }
878 
879  // try fill style
880  if(!bSuppressFill)
881  {
882  aFill = createNewSdrFillAttribute(rSet);
883 
884  if(!aFill.isDefault())
885  {
886  // try fillfloattransparence
887  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
888  }
889  }
890 
891  if(!aLine.isDefault() || !aFill.isDefault())
892  {
893  // try shadow
894  aShadow = createNewSdrShadowAttribute(rSet);
895 
897  aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient);
898  }
899 
901  }
902 
904  {
905  // get perspective
906  css::drawing::ProjectionMode aProjectionMode(css::drawing::ProjectionMode_PARALLEL);
907  const sal_uInt16 nProjectionValue(rSet.Get(SDRATTR_3DSCENE_PERSPECTIVE).GetValue());
908 
909  if(1 == nProjectionValue)
910  {
911  aProjectionMode = css::drawing::ProjectionMode_PERSPECTIVE;
912  }
913 
914  // get distance
915  const double fDistance(rSet.Get(SDRATTR_3DSCENE_DISTANCE).GetValue());
916 
917  // get shadow slant
918  const double fShadowSlant(
920 
921  // get shade mode
922  css::drawing::ShadeMode aShadeMode(css::drawing::ShadeMode_FLAT);
923  const sal_uInt16 nShadeValue(rSet.Get(SDRATTR_3DSCENE_SHADE_MODE).GetValue());
924 
925  if(1 == nShadeValue)
926  {
927  aShadeMode = css::drawing::ShadeMode_PHONG;
928  }
929  else if(2 == nShadeValue)
930  {
931  aShadeMode = css::drawing::ShadeMode_SMOOTH;
932  }
933  else if(3 == nShadeValue)
934  {
935  aShadeMode = css::drawing::ShadeMode_DRAFT;
936  }
937 
938  // get two sided lighting
939  const bool bTwoSidedLighting(rSet.Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING).GetValue());
940 
941  return attribute::SdrSceneAttribute(fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting);
942  }
943 
945  {
946  // extract lights from given SfxItemSet (from scene)
947  ::std::vector< attribute::Sdr3DLightAttribute > aLightVector;
948 
949  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_1).GetValue())
950  {
951  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1).GetValue().getBColor());
953  aLightVector.emplace_back(aColor, aDirection, true);
954  }
955 
956  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_2).GetValue())
957  {
958  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2).GetValue().getBColor());
960  aLightVector.emplace_back(aColor, aDirection, false);
961  }
962 
963  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_3).GetValue())
964  {
965  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3).GetValue().getBColor());
967  aLightVector.emplace_back(aColor, aDirection, false);
968  }
969 
970  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_4).GetValue())
971  {
972  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4).GetValue().getBColor());
974  aLightVector.emplace_back(aColor, aDirection, false);
975  }
976 
977  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_5).GetValue())
978  {
979  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5).GetValue().getBColor());
981  aLightVector.emplace_back(aColor, aDirection, false);
982  }
983 
984  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_6).GetValue())
985  {
986  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6).GetValue().getBColor());
988  aLightVector.emplace_back(aColor, aDirection, false);
989  }
990 
991  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_7).GetValue())
992  {
993  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7).GetValue().getBColor());
995  aLightVector.emplace_back(aColor, aDirection, false);
996  }
997 
998  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_8).GetValue())
999  {
1000  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8).GetValue().getBColor());
1002  aLightVector.emplace_back(aColor, aDirection, false);
1003  }
1004 
1005  // get ambient color
1006  const Color aAmbientValue(rSet.Get(SDRATTR_3DSCENE_AMBIENTCOLOR).GetValue());
1007  const basegfx::BColor aAmbientLight(aAmbientValue.getBColor());
1008 
1009  return attribute::SdrLightingAttribute(aAmbientLight, aLightVector);
1010  }
1011 
1012  void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange& rObjectRange, double& rfCornerRadiusX, double& rfCornerRadiusY)
1013  {
1014  rfCornerRadiusX = rfCornerRadiusY = static_cast<double>(nRadius);
1015 
1016  if(0.0 != rfCornerRadiusX)
1017  {
1018  const double fHalfObjectWidth(rObjectRange.getWidth() * 0.5);
1019 
1020  if(0.0 != fHalfObjectWidth)
1021  {
1022  if(rfCornerRadiusX < 0.0)
1023  {
1024  rfCornerRadiusX = 0.0;
1025  }
1026 
1027  if(rfCornerRadiusX > fHalfObjectWidth)
1028  {
1029  rfCornerRadiusX = fHalfObjectWidth;
1030  }
1031 
1032  rfCornerRadiusX /= fHalfObjectWidth;
1033  }
1034  else
1035  {
1036  rfCornerRadiusX = 0.0;
1037  }
1038  }
1039 
1040  if(0.0 != rfCornerRadiusY)
1041  {
1042  const double fHalfObjectHeight(rObjectRange.getHeight() * 0.5);
1043 
1044  if(0.0 != fHalfObjectHeight)
1045  {
1046  if(rfCornerRadiusY < 0.0)
1047  {
1048  rfCornerRadiusY = 0.0;
1049  }
1050 
1051  if(rfCornerRadiusY > fHalfObjectHeight)
1052  {
1053  rfCornerRadiusY = fHalfObjectHeight;
1054  }
1055 
1056  rfCornerRadiusY /= fHalfObjectHeight;
1057  }
1058  else
1059  {
1060  rfCornerRadiusY = 0.0;
1061  }
1062  }
1063  }
1064 
1065  // #i101508# Support handing over given text-to-border distances
1067  const SfxItemSet& rSet,
1068  const SdrText* pText,
1069  const sal_Int32* pLeft,
1070  const sal_Int32* pUpper,
1071  const sal_Int32* pRight,
1072  const sal_Int32* pLower)
1073  {
1075  attribute::FillGradientAttribute aFillFloatTransGradient;
1077  bool bFontworkHideContour(false);
1078 
1079  // look for text first
1080  if(pText)
1081  {
1082  aText = createNewSdrTextAttribute(rSet, *pText, pLeft, pUpper, pRight, pLower);
1083 
1084  // when object has text and text is fontwork and hide contour is set for fontwork, force
1085  // fill style to empty
1086  if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
1087  {
1088  bFontworkHideContour = true;
1089  }
1090  }
1091 
1092  if(!bFontworkHideContour)
1093  {
1094  // try fill style
1095  aFill = createNewSdrFillAttribute(rSet);
1096 
1097  if(!aFill.isDefault())
1098  {
1099  // try fillfloattransparence
1100  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
1101  }
1102  }
1103 
1104  if(!aFill.isDefault() || !aText.isDefault())
1105  {
1106  return attribute::SdrFillTextAttribute(aFill, aFillFloatTransGradient, aText);
1107  }
1108 
1110  }
1111 
1112 } // end of namespace
1113 
1114 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SdrOutliner & GetDrawOutliner(const SdrTextObj *pObj=nullptr) const
Definition: svdmodel.cxx:693
long Width() const
#define XATTR_LINESTARTCENTER
Definition: xdef.hxx:98
#define XATTR_FILLHATCH
Definition: xdef.hxx:110
bool IsChainable() const
Definition: svdotext.cxx:1916
#define SDRATTR_3DSCENE_TWO_SIDED_LIGHTING
Definition: svddef.hxx:366
double getHeight() const
#define XATTR_FILLBMP_POSOFFSETX
Definition: xdef.hxx:124
attribute::SdrFillAttribute createNewSdrFillAttribute(const SfxItemSet &rSet)
Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
#define XATTR_LINEENDWIDTH
Definition: xdef.hxx:97
#define SDRATTR_3DSCENE_LIGHTON_4
Definition: svddef.hxx:379
long Height() const
#define F_PI1800
#define SDRATTR_3DSCENE_SHADE_MODE
Definition: svddef.hxx:393
sal_uInt8 GetLuminance() const
#define XATTR_FILLGRADIENT
Definition: xdef.hxx:109
#define SDRATTR_SHADOWTRANSPARENCE
Definition: svddef.hxx:180
bool IsInEditMode() const
Definition: svdotext.hxx:323
#define XATTR_FILLFLOATTRANSPARENCE
Definition: xdef.hxx:118
#define SDRATTR_3DSCENE_LIGHTON_2
Definition: svddef.hxx:377
attribute::SdrFillGraphicAttribute createNewSdrFillGraphicAttribute(const SfxItemSet &rSet)
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1762
#define SDRATTR_SHADOWCOLOR
Definition: svddef.hxx:177
#define SDRATTR_3DSCENE_LIGHTON_8
Definition: svddef.hxx:383
#define XATTR_FILLBMP_STRETCH
Definition: xdef.hxx:123
#define XATTR_FILLCOLOR
Definition: xdef.hxx:108
SdrTextAniKind
Animation type for text frame.
Definition: sdtakitm.hxx:29
static OutputDevice * GetDefaultDevice()
HSLColor interpolate(const HSLColor &rFrom, const HSLColor &rTo, double t, bool bCCW)
const Color & GetStartColor() const
Definition: xgrad.hxx:67
virtual MapUnit GetMetric(sal_uInt16 nWhich) const
attribute::SdrLineFillShadowAttribute3D createNewSdrLineFillShadowAttribute(const SfxItemSet &rSet, bool bSuppressFill)
#define XATTR_LINECAP
Definition: xdef.hxx:102
B2DPolygon const & getB2DPolygon(sal_uInt32 nIndex) const
sal_uInt16 GetYOffset() const
Definition: xgrad.hxx:72
SdrTextHorzAdjust GetTextHorizontalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:314
#define XATTR_LINEJOINT
Definition: xdef.hxx:101
#define SDRATTR_3DSCENE_LIGHTCOLOR_3
Definition: svddef.hxx:369
Definition: xdash.hxx:31
double getWidth() const
attribute::SdrLineAttribute createNewSdrLineAttribute(const SfxItemSet &rSet)
#define XATTR_FILLBMP_TILEOFFSETY
Definition: xdef.hxx:122
#define SDRATTR_3DSCENE_LIGHTCOLOR_6
Definition: svddef.hxx:372
#define SDRATTR_GLOW
Definition: svddef.hxx:412
sal_uInt16 GetDots() const
Definition: xdash.hxx:55
sal_uInt16 GetXOffset() const
Definition: xgrad.hxx:71
#define SDRATTR_3DSCENE_LIGHTON_5
Definition: svddef.hxx:380
#define XATTR_FILLBMP_POSOFFSETY
Definition: xdef.hxx:125
#define XATTR_FILLBMP_SIZELOG
Definition: xdef.hxx:120
#define XATTR_FILLBMP_POS
Definition: xdef.hxx:115
#define SDRATTR_3DSCENE_LIGHTON_3
Definition: svddef.hxx:378
#define XATTR_LINEENDCENTER
Definition: xdef.hxx:99
#define SDRATTR_SHADOWYDIST
Definition: svddef.hxx:179
#define SDRATTR_3DSCENE_LIGHTDIRECTION_5
Definition: svddef.hxx:388
std::unique_ptr< OutlinerParaObject > CreateEditOutlinerParaObject() const
Definition: svdotext.cxx:800
#define SDRATTR_3DSCENE_LIGHTCOLOR_1
Definition: svddef.hxx:367
RectPoint
Definition: rectenum.hxx:22
#define SDRATTR_3DSCENE_PERSPECTIVE
Definition: svddef.hxx:363
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)
sal_uInt16 GetBorder() const
Definition: xgrad.hxx:70
attribute::SdrLineFillShadowTextAttribute createNewSdrLineFillShadowTextAttribute(const SfxItemSet &rSet, const SdrText *pText, bool bHasContent)
long GetTextLeftDistance() const
Left inner spacing to borders.
Definition: svdotext.cxx:1742
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
attribute::FillGradientAttribute createNewTransparenceGradientAttribute(const SfxItemSet &rSet)
#define SDRATTR_3DSCENE_LIGHTCOLOR_2
Definition: svddef.hxx:368
long GetTextRightDistance() const
Right inner spacing to borders.
Definition: svdotext.cxx:1747
#define SDRATTR_3DSCENE_LIGHTDIRECTION_6
Definition: svddef.hxx:389
css::drawing::Direction3D aDirection
bool IsFitToSize() const
returns true if the old feature for fitting shape content should into shape is enabled. implies IsAutoFit()==false!
Definition: svdotext.cxx:1833
#define SDRATTR_3DSCENE_LIGHTDIRECTION_4
Definition: svddef.hxx:387
#define SDRATTR_SHADOWXDIST
Definition: svddef.hxx:178
#define SDRATTR_3DSCENE_LIGHTDIRECTION_8
Definition: svddef.hxx:391
SdrTextObj & GetObject() const
Definition: svdtext.hxx:64
long GetAngle() const
Definition: xgrad.hxx:69
#define XATTR_FILLBMP_SIZEX
Definition: xdef.hxx:116
#define SDRATTR_3DSCENE_LIGHTON_1
Definition: svddef.hxx:376
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:272
#define XATTR_FORMTXTHIDEFORM
Definition: xdef.hxx:141
#define SDRATTR_SHADOW
Definition: svddef.hxx:176
#define XATTR_LINESTYLE
Definition: xdef.hxx:90
constexpr double deg2rad(double v)
attribute::SdrLineShadowTextAttribute createNewSdrLineShadowTextAttribute(const SfxItemSet &rSet, const SdrText *pText)
#define XATTR_GRADIENTSTEPCOUNT
Definition: xdef.hxx:113
#define SDRATTR_TEXT_CONTOURFRAME
Definition: svddef.hxx:220
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2040
#define XATTR_FILLSTYLE
Definition: xdef.hxx:107
double CreateDotDashArray(::std::vector< double > &rDotDashArray, double fLineWidth) const
Definition: xattr.cxx:428
void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange &rObjectRange, double &rfCornerRadiusX, double &rfCornerRadiusY)
SfxItemPool * GetPool() const
attribute::SdrShadowTextAttribute createNewSdrShadowTextAttribute(const SfxItemSet &rSet, const SdrText *pText, bool bSuppressText)
#define XATTR_LINEDASH
Definition: xdef.hxx:91
long GetTextUpperDistance() const
Top inner spacing to borders.
Definition: svdotext.cxx:1752
attribute::SdrLineStartEndAttribute createNewSdrLineStartEndAttribute(const SfxItemSet &rSet, double fWidth)
#define SDRATTR_3DSCENE_DISTANCE
Definition: svddef.hxx:364
#define SDRATTR_3DSCENE_LIGHTDIRECTION_7
Definition: svddef.hxx:390
#define SDRATTR_3DSCENE_LIGHTCOLOR_4
Definition: svddef.hxx:370
Point PixelToLogic(const Point &rDevicePt) const
#define XATTR_LINEWIDTH
Definition: xdef.hxx:92
css::awt::GradientStyle GetGradientStyle() const
Definition: xgrad.hxx:66
#define XATTR_FILLBMP_SIZEY
Definition: xdef.hxx:117
#define XATTR_FILLBMP_TILE
Definition: xdef.hxx:114
#define SDRATTR_3DSCENE_LIGHTCOLOR_8
Definition: svddef.hxx:374
attribute::SdrSceneAttribute createNewSdrSceneAttribute(const SfxItemSet &rSet)
sal_uInt32 count() const
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
unsigned char sal_uInt8
#define XATTR_LINEEND
Definition: xdef.hxx:95
attribute::SdrShadowAttribute createNewSdrShadowAttribute(const SfxItemSet &rSet)
#define SDRATTR_GLOW_COLOR
Definition: svddef.hxx:414
#define SDRATTR_3DSCENE_LIGHTON_7
Definition: svddef.hxx:382
#define SDRATTR_3DSCENE_SHADOW_SLANT
Definition: svddef.hxx:392
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)
#define SDRATTR_3DSCENE_AMBIENTCOLOR
Definition: svddef.hxx:375
#define XATTR_FORMTXTSTYLE
Definition: xdef.hxx:131
bool IsAutoFit() const
returns true if the PPT autofit of text into shape bounds is enabled. implies IsFitToSize()==false! ...
Definition: svdotext.cxx:1828
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2064
#define XATTR_FILLBITMAP
Definition: xdef.hxx:111
#define XATTR_FILLBMP_TILEOFFSETX
Definition: xdef.hxx:121
MapUnit
const SdrFormTextAttribute & getSdrFormTextAttribute() const
#define SDRATTR_TEXT_USEFIXEDCELLHEIGHT
Definition: svddef.hxx:222
#define XATTR_LINESTARTWIDTH
Definition: xdef.hxx:96
#define XATTR_LINECOLOR
Definition: xdef.hxx:93
#define SDRATTR_3DSCENE_LIGHTDIRECTION_3
Definition: svddef.hxx:386
#define SDRATTR_3DSCENE_LIGHTCOLOR_7
Definition: svddef.hxx:373
#define SDRATTR_3DSCENE_LIGHTON_6
Definition: svddef.hxx:381
OutlinerParaObject * GetOutlinerParaObject() const
Definition: svdtext.cxx:88
SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:346
#define SDRATTR_3DSCENE_LIGHTDIRECTION_1
Definition: svddef.hxx:384
#define SDRATTR_3DSCENE_LIGHTDIRECTION_2
Definition: svddef.hxx:385
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
#define SDRATTR_3DSCENE_LIGHTCOLOR_5
Definition: svddef.hxx:371
#define XATTR_LINETRANSPARENCE
Definition: xdef.hxx:100
long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1757
attribute::SdrGlowAttribute createNewSdrGlowAttribute(const SfxItemSet &rSet)
#define SDRATTR_GLOW_RAD
Definition: svddef.hxx:413
const Color & GetEndColor() const
Definition: xgrad.hxx:68
scroll back and forth
#define XATTR_FILLBACKGROUND
Definition: xdef.hxx:126
#define XATTR_LINESTART
Definition: xdef.hxx:94
sal_uInt16 GetDashes() const
Definition: xdash.hxx:57
sal_uInt32 count() const
#define XATTR_FILLTRANSPARENCE
Definition: xdef.hxx:112
attribute::SdrLightingAttribute createNewSdrLightingAttribute(const SfxItemSet &rSet)
EnumT GetValue() const