21#include <config_folders.h>
25#include <officecfg/Office/Common.hxx>
35#include <rtl/math.hxx>
45#include <svtools/strings.hrc>
55#include <rtl/bootstrap.hxx>
57#include <borderline.hrc>
61#define IMGOUTERTEXTSPACE 5
62#define EXTRAFONTSIZE 5
63#define GAPTOEXTRAPREVIEW 10
73 m_nRateGap( nRateGap )
92 result = std::max<tools::Long>(0,
94 - (nConstant2 + nConstantD));
110 result = std::max<tools::Long>(0,
112 - (nConstant1 + nConstantD));
124 result = std::max<tools::Long>(0,
126 - (nConstant1 + nConstant2));
130 if ( result < MINGAPWIDTH && m_nRate1 > 0 &&
m_nRate2 > 0 )
138 double nWidth = -1.0;
140 nWidth = double( nTested ) / nRate;
143 if ( rtl::math::approxEqual(
double( nTested ), nRate) )
152 std::vector< double > aToCompare;
153 bool bInvalid =
false;
158 aToCompare.push_back( nWidth1 );
159 else if (nWidth1 < 0)
165 aToCompare.push_back( nWidth2 );
166 else if (nWidth2 < 0)
172 aToCompare.push_back( nWidthGap );
173 else if ( !bGapChange && nWidthGap < 0 )
177 assert((((bLine1Change) ?
m_nRate1 : 0) +
179 ((bGapChange) ?
m_nRateGap : 0)) - 1.0 < 0.00001 );
182 if ( (!bInvalid) && (!aToCompare.empty()) )
184 nWidth = *aToCompare.begin();
185 for (
auto const& elem : aToCompare)
187 bInvalid = ( nWidth != elem );
191 nWidth = bInvalid ? 0.0 : nLine1 + nLine2 + nGap;
209 for ( sal_uInt32
i = 0;
i < aPolygons.
count( );
i++ )
221 aDashPolygon.
append( aStart + aWidthOffset );
222 aDashPolygon.
append( aEnd + aWidthOffset );
223 aDashPolygon.
append( aEnd - aWidthOffset );
224 aDashPolygon.
append( aStart - aWidthOffset );
240 std::vector<double> aPattern;
243 case SvxBorderLineStyle::DOTTED:
244 aPattern.push_back( 1.0 );
245 aPattern.push_back( 2.0 );
247 case SvxBorderLineStyle::DASHED:
248 aPattern.push_back( 16.0 );
249 aPattern.push_back( 5.0 );
251 case SvxBorderLineStyle::FINE_DASHED:
252 aPattern.push_back( 6.0 );
253 aPattern.push_back( 2.0 );
255 case SvxBorderLineStyle::DASH_DOT:
256 aPattern.push_back( 16.0 );
257 aPattern.push_back( 5.0 );
258 aPattern.push_back( 5.0 );
259 aPattern.push_back( 5.0 );
261 case SvxBorderLineStyle::DASH_DOT_DOT:
262 aPattern.push_back( 16.0 );
263 aPattern.push_back( 5.0 );
264 aPattern.push_back( 5.0 );
265 aPattern.push_back( 5.0 );
266 aPattern.push_back( 5.0 );
267 aPattern.push_back( 5.0 );
282 explicit ApplyScale(
double fScale ) :
mfScale(fScale) {}
283 void operator() (
double& rVal )
293 std::vector<double> aPattern =
GetDashing(nDashing);
294 std::for_each(aPattern.begin(), aPattern.end(), ApplyScale(fScale));
300 std::vector<double> aPattern =
GetDashing(nDashing);
301 std::for_each(aPattern.begin(), aPattern.end(), ApplyScale(fScale));
305 if (aPattern.empty())
306 aPolygons.
append(rPolygon);
353 if (rEvent.GetId() != VclEventId::ApplicationDataChanged)
357 if (
pData->GetType() == DataChangedEventType::SETTINGS)
360 rDev.disposeAndClear();
363 calcCustomItemSize(*m_xComboBox);
364 if (mbWYSIWYG && mpFontList && !mpFontList->empty())
366 mnPreviewProgress = 0;
367 maUpdateIdle.Start();
373 : m_xComboBox(
std::move(
p))
374 , mnPreviewProgress(0)
376 , maUpdateIdle(
"FontNameBox Preview Update")
400 rDev.disposeAndClear();
409 RTL_TEXTENCODING_UTF8));
411 if (
aEntries.isEmpty() || aFontMRUEntriesFile.isEmpty())
415 aStream.
Open( aFontMRUEntriesFile, StreamMode::WRITE | StreamMode::TRUNC );
418 SAL_INFO(
"svtools.control",
"FontNameBox::SaveMRUEntries: opening mru entries file " << aFontMRUEntriesFile <<
" failed");
429 if (aFontMRUEntriesFile.isEmpty())
432 if (!officecfg::Office::Common::Font::View::ShowFontBoxWYSIWYG::get())
435 SvFileStream aStream( aFontMRUEntriesFile, StreamMode::READ );
438 SAL_INFO(
"svtools.control",
"FontNameBox::LoadMRUEntries: opening mru entries file " << aFontMRUEntriesFile <<
" failed");
444 OUString
aEntries = OStringToOUString(aLine,
445 RTL_TEXTENCODING_UTF8);
451 OUString sUserConfigDir(
"${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER
"/" SAL_CONFIGFILE(
"bootstrap")
"::UserInstallation}");
452 rtl::Bootstrap::expandMacros(sUserConfigDir);
471 OUString aOldText =
m_xComboBox->get_active_text();
472 OUString rEntries =
m_xComboBox->get_mru_entries();
473 bool bLoadFromFile = rEntries.isEmpty();
482 for (
size_t i = 0;
i < nFontCount; ++
i)
503 if (!aOldText.isEmpty())
545 while (aSize.Height() > 0)
566 CachePreview(mnPreviewProgress++,
nullptr);
570 if (mnPreviewProgress < std::min<size_t>(25, mpFontList->size()))
571 maUpdateIdle.Start();
598 bool bUsingCorrectFont =
true;
606 bUsingCorrectFont =
false;
610 bUsingCorrectFont = shrinkFontToFit(sFontName, nH, aFont, rDevice, aTextRect) != 0;
613 if (!bUsingCorrectFont)
622 Point aPos( nX, rTopLeft.
Y() + nVertAdjust );
626 if (!bUsingCorrectFont)
629 OUString sSampleText;
633 const bool bNameBeginsWithLatinText = rFontMetric.
GetFamilyName()[0] <=
'z';
635 if (bNameBeginsWithLatinText || !bUsingCorrectFont)
642 if (sSampleText.isEmpty() && !bUsingCorrectFont)
644 static const UScriptCode aScripts[] =
673 USCRIPT_SIMPLIFIED_HAN,
674 USCRIPT_TRADITIONAL_HAN,
679 for (
const UScriptCode& rScript : aScripts)
682 if (!sText.isEmpty())
684 bool bHasSampleTextGlyphs = (-1 == rDevice.
HasGlyphs(aFont, sText));
685 if (bHasSampleTextGlyphs)
693 static const UScriptCode aMinimalScripts[] =
699 for (
const UScriptCode& rMinimalScript : aMinimalScripts)
702 if (!sText.isEmpty())
704 bool bHasSampleTextGlyphs = (-1 == rDevice.
HasGlyphs(aFont, sText));
705 if (bHasSampleTextGlyphs)
717 if (bSymbolFont || (!bUsingCorrectFont && sSampleText.isEmpty()))
720 if (!sSampleText.isEmpty())
729 tools::Long nWidth = shrinkFontToFit(sSampleText, nH, aFont, rDevice, aTextRect);
733 sSampleText = sSampleText.copy(0, sSampleText.getLength()-1);
739 if (!sSampleText.isEmpty() && nWidth)
742 nDesiredGap = (nH-nTextHeight)/2;
743 nVertAdjust = nDesiredGap - aTextRect.
Top();
744 aPos =
Point(nTextX + nSpace - nWidth, rTopLeft.
Y() + nVertAdjust);
745 rDevice.
DrawText(aPos, sSampleText);
760 size_t nPreviewIndex;
763 if (!bPreviewAvailable)
776 if (!bPreviewAvailable)
791 *pTopLeft = aTopLeft;
799 const ::tools::Rectangle& rRect = std::get<1>(aPayload);
800 bool bSelected = std::get<2>(aPayload);
801 const OUString& rId = std::get<3>(aPayload);
803 sal_uInt32
nIndex = rId.toUInt32();
805 Point aDestPoint(rRect.TopLeft());
812 DrawPreview(rFontMetric, aDestPoint, rRenderContext,
true);
835 : m_xComboBox(
std::move(
p))
852 OUString aOldText =
m_xComboBox->get_active_text();
866 bool bNormal =
false;
867 bool bItalic =
false;
869 bool bBoldItalic =
false;
870 bool bInsert =
false;
872 while ( hFontMetric )
881 if ( (eWeight != eLastWeight) || (eItalic != eLastItalic) ||
882 (eWidth != eLastWidth) )
904 bInsert =
m_xComboBox->find_text(aStyleText) == -1;
908 bInsert =
m_xComboBox->find_text(aStyleText) == -1;
911 eLastWeight = eWeight;
912 eLastItalic = eItalic;
921 const OUString& rAttrStyleText = pList->
GetStyleName( eWeight, eItalic );
922 if (rAttrStyleText != aStyleText)
924 OUString aTempStyleText = pList->
GetStyleName( aFontMetric );
925 if (rAttrStyleText == aTempStyleText)
926 aStyleText = rAttrStyleText;
927 bInsert =
m_xComboBox->find_text(aStyleText) == -1;
932 if ( !bItalic && (aStyleText == pList->
GetItalicStr()) )
934 else if ( !bBold && (aStyleText == pList->
GetBoldStr()) )
955 if ( bNormal || bItalic || bBold )
970 if (!aOldText.isEmpty())
998 , bRelativeMode(false)
1000 , bPtRelative(false)
1002 , m_xComboBox(
std::move(
p))
1021 if (!bRelativeMode || !aFontSizeNames.IsEmpty())
1023 if (aFontSizeNames.Name2Size(m_xComboBox->get_active_text()) != 0)
1027 set_value(get_value());
1029 m_aFocusOutHdl.Call(rWidget);
1038 bool bNewMode = bRelative;
1039 bool bOldPtRelMode = bPtRelative;
1043 bPtRelative =
false;
1047 if ( ((*pStr <
'0') || (*pStr >
'9')) && (*pStr !=
'%') && !
unicode::isSpace(*pStr) )
1049 if ( (
'-' == *pStr ||
'+' == *pStr) && !bPtRelative )
1051 else if ( bPtRelative &&
'p' == *pStr &&
't' == *++pStr )
1062 else if (!
aStr.isEmpty())
1064 if ( -1 !=
aStr.indexOf(
'%') )
1067 bPtRelative =
false;
1070 if (
'-' ==
aStr[0] ||
'+' ==
aStr[0] )
1077 if ( bNewMode != bRelative || bPtRelative != bOldPtRelMode )
1078 SetRelative( bNewMode );
1080 m_aChangeHdl.Call(rBox);
1093 const int* pTempAry;
1094 const int* pAry =
nullptr;
1110 int nSelectionStart, nSelectionEnd;
1111 m_xComboBox->get_entry_selection_bounds(nSelectionStart, nSelectionEnd);
1118 if ( !aFontSizeNames.IsEmpty() )
1126 OUString aSizeName = aFontSizeNames.GetIndexName(
i );
1127 int nSize = aFontSizeNames.GetIndexSize(
i );
1128 OUString
sId(OUString::number(-nSize));
1139 OUString aSizeName = aFontSizeNames.Size2Name( *pTempAry );
1140 if ( !aSizeName.isEmpty() )
1142 OUString
sId(OUString::number(-(*pTempAry)));
1161 m_xComboBox->select_entry_region(nSelectionStart, nSelectionEnd);
1184 OUString sNumber(OUString::number(
i));
1193 int nSelectionStart, nSelectionEnd;
1194 m_xComboBox->get_entry_selection_bounds(nSelectionStart, nSelectionEnd);
1245 m_xComboBox->select_entry_region(nSelectionStart, nSelectionEnd);
1253 if (
eUnit == FieldUnit::PERCENT)
1264 if (
eUnit != FieldUnit::NONE &&
eUnit != FieldUnit::DEGREE)
1266 assert(
eUnit != FieldUnit::PERCENT);
1279 if (nTempValue <
nMin)
1281 else if (nTempValue >
nMax)
1288 OUString
aName = aFontSizeNames.Size2Name(nTempValue);
1310 auto nValue = aFontSizeNames.Name2Size(
aStr);
1317 double fResult(0.0);
1319 if (!
aStr.isEmpty())
1323 else if (fResult >
nMax)
1332 return SvxBorderLineStyle::NONE;
1360 aSize =
aVirDev->PixelToLogic( aSize );
1362 sal_uInt32
n1 = nLine1;
1363 sal_uInt32
n2 = nLine2;
1370 nDist -= nDist%nPix;
1375 if ( nVirHeight > aSize.
Height() )
1378 if ( aSize.
Width() <= 0 )
1382 if (
aVirDev->GetOutputSizePixel() != aVirSize )
1383 aVirDev->SetOutputSizePixel( aVirSize );
1384 aVirDev->SetFillColor( aColorDist );
1387 aVirDev->SetFillColor( aColor1 );
1389 double y1 = double(
n1 ) / 2;
1394 double y2 =
n1 + nDist + double(
n2 ) / 2;
1395 aVirDev->SetFillColor( aColor2 );
1404 , m_xNoneButton(m_xBuilder->weld_button(
"none_line_button"))
1405 , m_xLineSet(new
ValueSet(nullptr))
1406 , m_xLineSetWin(new
weld::CustomWeld(*m_xBuilder,
"lineset", *m_xLineSet))
1431 std::max(aNonePrefSize.
Height(), aSolidPrefSize.
Height()));
1449 if (rButton.get_active())
1461 SelectEntry(SvxBorderLineStyle::NONE);
1462 ValueSelectHdl(
nullptr);
1474 if (eStyle == RID_SVXSTR_BORDERLINE[
i].second)
1485 if (nStyle == SvxBorderLineStyle::NONE)
1488 m_xLineSet->SelectItem(
static_cast<sal_Int16
>(nStyle) + 1);
1494 ColorFunc pColor1Fn, ColorFunc pColor2Fn, ColorDistFunc pColorDistFn )
1497 rWidthImpl, nStyle, nMinWidth, pColor1Fn, pColor2Fn, pColorDistFn));
1523 pData->GetStyle(), aBmp );
1524 sal_Int16 nItemId =
static_cast<sal_Int16
>(
pData->GetStyle()) + 1;
1526 if (
pData->GetStyle() == eSelected)
1536 maSelectHdl.Call(*
this);
1547 if (eStyle == RID_SVXSTR_BORDERLINE[
i].second)
1554 if (eStyle == SvxBorderLineStyle::NONE)
1576 : m_bUseLabel(bUseLabel)
1579 , m_xTopLevel(m_xBuilder->weld_popover(
"date_popup_window"))
1580 , m_xCalendar(m_xBuilder->weld_calendar(
"date_picker"))
1603 set_label_from_date();
1604 m_aSelectHdl.Call(*
this);
1611 m_aActivatedHdl.Call(*
this);
BorderWidthImplFlags
Class computing border widths shared between Line style listbox and the SvxBorderLine implementation.
const StyleSettings & GetStyleSettings() const
const LocaleDataWrapper & GetLocaleDataWrapper() const
static void AddEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
static const AllSettings & GetSettings()
static void RemoveEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
tools::Long GetLine2(tools::Long nWidth) const
tools::Long GetGap(tools::Long nWidth) const
tools::Long GuessWidth(tools::Long nLine1, tools::Long nLine2, tools::Long nGap)
BorderWidthImplFlags m_nFlags
tools::Long GetLine1(tools::Long nWidth) const
BorderWidthImpl(BorderWidthImplFlags nFlags=BorderWidthImplFlags::CHANGE_LINE1, double nRate1=0.0, double nRate2=0.0, double nRateGap=0.0)
bool operator==(const BorderWidthImpl &r) const
const OUString & GetItalicStr() const
const OUString & GetBoldItalicStr() const
size_t GetFontNameCount() const
static sal_Handle GetNextFontMetric(sal_Handle hFontMetric)
static const FontMetric & GetFontMetric(sal_Handle hFontMetric)
static const int * GetStdSizeAry()
const OUString & GetNormalStr() const
sal_Handle GetFirstFontMetric(std::u16string_view rName) const
const OUString & GetStyleName(FontWeight eWeight, FontItalic eItalic) const
const OUString & GetBoldStr() const
const FontMetric & GetFontName(size_t nFont) const
void EnableWYSIWYG(bool bEnable)
void Fill(const FontList *pList)
SVT_DLLPRIVATE void ImplDestroyFontList()
std::unique_ptr< ImplFontList > mpFontList
std::unique_ptr< weld::ComboBox > m_xComboBox
void set_active_or_entry_text(const OUString &rText)
void LoadMRUEntries(const OUString &aFontMRUEntriesFile)
OUString maFontMRUEntriesFile
void SaveMRUEntries(const OUString &aFontMRUEntriesFile) const
void InitFontMRUEntriesFile()
FontNameBox(std::unique_ptr< weld::ComboBox > p)
OutputDevice & CachePreview(size_t nIndex, Point *pTopLeft)
sal_uInt16 nDecimalDigits
FieldUnit GetUnit() const
OUString format_number(int nValue) const
void EnableRelativeMode(sal_uInt16 nMin, sal_uInt16 nMax, sal_uInt16 nStep=5)
void SetDecimalDigits(sal_uInt16 nDigits)
void SetValue(int nNewValue, FieldUnit eInUnit)
void Fill(const FontList *pList)
void EnablePtRelativeMode(short nMin, short nMax, short nStep=10)
void set_active_or_entry_text(const OUString &rText)
const FontList * pFontList
sal_uInt16 GetDecimalDigits() const
void SetRelative(bool bRelative)
void SetRange(int nNewMin, int nNewMax)
void set_value(int nValue)
FontSizeBox(std::unique_ptr< weld::ComboBox > p)
std::unique_ptr< weld::ComboBox > m_xComboBox
void SetUnit(FieldUnit _eUnit)
std::unique_ptr< weld::ComboBox > m_xComboBox
void Fill(std::u16string_view rName, const FontList *pList)
FontStyleBox(std::unique_ptr< weld::ComboBox > p)
virtual void Start(bool bStartTimer=true) override
Size GetSizePixel() const
Utility class storing the border line width, style and colors.
OUString getDate(const Date &rDate) const
OUString getNum(sal_Int64 nNumber, sal_uInt16 nDecimals, bool bUseThousandSep=true, bool bTrailingZeros=true) const
MapUnit GetMapUnit() const
const vcl::Font & GetFont() const
void SetAntialiasing(AntialiasingFlags nMode)
void SetFont(const vcl::Font &rNewFont)
SAL_WARN_UNUSED_RESULT Point PixelToLogic(const Point &rDevicePt) const
bool GetTextBoundRect(tools::Rectangle &rRect, const OUString &rStr, sal_Int32 nBase=0, sal_Int32 nIndex=0, sal_Int32 nLen=-1, sal_uLong nLayoutWidth=0, KernArraySpan aDXArray=KernArraySpan(), o3tl::span< const sal_Bool > pKashidaArray={}, const SalLayoutGlyphs *pGlyphs=nullptr) const
void DrawPolygon(const tools::Polygon &rPoly)
void SetTextColor(const Color &rColor)
SAL_DLLPRIVATE void DrawOutDev(const Point &, const Size &, const Point &, const Size &, const Printer &)=delete
sal_Int32 HasGlyphs(const vcl::Font &rFont, std::u16string_view rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1) const
const MapMode & GetMapMode() const
void Push(vcl::PushFlags nFlags=vcl::PushFlags::ALL)
AntialiasingFlags GetAntialiasing() const
void DrawText(const Point &rStartPt, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, std::vector< tools::Rectangle > *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pLayoutCache=nullptr)
constexpr tools::Long Y() const
tools::Long AdjustY(tools::Long nVertMove)
constexpr tools::Long X() const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
const Color & GetDialogTextColor() const
const Color & GetFieldColor() const
const Color & GetHighlightTextColor() const
const Size & GetListBoxPreviewDefaultPixelSize() const
void Open(const OUString &rFileName, StreamMode eOpenMode)
void SetLineDelimiter(LineEnd eLineEnd)
bool WriteLine(std::string_view rStr)
bool ReadLine(OStringBuffer &rStr, sal_Int32 nMaxBytesToRead=0xFFFE)
std::unique_ptr< weld::Calendar > m_xCalendar
std::unique_ptr< weld::Widget > m_xTopLevel
void set_label_from_date()
void set_date(const Date &rDate)
std::unique_ptr< weld::MenuButton > m_xControl
SvtCalendarBox(std::unique_ptr< weld::MenuButton > pControl, bool bUseLabel=true)
virtual void GrabFocus() override
std::unique_ptr< ValueSet > m_xLineSet
SvxBorderLineStyle GetSelectEntryStyle() const
ScopedVclPtr< VirtualDevice > aVirDev
SvtLineListBox(std::unique_ptr< weld::MenuButton > pControl)
std::unique_ptr< weld::MenuButton > m_xControl
std::unique_ptr< weld::Button > m_xNoneButton
SVT_DLLPRIVATE void ImpGetLine(tools::Long nLine1, tools::Long nLine2, tools::Long nDistance, Color nColor1, Color nColor2, Color nColorDist, SvxBorderLineStyle nStyle, BitmapEx &rBmp)
static OUString GetLineStyleName(SvxBorderLineStyle eStyle)
std::vector< std::unique_ptr< ImpLineListData > > m_vLineList
void SelectEntry(SvxBorderLineStyle nStyle)
void InsertEntry(const BorderWidthImpl &rWidthImpl, SvxBorderLineStyle nStyle, tools::Long nMinWidth=0, ColorFunc pColor1Fn=&sameColor, ColorFunc pColor2Fn=&sameColor, ColorDistFunc pColorDistFn=&sameDistColor)
Insert a listbox entry with all widths in Twips.
const LocaleDataWrapper & GetLocaleData() const
void SetPriority(TaskPriority ePriority)
void SetInvokeHandler(const Link< Timer *, void > &rLink)
reference_type * get() const
bool SetOutputSizePixel(const Size &rNewSize, bool bErase=true, bool bAlphaMaskTransparent=false)
B2DPolygon const & getB2DPolygon(sal_uInt32 nIndex) const
void append(const B2DPolygon &rPolygon, sal_uInt32 nCount=1)
basegfx::B2DPoint const & getB2DPoint(sal_uInt32 nIndex) const
void append(const basegfx::B2DPoint &rPoint, sal_uInt32 nCount)
void setClosed(bool bNew)
static OUString formatPercent(double dNumber, const LanguageTag &rLangTag)
static bool isSpace(const sal_uInt32 ch)
void SetFontSize(const Size &)
const OUString & GetFamilyName() const
const Size & GetFontSize() const
std::tuple< vcl::RenderContext &, const tools::Rectangle &, bool, const OUString & > render_args
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
#define SAL_CONFIGFILE(name)
#define IMGOUTERTEXTSPACE
static double lcl_getGuessedWidth(tools::Long nTested, double nRate, bool bChanging)
static std::vector< OUString > gRenderedFontNames
#define GAPTOEXTRAPREVIEW
static int gFontNameBoxes
IMPL_LINK(FontNameBox, SettingsChangedHdl, VclSimpleEvent &, rEvent, void)
constexpr OUStringLiteral FONTNAMEBOXMRUENTRIESFILE
static void lclDrawPolygon(OutputDevice &rDev, const basegfx::B2DPolygon &rPolygon, tools::Long nWidth, SvxBorderLineStyle nDashing)
static void DrawPreview(const FontMetric &rFontMetric, const Point &rTopLeft, OutputDevice &rDevice, bool bSelected)
static bool IsRunningUnitTest()
static size_t gPreviewsPerDevice
static std::vector< VclPtr< VirtualDevice > > gFontPreviewVirDevs
IMPL_LINK_NOARG(FontNameBox, CustomGetSizeHdl, OutputDevice &, Size)
::std::vector< FontMetric > ImplFontList
ScXMLEditAttributeMap::Entry const aEntries[]
#define LINK(Instance, Class, Member)
#define SAL_INFO(area, stream)
#define SAL_N_ELEMENTS(arr)
std::unique_ptr< sal_Int32[]> pData
void applyLineDashing(const B2DPolygon &rCandidate, const std::vector< double > &rDotDashArray, B2DPolyPolygon *pLineTarget, B2DPolyPolygon *pGapTarget, double fDotDashLength)
B2DVector getPerpendicular(const B2DVector &rNormalizedVec)
OString stripStart(const OString &rIn, char c)
constexpr OUStringLiteral first
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
bool TextToValue(const OUString &rStr, double &rValue, sal_Int64 nBaseValue, sal_uInt16 nDecDigits, const LocaleDataWrapper &rLocaleDataWrapper, FieldUnit eUnit)
sal_Int64 ConvertValue(sal_Int64 nValue, sal_Int64 mnBaseValue, sal_uInt16 nDecDigits, FieldUnit eInUnit, FieldUnit eOutUnit)
void SetPointFont(OutputDevice &rDevice, const vcl::Font &rFont)
OUString makeShortRepresentativeTextForSelectedFont(OutputDevice const &rDevice)
bool canRenderNameOfSelectedFont(OutputDevice const &rDevice)
OUString makeShortMinimalTextForScript(UScriptCode eScript)
bool isSymbolFont(const vcl::Font &rFont)
OUString makeShortRepresentativeTextForScript(UScriptCode eScript)
OUString makeShortRepresentativeSymbolTextForSelectedFont(OutputDevice const &rDevice)
OUString SvtResId(TranslateId aId)
#define WB_NO_DIRECTSELECT