summaryrefslogtreecommitdiff
path: root/vcl/inc/outfont.hxx
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2011-04-22 15:09:06 +0200
committerJan Holesovsky <kendy@suse.cz>2011-04-22 15:09:06 +0200
commit83380a7805f69b18f432895fc17c53cf0354bf4d (patch)
treeb38d271cb6a768b6c2f9d3bee37d0d88e0472cb4 /vcl/inc/outfont.hxx
parentd5bbd70673a2d5c6f8937428b97111e9c13fd21f (diff)
parent9e84958536c737f8fdcff4d28664d0c13b9cdc8c (diff)
Merge commit 'ooo/DEV300_m106' into libreoffice-3-4
Conflicts: cppcanvas/source/mtfrenderer/transparencygroupaction.cxx l10ntools/scripts/localize.pl l10ntools/source/directory.cxx l10ntools/source/srciter.cxx padmin/Executable_spadmin.bin.mk padmin/Library_spa.mk svtools/inc/svtools/filter.hxx svtools/inc/svtools/grfmgr.hxx svtools/source/filter/filter.cxx svtools/source/filter/filter2.cxx svtools/source/filter/wmf/emfwr.cxx svtools/source/filter/wmf/enhwmf.cxx svtools/source/filter/wmf/winmtf.cxx svtools/source/filter/wmf/winmtf.hxx svtools/source/filter/wmf/winwmf.cxx svtools/source/filter/wmf/wmfwr.cxx svtools/source/graphic/grfmgr.cxx svtools/source/graphic/grfmgr2.cxx toolkit/source/controls/controlmodelcontainerbase.cxx toolkit/source/controls/unocontrol.cxx toolkit/source/helper/formpdfexport.cxx toolkit/source/helper/unowrapper.cxx vcl/Package_osx.mk vcl/aqua/source/app/salinst.cxx vcl/aqua/source/app/salsys.cxx vcl/aqua/source/dtrans/aqua_service.cxx vcl/aqua/source/dtrans/test_aquacb.cxx vcl/aqua/source/res/makefile.mk vcl/aqua/source/window/salframe.cxx vcl/aqua/source/window/salframeview.mm vcl/inc/aqua/salgdi.h vcl/inc/aqua/salinst.h vcl/inc/graphite_adaptors.hxx vcl/inc/graphite_cache.hxx vcl/inc/graphite_serverfont.hxx vcl/inc/impprn.hxx vcl/inc/svdata.hxx vcl/inc/unx/i18n_status.hxx vcl/inc/unx/saldata.hxx vcl/inc/unx/salfont.h vcl/inc/unx/salinst.h vcl/inc/unx/salprn.h vcl/inc/unx/salsys.h vcl/inc/unx/sm.hxx vcl/inc/vcl/gdimtf.hxx vcl/inc/vcl/graph.hxx vcl/inc/vcl/outdev.hxx vcl/inc/vcl/polyscan.hxx vcl/inc/vcl/svcompat.hxx vcl/inc/vcl/svgread.hxx vcl/inc/vcl/unobrok.hxx vcl/inc/win/salgdi.h vcl/inc/win/wincomp.hxx vcl/prj/d.lst vcl/source/app/dbggui.cxx vcl/source/app/idlemgr.cxx vcl/source/app/makefile.mk vcl/source/app/settings.cxx vcl/source/app/sound.cxx vcl/source/app/stdtext.cxx vcl/source/app/svapp.cxx vcl/source/app/svdata.cxx vcl/source/app/svmain.cxx vcl/source/app/timer.cxx vcl/source/app/unohelp.cxx vcl/source/components/dtranscomp.cxx vcl/source/control/button.cxx vcl/source/control/combobox.cxx vcl/source/control/ctrl.cxx vcl/source/control/edit.cxx vcl/source/control/field2.cxx vcl/source/control/ilstbox.cxx vcl/source/gdi/bitmap.cxx vcl/source/gdi/bitmapex.cxx vcl/source/gdi/cvtgrf.cxx vcl/source/gdi/font.cxx vcl/source/gdi/image.cxx vcl/source/gdi/imagerepository.cxx vcl/source/gdi/impbmp.cxx vcl/source/gdi/impgraph.cxx vcl/source/gdi/impimagetree.cxx vcl/source/gdi/jobset.cxx vcl/source/gdi/makefile.mk vcl/source/gdi/metaact.cxx vcl/source/gdi/outdev.cxx vcl/source/gdi/outdev2.cxx vcl/source/gdi/outdev5.cxx vcl/source/gdi/outdev6.cxx vcl/source/gdi/outmap.cxx vcl/source/gdi/polyscan.cxx vcl/source/gdi/print.cxx vcl/source/gdi/print2.cxx vcl/source/gdi/region.cxx vcl/source/gdi/salgdilayout.cxx vcl/source/gdi/sallayout.cxx vcl/source/gdi/svcompat.cxx vcl/source/gdi/virdev.cxx vcl/source/glyphs/gcach_ftyp.cxx vcl/source/glyphs/gcach_vdev.cxx vcl/source/glyphs/gcach_vdev.hxx vcl/source/glyphs/graphite_adaptors.cxx vcl/source/glyphs/graphite_cache.cxx vcl/source/glyphs/graphite_layout.cxx vcl/source/glyphs/graphite_serverfont.cxx vcl/source/glyphs/graphite_textsrc.hxx vcl/source/glyphs/makefile.mk vcl/source/src/makefile.mk vcl/source/window/accel.cxx vcl/source/window/brdwin.cxx vcl/source/window/btndlg.cxx vcl/source/window/dialog.cxx vcl/source/window/dndevdis.cxx vcl/source/window/dockmgr.cxx vcl/source/window/dockwin.cxx vcl/source/window/floatwin.cxx vcl/source/window/introwin.cxx vcl/source/window/keycod.cxx vcl/source/window/menu.cxx vcl/source/window/msgbox.cxx vcl/source/window/scrwnd.cxx vcl/source/window/split.cxx vcl/source/window/splitwin.cxx vcl/source/window/status.cxx vcl/source/window/syswin.cxx vcl/source/window/tabpage.cxx vcl/source/window/toolbox.cxx vcl/source/window/toolbox2.cxx vcl/source/window/window.cxx vcl/source/window/window2.cxx vcl/source/window/winproc.cxx vcl/source/window/wrkwin.cxx vcl/unx/generic/app/i18n_cb.cxx vcl/unx/generic/app/i18n_ic.cxx vcl/unx/generic/app/saldata.cxx vcl/unx/generic/app/saldisp.cxx vcl/unx/generic/app/salinst.cxx vcl/unx/generic/app/wmadaptor.cxx vcl/unx/generic/fontmanager/afm_hash.cpp vcl/unx/generic/gdi/salbmp.cxx vcl/unx/generic/gdi/salgdi3.cxx vcl/unx/generic/gdi/xrender_peer.cxx vcl/unx/generic/window/salframe.cxx vcl/unx/generic/window/salobj.cxx vcl/unx/gtk/a11y/makefile.mk vcl/unx/gtk/app/gtksys.cxx vcl/unx/gtk/app/makefile.mk vcl/unx/gtk/window/gtkframe.cxx vcl/unx/gtk/window/gtkobject.cxx vcl/unx/headless/svpinst.cxx vcl/unx/headless/svpinst.hxx vcl/unx/headless/svpprn.hxx vcl/unx/kde/kdedata.cxx vcl/unx/kde/salnativewidgets-kde.cxx vcl/unx/kde4/KDESalDisplay.hxx vcl/unx/kde4/KDEXLib.cxx vcl/unx/kde4/KDEXLib.hxx vcl/unx/kde4/VCLKDEApplication.cxx vcl/unx/kde4/makefile.mk vcl/unx/source/app/makefile.mk vcl/unx/source/fontmanager/makefile.mk vcl/unx/source/gdi/makefile.mk vcl/unx/source/inc/salcursors.h vcl/util/linksvp/makefile.mk vcl/win/source/app/saldata.cxx vcl/win/source/app/salinst.cxx vcl/win/source/app/salshl.cxx vcl/win/source/gdi/makefile.mk vcl/win/source/gdi/salbmp.cxx vcl/win/source/gdi/salgdi.cxx vcl/win/source/gdi/salgdi2.cxx vcl/win/source/gdi/salgdi3.cxx vcl/win/source/gdi/salgdi_gdiplus.cxx vcl/win/source/gdi/salprn.cxx vcl/win/source/gdi/salvd.cxx vcl/win/source/gdi/winlayout.cxx vcl/win/source/window/salframe.cxx vcl/win/source/window/salmenu.cxx vcl/win/source/window/salobj.cxx
Diffstat (limited to 'vcl/inc/outfont.hxx')
-rw-r--r--vcl/inc/outfont.hxx407
1 files changed, 407 insertions, 0 deletions
diff --git a/vcl/inc/outfont.hxx b/vcl/inc/outfont.hxx
new file mode 100644
index 000000000000..faf2b00793f2
--- /dev/null
+++ b/vcl/inc/outfont.hxx
@@ -0,0 +1,407 @@
+/* -*- 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: */