LibreOffice Module editeng (master) 1
borderline.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
20#include <sal/config.h>
21
22#include <algorithm>
23
26
28#include <editeng/itemtype.hxx>
29#include <editeng/editrids.hrc>
30#include <editeng/eerdll.hxx>
31#include <tools/bigint.hxx>
32
34#include <com/sun/star/util/XComplexColor.hpp>
35
36using namespace ::com::sun::star::table::BorderLineStyle;
37using namespace css;
38
39// class SvxBorderLine --------------------------------------------------
40
41namespace {
42
43 Color lcl_compute3DColor( Color aMain, int nLight, int nMedium, int nDark )
44 {
47
48 int nCoef = 0;
49 if ( hsl.getZ( ) >= 0.5 )
50 nCoef = nLight;
51 else if ( 0.5 > hsl.getZ() && hsl.getZ() >= 0.25 )
52 nCoef = nMedium;
53 else
54 nCoef = nDark;
55
56 double L = std::min(hsl.getZ() * 255.0 + nCoef, 255.0);
57 hsl.setZ( L / 255.0 );
59
60 return Color( color );
61 }
62} // Anonymous namespace
63
64namespace editeng
65{
66
67bool SvxBorderLine::setComplexColorFromAny(css::uno::Any const& rValue)
68{
69 css::uno::Reference<css::util::XComplexColor> xComplexColor;
70 if (!(rValue >>= xComplexColor))
71 return false;
72
73 if (xComplexColor.is())
74 {
75 auto aComplexColor = model::color::getFromXComplexColor(xComplexColor);
76 setComplexColor(aComplexColor);
77 }
78 return true;
79}
80
82{
83 return aMain;
84}
85
87{
88
89 // Divide Luminance by 2
92 hsl.setZ( hsl.getZ() * 0.5 );
94
95 return Color( color );
96}
97
98
100{
101 // These values have been defined in an empirical way
102 return lcl_compute3DColor( aMain, 3, 40, 83 );
103}
104
106{
107 // These values have been defined in an empirical way
108 return lcl_compute3DColor( aMain, -85, -43, -1 );
109}
110
112{
113 // These values have been defined in an empirical way
114 return lcl_compute3DColor( aMain, -42, -0, 42 );
115}
116
118 SvxBorderLineStyle nStyle,
119 Color (*pColorOutFn)( Color ), Color (*pColorInFn)( Color ) )
120 : m_nWidth(nWidth)
121 , m_nMult(1)
122 , m_nDiv(1)
123 , m_pColorOutFn(pColorOutFn)
124 , m_pColorInFn(pColorInFn)
125 , m_pColorGapFn(nullptr)
126 , m_aWidthImpl(SvxBorderLine::getWidthImpl(nStyle))
127 , m_nStyle(nStyle)
128 , m_bMirrorWidths(false)
129 , m_bUseLeftTop(false)
130{
131 if (pCol)
132 m_aColor = *pCol;
133}
134
136ConvertBorderStyleFromWord(int const nWordLineStyle)
137{
138 switch (nWordLineStyle)
139 {
140 // First the single lines
141 case 1:
142 case 2: // thick line
143 case 5: // hairline
144 // and the unsupported special cases which we map to a single line
145 case 20:
147 case 6:
149 case 7:
151 case 22:
153 case 8:
155 case 9:
157 // then the shading beams which we represent by a double line
158 case 23:
160 // then the double lines, for which we have good matches
161 case 3:
162 case 10: // Don't have triple so use double
163 case 21: // Don't have double wave: use double instead
165 case 11:
167 case 12:
168 case 13: // Don't have thin thick thin, so use thick thin
170 case 14:
172 case 15:
173 case 16: // Don't have thin thick thin, so use thick thin
175 case 17:
177 case 18:
178 case 19: // Don't have thin thick thin, so use thick thin
180 case 24:
182 case 25:
184 case 26:
186 case 27:
188 default:
190 }
191}
192
193const double THINTHICK_SMALLGAP_line2 = 15.0;
194const double THINTHICK_SMALLGAP_gap = 15.0;
195const double THINTHICK_LARGEGAP_line1 = 30.0;
196const double THINTHICK_LARGEGAP_line2 = 15.0;
197const double THICKTHIN_SMALLGAP_line1 = 15.0;
198const double THICKTHIN_SMALLGAP_gap = 15.0;
199const double THICKTHIN_LARGEGAP_line1 = 15.0;
200const double THICKTHIN_LARGEGAP_line2 = 30.0;
201const double OUTSET_line1 = 15.0;
202const double INSET_line2 = 15.0;
203
204double
205ConvertBorderWidthFromWord(SvxBorderLineStyle const eStyle, double const i_fWidth,
206 int const nWordLineStyle)
207{
208 // fdo#68779: at least for RTF, 0.75pt is the default if width is missing
209 double const fWidth((i_fWidth == 0.0) ? 15.0 : i_fWidth);
210 switch (eStyle)
211 {
212 // Single lines
214 switch (nWordLineStyle)
215 {
216 case 2:
217 return (fWidth * 2.0); // thick
218 case 5: // fdo#55526: map 0 hairline width to > 0
219 return std::max(fWidth, 1.0);
220 default:
221 return fWidth;
222 }
223 break;
224
229 return fWidth;
230
231 // Display a minimum effective border width of 1pt
233 return (fWidth > 0 && fWidth < 20) ? 20 : fWidth;
234
235 // Double lines
237 return fWidth * 3.0;
238
243 return fWidth * 2.0;
244
247
250
253
256
258 return (fWidth * 2.0) + OUTSET_line1;
259
261 return (fWidth * 2.0) + INSET_line2;
262
263 default:
264 assert(false); // should only be called for known border style
265 }
266 return 0;
267}
268
269double
270ConvertBorderWidthToWord(SvxBorderLineStyle const eStyle, double const fWidth)
271{
272 if ( !fWidth )
273 return 0;
274
275 switch (eStyle)
276 {
277 // Single lines
284 return fWidth;
285
286 // Double lines
289 return std::max(1.0, fWidth / 3.0);
290
295 return std::max(1.0, fWidth / 2.0);
296
298 return std::max(1.0, fWidth - THINTHICK_SMALLGAP_line2 - THINTHICK_SMALLGAP_gap);
299
301 return std::max(1.0, fWidth - THINTHICK_LARGEGAP_line1 - THINTHICK_LARGEGAP_line2);
302
304 return std::max(1.0, fWidth - THICKTHIN_SMALLGAP_line1 - THICKTHIN_SMALLGAP_gap);
305
307 return std::max(1.0, fWidth - THICKTHIN_LARGEGAP_line1 - THICKTHIN_LARGEGAP_line2);
308
310 return std::max(1.0, (fWidth - OUTSET_line1) / 2.0);
311
313 return std::max(1.0, (fWidth - INSET_line2) / 2.0);
314
316 return 0;
317
318 default:
319 assert(false); // should only be called for known border style
320 return 0;
321 }
322}
323
329{
330 BorderWidthImpl aImpl;
331
332 switch ( nStyle )
333 {
334 // No line: no width
336 aImpl = BorderWidthImpl( BorderWidthImplFlags::FIXED, 0.0 );
337 break;
338
339 // Single lines
346 aImpl = BorderWidthImpl( BorderWidthImplFlags::CHANGE_LINE1, 1.0 );
347 break;
348
349 // Double lines
350
352 aImpl = BorderWidthImpl(
353 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
354 // fdo#46112 fdo#38542 fdo#43249:
355 // non-constant widths must sum to 1
356 1.0/3.0, 1.0/3.0, 1.0/3.0 );
357 break;
358
360 aImpl = BorderWidthImpl(BorderWidthImplFlags::CHANGE_DIST, 10.0, 10.0, 1.0);
361 break;
362
364 aImpl = BorderWidthImpl( BorderWidthImplFlags::CHANGE_LINE1, 1.0,
366 break;
367
369 aImpl = BorderWidthImpl(
370 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
371 0.5, 0.25, 0.25 );
372 break;
373
375 aImpl = BorderWidthImpl( BorderWidthImplFlags::CHANGE_DIST,
377 break;
378
380 aImpl = BorderWidthImpl( BorderWidthImplFlags::CHANGE_LINE2, THICKTHIN_SMALLGAP_line1,
382 break;
383
385 aImpl = BorderWidthImpl(
386 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
387 0.25, 0.5, 0.25 );
388 break;
389
391 aImpl = BorderWidthImpl( BorderWidthImplFlags::CHANGE_DIST, THICKTHIN_LARGEGAP_line1,
393 break;
394
395 // Engraved / Embossed
396 /*
397 * Word compat: the lines widths are exactly following this rule, should be:
398 * 0.75pt up to 3pt and then 3pt
399 */
400
403 aImpl = BorderWidthImpl(
404 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
405 0.25, 0.25, 0.5 );
406 break;
407
408 // Inset / Outset
409 /*
410 * Word compat: the gap width should be measured relatively to the biggest width for the
411 * row or column.
412 */
414 aImpl = BorderWidthImpl(
415 BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
416 OUTSET_line1, 0.5, 0.5 );
417 break;
418
420 aImpl = BorderWidthImpl(
421 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_DIST,
422 0.5, INSET_line2, 0.5 );
423 break;
424 }
425
426 return aImpl;
427}
428
430{
431 m_nMult = nMult;
432 m_nDiv = nDiv;
433}
434
435void SvxBorderLine::GuessLinesWidths( SvxBorderLineStyle nStyle, sal_uInt16 nOut, sal_uInt16 nIn, sal_uInt16 nDist )
436{
437 if (SvxBorderLineStyle::NONE == nStyle)
438 {
440 if ( nOut > 0 && nIn > 0 )
442 }
443
444 if ( nStyle == SvxBorderLineStyle::DOUBLE )
445 {
446 static const SvxBorderLineStyle aDoubleStyles[] =
447 {
456 };
457
458 static size_t const len = SAL_N_ELEMENTS(aDoubleStyles);
459 tools::Long nWidth = 0;
461 for (size_t i = 0; i < len && nWidth == 0; ++i)
462 {
463 nTestStyle = aDoubleStyles[i];
464 BorderWidthImpl aWidthImpl = getWidthImpl( nTestStyle );
465 nWidth = aWidthImpl.GuessWidth( nOut, nIn, nDist );
466 }
467
468 // If anything matched, then set it
469 if ( nWidth > 0 )
470 {
471 nStyle = nTestStyle;
472 SetBorderLineStyle(nStyle);
473 m_nWidth = nWidth;
474 }
475 else
476 {
477 // fdo#38542: not a known double, default to something custom...
478 SetBorderLineStyle(nStyle);
479 m_nWidth = nOut + nIn + nDist;
480 if (m_nWidth)
481 {
483 BorderWidthImplFlags::CHANGE_LINE1 | BorderWidthImplFlags::CHANGE_LINE2 | BorderWidthImplFlags::CHANGE_DIST,
484 static_cast<double>(nOut ) / static_cast<double>(m_nWidth),
485 static_cast<double>(nIn ) / static_cast<double>(m_nWidth),
486 static_cast<double>(nDist) / static_cast<double>(m_nWidth));
487 }
488 }
489 }
490 else
491 {
492 SetBorderLineStyle(nStyle);
493 if (nOut == 0 && nIn > 0)
494 {
495 // If only inner width is given swap inner and outer widths for
496 // single line styles, otherwise GuessWidth() marks this as invalid
497 // and returns a 0 width.
498 switch (nStyle)
499 {
506 std::swap( nOut, nIn);
507 break;
508 default:
509 ; // nothing
510 }
511 }
512 m_nWidth = m_aWidthImpl.GuessWidth( nOut, nIn, nDist );
513 }
514}
515
517{
518 sal_uInt16 nOut = static_cast<sal_uInt16>(BigInt::Scale( m_aWidthImpl.GetLine1( m_nWidth ), m_nMult, m_nDiv ));
519 if ( m_bMirrorWidths )
520 nOut = static_cast<sal_uInt16>(BigInt::Scale( m_aWidthImpl.GetLine2( m_nWidth ), m_nMult, m_nDiv ));
521 return nOut;
522}
523
525{
526 sal_uInt16 nIn = static_cast<sal_uInt16>(BigInt::Scale( m_aWidthImpl.GetLine2( m_nWidth ), m_nMult, m_nDiv ));
527 if ( m_bMirrorWidths )
528 nIn = static_cast<sal_uInt16>(BigInt::Scale( m_aWidthImpl.GetLine1( m_nWidth ), m_nMult, m_nDiv ));
529 return nIn;
530}
531
533{
534 return static_cast<sal_uInt16>(BigInt::Scale( m_aWidthImpl.GetGap( m_nWidth ), m_nMult, m_nDiv ));
535}
536
537
539{
540 return (m_aColor == rCmp.m_aColor &&
542 m_nWidth == rCmp.m_nWidth &&
544 m_aWidthImpl == rCmp.m_aWidthImpl &&
545 m_nStyle == rCmp.GetBorderLineStyle() &&
548 m_pColorInFn == rCmp.m_pColorInFn &&
550}
551
553{
554 m_nStyle = nNew;
556
557 switch ( nNew )
558 {
563 m_bUseLeftTop = true;
564 break;
569 m_bUseLeftTop = true;
570 break;
574 m_bUseLeftTop = true;
575 m_pColorGapFn = nullptr;
576 break;
580 m_bUseLeftTop = true;
581 m_pColorGapFn = nullptr;
582 break;
583 default:
586 m_bUseLeftTop = false;
587 m_pColorGapFn = nullptr;
588 break;
589 }
590}
591
592Color SvxBorderLine::GetColorOut( bool bLeftOrTop ) const
593{
594 Color aResult = m_aColor;
595
596 if ( m_aWidthImpl.IsDouble() && m_pColorOutFn != nullptr )
597 {
598 if ( !bLeftOrTop && m_bUseLeftTop )
599 aResult = (*m_pColorInFn)(m_aColor);
600 else
601 aResult = (*m_pColorOutFn)(m_aColor);
602 }
603
604 return aResult;
605}
606
607Color SvxBorderLine::GetColorIn( bool bLeftOrTop ) const
608{
609 Color aResult = m_aColor;
610
611 if ( m_aWidthImpl.IsDouble() && m_pColorInFn != nullptr )
612 {
613 if ( !bLeftOrTop && m_bUseLeftTop )
614 aResult = (*m_pColorOutFn)(m_aColor);
615 else
616 aResult = (*m_pColorInFn)(m_aColor);
617 }
618
619 return aResult;
620}
621
623{
624 Color aResult = m_aColor;
625
626 if ( m_aWidthImpl.IsDouble() && m_pColorGapFn != nullptr )
627 {
628 aResult = (*m_pColorGapFn)(m_aColor);
629 }
630
631 return aResult;
632}
633
635{
636 m_nWidth = nWidth;
637}
638
640 MapUnit eDestUnit,
641 const IntlWrapper* pIntl,
642 bool bMetricStr) const
643{
644 static TranslateId aStyleIds[] =
645 {
646 RID_SOLID,
647 RID_DOTTED,
648 RID_DASHED,
649 RID_DOUBLE,
650 RID_THINTHICK_SMALLGAP,
651 RID_THINTHICK_MEDIUMGAP,
652 RID_THINTHICK_LARGEGAP,
653 RID_THICKTHIN_SMALLGAP,
654 RID_THICKTHIN_MEDIUMGAP,
655 RID_THICKTHIN_LARGEGAP,
656 RID_EMBOSSED,
657 RID_ENGRAVED,
658 RID_OUTSET,
659 RID_INSET,
660 RID_FINE_DASHED,
661 RID_DOUBLE_THIN,
662 RID_DASH_DOT,
663 RID_DASH_DOT_DOT
664 };
665 OUString aStr = "(" + ::GetColorString(m_aColor) + cpDelim;
666
667 if ( static_cast<int>(m_nStyle) < int(SAL_N_ELEMENTS(aStyleIds)) )
668 {
669 TranslateId pResId = aStyleIds[static_cast<int>(m_nStyle)];
670 aStr += EditResId(pResId);
671 }
672 else
673 {
674 OUString sMetric = EditResId(GetMetricId( eDestUnit ));
675 aStr += GetMetricText( static_cast<tools::Long>(GetInWidth()), eSrcUnit, eDestUnit, pIntl );
676 if ( bMetricStr )
677 aStr += sMetric;
678 aStr += cpDelim +
679 GetMetricText( static_cast<tools::Long>(GetOutWidth()), eSrcUnit, eDestUnit, pIntl );
680 if ( bMetricStr )
681 aStr += sMetric;
682 aStr += cpDelim +
683 GetMetricText( static_cast<tools::Long>(GetDistance()), eSrcUnit, eDestUnit, pIntl );
684 if ( bMetricStr )
685 aStr += sMetric;
686 }
687 aStr += ")";
688 return aStr;
689}
690
691bool SvxBorderLine::HasPriority( const SvxBorderLine& rOtherLine ) const
692{
693 const sal_uInt16 nThisSize = GetScaledWidth();
694 const sal_uInt16 nOtherSize = rOtherLine.GetScaledWidth();
695
696 if ( nThisSize > nOtherSize )
697 {
698 return true;
699 }
700 else if ( nThisSize < nOtherSize )
701 {
702 return false;
703 }
704 else if ( rOtherLine.GetInWidth() && !GetInWidth() )
705 {
706 return true;
707 }
708
709 return false;
710}
711
712bool operator!=( const SvxBorderLine& rLeft, const SvxBorderLine& rRight )
713{
714 return !(rLeft == rRight);
715}
716
717} // namespace editeng
718
719/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SvxBorderLineStyle
Definition: borderline.hxx:50
@ FINE_DASHED
Finely dashed border line.
@ THICKTHIN_MEDIUMGAP
Double border line with a thick line outside and a thin line inside separated by a medium gap.
@ INSET
Inset border line.
@ EMBOSSED
3D embossed border line.
@ ENGRAVED
3D engraved border line.
@ THINTHICK_SMALLGAP
Double border line with a thin line outside and a thick line inside separated by a small gap.
@ DASHED
Dashed border line.
@ THICKTHIN_LARGEGAP
Double border line with a thick line outside and a thin line inside separated by a large gap.
@ DASH_DOT
Line consisting of a repetition of one dash and one dot.
@ OUTSET
Outset border line.
@ DOUBLE_THIN
Double border line consisting of two fixed thin lines separated by a variable gap.
@ NONE
No border line.
@ THINTHICK_MEDIUMGAP
Double border line with a thin line outside and a thick line inside separated by a medium gap.
@ SOLID
Solid border line.
@ DASH_DOT_DOT
Line consisting of a repetition of one dash and 2 dots.
@ THICKTHIN_SMALLGAP
Double border line with a thick line outside and a thin line inside separated by a small gap.
@ THINTHICK_LARGEGAP
Double border line with a thin line outside and a thick line inside separated by a large gap.
@ DOTTED
Dotted border line.
@ DOUBLE
Double border line.
static tools::Long Scale(tools::Long nVal, tools::Long nMult, tools::Long nDiv)
tools::Long GetLine2(tools::Long nWidth) const
tools::Long GetGap(tools::Long nWidth) const
bool IsDouble() const
tools::Long GuessWidth(tools::Long nLine1, tools::Long nLine2, tools::Long nGap)
tools::Long GetLine1(tools::Long nWidth) const
basegfx::BColor getBColor() const
TYPE getZ() const
void setZ(TYPE fZ)
sal_uInt16 GetDistance() const
Definition: borderline.cxx:532
bool setComplexColorFromAny(css::uno::Any const &rValue)
Definition: borderline.cxx:67
SvxBorderLine(const Color *pCol=nullptr, tools::Long nWidth=0, SvxBorderLineStyle nStyle=SvxBorderLineStyle::SOLID, Color(*pColorOutFn)(Color)=&darkColor, Color(*pColorInFn)(Color)=&darkColor)
Definition: borderline.cxx:117
bool operator==(const SvxBorderLine &rCmp) const
Definition: borderline.cxx:538
void SetWidth(tools::Long nWidth)
Definition: borderline.cxx:634
Color(* m_pColorInFn)(Color)
Definition: borderline.hxx:154
static Color darkColor(Color aMain)
Definition: borderline.cxx:81
Color(* m_pColorGapFn)(Color)
Definition: borderline.hxx:155
Color GetColorIn(bool bLeftOrTop=true) const
Definition: borderline.cxx:607
OUString GetValueString(MapUnit eSrcUnit, MapUnit eDestUnit, const IntlWrapper *pIntl, bool bMetricStr=false) const
Definition: borderline.cxx:639
SvxBorderLineStyle m_nStyle
Definition: borderline.hxx:159
static Color lightColor(Color aMain)
Definition: borderline.cxx:86
Color(* m_pColorOutFn)(Color)
Definition: borderline.hxx:153
sal_uInt16 GetOutWidth() const
Definition: borderline.cxx:516
BorderWidthImpl m_aWidthImpl
Definition: borderline.hxx:156
static Color threeDMediumColor(Color aMain)
Definition: borderline.cxx:111
sal_uInt16 GetScaledWidth() const
Definition: borderline.hxx:244
bool HasPriority(const SvxBorderLine &rOtherLine) const
Definition: borderline.cxx:691
static BorderWidthImpl getWidthImpl(SvxBorderLineStyle nStyle)
Get the BorderWithImpl object corresponding to the given #nStyle, all the units handled by the result...
Definition: borderline.cxx:328
model::ComplexColor m_aComplexColor
Definition: borderline.hxx:158
static Color threeDDarkColor(Color aMain)
Definition: borderline.cxx:105
sal_uInt16 GetInWidth() const
Definition: borderline.cxx:524
Color GetColorOut(bool bLeftOrTop=true) const
Definition: borderline.cxx:592
void setComplexColor(model::ComplexColor const &rComplexColor)
Definition: borderline.hxx:177
void ScaleMetrics(tools::Long nMult, tools::Long nDiv)
Definition: borderline.cxx:429
void SetBorderLineStyle(SvxBorderLineStyle nNew)
Definition: borderline.cxx:552
Color GetColorGap() const
Definition: borderline.cxx:622
static Color threeDLightColor(Color aMain)
Definition: borderline.cxx:99
SvxBorderLineStyle GetBorderLineStyle() const
Definition: borderline.hxx:225
void GuessLinesWidths(SvxBorderLineStyle nStyle, sal_uInt16 nOut, sal_uInt16 nIn=0, sal_uInt16 nDist=0)
Guess the style and width from the three lines widths values.
Definition: borderline.cxx:435
OUString EditResId(TranslateId aId)
Definition: eerdll.cxx:192
OUString GetColorString(const Color &rCol)
Definition: itemtype.cxx:137
OUString GetMetricText(tools::Long nVal, MapUnit eSrcUnit, MapUnit eDestUnit, const IntlWrapper *pIntl)
Definition: itemtype.cxx:32
TranslateId GetMetricId(MapUnit eUnit)
Definition: itemtype.cxx:191
constexpr OUStringLiteral cpDelim
Definition: itemtype.hxx:33
#define SAL_N_ELEMENTS(arr)
MapUnit
aStr
BColor rgb2hsl(const BColor &rRGBColor)
BColor hsl2rgb(const BColor &rHSLColor)
const double THINTHICK_SMALLGAP_gap
Definition: borderline.cxx:194
const double THICKTHIN_LARGEGAP_line1
Definition: borderline.cxx:199
const double THINTHICK_LARGEGAP_line1
Definition: borderline.cxx:195
bool operator!=(const SvxBorderLine &rLeft, const SvxBorderLine &rRight)
Definition: borderline.cxx:712
double ConvertBorderWidthFromWord(SvxBorderLineStyle const eStyle, double const i_fWidth, int const nWordLineStyle)
Definition: borderline.cxx:205
const double THICKTHIN_LARGEGAP_line2
Definition: borderline.cxx:200
const double THICKTHIN_SMALLGAP_line1
Definition: borderline.cxx:197
const double THINTHICK_SMALLGAP_line2
Definition: borderline.cxx:193
const double THINTHICK_LARGEGAP_line2
Definition: borderline.cxx:196
const double OUTSET_line1
Definition: borderline.cxx:201
const double INSET_line2
Definition: borderline.cxx:202
SvxBorderLineStyle ConvertBorderStyleFromWord(int const nWordLineStyle)
Definition: borderline.cxx:136
const double THICKTHIN_SMALLGAP_gap
Definition: borderline.cxx:198
double ConvertBorderWidthToWord(SvxBorderLineStyle const eStyle, double const fWidth)
convert border width in twips between Word formats and LO
Definition: borderline.cxx:270
int i
model::ComplexColor getFromXComplexColor(uno::Reference< util::XComplexColor > const &rxColor)
long Long