diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-04-02 00:15:07 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2012-06-23 23:23:25 -0500 |
commit | 8c91ec1ab0b6f437b8b60ed9aee067f088fa4718 (patch) | |
tree | 251d1945755046b411c1370c737e84821db7ff0a /vcl/inc | |
parent | 2c506447fcf020b17797c30d001fda9c177a4235 (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.h | 3 | ||||
-rw-r--r-- | vcl/inc/aqua/common.h | 19 | ||||
-rw-r--r-- | vcl/inc/aqua/coretext/salcoretextfontutils.hxx | 67 | ||||
-rw-r--r-- | vcl/inc/aqua/coretext/salcoretextlayout.hxx | 64 | ||||
-rw-r--r-- | vcl/inc/aqua/coretext/salcoretextstyle.hxx | 42 | ||||
-rw-r--r-- | vcl/inc/aqua/coretext/salgdi.h | 297 | ||||
-rw-r--r-- | vcl/inc/vcl/sysdata.hxx | 3 |
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 |