blob: 2b3235884a54f80267471cdf925a441aabe1f2e4 [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "aqua/salgdi.h"
#include "sallayout.hxx"
#include <ApplicationServices/ApplicationServices.h>
// =======================================================================
class CTTextStyle
: public ImplMacTextStyle
{
public:
explicit CTTextStyle( const ImplFontSelectData& );
virtual ~CTTextStyle( void );
virtual SalLayout* GetTextLayout( void ) const;
virtual void GetFontMetric( float fDPIY, ImplFontMetricData& ) const;
virtual bool GetGlyphBoundRect( sal_GlyphId, Rectangle& ) const;
virtual bool GetGlyphOutline( sal_GlyphId, basegfx::B2DPolyPolygon& ) const;
virtual void SetTextColor( const RGBAColor& ) {}
private:
/// CoreText text style object
CFMutableDictionaryRef mpStyleDict;
friend class CTLayout;
CFMutableDictionaryRef GetStyleDict( void ) const { return mpStyleDict; }
};
// =======================================================================
#ifndef DISABLE_CORETEXT_DYNLOAD
// the CoreText symbols may need to be loaded dynamically
// since platform targets like OSX 10.4 do not provide all required symbols
// TODO: avoid the dlsym stuff if the target platform is >= OSX10.5
class DynCoreTextSyms
{
public:
// dynamic symbols to access the CoreText API
uint32_t (*GetCoreTextVersion)(void);
CTFontCollectionRef (*FontCollectionCreateFromAvailableFonts)(CFDictionaryRef);
CFArrayRef (*FontCollectionCreateMatchingFontDescriptors)(CTFontCollectionRef);
CGPathRef (*FontCreatePathForGlyph)(CTFontRef,CGGlyph,const CGAffineTransform*);
CGRect (*FontGetBoundingRectsForGlyphs)(CTFontRef,CTFontOrientation,CGGlyph*,CGRect*,CFIndex);
CTLineRef (*LineCreateJustifiedLine)(CTLineRef,CGFloat,double);
double (*LineGetTrailingWhitespaceWidth)(CTLineRef);
CGFloat (*LineGetOffsetForStringIndex)(CTLineRef,CFIndex,CGFloat*);
CFArrayRef (*LineGetGlyphRuns)(CTLineRef);
CFIndex (*RunGetGlyphCount)(CTRunRef);
const CGGlyph* (*RunGetGlyphsPtr)(CTRunRef);
const CGPoint* (*RunGetPositionsPtr)(CTRunRef);
const CGSize* (*RunGetAdvancesPtr)(CTRunRef);
const CFIndex * (*RunGetStringIndicesPtr)(CTRunRef);
// singleton helpers
static const DynCoreTextSyms& get( void );
bool IsActive( void ) const { return mbIsActive; }
private:
explicit DynCoreTextSyms( void );
bool mbIsActive;
};
#endif // DISABLE_CORETEXT_DYNLOAD
// =======================================================================