1a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)/* 2a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * 4a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * modification, are permitted provided that the following conditions are 6a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * met: 7a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * 8a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 9a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 11a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * in the documentation and/or other materials provided with the 13a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * distribution. 14a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 16a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * this software without specific prior written permission. 17a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * 18a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 30a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "config.h" 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/fonts/GenericFontFamilySettings.h" 33a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 36a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)GenericFontFamilySettings::GenericFontFamilySettings(const GenericFontFamilySettings& other) 37a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) : m_standardFontFamilyMap(other.m_standardFontFamilyMap) 38a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_serifFontFamilyMap(other.m_serifFontFamilyMap) 39a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_fixedFontFamilyMap(other.m_fixedFontFamilyMap) 40a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_sansSerifFontFamilyMap(other.m_sansSerifFontFamilyMap) 41a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_cursiveFontFamilyMap(other.m_cursiveFontFamilyMap) 42a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_fantasyFontFamilyMap(other.m_fantasyFontFamilyMap) 43a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_pictographFontFamilyMap(other.m_pictographFontFamilyMap) 44a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 45a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 46a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)GenericFontFamilySettings& GenericFontFamilySettings::operator=(const GenericFontFamilySettings& other) 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_standardFontFamilyMap = other.m_standardFontFamilyMap; 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_serifFontFamilyMap = other.m_serifFontFamilyMap; 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_fixedFontFamilyMap = other.m_fixedFontFamilyMap; 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_sansSerifFontFamilyMap = other.m_sansSerifFontFamilyMap; 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_cursiveFontFamilyMap = other.m_cursiveFontFamilyMap; 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_fantasyFontFamilyMap = other.m_fantasyFontFamilyMap; 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_pictographFontFamilyMap = other.m_pictographFontFamilyMap; 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return *this; 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 59a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)// Sets the entry in the font map for the given script. If family is the empty string, removes the entry instead. 60a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void GenericFontFamilySettings::setGenericFontFamilyMap(ScriptFontFamilyMap& fontMap, const AtomicString& family, UScriptCode script) 61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 62a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ScriptFontFamilyMap::iterator it = fontMap.find(static_cast<int>(script)); 63a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (family.isEmpty()) { 64a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (it == fontMap.end()) 65a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 66a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) fontMap.remove(it); 67a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } else if (it != fontMap.end() && it->value == family) { 68a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return; 69a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } else { 70a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) fontMap.set(static_cast<int>(script), family); 71a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 72a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 73a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 74a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::genericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script) const 75a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 76a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script)); 77a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (it != fontMap.end()) 78a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return it->value; 79a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (script != USCRIPT_COMMON) 80a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(fontMap, USCRIPT_COMMON); 81a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return emptyAtom; 82a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 83a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 84a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::standard(UScriptCode script) const 85a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 86a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_standardFontFamilyMap, script); 87a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 88a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateStandard(const AtomicString& family, UScriptCode script) 90a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == standard()) 92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 93a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_standardFontFamilyMap, family, script); 94197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 95a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 96a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 97a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::fixed(UScriptCode script) const 98a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 99a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_fixedFontFamilyMap, script); 100a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 101a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 102197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateFixed(const AtomicString& family, UScriptCode script) 103a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 104197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == fixed()) 105197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 106a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_fixedFontFamilyMap, family, script); 107197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 108a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 109a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 110a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::serif(UScriptCode script) const 111a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 112a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_serifFontFamilyMap, script); 113a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 114a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 115197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateSerif(const AtomicString& family, UScriptCode script) 116a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 117197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == serif()) 118197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 119a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_serifFontFamilyMap, family, script); 120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 121a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 122a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 123a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::sansSerif(UScriptCode script) const 124a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 125a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_sansSerifFontFamilyMap, script); 126a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 127a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 128197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateSansSerif(const AtomicString& family, UScriptCode script) 129a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 130197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == sansSerif()) 131197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 132a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_sansSerifFontFamilyMap, family, script); 133197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 134a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 135a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 136a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::cursive(UScriptCode script) const 137a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 138a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_cursiveFontFamilyMap, script); 139a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 140a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 141197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateCursive(const AtomicString& family, UScriptCode script) 142a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 143197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == cursive()) 144197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 145a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_cursiveFontFamilyMap, family, script); 146197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 147a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 149a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::fantasy(UScriptCode script) const 150a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 151a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_fantasyFontFamilyMap, script); 152a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 153a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 154197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updateFantasy(const AtomicString& family, UScriptCode script) 155a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 156197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == fantasy()) 157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 158a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_fantasyFontFamilyMap, family, script); 159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 162a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)const AtomicString& GenericFontFamilySettings::pictograph(UScriptCode script) const 163a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 164a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return genericFontFamilyForScript(m_pictographFontFamilyMap, script); 165a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 166a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 167197021e6b966cfb06891637935ef33fff06433d1Ben Murdochbool GenericFontFamilySettings::updatePictograph(const AtomicString& family, UScriptCode script) 168a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (family == pictograph()) 170197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return false; 171a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setGenericFontFamilyMap(m_pictographFontFamilyMap, family, script); 172197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return true; 173a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 174a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 175a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void GenericFontFamilySettings::reset() 176a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 177a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_standardFontFamilyMap.clear(); 178a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_serifFontFamilyMap.clear(); 179a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_fixedFontFamilyMap.clear(); 180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_sansSerifFontFamilyMap.clear(); 181a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_cursiveFontFamilyMap.clear(); 182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_fantasyFontFamilyMap.clear(); 183a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_pictographFontFamilyMap.clear(); 184a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 185a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 186e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} // namespace blink 187