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/xdef.hxx>
24 #include <svx/xlineit0.hxx>
25 #include <svx/xfillit0.hxx>
26 #include <svx/xflbmpit.hxx>
27 #include <svx/xlntrit.hxx>
28 #include <svx/xlnwtit.hxx>
29 #include <svx/xlinjoit.hxx>
30 #include <svx/xlncapit.hxx>
31 #include <svx/xlnclit.hxx>
32 #include <svx/xlnstwit.hxx>
33 #include <svx/xlnedwit.hxx>
34 #include <svx/xlnstit.hxx>
35 #include <svx/xlnstcit.hxx>
36 #include <svx/xlnedit.hxx>
37 #include <svx/xlnedcit.hxx>
38 #include <svx/xdash.hxx>
39 #include <svx/xlndsit.hxx>
40 #include <svx/xfltrit.hxx>
41 #include <svx/xflftrit.hxx>
42 #include <svx/xflclit.hxx>
43 #include <svx/xgrscit.hxx>
44 #include <svx/xflhtit.hxx>
45 #include <svx/xflbckit.hxx>
46 #include <svx/sdshitm.hxx>
47 #include <svx/sdsxyitm.hxx>
48 #include <svx/sdshcitm.hxx>
49 #include <svx/sdshtitm.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>
61 #include <svx/xbtmpit.hxx>
62 #include <svl/itempool.hxx>
63 #include <vcl/svapp.hxx>
65 #include <svx/svx3ditems.hxx>
66 #include <com/sun/star/drawing/ProjectionMode.hpp>
67 #include <com/sun/star/drawing/ShadeMode.hpp>
69 #include <svx/rectenum.hxx>
70 #include <svx/sdtfchim.hxx>
71 #include <svx/svdoutl.hxx>
72 #include <svx/svdmodel.hxx>
73 #include <svx/xflbmsli.hxx>
74 #include <editeng/editstat.hxx>
85 #include <com/sun/star/drawing/LineCap.hpp>
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 
219 namespace drawinglayer
220 {
221  namespace primitive2d
222  {
224  {
225  const css::drawing::LineStyle eStyle(rSet.Get(XATTR_LINESTYLE).GetValue());
226 
227  if(drawing::LineStyle_NONE != eStyle)
228  {
229  sal_uInt16 nTransparence(rSet.Get(XATTR_LINETRANSPARENCE).GetValue());
230 
231  if(nTransparence > 100)
232  {
233  nTransparence = 100;
234  }
235 
236  if(100 != nTransparence)
237  {
238  const sal_uInt32 nWidth(rSet.Get(XATTR_LINEWIDTH).GetValue());
239  const Color aColor(rSet.Get(XATTR_LINECOLOR).GetColorValue());
240  const css::drawing::LineJoint eJoint(rSet.Get(XATTR_LINEJOINT).GetValue());
241  const css::drawing::LineCap eCap(rSet.Get(XATTR_LINECAP).GetValue());
242  ::std::vector< double > aDotDashArray;
243  double fFullDotDashLen(0.0);
244 
245  if(drawing::LineStyle_DASH == eStyle)
246  {
247  const XDash& rDash = rSet.Get(XATTR_LINEDASH).GetDashValue();
248 
249  if(rDash.GetDots() || rDash.GetDashes())
250  {
251  fFullDotDashLen = rDash.CreateDotDashArray(aDotDashArray, static_cast<double>(nWidth));
252  }
253  }
254 
256  LineJointToB2DLineJoin(eJoint),
257  static_cast<double>(nWidth),
258  static_cast<double>(nTransparence) * 0.01,
259  aColor.getBColor(),
260  eCap,
261  aDotDashArray,
262  fFullDotDashLen);
263  }
264  }
265 
267  }
268 
270  const SfxItemSet& rSet,
271  double fWidth)
272  {
273  const sal_Int32 nTempStartWidth(rSet.Get(XATTR_LINESTARTWIDTH).GetValue());
274  const sal_Int32 nTempEndWidth(rSet.Get(XATTR_LINEENDWIDTH).GetValue());
275  basegfx::B2DPolyPolygon aStartPolyPolygon;
276  basegfx::B2DPolyPolygon aEndPolyPolygon;
277  double fStartWidth(0.0);
278  double fEndWidth(0.0);
279  bool bStartActive(false);
280  bool bEndActive(false);
281  bool bStartCentered(true);
282  bool bEndCentered(true);
283 
284  if(nTempStartWidth)
285  {
286  if(nTempStartWidth < 0)
287  {
288  fStartWidth = (static_cast<double>(-nTempStartWidth) * fWidth) * 0.01;
289  }
290  else
291  {
292  fStartWidth = static_cast<double>(nTempStartWidth);
293  }
294 
295  if(0.0 != fStartWidth)
296  {
297  aStartPolyPolygon = rSet.Get(XATTR_LINESTART).GetLineStartValue();
298 
299  if(aStartPolyPolygon.count() && aStartPolyPolygon.getB2DPolygon(0).count())
300  {
301  bStartActive = true;
302  bStartCentered = rSet.Get(XATTR_LINESTARTCENTER).GetValue();
303  }
304  }
305  }
306 
307  if(nTempEndWidth)
308  {
309  if(nTempEndWidth < 0)
310  {
311  fEndWidth = (static_cast<double>(-nTempEndWidth) * fWidth) * 0.01;
312  }
313  else
314  {
315  fEndWidth = static_cast<double>(nTempEndWidth);
316  }
317 
318  if(0.0 != fEndWidth)
319  {
320  aEndPolyPolygon = rSet.Get(XATTR_LINEEND).GetLineEndValue();
321 
322  if(aEndPolyPolygon.count() && aEndPolyPolygon.getB2DPolygon(0).count())
323  {
324  bEndActive = true;
325  bEndCentered = rSet.Get(XATTR_LINEENDCENTER).GetValue();
326  }
327  }
328  }
329 
330  if(bStartActive || bEndActive)
331  {
333  aStartPolyPolygon, aEndPolyPolygon, fStartWidth, fEndWidth,
334  bStartActive, bEndActive, bStartCentered, bEndCentered);
335  }
336 
338  }
339 
341  {
342  const bool bShadow(rSet.Get(SDRATTR_SHADOW).GetValue());
343 
344  if(bShadow)
345  {
346  sal_uInt16 nTransparence(rSet.Get(SDRATTR_SHADOWTRANSPARENCE).GetValue());
347 
348  if(nTransparence > 100)
349  {
350  nTransparence = 100;
351  }
352 
353  if(nTransparence)
354  {
355  sal_uInt16 nFillTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
356 
357  if(nFillTransparence > 100)
358  {
359  nFillTransparence = 100;
360  }
361 
362  if(nTransparence == nFillTransparence)
363  {
364  // shadow does not really have an own transparence, but the application
365  // sets the shadow transparence equal to the object transparence for
366  // convenience. This is not useful for primitive creation, so take
367  // this as no shadow transparence
368  nTransparence = 0;
369  }
370  }
371 
372  if(100 != nTransparence)
373  {
374  const basegfx::B2DVector aOffset(
375  static_cast<double>(rSet.Get(SDRATTR_SHADOWXDIST).GetValue()),
376  static_cast<double>(rSet.Get(SDRATTR_SHADOWYDIST).GetValue()));
377  const Color aColor(rSet.Get(SDRATTR_SHADOWCOLOR).GetColorValue());
378 
379  return attribute::SdrShadowAttribute(aOffset, static_cast<double>(nTransparence) * 0.01, aColor.getBColor());
380  }
381  }
382 
384  }
385 
387  {
388  const drawing::FillStyle eStyle(rSet.Get(XATTR_FILLSTYLE).GetValue());
389 
390  sal_uInt16 nTransparence(rSet.Get(XATTR_FILLTRANSPARENCE).GetValue());
391 
392  if(nTransparence > 100)
393  {
394  nTransparence = 100;
395  }
396 
397  if(drawing::FillStyle_NONE != eStyle)
398  {
399  if(100 != nTransparence)
400  {
401  // need to check XFillFloatTransparence, object fill may still be completely transparent
402  const SfxPoolItem* pGradientItem;
403 
404  if(SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE, true, &pGradientItem)
405  && static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->IsEnabled())
406  {
407  const XGradient& rGradient = static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->GetGradientValue();
408  const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
409  const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
410  const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
411 
412  if(bCompletelyTransparent)
413  {
414  nTransparence = 100;
415  }
416  }
417  }
418 
419  if(100 != nTransparence)
420  {
421  const Color aColor(rSet.Get(XATTR_FILLCOLOR).GetColorValue());
425 
426  switch(eStyle)
427  {
428  default:
429  {
430  // nothing to do, color is defined
431  break;
432  }
433  case drawing::FillStyle_GRADIENT :
434  {
435  XGradient aXGradient(rSet.Get(XATTR_FILLGRADIENT).GetGradientValue());
436 
437  const Color aStartColor(aXGradient.GetStartColor());
438  const sal_uInt16 nStartIntens(aXGradient.GetStartIntens());
439  basegfx::BColor aStart(aStartColor.getBColor());
440 
441  if(nStartIntens != 100)
442  {
443  const basegfx::BColor aBlack;
444  aStart = interpolate(aBlack, aStart, static_cast<double>(nStartIntens) * 0.01);
445  }
446 
447  const Color aEndColor(aXGradient.GetEndColor());
448  const sal_uInt16 nEndIntens(aXGradient.GetEndIntens());
449  basegfx::BColor aEnd(aEndColor.getBColor());
450 
451  if(nEndIntens != 100)
452  {
453  const basegfx::BColor aBlack;
454  aEnd = interpolate(aBlack, aEnd, static_cast<double>(nEndIntens) * 0.01);
455  }
456 
458  XGradientStyleToGradientStyle(aXGradient.GetGradientStyle()),
459  static_cast<double>(aXGradient.GetBorder()) * 0.01,
460  static_cast<double>(aXGradient.GetXOffset()) * 0.01,
461  static_cast<double>(aXGradient.GetYOffset()) * 0.01,
462  static_cast<double>(aXGradient.GetAngle()) * F_PI1800,
463  aStart,
464  aEnd,
465  rSet.Get(XATTR_GRADIENTSTEPCOUNT).GetValue());
466 
467  break;
468  }
469  case drawing::FillStyle_HATCH :
470  {
471  const XHatch& rHatch(rSet.Get(XATTR_FILLHATCH).GetHatchValue());
472  const Color aColorB(rHatch.GetColor());
473 
475  XHatchStyleToHatchStyle(rHatch.GetHatchStyle()),
476  static_cast<double>(rHatch.GetDistance()),
477  static_cast<double>(rHatch.GetAngle()) * F_PI1800,
478  aColorB.getBColor(),
479  3, // same default as VCL, a minimum of three discrete units (pixels) offset
480  rSet.Get(XATTR_FILLBACKGROUND).GetValue());
481 
482  break;
483  }
484  case drawing::FillStyle_BITMAP :
485  {
486  aFillGraphic = createNewSdrFillGraphicAttribute(rSet);
487  break;
488  }
489  }
490 
492  static_cast<double>(nTransparence) * 0.01,
493  aColor.getBColor(),
494  aGradient,
495  aHatch,
496  aFillGraphic);
497  }
498  }
499 
500  if(nTransparence == 100)
501  {
506  1,
507  basegfx::BColor( 0, 0, 0 ),
508  aGradient,
509  aHatch,
510  aFillGraphic);
511  }
512 
514  }
515 
516  // #i101508# Support handing over given text-to-border distances
518  const SfxItemSet& rSet,
519  const SdrText& rText,
520  const sal_Int32* pLeft,
521  const sal_Int32* pUpper,
522  const sal_Int32* pRight,
523  const sal_Int32* pLower)
524  {
525  const SdrTextObj& rTextObj = rText.GetObject();
526 
527  // Save chaining attributes
528  bool bChainable = rTextObj.IsChainable();
529 
530 
531  if(rText.GetOutlinerParaObject())
532  {
533  // added TextEdit text suppression
534  bool bInEditMode(false);
535 
536  if(rText.GetObject().getTextCount() > 1)
537  {
538  bInEditMode = rTextObj.IsInEditMode() && rText.GetObject().getActiveText() == &rText;
539  }
540  else
541  {
542  bInEditMode = rTextObj.IsInEditMode();
543  }
544 
545  OutlinerParaObject aOutlinerParaObject(*rText.GetOutlinerParaObject());
546 
547  if(bInEditMode)
548  {
549  std::unique_ptr<OutlinerParaObject> pTempObj = rTextObj.GetEditOutlinerParaObject();
550 
551  if(pTempObj)
552  {
553  aOutlinerParaObject = *pTempObj;
554  }
555  else
556  {
557  // #i100537#
558  // GetEditOutlinerParaObject() returning no object does not mean that
559  // text edit mode is not active. Do not reset the flag here
560  // bInEditMode = false;
561  }
562  }
563 
564  const SdrTextAniKind eAniKind(rTextObj.GetTextAniKind());
565 
566  // #i107346#
567  const SdrOutliner& rDrawTextOutliner(rText.GetObject().getSdrModelFromSdrObject().GetDrawOutliner(&rTextObj));
568  const bool bWrongSpell(rDrawTextOutliner.GetControlWord() & EEControlBits::ONLINESPELLING);
569 
571  rText,
572  aOutlinerParaObject,
573  rSet.Get(XATTR_FORMTXTSTYLE).GetValue(),
574  pLeft ? *pLeft : rTextObj.GetTextLeftDistance(),
575  pUpper ? *pUpper : rTextObj.GetTextUpperDistance(),
576  pRight ? *pRight : rTextObj.GetTextRightDistance(),
577  pLower ? *pLower : rTextObj.GetTextLowerDistance(),
578  rTextObj.GetTextHorizontalAdjust(rSet),
579  rTextObj.GetTextVerticalAdjust(rSet),
580  rSet.Get(SDRATTR_TEXT_CONTOURFRAME).GetValue(),
581  rTextObj.IsFitToSize(),
582  rTextObj.IsAutoFit(),
583  rSet.Get(XATTR_FORMTXTHIDEFORM).GetValue(),
584  SdrTextAniKind::Blink == eAniKind,
585  SdrTextAniKind::Scroll == eAniKind || SdrTextAniKind::Alternate == eAniKind || SdrTextAniKind::Slide == eAniKind,
586  bInEditMode,
587  rSet.Get(SDRATTR_TEXT_USEFIXEDCELLHEIGHT).GetValue(),
588  bWrongSpell,
589  bChainable);
590  }
591 
593  }
594 
596  {
597  const SfxPoolItem* pGradientItem;
598 
599  if(SfxItemState::SET == rSet.GetItemState(XATTR_FILLFLOATTRANSPARENCE, true, &pGradientItem)
600  && static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->IsEnabled())
601  {
602  // test if float transparence is completely transparent
603  const XGradient& rGradient = static_cast<const XFillFloatTransparenceItem*>(pGradientItem)->GetGradientValue();
604  const sal_uInt8 nStartLuminance(rGradient.GetStartColor().GetLuminance());
605  const sal_uInt8 nEndLuminance(rGradient.GetEndColor().GetLuminance());
606  const bool bCompletelyTransparent(0xff == nStartLuminance && 0xff == nEndLuminance);
607  const bool bNotTransparent(0x00 == nStartLuminance && 0x00 == nEndLuminance);
608 
609  // create nothing when completely transparent: This case is already checked for the
610  // normal fill attributes, XFILL_NONE will be used.
611  // create nothing when not transparent: use normal fill, no need t create a FillGradientAttribute.
612  // Both cases are optimizations, always creating FillGradientAttribute will work, too
613  if(!bNotTransparent && !bCompletelyTransparent)
614  {
615  const double fStartLum(nStartLuminance / 255.0);
616  const double fEndLum(nEndLuminance / 255.0);
617 
619  XGradientStyleToGradientStyle(rGradient.GetGradientStyle()),
620  static_cast<double>(rGradient.GetBorder()) * 0.01,
621  static_cast<double>(rGradient.GetXOffset()) * 0.01,
622  static_cast<double>(rGradient.GetYOffset()) * 0.01,
623  static_cast<double>(rGradient.GetAngle()) * F_PI1800,
624  basegfx::BColor(fStartLum, fStartLum, fStartLum),
625  basegfx::BColor(fEndLum, fEndLum, fEndLum),
626  0);
627  }
628  }
629 
631  }
632 
634  {
635  Graphic aGraphic(rSet.Get(XATTR_FILLBITMAP).GetGraphicObject().GetGraphic());
636 
637  if(!(GraphicType::Bitmap == aGraphic.GetType() || GraphicType::GdiMetafile == aGraphic.GetType()))
638  {
639  // no content if not bitmap or metafile
640  OSL_ENSURE(false, "No fill graphic in SfxItemSet (!)");
642  }
643 
644  Size aPrefSize(aGraphic.GetPrefSize());
645 
646  if(!aPrefSize.Width() || !aPrefSize.Height())
647  {
648  // if there is no logical size, create a size from pixel size and set MapMode accordingly
649  if(GraphicType::Bitmap == aGraphic.GetType())
650  {
651  aGraphic.SetPrefSize(aGraphic.GetBitmapEx().GetSizePixel());
652  aGraphic.SetPrefMapMode(MapMode(MapUnit::MapPixel));
653  aPrefSize = aGraphic.GetPrefSize();
654  }
655  }
656 
657  if(!aPrefSize.Width() || !aPrefSize.Height())
658  {
659  // no content if no size
660  OSL_ENSURE(false, "Graphic has no size in SfxItemSet (!)");
662  }
663 
664  // convert size and MapMode to destination logical size and MapMode
665  const MapUnit aDestinationMapUnit(rSet.GetPool()->GetMetric(0));
666  basegfx::B2DVector aGraphicLogicSize(aGraphic.GetPrefSize().Width(), aGraphic.GetPrefSize().Height());
667 
668  if (aGraphic.GetPrefMapMode().GetMapUnit() != aDestinationMapUnit)
669  {
670  // #i100360# for MapUnit::MapPixel, LogicToLogic will not work properly,
671  // so fallback to Application::GetDefaultDevice()
672  Size aNewSize(0, 0);
673 
674  if(MapUnit::MapPixel == aGraphic.GetPrefMapMode().GetMapUnit())
675  {
677  aGraphic.GetPrefSize(),
678  MapMode(aDestinationMapUnit));
679  }
680  else
681  {
682  aNewSize = OutputDevice::LogicToLogic(
683  aGraphic.GetPrefSize(),
684  aGraphic.GetPrefMapMode(),
685  MapMode(aDestinationMapUnit));
686  }
687 
688  // #i124002# do not set new size using SetPrefSize at the graphic, this will lead to problems.
689  // Instead, adapt the GraphicLogicSize which will be used for further decompositions
690  aGraphicLogicSize = basegfx::B2DVector(aNewSize.Width(), aNewSize.Height());
691  }
692 
693  // get size
694  const basegfx::B2DVector aSize(
695  static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEX).GetValue()),
696  static_cast<double>(rSet.Get(XATTR_FILLBMP_SIZEY).GetValue()));
697  const basegfx::B2DVector aOffset(
698  static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETX).GetValue()),
699  static_cast<double>(rSet.Get(XATTR_FILLBMP_TILEOFFSETY).GetValue()));
700  const basegfx::B2DVector aOffsetPosition(
701  static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETX).GetValue()),
702  static_cast<double>(rSet.Get(XATTR_FILLBMP_POSOFFSETY).GetValue()));
703 
705  aGraphic,
706  aGraphicLogicSize,
707  aSize,
708  aOffset,
709  aOffsetPosition,
710  RectPointToB2DVector(rSet.GetItem<XFillBmpPosItem>(XATTR_FILLBMP_POS)->GetValue()),
711  rSet.Get(XATTR_FILLBMP_TILE).GetValue(),
712  rSet.Get(XATTR_FILLBMP_STRETCH).GetValue(),
713  rSet.Get(XATTR_FILLBMP_SIZELOG).GetValue());
714  }
715 
717  const SfxItemSet& rSet,
718  const SdrText* pText,
719  bool bSuppressText)
720  {
722 
723  // #i98072# added option to suppress text
724  // look for text first
725  if(!bSuppressText && pText)
726  {
727  aText = createNewSdrTextAttribute(rSet, *pText);
728  }
729 
730  // try shadow
732 
733  return attribute::SdrShadowTextAttribute(aShadow, aText);
734  }
735 
737  const SfxItemSet& rSet,
738  const SdrText* pText)
739  {
743  bool bFontworkHideContour(false);
744 
745  // look for text first
746  if(pText)
747  {
748  aText = createNewSdrTextAttribute(rSet, *pText);
749 
750  // when object has text and text is fontwork and hide contour is set for fontwork, force
751  // line and fill style to empty
752  if(!aText.isDefault()
753  && !aText.getSdrFormTextAttribute().isDefault()
754  && aText.isHideContour())
755  {
756  bFontworkHideContour = true;
757  }
758  }
759 
760  // try line style
761  if(!bFontworkHideContour)
762  {
763  aLine = createNewSdrLineAttribute(rSet);
764 
765  if(!aLine.isDefault())
766  {
767  // try LineStartEnd
768  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
769  }
770  }
771 
772  if(!aLine.isDefault() || !aText.isDefault())
773  {
774  // try shadow
776 
777  return attribute::SdrLineShadowTextAttribute(aLine, aLineStartEnd, aShadow, aText);
778  }
779 
781  }
782 
784  const SfxItemSet& rSet,
785  const SdrText* pText,
786  bool bHasContent)
787  {
792  attribute::FillGradientAttribute aFillFloatTransGradient;
794  bool bFontworkHideContour(false);
795 
796  // look for text first
797  if(pText)
798  {
799  aText = createNewSdrTextAttribute(rSet, *pText);
800 
801  // when object has text and text is fontwork and hide contour is set for fontwork, force
802  // line and fill style to empty
803  if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
804  {
805  bFontworkHideContour = true;
806  }
807  }
808 
809  if(!bFontworkHideContour)
810  {
811  // try line style
812  aLine = createNewSdrLineAttribute(rSet);
813 
814  if(!aLine.isDefault())
815  {
816  // try LineStartEnd
817  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
818  }
819 
820  // try fill style
821  aFill = createNewSdrFillAttribute(rSet);
822 
823  if(!aFill.isDefault())
824  {
825  // try fillfloattransparence
826  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
827  }
828  }
829 
830  // bHasContent is used from OLE and graphic objects. Normally a possible shadow
831  // depends on line, fill or text to be set, but for these objects it is possible
832  // to have none of these, but still content which needs to have a shadow (if set),
833  // so shadow needs to be tried
834  if(bHasContent || !aLine.isDefault() || !aFill.isDefault() || !aText.isDefault())
835  {
836  // try shadow
837  aShadow = createNewSdrShadowAttribute(rSet);
838 
840  aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient, aText);
841  }
842 
844  }
845 
847  {
851  attribute::FillGradientAttribute aFillFloatTransGradient;
852 
853  // try line style
855 
856  if(!aLine.isDefault())
857  {
858  // try LineStartEnd
859  aLineStartEnd = createNewSdrLineStartEndAttribute(rSet, aLine.getWidth());
860  }
861 
862  // try fill style
863  if(!bSuppressFill)
864  {
865  aFill = createNewSdrFillAttribute(rSet);
866 
867  if(!aFill.isDefault())
868  {
869  // try fillfloattransparence
870  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
871  }
872  }
873 
874  if(!aLine.isDefault() || !aFill.isDefault())
875  {
876  // try shadow
877  aShadow = createNewSdrShadowAttribute(rSet);
878 
880  aLine, aFill, aLineStartEnd, aShadow, aFillFloatTransGradient);
881  }
882 
884  }
885 
887  {
888  // get perspective
889  css::drawing::ProjectionMode aProjectionMode(css::drawing::ProjectionMode_PARALLEL);
890  const sal_uInt16 nProjectionValue(rSet.Get(SDRATTR_3DSCENE_PERSPECTIVE).GetValue());
891 
892  if(1 == nProjectionValue)
893  {
894  aProjectionMode = css::drawing::ProjectionMode_PERSPECTIVE;
895  }
896 
897  // get distance
898  const double fDistance(rSet.Get(SDRATTR_3DSCENE_DISTANCE).GetValue());
899 
900  // get shadow slant
901  const double fShadowSlant(
903 
904  // get shade mode
905  css::drawing::ShadeMode aShadeMode(css::drawing::ShadeMode_FLAT);
906  const sal_uInt16 nShadeValue(rSet.Get(SDRATTR_3DSCENE_SHADE_MODE).GetValue());
907 
908  if(1 == nShadeValue)
909  {
910  aShadeMode = css::drawing::ShadeMode_PHONG;
911  }
912  else if(2 == nShadeValue)
913  {
914  aShadeMode = css::drawing::ShadeMode_SMOOTH;
915  }
916  else if(3 == nShadeValue)
917  {
918  aShadeMode = css::drawing::ShadeMode_DRAFT;
919  }
920 
921  // get two sided lighting
922  const bool bTwoSidedLighting(rSet.Get(SDRATTR_3DSCENE_TWO_SIDED_LIGHTING).GetValue());
923 
924  return attribute::SdrSceneAttribute(fDistance, fShadowSlant, aProjectionMode, aShadeMode, bTwoSidedLighting);
925  }
926 
928  {
929  // extract lights from given SfxItemSet (from scene)
930  ::std::vector< attribute::Sdr3DLightAttribute > aLightVector;
931 
932  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_1).GetValue())
933  {
934  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_1).GetValue().getBColor());
936  aLightVector.emplace_back(aColor, aDirection, true);
937  }
938 
939  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_2).GetValue())
940  {
941  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_2).GetValue().getBColor());
943  aLightVector.emplace_back(aColor, aDirection, false);
944  }
945 
946  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_3).GetValue())
947  {
948  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_3).GetValue().getBColor());
950  aLightVector.emplace_back(aColor, aDirection, false);
951  }
952 
953  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_4).GetValue())
954  {
955  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_4).GetValue().getBColor());
957  aLightVector.emplace_back(aColor, aDirection, false);
958  }
959 
960  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_5).GetValue())
961  {
962  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_5).GetValue().getBColor());
964  aLightVector.emplace_back(aColor, aDirection, false);
965  }
966 
967  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_6).GetValue())
968  {
969  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_6).GetValue().getBColor());
971  aLightVector.emplace_back(aColor, aDirection, false);
972  }
973 
974  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_7).GetValue())
975  {
976  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_7).GetValue().getBColor());
978  aLightVector.emplace_back(aColor, aDirection, false);
979  }
980 
981  if(rSet.Get(SDRATTR_3DSCENE_LIGHTON_8).GetValue())
982  {
983  const basegfx::BColor aColor(rSet.Get(SDRATTR_3DSCENE_LIGHTCOLOR_8).GetValue().getBColor());
985  aLightVector.emplace_back(aColor, aDirection, false);
986  }
987 
988  // get ambient color
989  const Color aAmbientValue(rSet.Get(SDRATTR_3DSCENE_AMBIENTCOLOR).GetValue());
990  const basegfx::BColor aAmbientLight(aAmbientValue.getBColor());
991 
992  return attribute::SdrLightingAttribute(aAmbientLight, aLightVector);
993  }
994 
995  void calculateRelativeCornerRadius(sal_Int32 nRadius, const basegfx::B2DRange& rObjectRange, double& rfCornerRadiusX, double& rfCornerRadiusY)
996  {
997  rfCornerRadiusX = rfCornerRadiusY = static_cast<double>(nRadius);
998 
999  if(0.0 != rfCornerRadiusX)
1000  {
1001  const double fHalfObjectWidth(rObjectRange.getWidth() * 0.5);
1002 
1003  if(0.0 != fHalfObjectWidth)
1004  {
1005  if(rfCornerRadiusX < 0.0)
1006  {
1007  rfCornerRadiusX = 0.0;
1008  }
1009 
1010  if(rfCornerRadiusX > fHalfObjectWidth)
1011  {
1012  rfCornerRadiusX = fHalfObjectWidth;
1013  }
1014 
1015  rfCornerRadiusX /= fHalfObjectWidth;
1016  }
1017  else
1018  {
1019  rfCornerRadiusX = 0.0;
1020  }
1021  }
1022 
1023  if(0.0 != rfCornerRadiusY)
1024  {
1025  const double fHalfObjectHeight(rObjectRange.getHeight() * 0.5);
1026 
1027  if(0.0 != fHalfObjectHeight)
1028  {
1029  if(rfCornerRadiusY < 0.0)
1030  {
1031  rfCornerRadiusY = 0.0;
1032  }
1033 
1034  if(rfCornerRadiusY > fHalfObjectHeight)
1035  {
1036  rfCornerRadiusY = fHalfObjectHeight;
1037  }
1038 
1039  rfCornerRadiusY /= fHalfObjectHeight;
1040  }
1041  else
1042  {
1043  rfCornerRadiusY = 0.0;
1044  }
1045  }
1046  }
1047 
1048  // #i101508# Support handing over given text-to-border distances
1050  const SfxItemSet& rSet,
1051  const SdrText* pText,
1052  const sal_Int32* pLeft,
1053  const sal_Int32* pUpper,
1054  const sal_Int32* pRight,
1055  const sal_Int32* pLower)
1056  {
1058  attribute::FillGradientAttribute aFillFloatTransGradient;
1060  bool bFontworkHideContour(false);
1061 
1062  // look for text first
1063  if(pText)
1064  {
1065  aText = createNewSdrTextAttribute(rSet, *pText, pLeft, pUpper, pRight, pLower);
1066 
1067  // when object has text and text is fontwork and hide contour is set for fontwork, force
1068  // fill style to empty
1069  if(!aText.getSdrFormTextAttribute().isDefault() && aText.isHideContour())
1070  {
1071  bFontworkHideContour = true;
1072  }
1073  }
1074 
1075  if(!bFontworkHideContour)
1076  {
1077  // try fill style
1078  aFill = createNewSdrFillAttribute(rSet);
1079 
1080  if(!aFill.isDefault())
1081  {
1082  // try fillfloattransparence
1083  aFillFloatTransGradient = createNewTransparenceGradientAttribute(rSet);
1084  }
1085  }
1086 
1087  if(!aFill.isDefault() || !aText.isDefault())
1088  {
1089  return attribute::SdrFillTextAttribute(aFill, aFillFloatTransGradient, aText);
1090  }
1091 
1093  }
1094 
1095  } // end of namespace primitive2d
1096 } // end of namespace drawinglayer
1097 
1098 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SdrOutliner & GetDrawOutliner(const SdrTextObj *pObj=nullptr) const
Definition: svdmodel.cxx:707
long Width() const
#define XATTR_LINESTARTCENTER
Definition: xdef.hxx:98
#define XATTR_FILLHATCH
Definition: xdef.hxx:110
bool IsChainable() const
Definition: svdotext.cxx:1924
#define SDRATTR_3DSCENE_TWO_SIDED_LIGHTING
Definition: svddef.hxx:361
double getHeight() const
#define XATTR_FILLBMP_POSOFFSETX
Definition: xdef.hxx:124
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:374
long Height() const
#define F_PI1800
#define SDRATTR_3DSCENE_SHADE_MODE
Definition: svddef.hxx:388
sal_uInt8 GetLuminance() const
attribute::FillGradientAttribute createNewTransparenceGradientAttribute(const SfxItemSet &rSet)
#define XATTR_FILLGRADIENT
Definition: xdef.hxx:109
#define SDRATTR_SHADOWTRANSPARENCE
Definition: svddef.hxx:175
bool IsInEditMode() const
Definition: svdotext.hxx:323
#define XATTR_FILLFLOATTRANSPARENCE
Definition: xdef.hxx:118
#define SDRATTR_3DSCENE_LIGHTON_2
Definition: svddef.hxx:372
attribute::SdrFillGraphicAttribute createNewSdrFillGraphicAttribute(const SfxItemSet &rSet)
SdrTextAniKind GetTextAniKind() const
Definition: svdotext.cxx:1770
#define SDRATTR_SHADOWCOLOR
Definition: svddef.hxx:172
attribute::SdrFillAttribute createNewSdrFillAttribute(const SfxItemSet &rSet)
#define SDRATTR_3DSCENE_LIGHTON_8
Definition: svddef.hxx:378
#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:331
#define XATTR_LINEJOINT
Definition: xdef.hxx:101
#define SDRATTR_3DSCENE_LIGHTCOLOR_3
Definition: svddef.hxx:364
Definition: xdash.hxx:31
double getWidth() const
#define XATTR_FILLBMP_TILEOFFSETY
Definition: xdef.hxx:122
#define SDRATTR_3DSCENE_LIGHTCOLOR_6
Definition: svddef.hxx:367
sal_uInt16 GetDots() const
Definition: xdash.hxx:55
sal_uInt16 GetXOffset() const
Definition: xgrad.hxx:71
std::unique_ptr< OutlinerParaObject > GetEditOutlinerParaObject() const
Definition: svdotext.cxx:808
#define SDRATTR_3DSCENE_LIGHTON_5
Definition: svddef.hxx:375
#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:373
#define XATTR_LINEENDCENTER
Definition: xdef.hxx:99
#define SDRATTR_SHADOWYDIST
Definition: svddef.hxx:174
#define SDRATTR_3DSCENE_LIGHTDIRECTION_5
Definition: svddef.hxx:383
#define SDRATTR_3DSCENE_LIGHTCOLOR_1
Definition: svddef.hxx:362
RectPoint
Definition: rectenum.hxx:22
#define SDRATTR_3DSCENE_PERSPECTIVE
Definition: svddef.hxx:358
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:1750
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
#define SDRATTR_3DSCENE_LIGHTCOLOR_2
Definition: svddef.hxx:363
long GetTextRightDistance() const
Right inner spacing to borders.
Definition: svdotext.cxx:1755
#define SDRATTR_3DSCENE_LIGHTDIRECTION_6
Definition: svddef.hxx:384
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:1841
#define SDRATTR_3DSCENE_LIGHTDIRECTION_4
Definition: svddef.hxx:382
#define SDRATTR_SHADOWXDIST
Definition: svddef.hxx:173
#define SDRATTR_3DSCENE_LIGHTDIRECTION_8
Definition: svddef.hxx:386
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:371
SdrModel & getSdrModelFromSdrObject() const
Definition: svdobj.cxx:299
#define XATTR_FORMTXTHIDEFORM
Definition: xdef.hxx:141
#define SDRATTR_SHADOW
Definition: svddef.hxx:171
#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:215
virtual SdrText * getActiveText() const
returns the currently active text.
Definition: svdotext.cxx:2048
#define XATTR_FILLSTYLE
Definition: xdef.hxx:107
double CreateDotDashArray(::std::vector< double > &rDotDashArray, double fLineWidth) const
Definition: xattr.cxx:436
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:1760
#define SDRATTR_3DSCENE_DISTANCE
Definition: svddef.hxx:359
#define SDRATTR_3DSCENE_LIGHTDIRECTION_7
Definition: svddef.hxx:385
#define SDRATTR_3DSCENE_LIGHTCOLOR_4
Definition: svddef.hxx:365
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
attribute::SdrLineStartEndAttribute createNewSdrLineStartEndAttribute(const SfxItemSet &rSet, double fWidth)
#define XATTR_FILLBMP_TILE
Definition: xdef.hxx:114
#define SDRATTR_3DSCENE_LIGHTCOLOR_8
Definition: svddef.hxx:369
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_3DSCENE_LIGHTON_7
Definition: svddef.hxx:377
attribute::SdrLineAttribute createNewSdrLineAttribute(const SfxItemSet &rSet)
#define SDRATTR_3DSCENE_SHADOW_SLANT
Definition: svddef.hxx:387
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:370
#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:1836
virtual sal_Int32 getTextCount() const override
returns the number of texts available for this object.
Definition: svdotext.cxx:2072
#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:217
#define XATTR_LINESTARTWIDTH
Definition: xdef.hxx:96
#define XATTR_LINECOLOR
Definition: xdef.hxx:93
#define SDRATTR_3DSCENE_LIGHTDIRECTION_3
Definition: svddef.hxx:381
#define SDRATTR_3DSCENE_LIGHTCOLOR_7
Definition: svddef.hxx:368
#define SDRATTR_3DSCENE_LIGHTON_6
Definition: svddef.hxx:376
OutlinerParaObject * GetOutlinerParaObject() const
Definition: svdtext.cxx:90
SdrTextVertAdjust GetTextVerticalAdjust(const SfxItemSet &rSet) const
Definition: svdotext.cxx:363
#define SDRATTR_3DSCENE_LIGHTDIRECTION_1
Definition: svddef.hxx:379
#define SDRATTR_3DSCENE_LIGHTDIRECTION_2
Definition: svddef.hxx:380
const SfxPoolItem * GetItem(sal_uInt16 nWhich, bool bSearchInParent=true) const
#define SDRATTR_3DSCENE_LIGHTCOLOR_5
Definition: svddef.hxx:366
#define XATTR_LINETRANSPARENCE
Definition: xdef.hxx:100
long GetTextLowerDistance() const
Bottom inner spacing to borders.
Definition: svdotext.cxx:1765
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