summaryrefslogtreecommitdiffstats
path: root/include/svtools/ctrltool.hxx
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--include/svtools/ctrltool.hxx213
1 files changed, 213 insertions, 0 deletions
diff --git a/include/svtools/ctrltool.hxx b/include/svtools/ctrltool.hxx
new file mode 100644
index 0000000000..d70a49177f
--- /dev/null
+++ b/include/svtools/ctrltool.hxx
@@ -0,0 +1,213 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#pragma once
+
+#include <config_options.h>
+#include <svtools/svtdllapi.h>
+#include <rtl/ustring.hxx>
+#include <sal/types.h>
+#include <vcl/metric.hxx>
+#include <vcl/vclptr.hxx>
+
+#include <vector>
+#include <memory>
+#include <string_view>
+
+class ImplFontListNameInfo;
+class OutputDevice;
+
+/*
+
+Description
+============
+
+class FontList
+
+This class manages all fonts which can be display on one or two output devices.
+Additionally, this class offers methods for generating the StyleName from
+bold and italics or the missing attributes from a StyleName.
+Furthermore, this class can handle synthetically reproduced fonts.
+It also works with several standard controls and standard menus.
+
+Links:
+
+class FontNameBox, class FontStyleBox, class FontSizeBox,
+class FontNameMenu, class FontSizeMenu
+
+--------------------------------------------------------------------------
+
+FontList::FontList( OutputDevice* pDevice, OutputDevice* pDevice2 = NULL,
+ bool bAll = true );
+
+Constructor of the FontList class. The relevant fonts will be queried from
+the OutputDevice. The OutputDevice needs to exist as long as the FontList
+class exists. Optionally, a second output device can be given in order to,
+e.g., manage the fonts from both, a printer and a screen in a single FontList
+and thus also give FontMenus the fonts if both OutputDevices.
+The pDevice2 needs to exist as long as the FontList class exists.
+
+The OutputDevice given first should be the preferred one. This is usually
+the printer. Because if two different device fonts (one for the printer and
+one for the screen) exist, the ones from the "pDevice" are preferred.
+
+The third parameter governs whether only scalable or all fonts shall be queried.
+With sal_True bitmap fonts will also be queried.
+With sal_False vectorized and scalable fonts will be queried.
+
+--------------------------------------------------------------------------
+
+String FontList::GetStyleName( const FontMetric& rFontMetric ) const;
+
+This method returns the StyleName of a FontMetric.
+If no StyleName is set, a name will be generated from the set attributes.
+
+--------------------------------------------------------------------------
+
+OUString FontList::GetFontMapText( const FontMetric& rFontMetric ) const;
+
+This method returns a Matchstring which indicates the problem that could
+arise when using a font. This string should be displayed to the user.
+
+--------------------------------------------------------------------------
+
+FontMetric FontList::Get( const String& rName, const String& rStyleName ) const;
+
+This method search a FontMetric for the given name and the given style name.
+The Stylename can also be a synthetic one.
+In that case the relevant FontMetric fields will be set.
+If a StyleName is provided, a FontMetric structure without a Stylename can be
+returned. To get a representation of the StyleName for displaying it to the user,
+call GetStyleName() on this FontMetric structure.
+
+Links:
+
+FontList::GetStyleName()
+
+--------------------------------------------------------------------------
+
+FontMetric FontList::Get( const String& rName, FontWeight eWeight,
+ FontItalic eItalic ) const;
+
+This method search a FontMetric structure for a provided name and styles.
+This method can also return a FontMetric without a Stylename.
+To get a representation of the StyleName to be presented to the user
+call GetStyleName() with this FontMetric.
+
+Links:
+
+FontList::GetStyleName()
+
+--------------------------------------------------------------------------
+
+static const int* FontList::GetStdSizeAry();
+
+This method returns the available sizes for the given font.
+As all fonts are scalable, standard sizes are returned.
+The array contains the heights of the font in tenth (1/10) point.
+The last value of the array is 0.
+The returned array will destroyed by the FontList.
+You should thus not reference the array after the next method call on the
+FontList.
+*/
+
+class SVT_DLLPUBLIC FontList
+{
+private:
+ static const int aStdSizeAry[];
+
+ OUString maMapBoth;
+ OUString maMapPrinterOnly;
+ OUString maMapStyleNotAvailable;
+ mutable OUString maMapNotAvailable;
+ OUString maLight;
+ OUString maLightItalic;
+ OUString maNormal;
+ OUString maNormalItalic;
+ OUString maBold;
+ OUString maBoldItalic;
+ OUString maBlack;
+ OUString maBlackItalic;
+ VclPtr<OutputDevice> mpDev;
+ VclPtr<OutputDevice> mpDev2;
+ std::vector<std::unique_ptr<ImplFontListNameInfo>> m_Entries;
+
+ SVT_DLLPRIVATE ImplFontListNameInfo* ImplFind( std::u16string_view rSearchName, sal_uInt32* pIndex ) const;
+ SVT_DLLPRIVATE ImplFontListNameInfo* ImplFindByName( std::u16string_view rStr ) const;
+ SVT_DLLPRIVATE void ImplInsertFonts(OutputDevice* pDev, bool bInsertData);
+
+public:
+ FontList( OutputDevice* pDevice,
+ OutputDevice* pDevice2 = nullptr);
+ ~FontList();
+
+ std::unique_ptr<FontList> Clone() const;
+
+ OUString GetFontMapText( const FontMetric& rFontMetric ) const;
+
+ const OUString& GetNormalStr() const { return maNormal; }
+ const OUString& GetItalicStr() const { return maNormalItalic; }
+ const OUString& GetBoldStr() const { return maBold; }
+ const OUString& GetBoldItalicStr() const { return maBoldItalic; }
+ const OUString& GetStyleName( FontWeight eWeight, FontItalic eItalic ) const;
+ OUString GetStyleName( const FontMetric& rFontMetric ) const;
+
+ FontMetric Get( const OUString& rName,
+ const OUString& rStyleName ) const;
+ FontMetric Get( const OUString& rName,
+ FontWeight eWeight,
+ FontItalic eItalic ) const;
+
+ bool IsAvailable( std::u16string_view rName ) const;
+ size_t GetFontNameCount() const
+ {
+ return m_Entries.size();
+ }
+ const FontMetric& GetFontName(size_t nFont) const;
+ sal_Handle GetFirstFontMetric( std::u16string_view rName ) const;
+ static sal_Handle GetNextFontMetric( sal_Handle hFontMetric );
+ static const FontMetric& GetFontMetric( sal_Handle hFontMetric );
+
+ static const int* GetStdSizeAry() { return aStdSizeAry; }
+
+private:
+ FontList( const FontList& ) = delete;
+ FontList& operator =( const FontList& ) = delete;
+};
+
+class UNLESS_MERGELIBS(SVT_DLLPUBLIC) FontSizeNames
+{
+private:
+ const struct ImplFSNameItem* mpArray;
+ sal_Int32 mnElem;
+
+public:
+ FontSizeNames( LanguageType eLanguage /* = LANGUAGE_DONTKNOW */ );
+
+ sal_Int32 Count() const { return mnElem; }
+ bool IsEmpty() const { return !mnElem; }
+
+ sal_Int32 Name2Size( std::u16string_view ) const;
+ OUString Size2Name( sal_Int32 ) const;
+
+ OUString GetIndexName( sal_Int32 nIndex ) const;
+ sal_Int32 GetIndexSize( sal_Int32 nIndex ) const;
+};
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */