summaryrefslogtreecommitdiff
path: root/vcl/inc
diff options
context:
space:
mode:
authorNorbert Thiebaud <nthiebaud@gmail.com>2012-04-02 00:15:07 -0500
committerNorbert Thiebaud <nthiebaud@gmail.com>2012-06-23 23:23:25 -0500
commit8c91ec1ab0b6f437b8b60ed9aee067f088fa4718 (patch)
tree251d1945755046b411c1370c737e84821db7ff0a /vcl/inc
parent2c506447fcf020b17797c30d001fda9c177a4235 (diff)
Initial basic support for CoreText. very partial and highly unstable.
Change-Id: I5dc9fb342e45fa3d428e340a597a2d9d4e246cb5
Diffstat (limited to 'vcl/inc')
-rw-r--r--vcl/inc/aqua/atsui/salgdi.h3
-rw-r--r--vcl/inc/aqua/common.h19
-rw-r--r--vcl/inc/aqua/coretext/salcoretextfontutils.hxx67
-rw-r--r--vcl/inc/aqua/coretext/salcoretextlayout.hxx64
-rw-r--r--vcl/inc/aqua/coretext/salcoretextstyle.hxx42
-rw-r--r--vcl/inc/aqua/coretext/salgdi.h297
-rw-r--r--vcl/inc/vcl/sysdata.hxx3
7 files changed, 490 insertions, 5 deletions
diff --git a/vcl/inc/aqua/atsui/salgdi.h b/vcl/inc/aqua/atsui/salgdi.h
index 0ee4420ef8e5..5827706f7f0e 100644
--- a/vcl/inc/aqua/atsui/salgdi.h
+++ b/vcl/inc/aqua/atsui/salgdi.h
@@ -161,6 +161,7 @@ public:
void ImplDrawPixel( long nX, long nY, const RGBAColor& ); // helper to draw single pixels
bool CheckContext();
+ CGContextRef GetContext();
void UpdateWindow( NSRect& ); // delivered in NSView coordinates
void RefreshRect( const CGRect& );
void RefreshRect( const NSRect& );
@@ -347,7 +348,7 @@ private:
void Pattern50Fill();
UInt32 getState( ControlState nState );
UInt32 getTrackState( ControlState nState );
- bool GetRawFontData( const ImplFontData* pFontData,
+ bool GetRawFontData( const PhysicalFontFace* pFontData,
std::vector<unsigned char>& rBuffer,
bool* pJustCFF );
};
diff --git a/vcl/inc/aqua/common.h b/vcl/inc/aqua/common.h
index d7a654128d08..c3789a5f46f0 100644
--- a/vcl/inc/aqua/common.h
+++ b/vcl/inc/aqua/common.h
@@ -1,3 +1,4 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#ifndef _VCL_AQUA_COMMON_H
#define _VCL_AQUA_COMMON_H
@@ -6,11 +7,25 @@
#include <premac.h>
#include <ApplicationServices/ApplicationServices.h>
#include <postmac.h>
+#include <tools/debug.hxx>
// CoreFoundation designers, in their wisdom, decided that CFRelease of NULL
// cause a Crash, yet few API can return NULL when asking for the creation
// of an object, which force us to peper the code with egly if construct everywhere
// and open the door to very nasty crash on rare occasion
// this macro hide the mess
-#define SafeCFRelease(a) do { if(a) { CFRelease(a); } } while(false)
-#endif
+#define SafeCFRelease(a) do { if(a) { CFRelease(a); (a)=NULL; } } while(false)
+
+
+#define round_to_long(a) ((a) >= 0 ? ((long)((a) + 0.5)) : ((long)((a) - 0.5)))
+
+#include "vcl/salgtype.hxx"
+#endif/* _VCL_AQUA_COMMON_H */
+
+//#define msgs_debug(c,f,...)
+// fprintf(stderr, "%s::%s(%p:%04.4x)\n", this, #c, __func__, 0, __VA_ARGS__ )
+
+#define msgs_debug(c,f,...) \
+ fprintf(stderr, "%s::%s(%p:%4.4u)" f "\n", #c, __func__, this, ((unsigned int)pthread_self() & 8191), ##__VA_ARGS__ );
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/aqua/coretext/salcoretextfontutils.hxx b/vcl/inc/aqua/coretext/salcoretextfontutils.hxx
new file mode 100644
index 000000000000..3c75899b0a8d
--- /dev/null
+++ b/vcl/inc/aqua/coretext/salcoretextfontutils.hxx
@@ -0,0 +1,67 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef _VCL_AQUA_CORETEXT_SALCORETEXTFONTUTILS_HXX
+#define _VCL_AQUA_CORETEXT_SALCORETEXTFONTUTILS_HXX
+
+class ImplCoreTextFontData;
+class ImplDevFontList;
+
+#include <boost/unordered_map.hpp>
+
+#include <vcl/fontcapabilities.hxx>
+
+#include "outfont.hxx"
+#include "impfont.hxx"
+
+class ImplCoreTextFontData : public PhysicalFontFace
+{
+public:
+ ImplCoreTextFontData(const ImplDevFontAttributes&, CTFontRef font);
+ virtual ~ImplCoreTextFontData();
+ virtual PhysicalFontFace* Clone() const;
+ virtual ImplFontEntry* CreateFontInstance( FontSelectPattern& ) const;
+ virtual sal_IntPtr GetFontId() const { return (sal_IntPtr)m_CTFontRef;};
+ CTFontRef GetCTFont() const { return m_CTFontRef; };
+ const ImplFontCharMap* GetImplFontCharMap();
+ bool GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities);
+ bool HasChar( sal_uInt32 cChar ) const;
+ void ReadOs2Table();
+ void ReadIosCmapEncoding();
+ bool HasCJKSupport();
+ bool GetRawFontData( std::vector<unsigned char>& rBuffer, bool* pJustCFF ) const;
+
+private:
+ void DetermineCJKSupport_OS2(CFDataRef rOS2Table);
+ void DetermineCJKSupport_cmap(CFDataRef rCmapTable);
+ CTFontRef m_CTFontRef;
+ mutable const ImplFontCharMap* m_pCharMap;
+ mutable vcl::FontCapabilities m_aFontCapabilities;
+ mutable bool m_bHasOs2Table;
+ mutable bool m_bOs2TableRead;
+ mutable bool m_bCmapTableRead; // true if cmap encoding of Mac font is read
+ mutable bool m_bHasCJKSupport; // #i78970# CJK fonts need extra leading
+ mutable bool m_bFontCapabilitiesRead;
+};
+
+/* This class has the responsibility of assembling a list of CoreText
+ fonts available on the system and enabling access to that list.
+ */
+class SystemFontList
+{
+public:
+ SystemFontList();
+ ~SystemFontList();
+
+ void AnnounceFonts( ImplDevFontList& ) const;
+ ImplCoreTextFontData* GetFontDataFromRef( CTFontRef ) const;
+
+private:
+ typedef boost::unordered_map<CTFontRef,ImplCoreTextFontData*> CoreTextFontContainer;
+ CoreTextFontContainer m_aFontContainer;
+
+ void InitGlyphFallbacks();
+};
+
+#endif // _VCL_AQUA_CORETEXT_SALCORETEXTFONTUTILS_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/aqua/coretext/salcoretextlayout.hxx b/vcl/inc/aqua/coretext/salcoretextlayout.hxx
new file mode 100644
index 000000000000..e42752283b9d
--- /dev/null
+++ b/vcl/inc/aqua/coretext/salcoretextlayout.hxx
@@ -0,0 +1,64 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef _VCL_AQUA_CORETEXT_SALCORETEXTLAYOUT_HXX
+#define _VCL_AQUA_CORETEXT_SALCORETEXTLAYOUT_HXX
+
+#include <tools/poly.hxx>
+
+#include "sallayout.hxx"
+
+class AquaSalGraphics;
+class CoreTextStyleInfo;
+
+class CoreTextLayout : public SalLayout
+{
+public:
+ CoreTextLayout( AquaSalGraphics* graphics, CoreTextStyleInfo* style);
+ virtual ~CoreTextLayout();
+
+ virtual void AdjustLayout( ImplLayoutArgs& );
+ virtual void DrawText( SalGraphics& ) const;
+ virtual void DropGlyph( int nStart );
+ virtual long FillDXArray( long* pDXArray ) const;
+ virtual bool GetBoundRect( SalGraphics&, Rectangle& ) const;
+ virtual void GetCaretPositions( int nArraySize, long* pCaretXArray ) const;
+ virtual bool GetGlyphOutlines( SalGraphics&, PolyPolyVector& ) const;
+ virtual int GetNextGlyphs( int nLen, sal_GlyphId* pGlyphs, Point& rPos, int&,
+ sal_Int32* pGlyphAdvances, int* pCharIndexes ) const;
+ virtual int GetTextBreak( long nMaxWidth, long nCharExtra, int nFactor ) const;
+ virtual long GetTextWidth() const;
+ virtual void InitFont() const;
+ virtual bool LayoutText( ImplLayoutArgs& );
+ virtual void MoveGlyph( int nStart, long nNewXPos );
+ virtual void Simplify( bool bIsBase );
+
+private:
+ void Clean();
+ bool InitGIA() const;
+
+ AquaSalGraphics* m_graphics;
+ CoreTextStyleInfo* m_style;
+ mutable int m_glyphs_count;
+ mutable int m_chars_count;
+ mutable int* m_chars2glyphs;
+ mutable int* m_glyphs2chars;
+ mutable CGGlyph* m_glyphs;
+ mutable int* m_char_widths;
+ mutable int* m_glyph_advances;
+ mutable CGPoint* m_glyph_positions;
+ CTTypesetterRef m_typesetter;
+ CTLineRef m_line;
+ mutable bool m_has_bound_rec;
+ mutable Rectangle m_bound_rect;
+ CGFloat m_base_advance;
+ mutable CGFloat m_cached_width;
+ mutable CFIndex m_current_run_index;
+ mutable CFIndex m_current_glyph_index;
+ mutable CFIndex m_current_glyphrun_index;
+ mutable CFArrayRef m_runs;
+
+};
+
+#endif // _VCL_AQUA_CORETEXT_SALCORETEXTLAYOUT_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/aqua/coretext/salcoretextstyle.hxx b/vcl/inc/aqua/coretext/salcoretextstyle.hxx
new file mode 100644
index 000000000000..91bde5209fcc
--- /dev/null
+++ b/vcl/inc/aqua/coretext/salcoretextstyle.hxx
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef _VCL_AQUA_CORETEXT_SALCORETEXTSTYLE_HXX
+#define _VCL_AQUA_CORETEXT_SALCORETEXTSTYLE_HXX
+
+#include "aqua/salgdicommon.hxx"
+
+class FontSelectPattern;
+class ImplCoreTextFontData;
+
+class CoreTextStyleInfo
+{
+public:
+ CoreTextStyleInfo();
+ ~CoreTextStyleInfo();
+ CTFontRef GetFont() const { return m_CTFont; };
+ long GetFontStretchedSize() const;
+ float GetFontStretchFactor() const { return m_stretch_factor; };
+ CTParagraphStyleRef GetParagraphStyle() const { return m_CTParagraphStyle; } ;
+ CGSize GetSize() const;
+ CGColorRef GetColor() const { return m_color; } ;
+ void SetColor(SalColor color);
+ void SetColor(void);
+ void SetFont(FontSelectPattern* requested_font);
+
+private:
+ bool m_fake_bold;
+ bool m_fake_italic;
+ CGAffineTransform m_matrix;
+ float m_stretch_factor;
+ float m_font_scale;
+ float m_fake_dpi_scale;
+ CTParagraphStyleRef m_CTParagraphStyle;
+ CTFontRef m_CTFont;
+ CGColorRef m_color;
+ const ImplCoreTextFontData* m_font_data;
+
+};
+
+#endif // _VCL_AQUA_CORETEXT_SALCORETEXTSTYLE_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/aqua/coretext/salgdi.h b/vcl/inc/aqua/coretext/salgdi.h
new file mode 100644
index 000000000000..7f59de203aba
--- /dev/null
+++ b/vcl/inc/aqua/coretext/salgdi.h
@@ -0,0 +1,297 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+
+#ifndef _VCL_AQUA_CORETEXT_SALGDI_H
+#define _VCL_AQUA_CORETEXT_SALGDI_H
+
+
+#include "premac.h"
+#include <ApplicationServices/ApplicationServices.h>
+#include "postmac.h"
+
+#include "aqua/aquavcltypes.h"
+#include "aqua/coretext/salcoretextfontutils.hxx"
+#include "aqua/salframe.h"
+#include "salgdi.hxx"
+
+#include "aqua/salgdicommon.hxx"
+
+class CoreTextStyleInfo;
+
+// -------------------
+// - AquaSalGraphics -
+// -------------------
+class AquaSalGraphics : public SalGraphics
+{
+ friend class CoreTextLayout;
+protected:
+ AquaSalFrame* mpFrame;
+ CGLayerRef mxLayer; //< Quartz graphics layer
+ CGContextRef mrContext; //< Quartz drawing context
+ class XorEmulation* mpXorEmulation;
+ int mnXorMode; //< 0: off 1: on 2: invert only
+ int mnWidth;
+ int mnHeight;
+ int mnBitmapDepth; //< zero unless bitmap
+ long mnRealDPIX; //< device X-resolution of this graphics
+ long mnRealDPIY; //< device Y-resolution of this graphics
+
+ /// some graphics implementations (e.g. AquaSalInfoPrinter) scale
+ /// everything down by a factor (see SetupPrinterGraphics for details)
+ /// so we have to compensate for it with the inverse factor
+ double mfFakeDPIScale;
+ double mfFontScale;
+
+
+ CGMutablePathRef mxClipPath; //< path representing current clip region
+
+ /// Drawing colors
+ RGBAColor maLineColor; //< pen color RGBA
+ RGBAColor maFillColor; //< brush color RGBA
+
+ ImplCoreTextFontData* m_pCoreTextFontData; //< Device Font settings
+
+ bool mbNonAntialiasedText; //< allows text to be rendered without antialiasing
+
+ // Graphics types
+
+ bool mbPrinter; //< is this a printer graphics
+ bool mbVirDev; //< is this a virtual device graphics
+ bool mbWindow; //< is this a window graphics
+
+ RGBColor m_TextColor;
+
+ CoreTextStyleInfo* m_style;
+
+public:
+ AquaSalGraphics();
+ virtual ~AquaSalGraphics();
+
+ bool IsPenVisible() const { return maLineColor.IsVisible(); }
+ bool IsBrushVisible() const { return maFillColor.IsVisible(); }
+
+ void SetWindowGraphics( AquaSalFrame* pFrame );
+ void SetPrinterGraphics( CGContextRef, long nRealDPIX, long nRealDPIY, double fFakeScale );
+ void SetVirDevGraphics( CGLayerRef, CGContextRef, int nBitDepth = 0 );
+
+ void initResolution( NSWindow* );
+ void copyResolution( AquaSalGraphics& );
+ void updateResolution();
+
+ bool IsWindowGraphics() const { return mbWindow; }
+ bool IsPrinterGraphics() const { return mbPrinter; }
+ bool IsVirDevGraphics() const { return mbVirDev; }
+ AquaSalFrame* getGraphicsFrame() const { return mpFrame; }
+ void setGraphicsFrame( AquaSalFrame* pFrame ) { mpFrame = pFrame; }
+
+ void ImplDrawPixel( long nX, long nY, const RGBAColor& ); // helper to draw single pixels
+
+ bool CheckContext();
+ CGContextRef GetContext();
+ void UpdateWindow( NSRect& ); // delivered in NSView coordinates
+ void RefreshRect( const CGRect& );
+ void RefreshRect( const NSRect& );
+ void RefreshRect(float lX, float lY, float lWidth, float lHeight);
+
+ void SetState();
+ void UnsetState();
+ // InvalidateContext does an UnsetState and sets mrContext to 0
+ void InvalidateContext();
+
+ virtual bool setClipRegion( const Region& );
+
+ // draw --> LineColor and FillColor and RasterOp and ClipRegion
+ virtual void drawPixel( long nX, long nY );
+ virtual void drawPixel( long nX, long nY, SalColor nSalColor );
+ virtual void drawLine( long nX1, long nY1, long nX2, long nY2 );
+ virtual void drawRect( long nX, long nY, long nWidth, long nHeight );
+ virtual void drawPolyLine( sal_uLong nPoints, const SalPoint* pPtAry );
+ virtual void drawPolygon( sal_uLong nPoints, const SalPoint* pPtAry );
+ virtual void drawPolyPolygon( sal_uLong nPoly, const sal_uLong* pPoints, PCONSTSALPOINT* pPtAry );
+ virtual bool drawPolyPolygon( const ::basegfx::B2DPolyPolygon&, double fTransparency );
+ virtual sal_Bool drawPolyLineBezier( sal_uLong nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry );
+ virtual sal_Bool drawPolygonBezier( sal_uLong nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry );
+ virtual sal_Bool drawPolyPolygonBezier( sal_uLong nPoly, const sal_uLong* pPoints,
+ const SalPoint* const* pPtAry, const sal_uInt8* const* pFlgAry );
+ virtual bool drawPolyLine( const ::basegfx::B2DPolygon&, double fTransparency,
+ const ::basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin );
+
+ // CopyArea --> No RasterOp, but ClipRegion
+ virtual void copyArea( long nDestX, long nDestY, long nSrcX, long nSrcY, long nSrcWidth,
+ long nSrcHeight, sal_uInt16 nFlags );
+
+ // CopyBits and DrawBitmap --> RasterOp and ClipRegion
+ // CopyBits() --> pSrcGraphics == NULL, then CopyBits on same Graphics
+ virtual void copyBits( const SalTwoRect* pPosAry, SalGraphics* pSrcGraphics );
+ virtual void drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nTransparentColor );
+ virtual void drawBitmap( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ const SalBitmap& rTransparentBitmap );
+ virtual void drawMask( const SalTwoRect* pPosAry,
+ const SalBitmap& rSalBitmap,
+ SalColor nMaskColor );
+
+ virtual SalBitmap* getBitmap( long nX, long nY, long nWidth, long nHeight );
+ virtual SalColor getPixel( long nX, long nY );
+
+ // invert --> ClipRegion (only Windows or VirDevs)
+ virtual void invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags);
+ virtual void invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInvert nFlags );
+
+ virtual sal_Bool drawEPS( long nX, long nY, long nWidth, long nHeight, void* pPtr, sal_uLong nSize );
+
+ virtual bool drawAlphaBitmap( const SalTwoRect&,
+ const SalBitmap& rSourceBitmap,
+ const SalBitmap& rAlphaBitmap );
+
+ virtual bool drawAlphaRect( long nX, long nY, long nWidth,
+ long nHeight, sal_uInt8 nTransparency );
+
+ CGPoint* makeCGptArray(sal_uLong nPoints, const SalPoint* pPtAry);
+ // native widget rendering methods that require mirroring
+ virtual sal_Bool hitTestNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion,
+ const Point& aPos, sal_Bool& rIsInside );
+ virtual sal_Bool drawNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion,
+ ControlState nState, const ImplControlValue& aValue,
+ const rtl::OUString& aCaption );
+ virtual sal_Bool getNativeControlRegion( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion,
+ ControlState nState, const ImplControlValue& aValue,
+ const rtl::OUString& aCaption,
+ Rectangle &rNativeBoundingRegion,
+ Rectangle &rNativeContentRegion );
+
+ // get device resolution
+ virtual void GetResolution( long& rDPIX, long& rDPIY );
+ // get the depth of the device
+ virtual sal_uInt16 GetBitCount() const;
+ // get the width of the device
+ virtual long GetGraphicsWidth() const;
+
+ // set the clip region to empty
+ virtual void ResetClipRegion();
+
+ // set the line color to transparent (= don't draw lines)
+ virtual void SetLineColor();
+ // set the line color to a specific color
+ virtual void SetLineColor( SalColor nSalColor );
+ // set the fill color to transparent (= don't fill)
+ virtual void SetFillColor();
+ // set the fill color to a specific color, shapes will be
+ // filled accordingly
+ virtual void SetFillColor( SalColor nSalColor );
+ // enable/disable XOR drawing
+ virtual void SetXORMode( bool bSet, bool bInvertOnly );
+ // set line color for raster operations
+ virtual void SetROPLineColor( SalROPColor nROPColor );
+ // set fill color for raster operations
+ virtual void SetROPFillColor( SalROPColor nROPColor );
+ // set the text color to a specific color
+ virtual void SetTextColor( SalColor nSalColor );
+ // set the font
+ virtual sal_uInt16 SetFont( FontSelectPattern*, int nFallbackLevel );
+ // get the current font's etrics
+ virtual void GetFontMetric( ImplFontMetricData*, int nFallbackLevel );
+ // get kernign pairs of the current font
+ // return only PairCount if (pKernPairs == NULL)
+ virtual sal_uLong GetKernPairs( sal_uLong nPairs, ImplKernPairData* pKernPairs );
+ // get the repertoire of the current font
+ virtual const ImplFontCharMap* GetImplFontCharMap() const;
+ virtual bool GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const;
+ // graphics must fill supplied font list
+ virtual void GetDevFontList( ImplDevFontList* );
+ // graphics should call ImplAddDevFontSubstitute on supplied
+ // OutputDevice for all its device specific preferred font substitutions
+ virtual void GetDevFontSubstList( OutputDevice* );
+ virtual bool AddTempDevFont( ImplDevFontList*, const rtl::OUString& rFileURL,
+ const rtl::OUString& rFontName );
+ // CreateFontSubset: a method to get a subset of glyhps of a font
+ // inside a new valid font file
+ // returns TRUE if creation of subset was successfull
+ // parameters: rToFile: contains a osl file URL to write the subset to
+ // pFont: describes from which font to create a subset
+ // pGlyphIDs: the glyph ids to be extracted
+ // pEncoding: the character code corresponding to each glyph
+ // pWidths: the advance widths of the correspoding glyphs (in PS font units)
+ // nGlyphs: the number of glyphs
+ // rInfo: additional outgoing information
+ // implementation note: encoding 0 with glyph id 0 should be added implicitly
+ // as "undefined character"
+ virtual sal_Bool CreateFontSubset( const rtl::OUString& rToFile,
+ const PhysicalFontFace* pFont,
+ long* pGlyphIDs,
+ sal_uInt8* pEncoding,
+ sal_Int32* pWidths,
+ int nGlyphs,
+ FontSubsetInfo& rInfo);
+
+ // GetFontEncodingVector: a method to get the encoding map Unicode
+ // to font encoded character; this is only used for type1 fonts and
+ // may return NULL in case of unknown encoding vector
+ // if ppNonEncoded is set and non encoded characters (that is type1
+ // glyphs with only a name) exist it is set to the corresponding
+ // map for non encoded glyphs; the encoding vector contains -1
+ // as encoding for these cases
+ virtual const Ucs2SIntMap* GetFontEncodingVector( const PhysicalFontFace*, const Ucs2OStrMap** ppNonEncoded );
+
+ // GetEmbedFontData: gets the font data for a font marked
+ // embeddable by GetDevFontList or NULL in case of error
+ // parameters: pFont: describes the font in question
+ // pWidths: the widths of all glyphs from char code 0 to 255
+ // pWidths MUST support at least 256 members;
+ // rInfo: additional outgoing information
+ // pDataLen: out parameter, contains the byte length of the returned buffer
+ virtual const void* GetEmbedFontData( const PhysicalFontFace*,
+ const sal_Ucs* pUnicodes,
+ sal_Int32* pWidths,
+ FontSubsetInfo& rInfo,
+ long* pDataLen );
+ // frees the font data again
+ virtual void FreeEmbedFontData( const void* pData, long nDataLen );
+
+ virtual void GetGlyphWidths( const PhysicalFontFace*,
+ bool bVertical,
+ Int32Vector& rWidths,
+ Ucs2UIntMap& rUnicodeEnc );
+
+ virtual sal_Bool GetGlyphBoundRect( sal_GlyphId nIndex, Rectangle& );
+ virtual sal_Bool GetGlyphOutline( sal_GlyphId nIndex, basegfx::B2DPolyPolygon& );
+
+ virtual SalLayout* GetTextLayout( ImplLayoutArgs&, int nFallbackLevel );
+ virtual void DrawServerFontLayout( const ServerFontLayout& );
+ virtual bool supportsOperation( OutDevSupportType ) const;
+
+ // Query the platform layer for control support
+ virtual sal_Bool IsNativeControlSupported( ControlType nType, ControlPart nPart );
+
+ virtual SystemGraphicsData GetGraphicsData() const;
+ virtual SystemFontData GetSysFontData( int /* nFallbacklevel */ ) const;
+
+private:
+ // differences between VCL, Quartz and kHiThemeOrientation coordinate systems
+ // make some graphics seem to be vertically-mirrored from a VCL perspective
+ bool IsFlipped() const { return mbWindow; };
+
+ void ApplyXorContext();
+ void Pattern50Fill();
+ UInt32 getState( ControlState nState );
+ UInt32 getTrackState( ControlState nState );
+ bool GetRawFontData( const PhysicalFontFace* pFontData,
+ std::vector<unsigned char>& rBuffer,
+ bool* pJustCFF );
+};
+
+inline void AquaSalGraphics::RefreshRect( const CGRect& rRect )
+{
+ RefreshRect( rRect.origin.x, rRect.origin.y, rRect.size.width, rRect.size.height );
+}
+
+inline void AquaSalGraphics::RefreshRect( const NSRect& rRect )
+{
+ RefreshRect( rRect.origin.x, rRect.origin.y, rRect.size.width, rRect.size.height );
+}
+
+#endif /* _VCL_AQUA_CORETEXT_SALGDI_H */
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/inc/vcl/sysdata.hxx b/vcl/inc/vcl/sysdata.hxx
index d52cd9483795..1033239779bd 100644
--- a/vcl/inc/vcl/sysdata.hxx
+++ b/vcl/inc/vcl/sysdata.hxx
@@ -194,7 +194,6 @@ struct SystemGlyphData
// --------------------
// - SystemFontData -
// --------------------
-
struct SystemFontData
{
unsigned long nSize; // size in bytes of this structure
@@ -202,7 +201,7 @@ struct SystemFontData
HFONT hFont; // native font object
#elif defined( QUARTZ )
#ifdef ENABLE_CORETEXT
- CTFontRef rCTFont;
+ void* rCTFont;
#else
void* aATSUFontID; // native font object
#endif