diff options
author | Tor Lillqvist <tml@iki.fi> | 2013-01-19 14:22:05 +0200 |
---|---|---|
committer | Tor Lillqvist <tml@iki.fi> | 2013-01-19 15:49:50 +0200 |
commit | bae655a7c2c5bb7e612b068eea34ec5780c58513 (patch) | |
tree | 5bacb417176829a2665007c4f86d485e9e75c42d /vcl/ios | |
parent | c34cad49fadd376a61904e2201d85fbe908c348b (diff) |
De-duplication of CoreText code and headers for OS X and iOS
Nominally renamed the AquaSalGraphics class to QuartzSalGraphics, as
it isn't now then "Aqua" (Mac OS X) specific any more.
Actually, for Mac OS X, because lots of code in vcl/aqua expects it to
be called AquaSalGraphics (just like the alternative class used when
using the obsolete ATSUI API on Mac OS X), use a #define to make it
still be called AquaSalGraphics to the compiler's eyes. For iOS it can
be called QuartzSalGraphics.
Diffstat (limited to 'vcl/ios')
-rw-r--r-- | vcl/ios/source/gdi/salcoretextfontutils.cxx | 613 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salcoretextlayout.cxx | 481 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salcoretextstyle.cxx | 120 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salgdi.cxx | 263 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salgdicommon.cxx | 102 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salgdiutils.cxx | 26 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salnativewidgets.cxx | 18 | ||||
-rw-r--r-- | vcl/ios/source/gdi/salvd.cxx | 10 | ||||
-rw-r--r-- | vcl/ios/source/window/salframe.cxx | 4 | ||||
-rw-r--r-- | vcl/ios/source/window/salframeview.mm | 4 |
10 files changed, 82 insertions, 1559 deletions
diff --git a/vcl/ios/source/gdi/salcoretextfontutils.cxx b/vcl/ios/source/gdi/salcoretextfontutils.cxx deleted file mode 100644 index 3175d0816d23..000000000000 --- a/vcl/ios/source/gdi/salcoretextfontutils.cxx +++ /dev/null @@ -1,613 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include "ios/common.h" - -#include "ios/salcoretextfontutils.hxx" -#include "ios/salgdi.h" - -#include "sft.hxx" -#include "ios/salinst.h" - - -static bool GetDevFontAttributes( CTFontDescriptorRef font_descriptor, ImplDevFontAttributes& rDFA ) -{ - int value = 0; - - // reset the attributes - rDFA.SetFamilyType( FAMILY_DONTKNOW ); - rDFA.SetPitch( PITCH_VARIABLE ); - rDFA.SetWidthType( WIDTH_NORMAL ); - rDFA.SetWeight( WEIGHT_NORMAL ); - rDFA.SetItalic( ITALIC_NONE ); - rDFA.SetSymbolFlag( false ); - rDFA.mbOrientation = true; - rDFA.mbDevice = true; - rDFA.mnQuality = 0; - - CFNumberRef format = (CFNumberRef)CTFontDescriptorCopyAttribute(font_descriptor, kCTFontFormatAttribute); - CFNumberGetValue(format, kCFNumberIntType, &value); - CFRelease(format); - - if(value == kCTFontFormatBitmap) - { - /* we don't want bitmap fonts */ - return false; - } - rDFA.mbSubsettable = true; - rDFA.mbEmbeddable = false; - - CFStringRef family_name = (CFStringRef)CTFontDescriptorCopyAttribute(font_descriptor, kCTFontFamilyNameAttribute); - rDFA.SetFamilyName( GetOUString(family_name) ); - CFRelease(family_name); - - CFDictionaryRef traits = (CFDictionaryRef)CTFontDescriptorCopyAttribute(font_descriptor, kCTFontTraitsAttribute); - CFNumberRef symbolics = (CFNumberRef)CFDictionaryGetValue(traits, kCTFontSymbolicTrait); - CFNumberGetValue(symbolics, kCFNumberIntType, &value); - CFRelease(symbolics); - - if(value & kCTFontMonoSpaceTrait) - { - rDFA.SetPitch( PITCH_FIXED ); - } - - if(value & kCTFontItalicTrait) - { - rDFA.SetItalic( ITALIC_NORMAL ); - } - - if(value & kCTFontBoldTrait) - { - rDFA.SetWeight( WEIGHT_BOLD ); - } - - if(value & kCTFontCondensedTrait) - { - rDFA.SetWidthType( WIDTH_CONDENSED ); - } - else if(value & kCTFontExpandedTrait) - { - rDFA.SetWidthType( WIDTH_EXPANDED ); - } - switch(value & kCTFontClassMaskTrait) - { - case kCTFontOldStyleSerifsClass: - rDFA.SetFamilyType( FAMILY_ROMAN ); - break; - case kCTFontTransitionalSerifsClass: - case kCTFontModernSerifsClass: - case kCTFontClarendonSerifsClass: - case kCTFontSlabSerifsClass: - case kCTFontFreeformSerifsClass: - break; - case kCTFontSansSerifClass: - rDFA.SetFamilyType( FAMILY_SWISS ); - case kCTFontOrnamentalsClass: - rDFA.SetFamilyType( FAMILY_DECORATIVE ); - break; - case kCTFontScriptsClass: - rDFA.SetFamilyType( FAMILY_SCRIPT ); - break; - case kCTFontSymbolicClass: - rDFA.SetSymbolFlag( true ); - break; - } - - CFNumberRef weight = (CFNumberRef)CFDictionaryGetValue(traits, kCTFontWeightTrait); - float fdval = 0.0; - CFNumberGetValue(weight, kCFNumberFloatType, &fdval); - if(fdval > 0.6) - { - rDFA.SetWeight( WEIGHT_BLACK ); - } - else if(fdval > 0.4) - { - rDFA.SetWeight( WEIGHT_ULTRABOLD ); - } - else if (fdval > 0.3) - { - rDFA.SetWeight( WEIGHT_BOLD ); - } - else if (fdval > 0.0) - { - rDFA.SetWeight( WEIGHT_SEMIBOLD ); - } - else if (fdval <= -0.8) - { - rDFA.SetWeight( WEIGHT_ULTRALIGHT ); - } - else if (fdval <= -0.4) - { - rDFA.SetWeight( WEIGHT_LIGHT ); - } - else if (fdval <= -0.3) - { - rDFA.SetWeight( WEIGHT_SEMILIGHT ); - } - else if (fdval <= -0.2) - { - rDFA.SetWeight( WEIGHT_THIN ); - } - else - { - rDFA.SetWeight( WEIGHT_NORMAL ); - } - - CFStringRef string_ref = (CFStringRef)CTFontDescriptorCopyAttribute(font_descriptor, kCTFontStyleNameAttribute); - rtl::OUString font_name = GetOUString(string_ref); - rtl::OUString font_name_lc(font_name.toAsciiLowerCase()); - CFRelease(string_ref); - - // heuristics to adjust font slant - if( (font_name_lc.indexOf("oblique") != -1) || - (font_name_lc.indexOf("inclined") != -1) || - (font_name_lc.indexOf("slanted") != -1) ) - { - rDFA.SetItalic( ITALIC_OBLIQUE ); - } - - // heuristics to adjust font width - if (font_name_lc.indexOf("narrow") != -1) - { - rDFA.SetWidthType( WIDTH_SEMI_CONDENSED ); - } - - // heuristics for font family type - if( (font_name_lc.indexOf("script") != -1) || - (font_name_lc.indexOf("chancery") != -1) || - (font_name_lc.indexOf("zapfino") != -1)) - { - rDFA.SetFamilyType( FAMILY_SCRIPT ); - } - else if( (font_name_lc.indexOf("comic") != -1) || - (font_name_lc.indexOf("outline") != -1) || - (font_name_lc.indexOf("pinpoint") != -1) ) - { - rDFA.SetFamilyType( FAMILY_DECORATIVE ); - } - else if( (font_name_lc.indexOf("sans") != -1) || - (font_name_lc.indexOf("arial") != -1) ) - { - rDFA.SetFamilyType( FAMILY_SWISS ); - } - else if( (font_name_lc.indexOf("roman") != -1) || - (font_name_lc.indexOf("times") != -1) ) - { - rDFA.SetFamilyType( FAMILY_ROMAN ); - } - return true; -} - -SystemFontList::SystemFontList() -{ - CTFontCollectionRef font_collection = CTFontCollectionCreateFromAvailableFonts(NULL); - if(font_collection) - { - CFArrayRef font_descriptors = CTFontCollectionCreateMatchingFontDescriptors(font_collection); - - if(font_descriptors) - { - for(int i = 0; i < CFArrayGetCount(font_descriptors); i++) - { - CTFontDescriptorRef font_descriptor = (CTFontDescriptorRef)CFArrayGetValueAtIndex(font_descriptors, i); - CTFontRef font = CTFontCreateWithFontDescriptor(font_descriptor, 0, NULL); - if(font) - { - ImplDevFontAttributes devfont_attr; - if(GetDevFontAttributes( font_descriptor, devfont_attr ) ) - { - CoreTextPhysicalFontFace* font_face = new CoreTextPhysicalFontFace(devfont_attr, font); - if(font_face && font_face->GetCTFont()) - { - m_aFontContainer [ font_face->GetCTFont() ] = font_face; - } - } - CFRelease(font); - } - } - CFRelease(font_descriptors); - } - CFRelease(font_collection); - } - -} - -SystemFontList::~SystemFontList() -{ - CoreTextFontContainer::const_iterator it = m_aFontContainer.begin(); - for(; it != m_aFontContainer.end(); ++it ) - delete (*it).second; - m_aFontContainer.clear(); -} - -CoreTextPhysicalFontFace* SystemFontList::GetFontDataFromRef( CTFontRef font ) const -{ - CoreTextFontContainer::const_iterator it = m_aFontContainer.find( font ); - return it == m_aFontContainer.end() ? NULL : (*it).second; -} - - -void SystemFontList::AnnounceFonts( ImplDevFontList& rFontList ) const -{ - CoreTextFontContainer::const_iterator it = m_aFontContainer.begin(); - for(; it != m_aFontContainer.end(); ++it ) - { - rFontList.Add( (*it).second->Clone() ); - } -} - -CoreTextPhysicalFontFace::CoreTextPhysicalFontFace( const ImplDevFontAttributes& rDFA, CTFontRef font ) -: PhysicalFontFace( rDFA, 0 ) -, m_CTFontRef((CTFontRef)CFRetain(font)) -, m_pCharMap( NULL ) -, m_bHasOs2Table( false ) -, m_bOs2TableRead( false ) -, m_bCmapTableRead( false ) -, m_bHasCJKSupport( false ) -, m_bFontCapabilitiesRead( false ) -{ - SAL_INFO( "vcl.coretext.font", "retain " << font << " as " << m_CTFontRef ); -} - -CoreTextPhysicalFontFace::~CoreTextPhysicalFontFace() -{ - if( m_pCharMap ) - { - m_pCharMap->DeReference(); - } - SAL_INFO( "vcl.coretext.font", "release " << m_CTFontRef ); - SafeCFRelease(m_CTFontRef); -} - -PhysicalFontFace* CoreTextPhysicalFontFace::Clone() const -{ - CoreTextPhysicalFontFace* pClone = new CoreTextPhysicalFontFace(*this); - if( m_pCharMap ) - { - m_pCharMap->AddReference(); - } - if( m_CTFontRef ) - { - pClone->m_CTFontRef = (CTFontRef)CFRetain(m_CTFontRef); - SAL_INFO( "vcl.coretext.font", "clone " << m_CTFontRef << " into " << pClone->m_CTFontRef ); - } - return pClone; -} - -ImplFontEntry* CoreTextPhysicalFontFace::CreateFontInstance(FontSelectPattern& rFSD) const -{ - return new ImplFontEntry(rFSD); -} - -const ImplFontCharMap* CoreTextPhysicalFontFace::GetImplFontCharMap() -{ - // return the cached charmap - if( m_pCharMap ) - { - return m_pCharMap; - } - // set the default charmap - m_pCharMap = ImplFontCharMap::GetDefaultMap(); - m_pCharMap->AddReference(); - - // get the CMAP byte size - CFDataRef rCmapTable = CTFontCopyTable( m_CTFontRef, kCTFontTableCmap, kCTFontTableOptionNoOptions); - if(!rCmapTable) - { - return m_pCharMap; - } - if(!m_bCmapTableRead) - { - m_bCmapTableRead = true; - DetermineCJKSupport_cmap(rCmapTable); - } - // parse the CMAP - CmapResult aCmapResult; - if(ParseCMAP( CFDataGetBytePtr(rCmapTable), CFDataGetLength(rCmapTable), aCmapResult ) ) - { - m_pCharMap = new ImplFontCharMap( aCmapResult ); - m_pCharMap->AddReference(); - } - CFRelease(rCmapTable); - return m_pCharMap; -} - -bool CoreTextPhysicalFontFace::GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) -{ - // read this only once per font - if( m_bFontCapabilitiesRead ) - { - rFontCapabilities = m_aFontCapabilities; - return !rFontCapabilities.maUnicodeRange.empty() || !rFontCapabilities.maCodePageRange.empty(); - } - m_bFontCapabilitiesRead = true; - - // get the GSUB table raw data - CFDataRef rGSUBTable = CTFontCopyTable( m_CTFontRef, kCTFontTableGSUB, kCTFontTableOptionNoOptions); - if(rGSUBTable) - { - - vcl::getTTScripts(m_aFontCapabilities.maGSUBScriptTags, - CFDataGetBytePtr(rGSUBTable), CFDataGetLength(rGSUBTable)); - CFRelease(rGSUBTable); - } - CFDataRef OS2_Table = CTFontCopyTable( m_CTFontRef, kCTFontTableOS2, kCTFontTableOptionNoOptions); - if(OS2_Table) - { - vcl::getTTCoverage( - m_aFontCapabilities.maUnicodeRange, - m_aFontCapabilities.maCodePageRange, - CFDataGetBytePtr(OS2_Table), CFDataGetLength(OS2_Table)); - /* while we are at it let's solve HasCJK for the same price */ - if(!m_bOs2TableRead ) - { - m_bOs2TableRead = true; - m_bHasOs2Table = true; - DetermineCJKSupport_OS2(OS2_Table); - } - CFRelease(OS2_Table); - } - rFontCapabilities = m_aFontCapabilities; - return !rFontCapabilities.maUnicodeRange.empty() || !rFontCapabilities.maCodePageRange.empty(); -} - -struct font_table -{ - unsigned char* table; - unsigned char* dir_entry; - unsigned char* cursor; -}; - -void addTable(struct font_table* table, CTFontTableTag tag, CFDataRef data) -{ - if(data && CFDataGetLength(data) > 0) - { - *(uint32_t*)table->dir_entry = CFSwapInt32HostToBig(tag); - table->dir_entry += 4; - *(uint32_t*)table->dir_entry = 0; /* TODO: checksum */ - table->dir_entry += 4; - *(uint32_t*)table->dir_entry = CFSwapInt32HostToBig((uint32_t)((uintptr_t)table->cursor - (uintptr_t)table)); - table->dir_entry += 4; - *(uint32_t*)table->dir_entry = CFSwapInt32HostToBig(CFDataGetLength(data)); - table->dir_entry += 4; - - memcpy(table->cursor, CFDataGetBytePtr(data), CFDataGetLength(data)); - table->cursor += CFDataGetLength(data); - } -} - -bool CoreTextPhysicalFontFace::GetRawFontData( std::vector<unsigned char>& rBuffer, bool* pJustCFF ) const -{ - bool rc; - int table_count = 0; - - CFDataRef CFF_table = CTFontCopyTable( m_CTFontRef, kCTFontTableCFF, kCTFontTableOptionNoOptions); - if(pJustCFF) - { - if(CFF_table) - { - *pJustCFF = CFDataGetLength(CFF_table) ? true : false; - CFRelease(CFF_table); - return true; - } - else - { - return false; - } - } - size_t total_len = 0; - CFDataRef head_table = CTFontCopyTable( m_CTFontRef, kCTFontTableHead, kCTFontTableOptionNoOptions); - CFDataRef maxp_table = CTFontCopyTable( m_CTFontRef, kCTFontTableMaxp, kCTFontTableOptionNoOptions); - CFDataRef cmap_table = CTFontCopyTable( m_CTFontRef, kCTFontTableHead, kCTFontTableOptionNoOptions); - CFDataRef name_table = CTFontCopyTable( m_CTFontRef, kCTFontTableName, kCTFontTableOptionNoOptions); - CFDataRef hhea_table = CTFontCopyTable( m_CTFontRef, kCTFontTableHhea, kCTFontTableOptionNoOptions); - CFDataRef hmtx_table = CTFontCopyTable( m_CTFontRef, kCTFontTableHmtx, kCTFontTableOptionNoOptions); - rc = false; - if(head_table && maxp_table && cmap_table && name_table && hhea_table && hmtx_table) - { - if(CFDataGetLength(head_table) && - CFDataGetLength(maxp_table) && - CFDataGetLength(name_table) && - CFDataGetLength(hhea_table) && - CFDataGetLength(hmtx_table)) - { - table_count += 6; - total_len = CFDataGetLength(head_table) + - CFDataGetLength(maxp_table) + - CFDataGetLength(name_table) + - CFDataGetLength(hhea_table) + - CFDataGetLength(hmtx_table); - rc = true; - } - } - - CFDataRef loca_table = NULL; - CFDataRef glyf_table = NULL; - CFDataRef prep_table = NULL; - CFDataRef cvt_table = NULL; - CFDataRef fpgm_table = NULL; - if(rc) - { - if(!CFF_table || CFDataGetLength(CFF_table) == 0) - { - loca_table = CTFontCopyTable( m_CTFontRef, kCTFontTableLoca, kCTFontTableOptionNoOptions); - glyf_table = CTFontCopyTable( m_CTFontRef, kCTFontTableGlyf, kCTFontTableOptionNoOptions); - if(!loca_table || !glyf_table || !CFDataGetLength(loca_table) || !CFDataGetLength(glyf_table)) - { - rc = false; - } - else - { - table_count += 2; - total_len += CFDataGetLength(loca_table) + CFDataGetLength(glyf_table); - prep_table = CTFontCopyTable( m_CTFontRef, kCTFontTablePrep, kCTFontTableOptionNoOptions); - cvt_table = CTFontCopyTable( m_CTFontRef, kCTFontTableCvt, kCTFontTableOptionNoOptions); - fpgm_table = CTFontCopyTable( m_CTFontRef, kCTFontTableFpgm, kCTFontTableOptionNoOptions); - if(prep_table || CFDataGetLength(prep_table) > 0) - { - table_count += 1; - total_len += CFDataGetLength(prep_table); - } - if(cvt_table || CFDataGetLength(cvt_table) > 0) - { - table_count += 1; - total_len += CFDataGetLength(cvt_table); - } - if(fpgm_table || CFDataGetLength(fpgm_table) > 0) - { - table_count += 1; - total_len += CFDataGetLength(fpgm_table); - } - } - } - else - { - table_count += 1; - total_len += CFDataGetLength(CFF_table); - } - } - if(rc) - { - total_len += 12 + 16 * table_count; - rBuffer.resize(total_len); - struct font_table table; - unsigned char* cursor = &rBuffer[0]; - int nLog2 = 0; - - while( (table_count >> nLog2) > 1 ) ++nLog2; - - table.table = cursor; - *(uint16_t*)cursor = CFSwapInt16HostToBig(1); - cursor += 2; - *(uint16_t*)cursor = 0; - cursor += 2; - *(uint16_t*)cursor = CFSwapInt16HostToBig(table_count); - cursor += 2; - *(uint16_t*)cursor = CFSwapInt16HostToBig(nLog2 * 16); - cursor += 2; - *(uint16_t*)cursor = CFSwapInt16HostToBig(nLog2); - cursor += 2; - *(uint16_t*)cursor = CFSwapInt16HostToBig((table_count - nLog2) * 16); // rangeShift - cursor += 2; - table.dir_entry = cursor; - cursor += (16 * table_count); - table.cursor = cursor; - addTable(&table, kCTFontTableCmap, cmap_table); - addTable(&table, kCTFontTableCvt, cvt_table); - addTable(&table, kCTFontTableFpgm, fpgm_table); - addTable(&table, kCTFontTableCFF, CFF_table); - addTable(&table, kCTFontTableGlyf, glyf_table); - addTable(&table, kCTFontTableLoca, loca_table); - addTable(&table, kCTFontTableHead, head_table); - addTable(&table, kCTFontTableHhea, hhea_table); - addTable(&table, kCTFontTableHmtx, hmtx_table); - addTable(&table, kCTFontTableMaxp, maxp_table); - addTable(&table, kCTFontTableName, name_table); - addTable(&table, kCTFontTablePrep, prep_table); - } - SafeCFRelease(cmap_table); - SafeCFRelease(cvt_table); - SafeCFRelease(fpgm_table); - SafeCFRelease(CFF_table); - SafeCFRelease(glyf_table); - SafeCFRelease(loca_table); - SafeCFRelease(head_table); - SafeCFRelease(hhea_table); - SafeCFRelease(hmtx_table); - SafeCFRelease(maxp_table); - SafeCFRelease(name_table); - SafeCFRelease(prep_table); - - return rc; -} - -void CoreTextPhysicalFontFace::DetermineCJKSupport_OS2(CFDataRef rOS2Table) -{ - if(CFDataGetLength(rOS2Table) >= 48) - { - const unsigned short* pOS2buffer = (const unsigned short*)CFDataGetBytePtr(rOS2Table); - const unsigned short version = CFSwapInt16BigToHost(pOS2buffer[0]); - if( version >= 1) - { - const unsigned short unicode_range = CFSwapInt16BigToHost(pOS2buffer[23]); - if( unicode_range & 0x2DF0) - { - m_bHasCJKSupport = true; - } - } - } -} - -void CoreTextPhysicalFontFace::DetermineCJKSupport_cmap(CFDataRef rCmapTable) -{ - int table_len = CFDataGetLength(rCmapTable) / 2; - if(table_len >= 12) - { - const unsigned short* pCmap = (const unsigned short*)CFDataGetBytePtr(rCmapTable); - if(pCmap[0] == 0) - { - short nb_sub_tables = CFSwapInt16BigToHost(pCmap[1]); - for(int i = 2; --nb_sub_tables >= 0 && i < table_len; i += 4) - { - short platform = CFSwapInt16BigToHost(pCmap[i]); - if( platform == kFontMacintoshPlatform ) - { - short encoding = CFSwapInt16BigToHost(pCmap[i+1]); - if( encoding == kFontJapaneseScript || - encoding == kFontTraditionalChineseScript || - encoding == kFontKoreanScript || - encoding == kFontSimpleChineseScript ) - { - m_bHasCJKSupport = true; - break; - } - } - } - } - } -} - -bool CoreTextPhysicalFontFace::HasCJKSupport( void ) -{ - // read this only once per font - if(!m_bOs2TableRead ) - { - m_bOs2TableRead = true; - CFDataRef rOS2Table = CTFontCopyTable( m_CTFontRef, kCTFontTableOS2, kCTFontTableOptionNoOptions); - if(rOS2Table) - { - m_bHasOs2Table = true; - DetermineCJKSupport_OS2(rOS2Table); - CFRelease(rOS2Table); - } - } - if( !m_bCmapTableRead && !m_bHasOs2Table && !m_bHasCJKSupport ) - { - m_bCmapTableRead = true; - CFDataRef rCmapTable = CTFontCopyTable( m_CTFontRef, kCTFontTableCmap, kCTFontTableOptionNoOptions); - if(rCmapTable) - { - DetermineCJKSupport_cmap(rCmapTable); - CFRelease(rCmapTable); - } - } - return m_bHasCJKSupport; -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/ios/source/gdi/salcoretextlayout.cxx b/vcl/ios/source/gdi/salcoretextlayout.cxx deleted file mode 100644 index 8f9d550c0513..000000000000 --- a/vcl/ios/source/gdi/salcoretextlayout.cxx +++ /dev/null @@ -1,481 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include "ios/common.h" -#include "ios/salcoretextstyle.hxx" -#include "ios/salcoretextlayout.hxx" -#include "ios/salgdi.h" - - -CoreTextLayout::CoreTextLayout(IosSalGraphics* graphics, CoreTextStyleInfo* style) : - m_graphics(graphics), - m_style(style), - m_glyphs_count(-1), - m_chars_count(-1), - m_chars2glyphs(NULL), - m_glyphs2chars(NULL), - m_glyphs(NULL), - m_char_widths(NULL), - m_glyph_advances(NULL), - m_glyph_positions(NULL), - m_typesetter(NULL), - m_line(NULL), - m_has_bound_rec(false), - m_base_advance(0), - m_cached_width(0.0F), - m_current_run_index(0), - m_current_glyph_index(0), - m_current_glyphrun_index(0), - m_runs(NULL) -{ -} - -CoreTextLayout::~CoreTextLayout() -{ - Clean(); -} - -void CoreTextLayout::AdjustLayout( ImplLayoutArgs& /*rArgs*/ ) -{ - SAL_INFO( "vcl.coretext.layout", "-->" ); - SAL_INFO( "vcl.coretext.layout", "<--" ); - /* TODO */ -} - -void CoreTextLayout::Clean() -{ - SAL_INFO( "vcl.coretext.layout", "-->" ); - if(m_glyphs) - { - delete[] m_glyphs; - m_glyphs = NULL; - } - if(m_chars2glyphs) - { - delete[] m_chars2glyphs; - m_chars2glyphs = NULL; - } - if(m_glyphs2chars) - { - delete[] m_glyphs2chars; - m_glyphs2chars = NULL; - } - if(m_char_widths) - { - delete[] m_char_widths; - m_char_widths = NULL; - } - if(m_glyph_advances) - { - delete[] m_glyph_advances; - m_glyph_advances = NULL; - } - if(m_glyph_positions) - { - delete[] m_glyph_positions; - m_glyph_positions = NULL; - } - SafeCFRelease(m_typesetter); - SafeCFRelease(m_line); - m_has_bound_rec = false; - SAL_INFO( "vcl.coretext.layout", "<--" ); -} - -void CoreTextLayout::DrawText( SalGraphics& rGraphics ) const -{ - SAL_INFO( "vcl.coretext.layout", "-->" ); - IosSalGraphics& gr = static_cast<IosSalGraphics&>(rGraphics); - if(m_chars_count <= 0 || !gr.CheckContext()) - { - return; - } - CGContextSaveGState( gr.mrContext ); - Point pos = GetDrawPosition(Point(0,0)); -#if 0 - SAL_INFO( "vcl.coretext.layout", "at pos (" << pos.X() << "," << pos.Y() << ")" ); - CGContextSetTextMatrix(gr.mrContext, CGAffineTransformMakeScale(1.0, -1.0)); - CGContextSetShouldAntialias( gr.mrContext, !gr.mbNonAntialiasedText ); - CGContextSetTextPosition(gr.mrContext, pos.X(), pos.Y()); - CTLineDraw(m_line, gr.mrContext); -#else - InitGIA(); - SAL_INFO( "vcl.coretext.layout", "at pos (" << pos.X() << "," << pos.Y() <<") ctfont=" << m_style->GetFont() ); - CGFontRef cg_font = CTFontCopyGraphicsFont(m_style->GetFont(), NULL); - if(!cg_font) - { - SAL_INFO( "vcl.coretext.layout", "Error cg_font is NULL" ); - return; - } - CGContextSetFont(gr.mrContext, cg_font); - CGContextSetFontSize(gr.mrContext, CTFontGetSize(m_style->GetFont())); - CGContextSetTextDrawingMode(gr.mrContext, kCGTextFill); - CGContextSetShouldAntialias( gr.mrContext, true ); - if(m_style->GetColor()) - { - CGContextSetFillColorWithColor(gr.mrContext, m_style->GetColor()); - CGContextSetStrokeColorWithColor(gr.mrContext, m_style->GetColor()); - } - else - { - CGContextSetRGBFillColor(gr.mrContext, 0.0, 0.0, 0.0, 1.0); - } - CFRelease(cg_font); - CGContextSetTextMatrix(gr.mrContext, CGAffineTransformMakeScale(1.0, -1.0)); - CGContextSetShouldAntialias( gr.mrContext, !gr.mbNonAntialiasedText ); - CGContextTranslateCTM(gr.mrContext, pos.X(), pos.Y()); - CGContextShowGlyphs(gr.mrContext, m_glyphs, m_glyphs_count); -#endif - // restore the original graphic context transformations - CGContextRestoreGState( gr.mrContext ); - SAL_INFO( "vcl.coretext.layout", "<--" ); - -} - -// not needed. CoreText manage fallback directly -void CoreTextLayout::DropGlyph( int /*nStart*/ ) {} - -long CoreTextLayout::FillDXArray( long* pDXArray ) const -{ - SAL_INFO( "vcl.coretext.layout", "-->" ); - // short circuit requests which don't need full details - if( !pDXArray ) - { - return GetTextWidth(); - } - - // initialize details about the resulting layout - InitGIA(); - - // distribute the widths among the string elements - long width = 0; - float scale = m_style->GetFontStretchFactor(); - m_cached_width = 0; - - for( int i = 0; i < m_chars_count; ++i ) - { - // convert and adjust for accumulated rounding errors - m_cached_width += m_char_widths[i]; - const long old_width = width; - width = round_to_long(m_cached_width * scale); - pDXArray[i] = width - old_width; - } - SAL_INFO( "vcl.coretext.layout", " width=" << width << " <--" ); - return width; -} - -bool CoreTextLayout::GetBoundRect( SalGraphics &rGraphics, Rectangle& rVCLRect ) const -{ - - SAL_INFO( "vcl.coretext.layout", "-->" ); - if ( !m_has_bound_rec ) - { - IosSalGraphics& gr = static_cast<IosSalGraphics&>(rGraphics); - CGRect bound_rect = CTLineGetImageBounds( m_line, gr.mrContext ); - if ( !CGRectIsNull( bound_rect ) ) - { - m_bound_rect = Rectangle( - Point( round_to_long(bound_rect.origin.x * m_style->GetFontStretchFactor()), - round_to_long(bound_rect.origin.y - bound_rect.size.height )), - Size( round_to_long(bound_rect.size.width * m_style->GetFontStretchFactor()), round_to_long(bound_rect.size.height))); - m_bound_rect.Justify(); - } - m_has_bound_rec = true; - } - rVCLRect = m_bound_rect; - SAL_INFO( "vcl.coretext.layout", "<--" ); - return true; -} - -void CoreTextLayout::GetCaretPositions( int max_index, long* caret_position) const -{ - SAL_INFO( "vcl.coretext.layout", "max_index " << max_index << " -->" ); - int local_max = max_index < m_chars_count * 2 ? max_index : m_chars_count; - for(int i = 0 ; i < max_index - 1; i+=2) - { - CGFloat primary, secondary; - primary = CTLineGetOffsetForStringIndex(m_line, i >> 1, &secondary); - caret_position[i] = round_to_long(m_base_advance + primary); - caret_position[i+1] = round_to_long(m_base_advance + secondary); - i += 2; - } - for(int i = local_max ; i < max_index ; ++i) - { - caret_position[i] = -1; - } - SAL_INFO( "vcl.coretext.layout", "<--" ); -} - -bool CoreTextLayout::GetGlyphOutlines( SalGraphics&, PolyPolyVector& ) const { return false; } - -int CoreTextLayout::GetNextGlyphs( int nLen, sal_GlyphId* pGlyphIDs, Point& rPos, int& nStart, - sal_Int32* pGlyphAdvances, int* pCharIndexes ) const -{ - SAL_INFO( "vcl.coretext.layout", "nLen=" << nLen << " nStart=" << nStart << " -->"); - // get glyph measurements - InitGIA(); - - if( nStart < 0 ) // first glyph requested? - { - nStart = 0; - m_current_run_index = 0; - m_current_glyph_index = 0; - m_current_glyphrun_index = 0; - } - else if(nStart >= m_glyphs_count) - { - m_current_run_index = 0; - m_current_glyph_index = 0; - m_current_glyphrun_index = 0; - return 0; - } - if(!m_runs) - { - m_runs = CTLineGetGlyphRuns(m_line); - } - CFIndex nb_runs = CFArrayGetCount( m_runs ); - CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex( m_runs, m_current_run_index ); - CFIndex nb_glyphs = CTRunGetGlyphCount( run ); - - int i = 0; - bool first = true; - while(i < nLen) - { - if(m_current_glyphrun_index >= nb_glyphs) - { - m_current_run_index += 1; - if(m_current_run_index >= nb_runs) - { - break; - } - run = (CTRunRef)CFArrayGetValueAtIndex( m_runs, m_current_run_index ); - nb_glyphs = CTRunGetGlyphCount( run ); - m_current_glyphrun_index = 0; - } - if(first) - { - CGPoint first_pos; - CTRunGetPositions(run, CFRangeMake(m_current_glyphrun_index,1), &first_pos); - Point pos(first_pos.x, first_pos.y); - rPos = GetDrawPosition(pos); - SAL_INFO( "vcl.coretext.layout", "rPos(" << rPos.X() << "," << rPos.Y() << ")" ); - first = false; - } - pGlyphIDs[i] = m_glyphs[m_current_glyph_index]; - if(pGlyphAdvances) - { - pGlyphAdvances[i] = m_glyph_advances[m_current_glyph_index]; - } - if(pCharIndexes) - { - pCharIndexes[i] = m_glyphs2chars[m_current_glyph_index]; - } - m_current_glyph_index += 1; - m_current_glyphrun_index += 1; - i += 1; - nStart += 1; - } - SAL_INFO( "vcl.coretext.layout", "i=" << i << " <--" ); - return i; -} - -int CoreTextLayout::GetTextBreak( long /*nMaxWidth*/, long /*nCharExtra*/, int /*nFactor*/ ) const -{ - /* TODO */ - return false; -} - -long CoreTextLayout::GetTextWidth() const -{ - SAL_INFO( "vcl.coretext.layout", "-->" ); - - CGRect bound_rect = CTLineGetImageBounds(m_line, m_graphics->GetContext()); - long w = round_to_long(bound_rect.size.width * m_style->GetFontStretchFactor()); - SAL_INFO( "vcl.coretext.layout", "w=" << w << " <--" ); - return w; -} - -// not needed. CoreText manage fallback directly -void CoreTextLayout::InitFont() const -{ - SAL_INFO( "vcl.coretext.layout", "<-->" ); -} - -bool CoreTextLayout::InitGIA() const -{ - SAL_INFO( "vcl.coretext.layout", "count=" << m_chars_count << "-->" ); - - if( m_chars_count <= 0) - { - return false; - } - if(m_glyphs) - { - return true; - } - - m_glyphs = new CGGlyph[m_glyphs_count]; - m_char_widths = new int[ m_chars_count ]; - m_chars2glyphs = new int[ m_chars_count ]; - for( int i = 0; i < m_chars_count; ++i) - { - m_char_widths[i] = 0.0; - m_chars2glyphs[i] = -1; - } - m_glyphs2chars = new int[m_glyphs_count]; - m_glyph_advances = new int[m_glyphs_count]; - m_glyph_positions = new CGPoint[m_glyphs_count]; - - - CFArrayRef runs = CTLineGetGlyphRuns( m_line ); - CFIndex nb_runs = CFArrayGetCount( runs ); - int p = 0; - for( CFIndex i = 0; i < nb_runs; ++i ) - { - CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex( runs, i ); - if( run ) - { - CFIndex nb_glyphs = CTRunGetGlyphCount( run ); - if(nb_glyphs) - { - CFRange text_range = CTRunGetStringRange( run ); - if( text_range.location != kCFNotFound && text_range.length > 0 ) - { - CFIndex indices[ nb_glyphs ]; - CGGlyph glyphs[ nb_glyphs ]; - CTRunGetStringIndices( run, CFRangeMake( 0, 0 ), indices ); - CTRunGetGlyphs( run, CFRangeMake( 0, 0 ), glyphs ); - CTRunGetPositions( run, CFRangeMake( 0, 0 ), &m_glyph_positions[p] ); - bool is_vertical_run = false; - CFDictionaryRef aDict = CTRunGetAttributes( run ); - if ( aDict ) - { - const CFBooleanRef aValue = (const CFBooleanRef)CFDictionaryGetValue( aDict, kCTVerticalFormsAttributeName ); - is_vertical_run = (aValue == kCFBooleanTrue) ? true : false; - } - - for (CFIndex j = 0 ; j < nb_glyphs; ++p, ++j ) - { - m_glyphs[ p ] = glyphs[ j ]; - SAL_INFO( "vcl.coretext.layout", "m_glyphys[" << p << "]=glyphs[" << j << "] run " << i << " : 0x" << std::hex << glyphs[j] << std::dec ); - CFIndex k = indices[ j ]; - m_glyphs2chars[p] = k; - m_chars2glyphs[k] = p; - - if ( j < nb_glyphs - 1 ) - { - m_char_widths[ k ] += m_glyph_positions[ p + 1 ].x - m_glyph_positions[ p ].x; - } - if( p > 0) - { - m_glyph_advances[p - 1] = m_glyph_positions[ p ].x - m_glyph_positions[p - 1].x; - } - } - } - } - } - } - SAL_INFO( "vcl.coretext.layout", "<--" ); - return true; -} - -bool CoreTextLayout::LayoutText(ImplLayoutArgs& args) -{ - SAL_INFO( "vcl.coretext.layout", "m_style=" << m_style << " font=" << m_style->GetFont() << " -->" ); - Clean(); - m_style->SetColor(); - /* retreive MinCharPos EndCharPos Flags and Orientation */ - SalLayout::AdjustLayout(args); - m_chars_count = mnEndCharPos - mnMinCharPos; - - /* don't layout emptty (or worse negative size) strings */ - if(m_chars_count <= 0) - { - return false; - } - - // If the string contains U+FFFD ("REPLACEMENT CHARACTER"), which - // happens at least for the ooo80484-1.slk document in - // sc_filters_test, the CTTypesetterCreateWithAttributedString() - // call below crashes, at least in the iOS simulator. Go figure. - // (In that case the string consists of *only* such characters, - // but play it safe. - for (int i = 0; i < m_chars_count; i++) - { - if (args.mpStr[args.mnMinCharPos+i] == 0xFFFD) - return false; - } - - /* c0 and c1 are construction objects */ - CFStringRef c0 = CFStringCreateWithCharactersNoCopy( NULL, &(args.mpStr[args.mnMinCharPos]), m_chars_count, kCFAllocatorNull ); - if ( !c0 ) - { - Clean(); - return false; - } - - CFStringRef keys[6]; - CFTypeRef values[6]; - int nb_attributes = 0; - - keys[nb_attributes]= kCTFontAttributeName; - values[nb_attributes] = m_style->GetFont(); - nb_attributes += 1; - - CFDictionaryRef attributes = CFDictionaryCreate(kCFAllocatorDefault, - (const void**)&keys, - (const void**)&values, - nb_attributes, - &kCFTypeDictionaryKeyCallBacks, - &kCFTypeDictionaryValueCallBacks); - - - CFAttributedStringRef string = CFAttributedStringCreate( NULL, c0, attributes ); - CFRelease( c0 ); - CFRelease( attributes ); - if ( !string ) - { - Clean(); - return false; - } - m_typesetter = CTTypesetterCreateWithAttributedString(string); - CFRelease(string); - if(!m_typesetter) - { - Clean(); - return false; - } - m_line = CTTypesetterCreateLine(m_typesetter, CFRangeMake(0, 0)); - if(!m_line) - { - Clean(); - return false; - } - m_glyphs_count = CTLineGetGlyphCount(m_line); - - SAL_INFO( "vcl.coretext.layout", "glyph_count=" << m_glyphs_count << " <--" ); - return true; -} - -// not needed. CoreText manage fallback directly -void CoreTextLayout::MoveGlyph( int /*nStart*/, long /*nNewXPos*/ ) {} - -// not needed. CoreText manage fallback directly -void CoreTextLayout::Simplify( bool /*bIsBase*/ ) {} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/ios/source/gdi/salcoretextstyle.cxx b/vcl/ios/source/gdi/salcoretextstyle.cxx deleted file mode 100644 index baa4a7debea0..000000000000 --- a/vcl/ios/source/gdi/salcoretextstyle.cxx +++ /dev/null @@ -1,120 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include "ios/common.h" -#include "outfont.hxx" -#include "ios/salcoretextfontutils.hxx" -#include "ios/salcoretextstyle.hxx" - -CoreTextStyleInfo::CoreTextStyleInfo() : - m_fake_bold(false), - m_fake_italic(false), - m_matrix(CGAffineTransformIdentity), - m_stretch_factor(1.0), - m_CTParagraphStyle(NULL), - m_CTFont(NULL), - m_color(NULL), - m_font_face(NULL) -{ - SAL_INFO( "vcl.coretext.style", "create <-->" ); -} - -CoreTextStyleInfo::~CoreTextStyleInfo() -{ - SAL_INFO( "vcl.coretext.style", "destroy (font:" << m_CTFont << ") <-->" ); - SafeCFRelease(m_CTFont); - SafeCFRelease(m_CTParagraphStyle); - SafeCFRelease(m_color); -} - -long CoreTextStyleInfo::GetFontStretchedSize() const -{ - CGFloat size = CTFontGetSize(m_CTFont); - return static_cast<long>(size * m_stretch_factor + 0.5); -} - -void CoreTextStyleInfo::SetFont(FontSelectPattern* requested_font) -{ - SAL_INFO( "vcl.coretext.style", "req(" << requested_font << ") release font " << m_CTFont << " -->" ); - - if(!requested_font) - { - SafeCFRelease(m_CTFont); - m_font_face = NULL; - return; - } - m_font_face = (CoreTextPhysicalFontFace*)(requested_font->mpFontData); - - m_matrix = CGAffineTransformIdentity; - CGFloat font_size = (CGFloat)requested_font->mfExactHeight; - - // enable bold-emulation if needed - if( (requested_font->GetWeight() >= WEIGHT_BOLD) && - (m_font_face->GetWeight() < WEIGHT_SEMIBOLD) ) - { - /* FIXME: add support for fake bold */ - m_fake_bold = true; - } - if( ((requested_font->GetSlant() == ITALIC_NORMAL) || (requested_font->GetSlant() == ITALIC_OBLIQUE)) && - !((m_font_face->GetSlant() == ITALIC_NORMAL) || (m_font_face->GetSlant() == ITALIC_OBLIQUE)) ) - { -#define kRotationForItalicText 10 - m_fake_italic = true; - /* about 6 degree of slant */ - m_matrix = CGAffineTransformMake( 1, 0, -tanf( kRotationForItalicText * acosf(0) / 90 ), 1, 0, 0); - } - - // prepare font stretching - if( (requested_font->mnWidth != 0) && (requested_font->mnWidth != requested_font->mnHeight) ) - { - m_stretch_factor = (float)requested_font->mnWidth / requested_font->mnHeight; - m_matrix = CGAffineTransformScale(m_matrix, m_stretch_factor, 1.0F ); - } - - SafeCFRelease(m_CTFont); - - /* FIXME: pass attribute to take into accout 'VerticalStyle' */ - /* FIXME: how to deal with 'rendering options' i.e anti-aliasing, does it even matter in CoreText ? */ - m_CTFont = CTFontCreateCopyWithAttributes(m_font_face->GetCTFont(), font_size, &m_matrix, NULL); - SAL_INFO( "vcl.coretext.style", "font " << m_CTFont << " <--" ); -} - -void CoreTextStyleInfo::SetColor(SalColor color) -{ - SAL_INFO( "vcl.coretext.style", "r:" << SALCOLOR_RED(color) << ",g:" << SALCOLOR_GREEN(color) << ",b:" << SALCOLOR_BLUE(color) ); - SafeCFRelease(m_color); -#ifdef IOS - // No CGColorCreateGenericRGB on iOS - CGColorSpaceRef rgb_space = CGColorSpaceCreateDeviceRGB(); - CGFloat c[] = { SALCOLOR_RED(color) / 255.0f, SALCOLOR_GREEN(color) / 255.0f, SALCOLOR_BLUE(color) / 255.0f, 1.0 }; - m_color = CGColorCreate(rgb_space, c); - CGColorSpaceRelease(rgb_space); -#else - m_color = CGColorCreateGenericRGB(SALCOLOR_RED(color) / 255.0, SALCOLOR_GREEN(color) / 255.0, SALCOLOR_BLUE(color) / 255.0, 1.0); -#endif - SAL_INFO( "vcl.coretext.style", "color=" << m_color << " <--" ); -} - -void CoreTextStyleInfo::SetColor(void) -{ - SAL_INFO( "vcl.coretext.style", "null -->" ); - SafeCFRelease(m_color); - SAL_INFO( "vcl.coretext.style", "color=" << m_color << " <--" ); -} -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/ios/source/gdi/salgdi.cxx b/vcl/ios/source/gdi/salgdi.cxx deleted file mode 100644 index 766412f006bc..000000000000 --- a/vcl/ios/source/gdi/salgdi.cxx +++ /dev/null @@ -1,263 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * 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 . - */ - -#include "ios/common.h" - -#include "ios/salframe.h" - -#include "ios/salgdi.h" -#include "ios/salcoretextstyle.hxx" -#include "ios/salcoretextlayout.hxx" - -IosSalGraphics::IosSalGraphics() - : mpFrame( NULL ) - , mxLayer( NULL ) - , mrContext( NULL ) - , mpXorEmulation( NULL ) - , mnXorMode( 0 ) - , mnWidth( 0 ) - , mnHeight( 0 ) - , mnBitmapDepth( 0 ) - , mnRealDPIX( 0 ) - , mnRealDPIY( 0 ) - , mfFakeDPIScale( 1.0 ) - , mxClipPath( NULL ) - , maLineColor( COL_WHITE ) - , maFillColor( COL_BLACK ) - , mbNonAntialiasedText( false ) - , mbPrinter( false ) - , mbVirDev( false ) - , mbWindow( false ) -{ - SAL_INFO( "vcl.coretext.gr", "-->" ); - m_style = new CoreTextStyleInfo(); - SAL_INFO( "vcl.coretext.gr", "m_style=" << m_style << " <--" ); -} - -IosSalGraphics::~IosSalGraphics() -{ - SAL_INFO( "vcl.coretext.gr", "-->" ); - if(m_style) - { - delete m_style; - m_style = NULL; - } - SAL_INFO( "vcl.coretext.gr", "<--" ); -} - -inline bool IosSalGraphics::AddTempDevFont( ImplDevFontList*, - const rtl::OUString& , - const rtl::OUString& ) -{ - OSL_ASSERT( FALSE ); - return false; -} - -void IosSalGraphics::DrawServerFontLayout( const ServerFontLayout& ) -{ -} - -void IosSalGraphics::FreeEmbedFontData( const void* pData, long /*nDataLen*/ ) -{ - // TODO: implementing this only makes sense when the implementation of - // IosSalGraphics::GetEmbedFontData() returns non-NULL - (void)pData; - DBG_ASSERT( (pData!=NULL), "IosSalGraphics::FreeEmbedFontData() is not implemented\n"); -} - -void IosSalGraphics::GetDevFontList( ImplDevFontList* pFontList ) -{ - DBG_ASSERT( pFontList, "IosSalGraphics::GetDevFontList(NULL) !"); - - SalData* pSalData = GetSalData(); - if (pSalData->mpFontList == NULL) - { - pSalData->mpFontList = new SystemFontList(); - } - // Copy all PhysicalFontFace objects contained in the SystemFontList - pSalData->mpFontList->AnnounceFonts( *pFontList ); -} - -void IosSalGraphics::ClearDevFontCache() -{ - SalData* pSalData = GetSalData(); - delete pSalData->mpFontList; - pSalData->mpFontList = NULL; -} - -void IosSalGraphics::GetDevFontSubstList( OutputDevice* ) -{ - // nothing to do since there are no device-specific fonts on Ios -} - -const void* IosSalGraphics::GetEmbedFontData( const PhysicalFontFace*, - const sal_Ucs* /*pUnicodes*/, - sal_Int32* /*pWidths*/, - FontSubsetInfo&, - long* /*pDataLen*/ ) -{ - return NULL; -} - -const Ucs2SIntMap* IosSalGraphics::GetFontEncodingVector(const PhysicalFontFace*, - const Ucs2OStrMap** /*ppNonEncoded*/ ) -{ - return NULL; -} - -void IosSalGraphics::GetFontMetric( ImplFontMetricData* pMetric, int nFallbackLevel ) -{ - (void)nFallbackLevel; // glyph-fallback on CoreText is done differently -> no fallback level - - pMetric->mbScalableFont = true; - pMetric->mbKernableFont = true; - CTFontRef font = m_style->GetFont(); - DBG_ASSERT(font, "GetFontMetric without font set in style"); - - pMetric->mnAscent = static_cast<long>( CTFontGetAscent(font) * mfFakeDPIScale + 0.5); - pMetric->mnDescent = static_cast<long>(CTFontGetDescent(font) * mfFakeDPIScale + 0.5); - const long nExtDescent = static_cast<long>((CTFontGetLeading(font) + CTFontGetDescent(font)) * - mfFakeDPIScale + 0.5); - pMetric->mnExtLeading = nExtDescent + pMetric->mnDescent; - pMetric->mnIntLeading = 0; - pMetric->mnWidth = m_style->GetFontStretchedSize(); - SAL_INFO( "vcl.coretext.gr", "ascent=" << pMetric->mnAscent<< ", descent=" << pMetric->mnDescent << ", extleading=" << pMetric->mnExtLeading << ", intleading=" << pMetric->mnIntLeading << ", w=" << pMetric->mnWidth ); -} - -sal_Bool IosSalGraphics::GetGlyphBoundRect( sal_GlyphId /*nGlyphId*/, Rectangle& /*rRect*/ ) -{ - /* TODO: create a Ghyph iterator to keep track ot 'state' between call */ - return false; -} - -sal_Bool IosSalGraphics::GetGlyphOutline( sal_GlyphId /*nGlyphId*/, basegfx::B2DPolyPolygon& /*rPolyPoly*/ ) -{ - /* TODO */ - return false; -} - -void IosSalGraphics::GetGlyphWidths( const PhysicalFontFace* /*pFontData*/, bool /*bVertical*/, - Int32Vector& /*rGlyphWidths*/, Ucs2UIntMap& /*rUnicodeEnc*/ ) -{ -} - -sal_uLong IosSalGraphics::GetKernPairs( sal_uLong, ImplKernPairData* ) -{ - return 0; -} - -bool IosSalGraphics::GetImplFontCapabilities(vcl::FontCapabilities &rFontCapabilities) const -{ - if( !m_style ) - { - return false; - } - CoreTextPhysicalFontFace* font_face = m_style->GetFontFace(); - if( !font_face) - { - return false; - } - return font_face->GetImplFontCapabilities(rFontCapabilities); -} - -const ImplFontCharMap* IosSalGraphics::GetImplFontCharMap() const -{ - if( !m_style ) - { - return NULL; - } - CoreTextPhysicalFontFace* font_face = m_style->GetFontFace(); - if( !font_face) - { - return ImplFontCharMap::GetDefaultMap(); - } - return font_face->GetImplFontCharMap(); -} - -bool IosSalGraphics::GetRawFontData( const PhysicalFontFace* pFontFace, - std::vector<unsigned char>& rBuffer, bool* pJustCFF ) -{ - const CoreTextPhysicalFontFace* font_face = static_cast<const CoreTextPhysicalFontFace*>(pFontFace); - - return font_face->GetRawFontData(rBuffer, pJustCFF); -} - -SystemFontData IosSalGraphics::GetSysFontData( int /* nFallbacklevel */ ) const -{ - SAL_INFO( "vcl.coretext.gr", "-->" ); - SystemFontData aSysFontData; - aSysFontData.nSize = sizeof( SystemFontData ); - aSysFontData.bAntialias = true; - - CTFontRef font = CTFontCreateUIFontForLanguage(kCTFontSystemFontType, 0.0, NULL); - font = (CTFontRef)CFRetain(font); - aSysFontData.rCTFont = font; - - CTFontRef italic_font = CTFontCreateCopyWithSymbolicTraits( font, - 0.0, - NULL, - kCTFontItalicTrait, - kCTFontItalicTrait + kCTFontBoldTrait); - aSysFontData.bFakeItalic = italic_font ? false : true; - SafeCFRelease(italic_font); - - CTFontRef bold_font = CTFontCreateCopyWithSymbolicTraits( font, - 0.0, - NULL, - kCTFontBoldTrait, - kCTFontItalicTrait + kCTFontBoldTrait); - aSysFontData.bFakeBold = bold_font ? false : true; - SafeCFRelease(bold_font); - - CTFontRef vertical_font = CTFontCreateCopyWithSymbolicTraits( font, - 0.0, - NULL, - kCTFontVerticalTrait, - kCTFontVerticalTrait); - aSysFontData.bVerticalCharacterType = vertical_font ? true : false; - SafeCFRelease(vertical_font); - - SAL_INFO( "vcl.coretext.gr", "<--" ); - return aSysFontData; -} - -SalLayout* IosSalGraphics::GetTextLayout( ImplLayoutArgs&, int /*nFallbackLevel*/ ) -{ - SAL_INFO( "vcl.coretext.gr", "-->" ); - CoreTextLayout* layout = new CoreTextLayout( this, m_style ); - SAL_INFO( "vcl.coretext.gr", "layout:" << layout << " <--" ); - return layout; -} - -sal_uInt16 IosSalGraphics::SetFont( FontSelectPattern* pReqFont, int /*nFallbackLevel*/ ) -{ - SAL_INFO( "vcl.coretext.gr", "m_style=" << m_style << " -->" ); - m_style->SetFont(pReqFont); - SAL_INFO( "vcl.coretext.gr", "<--" ); - return 0; -} - -void IosSalGraphics::SetTextColor( SalColor nSalColor ) -{ - SAL_INFO( "vcl.coretext.gr", "m_style=" << m_style << " -->" ); - m_style->SetColor(nSalColor); - SAL_INFO( "vcl.coretext.gr", "<--" ); -} - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/vcl/ios/source/gdi/salgdicommon.cxx b/vcl/ios/source/gdi/salgdicommon.cxx index 615852c812ce..bb6ec7045869 100644 --- a/vcl/ios/source/gdi/salgdicommon.cxx +++ b/vcl/ios/source/gdi/salgdicommon.cxx @@ -23,7 +23,7 @@ #include "basegfx/polygon/b2dpolygon.hxx" #include "ios/salbmp.h" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "fontsubset.hxx" #include "region.h" @@ -134,7 +134,7 @@ static void AddPolyPolygonToPath( CGMutablePathRef xPath, } } -sal_Bool IosSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, +sal_Bool QuartzSalGraphics::CreateFontSubset( const rtl::OUString& rToFile, const PhysicalFontFace* pFontData, long* pGlyphIDs, sal_uInt8* pEncoding, sal_Int32* pGlyphWidths, int nGlyphCount, @@ -275,7 +275,7 @@ static inline void alignLinePoint( const SalPoint* i_pIn, float& o_fX, float& o_ o_fY = static_cast<float>(i_pIn->mnY ) + 0.5; } -void IosSalGraphics::copyBits( const SalTwoRect *pPosAry, SalGraphics *pSrcGraphics ) +void QuartzSalGraphics::copyBits( const SalTwoRect *pPosAry, SalGraphics *pSrcGraphics ) { if( !pSrcGraphics ) { @@ -292,7 +292,7 @@ void IosSalGraphics::copyBits( const SalTwoRect *pPosAry, SalGraphics *pSrcGraph } // accelerate trivial operations - /*const*/ IosSalGraphics* pSrc = static_cast<IosSalGraphics*>(pSrcGraphics); + /*const*/ QuartzSalGraphics* pSrc = static_cast<QuartzSalGraphics*>(pSrcGraphics); const bool bSameGraphics = (this == pSrc) || (mbWindow && mpFrame && pSrc->mbWindow && (mpFrame == pSrc->mpFrame)); if( bSameGraphics && @@ -312,7 +312,7 @@ void IosSalGraphics::copyBits( const SalTwoRect *pPosAry, SalGraphics *pSrcGraph ApplyXorContext(); pSrc->ApplyXorContext(); - DBG_ASSERT( pSrc->mxLayer!=NULL, "IosSalGraphics::copyBits() from non-layered graphics" ); + DBG_ASSERT( pSrc->mxLayer!=NULL, "QuartzSalGraphics::copyBits() from non-layered graphics" ); const CGPoint aDstPoint = { static_cast<CGFloat>(+pPosAry->mnDestX - pPosAry->mnSrcX), static_cast<CGFloat>(pPosAry->mnDestY - pPosAry->mnSrcY) }; if( (pPosAry->mnSrcWidth == pPosAry->mnDestWidth && @@ -414,7 +414,7 @@ static SalColor ImplGetROPSalColor( SalROPColor nROPColor ) } // apply the XOR mask to the target context if active and dirty -void IosSalGraphics::ApplyXorContext() +void QuartzSalGraphics::ApplyXorContext() { if( !mpXorEmulation ) { @@ -426,12 +426,12 @@ void IosSalGraphics::ApplyXorContext() } } -void IosSalGraphics::copyArea( long nDstX, long nDstY,long nSrcX, long nSrcY, +void QuartzSalGraphics::copyArea( long nDstX, long nDstY,long nSrcX, long nSrcY, long nSrcWidth, long nSrcHeight, sal_uInt16 /*nFlags*/ ) { ApplyXorContext(); - DBG_ASSERT( mxLayer!=NULL, "IosSalGraphics::copyArea() for non-layered graphics" ); + DBG_ASSERT( mxLayer!=NULL, "QuartzSalGraphics::copyArea() for non-layered graphics" ); // in XOR mode the drawing context is redirected to the XOR mask // copyArea() always works on the target context though @@ -474,7 +474,7 @@ void IosSalGraphics::copyArea( long nDstX, long nDstY,long nSrcX, long nSrcY, } -void IosSalGraphics::copyResolution( IosSalGraphics& rGraphics ) +void QuartzSalGraphics::copyResolution( QuartzSalGraphics& rGraphics ) { if( !rGraphics.mnRealDPIY && rGraphics.mbWindow && rGraphics.mpFrame ) { @@ -485,7 +485,7 @@ void IosSalGraphics::copyResolution( IosSalGraphics& rGraphics ) mfFakeDPIScale = rGraphics.mfFakeDPIScale; } -bool IosSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, +bool QuartzSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, const SalBitmap& rSrcBitmap, const SalBitmap& rAlphaBmp ) { @@ -521,7 +521,7 @@ bool IosSalGraphics::drawAlphaBitmap( const SalTwoRect& rTR, return true; } -bool IosSalGraphics::drawAlphaRect( long nX, long nY, long nWidth, +bool QuartzSalGraphics::drawAlphaRect( long nX, long nY, long nWidth, long nHeight, sal_uInt8 nTransparency ) { if( !CheckContext() ) @@ -549,7 +549,7 @@ bool IosSalGraphics::drawAlphaRect( long nX, long nY, long nWidth, return true; } -void IosSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap ) +void QuartzSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap ) { if( !CheckContext() ) { @@ -569,13 +569,13 @@ void IosSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSa RefreshRect( aDstRect ); } -void IosSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap,SalColor ) +void QuartzSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap,SalColor ) { OSL_FAIL("not implemented for color masking!"); drawBitmap( pPosAry, rSalBitmap ); } -void IosSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap, +void QuartzSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap, const SalBitmap& rTransparentBitmap ) { if( !CheckContext() ) @@ -597,13 +597,13 @@ void IosSalGraphics::drawBitmap( const SalTwoRect* pPosAry, const SalBitmap& rSa RefreshRect( aDstRect ); } -sal_Bool IosSalGraphics::drawEPS( long /*nX*/, long /*nY*/, long /*nWidth*/, long /*nHeight*/, +sal_Bool QuartzSalGraphics::drawEPS( long /*nX*/, long /*nY*/, long /*nWidth*/, long /*nHeight*/, void* /*pEpsData*/, sal_uLong /*nByteCount*/ ) { return sal_False; } -void IosSalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) +void QuartzSalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) { if( nX1 == nX2 && nY1 == nY2 ) { @@ -624,7 +624,7 @@ void IosSalGraphics::drawLine( long nX1, long nY1, long nX2, long nY2 ) Rectangle aRefreshRect( nX1, nY1, nX2, nY2 ); } -void IosSalGraphics::drawMask( const SalTwoRect* pPosAry, +void QuartzSalGraphics::drawMask( const SalTwoRect* pPosAry, const SalBitmap& rSalBitmap, SalColor nMaskColor ) { @@ -647,19 +647,19 @@ void IosSalGraphics::drawMask( const SalTwoRect* pPosAry, RefreshRect( aDstRect ); } -void IosSalGraphics::drawPixel( long nX, long nY ) +void QuartzSalGraphics::drawPixel( long nX, long nY ) { // draw pixel with current line color ImplDrawPixel( nX, nY, maLineColor ); } -void IosSalGraphics::drawPixel( long nX, long nY, SalColor nSalColor ) +void QuartzSalGraphics::drawPixel( long nX, long nY, SalColor nSalColor ) { const RGBAColor aPixelColor( nSalColor ); ImplDrawPixel( nX, nY, aPixelColor ); } -bool IosSalGraphics::drawPolyLine( +bool QuartzSalGraphics::drawPolyLine( const ::basegfx::B2DPolygon& rPolyLine, double fTransparency, const ::basegfx::B2DVector& rLineWidths, @@ -750,12 +750,12 @@ bool IosSalGraphics::drawPolyLine( return true; } -sal_Bool IosSalGraphics::drawPolyLineBezier( sal_uLong, const SalPoint*, const sal_uInt8* ) +sal_Bool QuartzSalGraphics::drawPolyLineBezier( sal_uLong, const SalPoint*, const sal_uInt8* ) { return sal_False; } -bool IosSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, +bool QuartzSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly, double fTransparency ) { // short circuit if there is nothing to do @@ -803,7 +803,7 @@ bool IosSalGraphics::drawPolyPolygon( const ::basegfx::B2DPolyPolygon& rPolyPoly return true; } -void IosSalGraphics::drawPolyPolygon( sal_uLong nPolyCount, const sal_uLong *pPoints, PCONSTSALPOINT *ppPtAry ) +void QuartzSalGraphics::drawPolyPolygon( sal_uLong nPolyCount, const sal_uLong *pPoints, PCONSTSALPOINT *ppPtAry ) { if( nPolyCount <= 0 ) return; @@ -902,7 +902,7 @@ void IosSalGraphics::drawPolyPolygon( sal_uLong nPolyCount, const sal_uLong *pPo RefreshRect( leftX, topY, maxWidth, maxHeight ); } -void IosSalGraphics::drawPolygon( sal_uLong nPoints, const SalPoint *pPtAry ) +void QuartzSalGraphics::drawPolygon( sal_uLong nPoints, const SalPoint *pPtAry ) { if( nPoints <= 1 ) return; @@ -957,18 +957,18 @@ void IosSalGraphics::drawPolygon( sal_uLong nPoints, const SalPoint *pPtAry ) RefreshRect( nX, nY, nWidth, nHeight ); } -sal_Bool IosSalGraphics::drawPolygonBezier( sal_uLong, const SalPoint*, const sal_uInt8* ) +sal_Bool QuartzSalGraphics::drawPolygonBezier( sal_uLong, const SalPoint*, const sal_uInt8* ) { return sal_False; } -sal_Bool IosSalGraphics::drawPolyPolygonBezier( sal_uLong, const sal_uLong*, +sal_Bool QuartzSalGraphics::drawPolyPolygonBezier( sal_uLong, const sal_uLong*, const SalPoint* const*, const sal_uInt8* const* ) { return sal_False; } -void IosSalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) +void QuartzSalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) { if( !CheckContext() ) { @@ -995,7 +995,7 @@ void IosSalGraphics::drawRect( long nX, long nY, long nWidth, long nHeight ) } -void IosSalGraphics::drawPolyLine( sal_uLong nPoints, const SalPoint *pPtAry ) +void QuartzSalGraphics::drawPolyLine( sal_uLong nPoints, const SalPoint *pPtAry ) { if( nPoints < 1 ) { @@ -1024,15 +1024,15 @@ void IosSalGraphics::drawPolyLine( sal_uLong nPoints, const SalPoint *pPtAry ) RefreshRect( nX, nY, nWidth, nHeight ); } -sal_uInt16 IosSalGraphics::GetBitCount() const +sal_uInt16 QuartzSalGraphics::GetBitCount() const { sal_uInt16 nBits = mnBitmapDepth ? mnBitmapDepth : 32;//24; return nBits; } -SalBitmap* IosSalGraphics::getBitmap( long nX, long nY, long nDX, long nDY ) +SalBitmap* QuartzSalGraphics::getBitmap( long nX, long nY, long nDX, long nDY ) { - DBG_ASSERT( mxLayer, "IosSalGraphics::getBitmap() with no layer" ); + DBG_ASSERT( mxLayer, "QuartzSalGraphics::getBitmap() with no layer" ); ApplyXorContext(); @@ -1046,7 +1046,7 @@ SalBitmap* IosSalGraphics::getBitmap( long nX, long nY, long nDX, long nDY ) return pBitmap; } -SystemGraphicsData IosSalGraphics::GetGraphicsData() const +SystemGraphicsData QuartzSalGraphics::GetGraphicsData() const { SystemGraphicsData aRes; aRes.nSize = sizeof(aRes); @@ -1054,7 +1054,7 @@ SystemGraphicsData IosSalGraphics::GetGraphicsData() const return aRes; } -long IosSalGraphics::GetGraphicsWidth() const +long QuartzSalGraphics::GetGraphicsWidth() const { long w = 0; if( mrContext && (mbWindow || mbVirDev) ) @@ -1072,7 +1072,7 @@ long IosSalGraphics::GetGraphicsWidth() const return w; } -SalColor IosSalGraphics::getPixel( long nX, long nY ) +SalColor QuartzSalGraphics::getPixel( long nX, long nY ) { // return default value on printers or when out of bounds if( !mxLayer || (nX < 0) || (nX >= mnWidth) || @@ -1111,7 +1111,7 @@ SalColor IosSalGraphics::getPixel( long nX, long nY ) return nSalColor; } -void IosSalGraphics::GetResolution( long& rDPIX, long& rDPIY ) +void QuartzSalGraphics::GetResolution( long& rDPIX, long& rDPIY ) { if( !mnRealDPIY ) { @@ -1122,7 +1122,7 @@ void IosSalGraphics::GetResolution( long& rDPIX, long& rDPIY ) rDPIY = static_cast<long>(mfFakeDPIScale * mnRealDPIY); } -void IosSalGraphics::ImplDrawPixel( long nX, long nY, const RGBAColor& rColor ) +void QuartzSalGraphics::ImplDrawPixel( long nX, long nY, const RGBAColor& rColor ) { if( !CheckContext() ) { @@ -1138,7 +1138,7 @@ void IosSalGraphics::ImplDrawPixel( long nX, long nY, const RGBAColor& rColor ) CGContextSetFillColor( mrContext, maFillColor.AsArray() ); } -void IosSalGraphics::initResolution( UIWindow* ) +void QuartzSalGraphics::initResolution( UIWindow* ) { // #i100617# read DPI only once; there is some kind of weird caching going on // if the main screen changes @@ -1172,7 +1172,7 @@ void IosSalGraphics::initResolution( UIWindow* ) mfFakeDPIScale = 1.0; } -void IosSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags ) +void QuartzSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInvert nFlags ) { if ( CheckContext() ) { @@ -1206,7 +1206,7 @@ void IosSalGraphics::invert( long nX, long nY, long nWidth, long nHeight, SalInv } } -void IosSalGraphics::invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInvert nSalFlags ) +void QuartzSalGraphics::invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInvert nSalFlags ) { CGPoint* CGpoints ; if ( CheckContext() ) @@ -1241,7 +1241,7 @@ void IosSalGraphics::invert( sal_uLong nPoints, const SalPoint* pPtAry, SalInve } } -void IosSalGraphics::Pattern50Fill() +void QuartzSalGraphics::Pattern50Fill() { static const float aFillCol[4] = { 1,1,1,1 }; static const CGPatternCallbacks aCallback = { 0, &DrawPattern50, NULL }; @@ -1262,7 +1262,7 @@ void IosSalGraphics::Pattern50Fill() } -void IosSalGraphics::ResetClipRegion() +void QuartzSalGraphics::ResetClipRegion() { // release old path and indicate no clipping if( mxClipPath ) @@ -1276,7 +1276,7 @@ void IosSalGraphics::ResetClipRegion() } } -void IosSalGraphics::SetLineColor() +void QuartzSalGraphics::SetLineColor() { maLineColor.SetAlpha( 0.0 ); // transparent if( CheckContext() ) @@ -1285,7 +1285,7 @@ void IosSalGraphics::SetLineColor() } } -void IosSalGraphics::SetLineColor( SalColor nSalColor ) +void QuartzSalGraphics::SetLineColor( SalColor nSalColor ) { maLineColor = RGBAColor( nSalColor ); if( CheckContext() ) @@ -1294,7 +1294,7 @@ void IosSalGraphics::SetLineColor( SalColor nSalColor ) } } -void IosSalGraphics::SetFillColor() +void QuartzSalGraphics::SetFillColor() { maFillColor.SetAlpha( 0.0 ); // transparent if( CheckContext() ) @@ -1303,7 +1303,7 @@ void IosSalGraphics::SetFillColor() } } -void IosSalGraphics::SetFillColor( SalColor nSalColor ) +void QuartzSalGraphics::SetFillColor( SalColor nSalColor ) { maFillColor = RGBAColor( nSalColor ); if( CheckContext() ) @@ -1312,7 +1312,7 @@ void IosSalGraphics::SetFillColor( SalColor nSalColor ) } } -bool IosSalGraphics::supportsOperation( OutDevSupportType eType ) const +bool QuartzSalGraphics::supportsOperation( OutDevSupportType eType ) const { bool bRet = false; switch( eType ) @@ -1327,7 +1327,7 @@ bool IosSalGraphics::supportsOperation( OutDevSupportType eType ) const return bRet; } -bool IosSalGraphics::setClipRegion( const Region& i_rClip ) +bool QuartzSalGraphics::setClipRegion( const Region& i_rClip ) { // release old clip path if( mxClipPath ) @@ -1366,19 +1366,19 @@ bool IosSalGraphics::setClipRegion( const Region& i_rClip ) return true; } -void IosSalGraphics::SetROPFillColor( SalROPColor nROPColor ) +void QuartzSalGraphics::SetROPFillColor( SalROPColor nROPColor ) { if( ! mbPrinter ) SetFillColor( ImplGetROPSalColor( nROPColor ) ); } -void IosSalGraphics::SetROPLineColor( SalROPColor nROPColor ) +void QuartzSalGraphics::SetROPLineColor( SalROPColor nROPColor ) { if( ! mbPrinter ) SetLineColor( ImplGetROPSalColor( nROPColor ) ); } -void IosSalGraphics::SetXORMode( bool bSet, bool bInvertOnly ) +void QuartzSalGraphics::SetXORMode( bool bSet, bool bInvertOnly ) { // return early if XOR mode remains unchanged if( mbPrinter ) @@ -1433,7 +1433,7 @@ void IosSalGraphics::SetXORMode( bool bSet, bool bInvertOnly ) } } -void IosSalGraphics::updateResolution() +void QuartzSalGraphics::updateResolution() { DBG_ASSERT( mbWindow, "updateResolution on inappropriate graphics" ); diff --git a/vcl/ios/source/gdi/salgdiutils.cxx b/vcl/ios/source/gdi/salgdiutils.cxx index f433bbe798a4..fc499e450743 100644 --- a/vcl/ios/source/gdi/salgdiutils.cxx +++ b/vcl/ios/source/gdi/salgdiutils.cxx @@ -29,13 +29,13 @@ #include "vcl/svapp.hxx" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "ios/salframe.h" #include "ios/saldata.hxx" // ---------------------------------------------------------------------- -void IosSalGraphics::SetWindowGraphics( IosSalFrame* pFrame ) +void QuartzSalGraphics::SetWindowGraphics( IosSalFrame* pFrame ) { mpFrame = pFrame; @@ -44,7 +44,7 @@ void IosSalGraphics::SetWindowGraphics( IosSalFrame* pFrame ) mbVirDev = false; } -void IosSalGraphics::SetPrinterGraphics( CGContextRef xContext, long nDPIX, long nDPIY, double fScale ) +void QuartzSalGraphics::SetPrinterGraphics( CGContextRef xContext, long nDPIX, long nDPIY, double fScale ) { mbWindow = false; mbPrinter = true; @@ -71,7 +71,7 @@ void IosSalGraphics::SetPrinterGraphics( CGContextRef xContext, long nDPIX, long } } -void IosSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContext, +void QuartzSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContext, int nBitmapDepth ) { mbWindow = false; @@ -120,7 +120,7 @@ void IosSalGraphics::SetVirDevGraphics( CGLayerRef xLayer, CGContextRef xContext // ---------------------------------------------------------------------- -void IosSalGraphics::InvalidateContext() +void QuartzSalGraphics::InvalidateContext() { UnsetState(); mrContext = 0; @@ -128,7 +128,7 @@ void IosSalGraphics::InvalidateContext() // ---------------------------------------------------------------------- -void IosSalGraphics::UnsetState() +void QuartzSalGraphics::UnsetState() { if( mrContext ) { @@ -142,7 +142,7 @@ void IosSalGraphics::UnsetState() } } -void IosSalGraphics::SetState() +void QuartzSalGraphics::SetState() { CGContextRestoreGState( mrContext ); CGContextSaveGState( mrContext ); @@ -165,7 +165,7 @@ void IosSalGraphics::SetState() // ---------------------------------------------------------------------- -bool IosSalGraphics::CheckContext() +bool QuartzSalGraphics::CheckContext() { if( mbWindow && mpFrame != NULL ) { @@ -222,11 +222,11 @@ bool IosSalGraphics::CheckContext() CGContextRelease( rReleaseContext ); } - DBG_ASSERT( mrContext || mbPrinter, "<<<WARNING>>> IosSalGraphics::CheckContext() FAILED!!!!\n" ); + DBG_ASSERT( mrContext || mbPrinter, "<<<WARNING>>> QuartzSalGraphics::CheckContext() FAILED!!!!\n" ); return (mrContext != NULL); } -CGContextRef IosSalGraphics::GetContext() +CGContextRef QuartzSalGraphics::GetContext() { if(!mrContext) { @@ -235,7 +235,7 @@ CGContextRef IosSalGraphics::GetContext() return mrContext; } -void IosSalGraphics::RefreshRect(float lX, float lY, float lWidth, float lHeight) +void QuartzSalGraphics::RefreshRect(float lX, float lY, float lWidth, float lHeight) { if( ! mbWindow ) // view only on Window graphics return; @@ -252,7 +252,7 @@ void IosSalGraphics::RefreshRect(float lX, float lY, float lWidth, float lHeight } } -CGPoint* IosSalGraphics::makeCGptArray(sal_uLong nPoints, const SalPoint* pPtAry) +CGPoint* QuartzSalGraphics::makeCGptArray(sal_uLong nPoints, const SalPoint* pPtAry) { CGPoint *CGpoints = new CGPoint[nPoints]; if ( CGpoints ) @@ -268,7 +268,7 @@ CGPoint* IosSalGraphics::makeCGptArray(sal_uLong nPoints, const SalPoint* pPtAr // ----------------------------------------------------------------------- -void IosSalGraphics::UpdateWindow( CGRect& ) +void QuartzSalGraphics::UpdateWindow( CGRect& ) { #if 0 // Sigh, this is just basically a copy of the "aqua" code and not // applicable to iOS. diff --git a/vcl/ios/source/gdi/salnativewidgets.cxx b/vcl/ios/source/gdi/salnativewidgets.cxx index 0bdf0be0c638..7b4beb5000c9 100644 --- a/vcl/ios/source/gdi/salnativewidgets.cxx +++ b/vcl/ios/source/gdi/salnativewidgets.cxx @@ -23,7 +23,7 @@ #include "vcl/timer.hxx" #include "ios/salconst.h" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "ios/saldata.hxx" #include "ios/salframe.h" @@ -39,7 +39,7 @@ * drawing of the control defined by nPart. * */ -sal_Bool IosSalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) +sal_Bool QuartzSalGraphics::IsNativeControlSupported( ControlType nType, ControlPart nPart ) { bool bOk = sal_False; @@ -173,7 +173,7 @@ sal_Bool IosSalGraphics::IsNativeControlSupported( ControlType nType, ControlPar * aPos was or was not inside the native widget specified by the * nType/nPart combination. */ -sal_Bool IosSalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, +sal_Bool QuartzSalGraphics::hitTestNativeControl( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, const Point& rPos, sal_Bool& rIsInside ) { (void) nType; @@ -184,13 +184,13 @@ sal_Bool IosSalGraphics::hitTestNativeControl( ControlType nType, ControlPart nP return sal_False; } -UInt32 IosSalGraphics::getState( ControlState nState ) +UInt32 QuartzSalGraphics::getState( ControlState nState ) { (void) nState; return 0; } -UInt32 IosSalGraphics::getTrackState( ControlState nState ) +UInt32 QuartzSalGraphics::getTrackState( ControlState nState ) { (void) nState; return 0; @@ -205,7 +205,7 @@ UInt32 IosSalGraphics::getTrackState( ControlState nState ) * aValue: An optional value (tristate/numerical/string) * aCaption: A caption or title string (like button text etc) */ -sal_Bool IosSalGraphics::drawNativeControl(ControlType nType, +sal_Bool QuartzSalGraphics::drawNativeControl(ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, ControlState nState, @@ -233,9 +233,9 @@ sal_Bool IosSalGraphics::drawNativeControl(ControlType nType, * aValue: An optional value (tristate/numerical/string) * aCaption: A caption or title string (like button text etc) */ -sal_Bool IosSalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, ControlState /*nState*/, - const ImplControlValue& aValue, const rtl::OUString&, - Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) +sal_Bool QuartzSalGraphics::getNativeControlRegion( ControlType nType, ControlPart nPart, const Rectangle& rControlRegion, ControlState /*nState*/, + const ImplControlValue& aValue, const rtl::OUString&, + Rectangle &rNativeBoundingRegion, Rectangle &rNativeContentRegion ) { (void) nType; diff --git a/vcl/ios/source/gdi/salvd.cxx b/vcl/ios/source/gdi/salvd.cxx index bf345415f333..6e32a22126e3 100644 --- a/vcl/ios/source/gdi/salvd.cxx +++ b/vcl/ios/source/gdi/salvd.cxx @@ -23,7 +23,7 @@ #include "ios/salvd.h" #include "ios/salinst.h" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "ios/saldata.hxx" #include "ios/salframe.h" @@ -35,7 +35,7 @@ SalVirtualDevice* IosSalInstance::CreateVirtualDevice( SalGraphics* pGraphics, // #i92075# can be called first in a thread SalData::ensureThreadAutoreleasePool(); - return new IosSalVirtualDevice( static_cast< IosSalGraphics* >( pGraphics ), nDX, nDY, nBitCount, pData ); + return new IosSalVirtualDevice( static_cast< QuartzSalGraphics* >( pGraphics ), nDX, nDY, nBitCount, pData ); } // ----------------------------------------------------------------------- @@ -47,7 +47,7 @@ void IosSalInstance::DestroyVirtualDevice( SalVirtualDevice* pDevice ) // ======================================================================= -IosSalVirtualDevice::IosSalVirtualDevice( IosSalGraphics* pGraphic, long nDX, long nDY, sal_uInt16 nBitCount, const SystemGraphicsData *pData ) +IosSalVirtualDevice::IosSalVirtualDevice( QuartzSalGraphics* pGraphic, long nDX, long nDY, sal_uInt16 nBitCount, const SystemGraphicsData *pData ) : mbGraphicsUsed( false ) , mxBitmapContext( NULL ) , mnBitmapDepth( 0 ) @@ -58,14 +58,14 @@ IosSalVirtualDevice::IosSalVirtualDevice( IosSalGraphics* pGraphic, long nDX, lo // Create virtual device based on existing SystemGraphicsData // We ignore nDx and nDY, as the desired size comes from the SystemGraphicsData mbForeignContext = true; // the mxContext is from pData - mpGraphics = new IosSalGraphics( /*pGraphic*/ ); + mpGraphics = new QuartzSalGraphics( /*pGraphic*/ ); mpGraphics->SetVirDevGraphics( mxLayer, pData->rCGContext ); } else { // create empty new virtual device mbForeignContext = false; // the mxContext is created within VCL - mpGraphics = new IosSalGraphics(); // never fails + mpGraphics = new QuartzSalGraphics(); // never fails mnBitmapDepth = nBitCount; // inherit resolution from reference device diff --git a/vcl/ios/source/window/salframe.cxx b/vcl/ios/source/window/salframe.cxx index 241d58e86cac..e619111ac768 100644 --- a/vcl/ios/source/window/salframe.cxx +++ b/vcl/ios/source/window/salframe.cxx @@ -29,7 +29,7 @@ #include "vcl/timer.hxx" #include "ios/saldata.hxx" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "ios/salframe.h" #include "ios/salmenu.h" #include "ios/saltimer.h" @@ -205,7 +205,7 @@ SalGraphics* IosSalFrame::GetGraphics() if ( !mpGraphics ) { - mpGraphics = new IosSalGraphics; + mpGraphics = new QuartzSalGraphics; mpGraphics->SetWindowGraphics( this ); } diff --git a/vcl/ios/source/window/salframeview.mm b/vcl/ios/source/window/salframeview.mm index ea108934ecfa..0ca3441fe814 100644 --- a/vcl/ios/source/window/salframeview.mm +++ b/vcl/ios/source/window/salframeview.mm @@ -25,7 +25,7 @@ #include "vcl/svapp.hxx" #include "ios/salinst.h" -#include "ios/salgdi.h" +#include "coretext/salgdi.h" #include "ios/salframe.h" #include "ios/salframeview.h" @@ -238,7 +238,7 @@ private: { // NOTE: the mpFrame access below is not guarded yet! // TODO: mpFrame et al need to be guarded by an independent mutex - IosSalGraphics* pGraphics = (mpFrame && IosSalFrame::isAlive(mpFrame)) ? mpFrame->mpGraphics : NULL; + QuartzSalGraphics* pGraphics = (mpFrame && IosSalFrame::isAlive(mpFrame)) ? mpFrame->mpGraphics : NULL; if( pGraphics ) { pGraphics->RefreshRect( aRect ); |