summaryrefslogtreecommitdiff
path: root/vcl/inc/outfont.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/inc/outfont.hxx')
-rw-r--r--vcl/inc/outfont.hxx407
1 files changed, 0 insertions, 407 deletions
diff --git a/vcl/inc/outfont.hxx b/vcl/inc/outfont.hxx
deleted file mode 100644
index faf2b00793..0000000000
--- a/vcl/inc/outfont.hxx
+++ /dev/null
@@ -1,407 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-#ifndef _SV_OUTFONT_HXX
-#define _SV_OUTFONT_HXX
-
-#include <tools/string.hxx>
-#include <i18npool/lang.h>
-#include <tools/gen.hxx>
-#include <tools/solar.h>
-#include <vcl/dllapi.h>
-#include <unotools/fontdefs.hxx>
-#include <vcl/vclenum.hxx>
-
-#include <boost/unordered_map.hpp>
-
-class ImplDevFontListData;
-class ImplGetDevFontList;
-class ImplGetDevSizeList;
-class ImplFontEntry;
-class ImplDirectFontSubstitution;
-class ImplPreMatchFontSubstitution;
-class ImplGlyphFallbackFontSubstitution;
-class ImplFontSelectData;
-class Font;
-class ConvertChar;
-struct FontMatchStatus;
-class OutputDevice;
-
-namespace com { namespace sun { namespace star { namespace lang { struct Locale; }}}}
-
-// ----------------------
-// - ImplFontAttributes -
-// ----------------------
-// device independent font properties
-
-class ImplFontAttributes
-{
-public: // TODO: create matching interface class
- const String& GetFamilyName() const { return maName; }
- const String& GetStyleName() const { return maStyleName; }
- FontWeight GetWeight() const { return meWeight; }
- FontItalic GetSlant() const { return meItalic; }
- FontFamily GetFamilyType() const { return meFamily; }
- FontPitch GetPitch() const { return mePitch; }
- FontWidth GetWidthType() const { return meWidthType; }
- bool IsSymbolFont() const { return mbSymbolFlag; }
-
-public: // TODO: hide members behind accessor methods
- String maName; // Font Family Name
- String maStyleName; // Font Style Name
- FontWeight meWeight; // Weight Type
- FontItalic meItalic; // Slant Type
- FontFamily meFamily; // Family Type
- FontPitch mePitch; // Pitch Type
- FontWidth meWidthType; // Width Type
- bool mbSymbolFlag;
-};
-
-// -------------------------
-// - ImplDevFontAttributes -
-// -------------------------
-// device dependent font properties
-
-class ImplDevFontAttributes : public ImplFontAttributes
-{
-public: // TODO: create matching interface class
- const String& GetAliasNames() const { return maMapNames; }
- int GetQuality() const { return mnQuality; }
- bool IsRotatable() const { return mbOrientation; }
- bool IsDeviceFont() const { return mbDevice; }
- bool IsEmbeddable() const { return mbEmbeddable; }
- bool IsSubsettable() const { return mbSubsettable; }
-
-public: // TODO: hide members behind accessor methods
- String maMapNames; // List of family name aliass separated with ';'
- int mnQuality; // Quality (used when similar fonts compete)
- bool mbOrientation; // true: physical font can be rotated
- bool mbDevice; // true: built in font
- bool mbSubsettable; // true: a subset of the font can be created
- bool mbEmbeddable; // true: the font can be embedded
-};
-
-// ----------------
-// - ImplFontData -
-// ----------------
-// TODO: rename ImplFontData to PhysicalFontFace
-// TODO: no more direct access to members
-// TODO: add reference counting
-// TODO: get rid of height/width for scalable fonts
-// TODO: make cloning cheaper
-
-// abstract base class for physical font faces
-class VCL_PLUGIN_PUBLIC ImplFontData : public ImplDevFontAttributes
-{
-public:
- // by using an ImplFontData object as a factory for its corresponding
- // ImplFontEntry an ImplFontEntry can be extended to cache device and
- // font instance specific data
- virtual ImplFontEntry* CreateFontInstance( ImplFontSelectData& ) const = 0;
-
- virtual int GetHeight() const { return mnHeight; }
- virtual int GetWidth() const { return mnWidth; }
- virtual sal_IntPtr GetFontId() const = 0;
- int GetFontMagic() const { return mnMagic; }
- bool IsScalable() const { return (mnHeight == 0); }
- bool CheckMagic( int n ) const { return (n == mnMagic); }
- ImplFontData* GetNextFace() const { return mpNext; }
- ImplFontData* CreateAlias() const { return Clone(); }
-
- bool IsBetterMatch( const ImplFontSelectData&, FontMatchStatus& ) const;
- StringCompare CompareWithSize( const ImplFontData& ) const;
- StringCompare CompareIgnoreSize( const ImplFontData& ) const;
- virtual ~ImplFontData() {}
- virtual ImplFontData* Clone() const = 0;
-
-protected:
- explicit ImplFontData( const ImplDevFontAttributes&, int nMagic );
- void SetBitmapSize( int nW, int nH ) { mnWidth=nW; mnHeight=nH; }
-
- long mnWidth; // Width (in pixels)
- long mnHeight; // Height (in pixels)
-
-private:
-friend class ImplDevFontListData;
- const int mnMagic; // poor man's RTTI
- ImplFontData* mpNext;
-};
-
-// ----------------------
-// - ImplFontSelectData -
-// ----------------------
-
-class ImplFontSelectData : public ImplFontAttributes
-{
-public:
- ImplFontSelectData( const Font&, const String& rSearchName,
- const Size&, float fExactHeight );
- ImplFontSelectData( const ImplFontData&, const Size&,
- float fExactHeight, int nOrientation, bool bVertical );
-
-public: // TODO: change to private
- String maTargetName; // name of the font name token that is chosen
- String maSearchName; // name of the font that matches best
- int mnWidth; // width of font in pixel units
- int mnHeight; // height of font in pixel units
- float mfExactHeight; // requested height (in pixels with subpixel details)
- int mnOrientation; // text orientation in 3600 system
- LanguageType meLanguage; // text language
- bool mbVertical; // vertical mode of requested font
- bool mbNonAntialiased; // true if antialiasing is disabled
-
- const ImplFontData* mpFontData; // a matching ImplFontData object
- ImplFontEntry* mpFontEntry; // pointer to the resulting FontCache entry
-};
-
-// -------------------
-// - ImplDevFontList -
-// -------------------
-// TODO: merge with ImplFontCache
-// TODO: rename to LogicalFontManager
-
-class VCL_PLUGIN_PUBLIC ImplDevFontList
-{
-private:
- friend class WinGlyphFallbackSubstititution;
- mutable bool mbMatchData; // true if matching attributes are initialized
- bool mbMapNames; // true if MapNames are available
-
- typedef boost::unordered_map<const String, ImplDevFontListData*,FontNameHash> DevFontList;
- DevFontList maDevFontList;
-
- ImplPreMatchFontSubstitution* mpPreMatchHook; // device specific prematch substitution
- ImplGlyphFallbackFontSubstitution* mpFallbackHook; // device specific glyh fallback substitution
-
-public:
- explicit ImplDevFontList();
- virtual ~ImplDevFontList();
-
- // fill the list with device fonts
- void Add( ImplFontData* );
- void Clear();
- int Count() const { return maDevFontList.size(); }
-
- // find the device font
- ImplDevFontListData* FindFontFamily( const String& rFontName ) const;
- ImplDevFontListData* ImplFindByFont( ImplFontSelectData&, bool bPrinter, ImplDirectFontSubstitution* ) const;
- ImplDevFontListData* ImplFindBySearchName( const String& ) const;
-
- // suggest fonts for glyph fallback
- ImplDevFontListData* GetGlyphFallbackFont( ImplFontSelectData&,
- rtl::OUString& rMissingCodes, int nFallbackLevel ) const;
-
- // prepare platform specific font substitutions
- void SetPreMatchHook( ImplPreMatchFontSubstitution* );
- void SetFallbackHook( ImplGlyphFallbackFontSubstitution* );
-
- // misc utilities
- ImplDevFontList* Clone( bool bScalable, bool bEmbeddable ) const;
- ImplGetDevFontList* GetDevFontList() const;
- ImplGetDevSizeList* GetDevSizeList( const String& rFontName ) const;
-
- //used by 2-level font fallback
- ImplDevFontListData* ImplFindByLocale( com::sun::star::lang::Locale& ) const;
-
-protected:
- void InitMatchData() const;
- bool AreMapNamesAvailable() const { return mbMapNames; }
-
- ImplDevFontListData* ImplFindByTokenNames( const String& ) const;
- ImplDevFontListData* ImplFindByAliasName( const String& rSearchName, const String& rShortName ) const;
- ImplDevFontListData* ImplFindBySubstFontAttr( const utl::FontNameAttr& ) const;
- ImplDevFontListData* ImplFindByAttributes( sal_uLong nSearchType, FontWeight, FontWidth,
- FontFamily, FontItalic, const String& rSearchFamily ) const;
- ImplDevFontListData* FindDefaultFont() const;
-
-private:
- void InitGenericGlyphFallback() const;
- mutable ImplDevFontListData** mpFallbackList;
- mutable int mnFallbackCount;
-};
-
-// --------------------
-// - ImplKernPairData -
-// --------------------
-// TODO: get rid of ImplKernPairData and use outdev.hxx's KerningPair struct
-// the problem is that outdev.hxx is too high level for the device layers
-// and outdev.hxx's customers depend on KerningPair being defined there
-
-struct ImplKernPairData
-{
- sal_uInt16 mnChar1;
- sal_uInt16 mnChar2;
- long mnKern;
-};
-
-
-// -----------------------
-// - ImplFontMetricData -
-// -----------------------
-
-class ImplFontMetricData : public ImplFontAttributes
-{
-public:
- explicit ImplFontMetricData( const ImplFontSelectData& );
- void ImplInitTextLineSize( const OutputDevice* pDev );
- void ImplInitAboveTextLineSize();
-
-public: // TODO: hide members behind accessor methods
- // font instance attributes from the font request
- long mnWidth; // Reference Width
- short mnOrientation; // Rotation in 1/10 degrees
-
- // font metrics measured for the font instance
- long mnAscent; // Ascent
- long mnDescent; // Descent
- long mnIntLeading; // Internal Leading
- long mnExtLeading; // External Leading
- int mnSlant; // Slant (Italic/Oblique)
- long mnMinKashida; // Minimal width of kashida (Arabic)
-
- // font attributes queried from the font instance
- int meFamilyType; // Font Family Type
- bool mbDevice; // Flag for Device Fonts
- bool mbScalableFont;
- bool mbKernableFont;
-
- // font metrics that are usually derived from the measurements
- long mnUnderlineSize; // Lineheight of Underline
- long mnUnderlineOffset; // Offset from Underline to Baseline
- long mnBUnderlineSize; // Hoehe von fetter Unterstreichung
- long mnBUnderlineOffset; // Offset von fetter Unterstreichung zur Baseline
- long mnDUnderlineSize; // Hoehe von doppelter Unterstreichung
- long mnDUnderlineOffset1; // Offset von doppelter Unterstreichung zur Baseline
- long mnDUnderlineOffset2; // Offset von doppelter Unterstreichung zur Baseline
- long mnWUnderlineSize; // Hoehe von WaveLine-Unterstreichung
- long mnWUnderlineOffset; // Offset von WaveLine-Unterstreichung zur Baseline, jedoch zentriert zur WaveLine
- long mnAboveUnderlineSize; // Hoehe von einfacher Unterstreichung (for Vertical Right)
- long mnAboveUnderlineOffset; // Offset von einfacher Unterstreichung zur Baseline (for Vertical Right)
- long mnAboveBUnderlineSize; // Hoehe von fetter Unterstreichung (for Vertical Right)
- long mnAboveBUnderlineOffset; // Offset von fetter Unterstreichung zur Baseline (for Vertical Right)
- long mnAboveDUnderlineSize; // Hoehe von doppelter Unterstreichung (for Vertical Right)
- long mnAboveDUnderlineOffset1; // Offset von doppelter Unterstreichung zur Baseline (for Vertical Right)
- long mnAboveDUnderlineOffset2; // Offset von doppelter Unterstreichung zur Baseline (for Vertical Right)
- long mnAboveWUnderlineSize; // Hoehe von WaveLine-Unterstreichung (for Vertical Right)
- long mnAboveWUnderlineOffset; // Offset von WaveLine-Unterstreichung zur Baseline, jedoch zentriert zur WaveLine (for Vertical Right)
- long mnStrikeoutSize; // Hoehe von einfacher Durchstreichung
- long mnStrikeoutOffset; // Offset von einfacher Durchstreichung zur Baseline
- long mnBStrikeoutSize; // Hoehe von fetter Durchstreichung
- long mnBStrikeoutOffset; // Offset von fetter Durchstreichung zur Baseline
- long mnDStrikeoutSize; // Hoehe von doppelter Durchstreichung
- long mnDStrikeoutOffset1; // Offset von doppelter Durchstreichung zur Baseline
- long mnDStrikeoutOffset2; // Offset von doppelter Durchstreichung zur Baseline
-};
-
-// -----------------
-// - ImplFontEntry -
-// ------------------
-// TODO: rename ImplFontEntry to LogicalFontInstance
-// TODO: allow sharing of metrics for related fonts
-
-class VCL_PLUGIN_PUBLIC ImplFontEntry
-{
-public:
- explicit ImplFontEntry( const ImplFontSelectData& );
- virtual ~ImplFontEntry();
-
-public: // TODO: make data members private
- ImplFontSelectData maFontSelData; // FontSelectionData
- ImplFontMetricData maMetric; // Font Metric
- const ConvertChar* mpConversion; // used e.g. for StarBats->StarSymbol
- long mnLineHeight;
- sal_uLong mnRefCount;
- sal_uInt16 mnSetFontFlags; // Flags returned by SalGraphics::SetFont()
- short mnOwnOrientation; // text angle if lower layers don't rotate text themselves
- short mnOrientation; // text angle in 3600 system
- bool mbInit; // true if maMetric member is valid
-
- void AddFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
- bool GetFallbackForUnicode( sal_UCS4, FontWeight eWeight, String* pFontName ) const;
- void IgnoreFallbackForUnicode( sal_UCS4, FontWeight eWeight, const String& rFontName );
-
-private:
- // cache of Unicode characters and replacement font names
- // TODO: a fallback map can be shared with many other ImplFontEntries
- // TODO: at least the ones which just differ in orientation, stretching or height
- typedef ::std::pair<sal_UCS4,FontWeight> GFBCacheKey;
- struct GFBCacheKey_Hash{ size_t operator()( const GFBCacheKey& ) const; };
- typedef ::boost::unordered_map<GFBCacheKey,String,GFBCacheKey_Hash> UnicodeFallbackList;
- UnicodeFallbackList* mpUnicodeFallbackList;
-};
-
-
-class ImplTextLineInfo
-{
-private:
- long mnWidth;
- xub_StrLen mnIndex;
- xub_StrLen mnLen;
-
-public:
- ImplTextLineInfo( long nWidth, xub_StrLen nIndex, xub_StrLen nLen )
- {
- mnWidth = nWidth;
- mnIndex = nIndex;
- mnLen = nLen;
- }
-
- long GetWidth() const { return mnWidth; }
- xub_StrLen GetIndex() const { return mnIndex; }
- xub_StrLen GetLen() const { return mnLen; }
-};
-
-#define MULTITEXTLINEINFO_RESIZE 16
-typedef ImplTextLineInfo* PImplTextLineInfo;
-
-class ImplMultiTextLineInfo
-{
-private:
- PImplTextLineInfo* mpLines;
- xub_StrLen mnLines;
- xub_StrLen mnSize;
-
-public:
- ImplMultiTextLineInfo();
- ~ImplMultiTextLineInfo();
-
- void AddLine( ImplTextLineInfo* pLine );
- void Clear();
-
- ImplTextLineInfo* GetLine( sal_uInt16 nLine ) const
- { return mpLines[nLine]; }
- xub_StrLen Count() const { return mnLines; }
-
-private:
- ImplMultiTextLineInfo( const ImplMultiTextLineInfo& );
- ImplMultiTextLineInfo& operator=( const ImplMultiTextLineInfo& );
-};
-
-#endif // _SV_OUTFONT_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */