Title: [150962] trunk/Source/WebCore
Revision
150962
Author
[email protected]
Date
2013-05-30 07:26:21 -0700 (Thu, 30 May 2013)

Log Message

Separate generic font family settings to a class
https://bugs.webkit.org/show_bug.cgi?id=117027

Reviewed by Andreas Kling.

The new class is under platform/ and can be accessed by the font code directly without platform violations.

* WebCore.xcodeproj/project.pbxproj:
* page/Settings.cpp:
(WebCore::invalidateAfterGenericFamilyChange):
(WebCore::Settings::Settings):
(WebCore::Settings::~Settings):
(WebCore::Settings::create):
(WebCore::Settings::standardFontFamily):
(WebCore::Settings::setStandardFontFamily):
(WebCore::Settings::fixedFontFamily):
(WebCore::Settings::setFixedFontFamily):
(WebCore::Settings::serifFontFamily):
(WebCore::Settings::setSerifFontFamily):
(WebCore::Settings::sansSerifFontFamily):
(WebCore::Settings::setSansSerifFontFamily):
(WebCore::Settings::cursiveFontFamily):
(WebCore::Settings::setCursiveFontFamily):
(WebCore::Settings::fantasyFontFamily):
(WebCore::Settings::setFantasyFontFamily):
(WebCore::Settings::pictographFontFamily):
(WebCore::Settings::setPictographFontFamily):
* page/Settings.h:
* platform/graphics/FontGenericFamilies.cpp: Added.
(WebCore::setGenericFontFamilyForScript):
(WebCore::genericFontFamilyForScript):
(WebCore::FontGenericFamilies::FontGenericFamilies):
(WebCore::FontGenericFamilies::standardFontFamily):
(WebCore::FontGenericFamilies::fixedFontFamily):
(WebCore::FontGenericFamilies::serifFontFamily):
(WebCore::FontGenericFamilies::sansSerifFontFamily):
(WebCore::FontGenericFamilies::cursiveFontFamily):
(WebCore::FontGenericFamilies::fantasyFontFamily):
(WebCore::FontGenericFamilies::pictographFontFamily):
(WebCore::FontGenericFamilies::setStandardFontFamily):
(WebCore::FontGenericFamilies::setFixedFontFamily):
(WebCore::FontGenericFamilies::setSerifFontFamily):
(WebCore::FontGenericFamilies::setSansSerifFontFamily):
(WebCore::FontGenericFamilies::setCursiveFontFamily):
(WebCore::FontGenericFamilies::setFantasyFontFamily):
(WebCore::FontGenericFamilies::setPictographFontFamily):
* platform/graphics/FontGenericFamilies.h: Added.
(WebCore::UScriptCodeHashTraits::emptyValue):
(WebCore::UScriptCodeHashTraits::constructDeletedValue):
(WebCore::UScriptCodeHashTraits::isDeletedValue):
(WebCore::FontGenericFamilies::create):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/CMakeLists.txt (150961 => 150962)


--- trunk/Source/WebCore/CMakeLists.txt	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/CMakeLists.txt	2013-05-30 14:26:21 UTC (rev 150962)
@@ -1892,6 +1892,7 @@
     platform/graphics/FontCache.cpp
     platform/graphics/FontData.cpp
     platform/graphics/FontDescription.cpp
+    platform/graphics/FontGenericFamilies.cpp
     platform/graphics/FontGlyphs.cpp
     platform/graphics/FontFastPath.cpp
     platform/graphics/FontFeatureSettings.cpp

Modified: trunk/Source/WebCore/ChangeLog (150961 => 150962)


--- trunk/Source/WebCore/ChangeLog	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/ChangeLog	2013-05-30 14:26:21 UTC (rev 150962)
@@ -1,3 +1,57 @@
+2013-05-30  Antti Koivisto  <[email protected]>
+
+        Separate generic font family settings to a class
+        https://bugs.webkit.org/show_bug.cgi?id=117027
+
+        Reviewed by Andreas Kling.
+
+        The new class is under platform/ and can be accessed by the font code directly without platform violations.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * page/Settings.cpp:
+        (WebCore::invalidateAfterGenericFamilyChange):
+        (WebCore::Settings::Settings):
+        (WebCore::Settings::~Settings):
+        (WebCore::Settings::create):
+        (WebCore::Settings::standardFontFamily):
+        (WebCore::Settings::setStandardFontFamily):
+        (WebCore::Settings::fixedFontFamily):
+        (WebCore::Settings::setFixedFontFamily):
+        (WebCore::Settings::serifFontFamily):
+        (WebCore::Settings::setSerifFontFamily):
+        (WebCore::Settings::sansSerifFontFamily):
+        (WebCore::Settings::setSansSerifFontFamily):
+        (WebCore::Settings::cursiveFontFamily):
+        (WebCore::Settings::setCursiveFontFamily):
+        (WebCore::Settings::fantasyFontFamily):
+        (WebCore::Settings::setFantasyFontFamily):
+        (WebCore::Settings::pictographFontFamily):
+        (WebCore::Settings::setPictographFontFamily):
+        * page/Settings.h:
+        * platform/graphics/FontGenericFamilies.cpp: Added.
+        (WebCore::setGenericFontFamilyForScript):
+        (WebCore::genericFontFamilyForScript):
+        (WebCore::FontGenericFamilies::FontGenericFamilies):
+        (WebCore::FontGenericFamilies::standardFontFamily):
+        (WebCore::FontGenericFamilies::fixedFontFamily):
+        (WebCore::FontGenericFamilies::serifFontFamily):
+        (WebCore::FontGenericFamilies::sansSerifFontFamily):
+        (WebCore::FontGenericFamilies::cursiveFontFamily):
+        (WebCore::FontGenericFamilies::fantasyFontFamily):
+        (WebCore::FontGenericFamilies::pictographFontFamily):
+        (WebCore::FontGenericFamilies::setStandardFontFamily):
+        (WebCore::FontGenericFamilies::setFixedFontFamily):
+        (WebCore::FontGenericFamilies::setSerifFontFamily):
+        (WebCore::FontGenericFamilies::setSansSerifFontFamily):
+        (WebCore::FontGenericFamilies::setCursiveFontFamily):
+        (WebCore::FontGenericFamilies::setFantasyFontFamily):
+        (WebCore::FontGenericFamilies::setPictographFontFamily):
+        * platform/graphics/FontGenericFamilies.h: Added.
+        (WebCore::UScriptCodeHashTraits::emptyValue):
+        (WebCore::UScriptCodeHashTraits::constructDeletedValue):
+        (WebCore::UScriptCodeHashTraits::isDeletedValue):
+        (WebCore::FontGenericFamilies::create):
+
 2013-05-30  Andreas Kling  <[email protected]>
 
         Avoid using CSSOM style declarations in HTML editing.

Modified: trunk/Source/WebCore/GNUmakefile.list.am (150961 => 150962)


--- trunk/Source/WebCore/GNUmakefile.list.am	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/GNUmakefile.list.am	2013-05-30 14:26:21 UTC (rev 150962)
@@ -5626,6 +5626,8 @@
 	Source/WebCore/platform/graphics/FontData.h \
 	Source/WebCore/platform/graphics/FontDescription.cpp \
 	Source/WebCore/platform/graphics/FontDescription.h \
+	Source/WebCore/platform/graphics/FontGenericFamilies.cpp \
+	Source/WebCore/platform/graphics/FontGenericFamilies.h \
 	Source/WebCore/platform/graphics/FontGlyphs.cpp \
 	Source/WebCore/platform/graphics/FontGlyphs.h \
 	Source/WebCore/platform/graphics/FontFastPath.cpp \

Modified: trunk/Source/WebCore/Target.pri (150961 => 150962)


--- trunk/Source/WebCore/Target.pri	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/Target.pri	2013-05-30 14:26:21 UTC (rev 150962)
@@ -986,6 +986,7 @@
     platform/FileSystem.cpp \
     platform/HistogramSupport.cpp \
     platform/graphics/FontDescription.cpp \
+    platform/graphics/FontGenericFamilies.cpp \
     platform/graphics/FontGlyphs.cpp \
     platform/graphics/FontFeatureSettings.cpp \
     platform/graphics/BitmapImage.cpp \

Modified: trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj (150961 => 150962)


--- trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj	2013-05-30 14:26:21 UTC (rev 150962)
@@ -29881,7 +29881,15 @@
 					RelativePath="..\platform\graphics\FontDescription.h"
 					>
 				</File>
+                <File
+					RelativePath="..\platform\graphics\FontGenericFamilies.cpp"
+					>
+				</File>
 				<File
+					RelativePath="..\platform\graphics\FontGenericFamilies.h"
+					>
+				</File>
+				<File
 					RelativePath="..\platform\graphics\FontGlyphs.cpp"
 					>
 				</File>

Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj (150961 => 150962)


--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj	2013-05-30 14:26:21 UTC (rev 150962)
@@ -4239,6 +4239,7 @@
     <ClCompile Include="..\platform\graphics\FontCache.cpp" />
     <ClCompile Include="..\platform\graphics\FontData.cpp" />
     <ClCompile Include="..\platform\graphics\FontDescription.cpp" />
+    <ClCompile Include="..\platform\graphics\FontGenericFamilies.cpp" />
     <ClCompile Include="..\platform\graphics\FontGlyphs.cpp" />
     <ClCompile Include="..\platform\graphics\FontFastPath.cpp" />
     <ClCompile Include="..\platform\graphics\FontFeatureSettings.cpp" />
@@ -11617,6 +11618,7 @@
     <ClInclude Include="..\platform\graphics\FontCache.h" />
     <ClInclude Include="..\platform\graphics\FontData.h" />
     <ClInclude Include="..\platform\graphics\FontDescription.h" />
+    <ClInclude Include="..\platform\graphics\FontGenericFamilies.h" />
     <ClInclude Include="..\platform\graphics\FontGlyphs.h" />
     <ClInclude Include="..\platform\graphics\FontFeatureSettings.h" />
     <ClInclude Include="..\platform\graphics\FontMetrics.h" />

Modified: trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters (150961 => 150962)


--- trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters	2013-05-30 14:26:21 UTC (rev 150962)
@@ -5193,6 +5193,9 @@
     <ClCompile Include="..\platform\graphics\FontDescription.cpp">
       <Filter>platform\graphics</Filter>
     </ClCompile>
+    <ClCompile Include="..\platform\graphics\FontGenericFamilies.cpp">
+        <Filter>platform\graphics</Filter>
+    </ClCompile>
     <ClCompile Include="..\platform\graphics\FontGlyphs.cpp">
       <Filter>platform\graphics</Filter>
     </ClCompile>
@@ -12667,6 +12670,9 @@
     <ClInclude Include="..\platform\graphics\FontDescription.h">
       <Filter>platform\graphics</Filter>
     </ClInclude>
+    <ClInclude Include="..\platform\graphics\FontGenericFamilies.h">
+        <Filter>platform\graphics</Filter>
+    </ClInclude>
     <ClInclude Include="..\platform\graphics\FontGlyphs.h">
       <Filter>platform\graphics</Filter>
     </ClInclude>

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (150961 => 150962)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2013-05-30 14:26:21 UTC (rev 150962)
@@ -5515,6 +5515,7 @@
 		E44614520CD68A3500FADA75 /* RenderVideo.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B41E340CBFB60900AF2ECE /* RenderVideo.h */; };
 		E44B4BB3141650D7002B1D8B /* SelectorChecker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E44B4BB1141650D7002B1D8B /* SelectorChecker.cpp */; };
 		E44B4BB4141650D7002B1D8B /* SelectorChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = E44B4BB2141650D7002B1D8B /* SelectorChecker.h */; };
+		E44EE3A817577EBD00EEE8CF /* FontGenericFamilies.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E44EE3A617576E5500EEE8CF /* FontGenericFamilies.cpp */; };
 		E45322AB140CE267005A0F92 /* SelectorQuery.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E45322A9140CE267005A0F92 /* SelectorQuery.cpp */; };
 		E45322AC140CE267005A0F92 /* SelectorQuery.h in Headers */ = {isa = PBXBuildFile; fileRef = E45322AA140CE267005A0F92 /* SelectorQuery.h */; };
 		E453901E0EAFCACA003695C8 /* PasteboardIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = E45390190EAFCACA003695C8 /* PasteboardIOS.mm */; };
@@ -12308,6 +12309,8 @@
 		E44614130CD6826900FADA75 /* JSTimeRanges.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTimeRanges.h; sourceTree = "<group>"; };
 		E44B4BB1141650D7002B1D8B /* SelectorChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectorChecker.cpp; sourceTree = "<group>"; };
 		E44B4BB2141650D7002B1D8B /* SelectorChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectorChecker.h; sourceTree = "<group>"; };
+		E44EE3A617576E5500EEE8CF /* FontGenericFamilies.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FontGenericFamilies.cpp; sourceTree = "<group>"; };
+		E44EE3A717576E5500EEE8CF /* FontGenericFamilies.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FontGenericFamilies.h; sourceTree = "<group>"; };
 		E45322A9140CE267005A0F92 /* SelectorQuery.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SelectorQuery.cpp; sourceTree = "<group>"; };
 		E45322AA140CE267005A0F92 /* SelectorQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectorQuery.h; sourceTree = "<group>"; };
 		E45390190EAFCACA003695C8 /* PasteboardIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = PasteboardIOS.mm; path = ios/PasteboardIOS.mm; sourceTree = "<group>"; };
@@ -18337,6 +18340,8 @@
 				72626E010EF022FE00A07E20 /* FontFastPath.cpp */,
 				4A6E9FC513C17D570046A7F8 /* FontFeatureSettings.cpp */,
 				4A6E9FC613C17D570046A7F8 /* FontFeatureSettings.h */,
+				E44EE3A617576E5500EEE8CF /* FontGenericFamilies.cpp */,
+				E44EE3A717576E5500EEE8CF /* FontGenericFamilies.h */,
 				0845680712B90DA600960A9F /* FontMetrics.h */,
 				F7A034C3126BF6BE007DC19E /* FontOrientation.h */,
 				84B62684133138F90095A489 /* FontPlatformData.cpp */,
@@ -26875,6 +26880,7 @@
 				F36E07A41358A8BE00AACBC9 /* WorkerInspectorController.cpp in Sources */,
 				2E43464C0F546A8200B0F1BA /* WorkerLocation.cpp in Sources */,
 				2E43464F0F546A8200B0F1BA /* WorkerMessagingProxy.cpp in Sources */,
+				E44EE3A817577EBD00EEE8CF /* FontGenericFamilies.cpp in Sources */,
 				E1271A140EEEC80400F61213 /* WorkerNavigator.cpp in Sources */,
 				2E4346520F546A8200B0F1BA /* WorkerRunLoop.cpp in Sources */,
 				F3820898147D35F90010BC06 /* WorkerRuntimeAgent.cpp in Sources */,

Modified: trunk/Source/WebCore/page/Settings.cpp (150961 => 150962)


--- trunk/Source/WebCore/page/Settings.cpp	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/page/Settings.cpp	2013-05-30 14:26:21 UTC (rev 150962)
@@ -33,6 +33,7 @@
 #include "Database.h"
 #include "Document.h"
 #include "Font.h"
+#include "FontGenericFamilies.h"
 #include "Frame.h"
 #include "FrameTree.h"
 #include "FrameView.h"
@@ -57,34 +58,13 @@
     }
 }
 
-// Sets the entry in the font map for the given script. If family is the empty string, removes the entry instead.
-static inline void setGenericFontFamilyMap(ScriptFontFamilyMap& fontMap, const AtomicString& family, UScriptCode script, Page* page)
+static void invalidateAfterGenericFamilyChange(Page* page)
 {
-    ScriptFontFamilyMap::iterator it = fontMap.find(static_cast<int>(script));
-    if (family.isEmpty()) {
-        if (it == fontMap.end())
-            return;
-        fontMap.remove(it);
-    } else if (it != fontMap.end() && it->value == family)
-        return;
-    else
-        fontMap.set(static_cast<int>(script), family);
-
     invalidateFontGlyphsCache();
     if (page)
         page->setNeedsRecalcStyleInAllFrames();
 }
 
-static inline const AtomicString& getGenericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script)
-{
-    ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script));
-    if (it != fontMap.end())
-        return it->value;
-    if (script != USCRIPT_COMMON)
-        return getGenericFontFamilyForScript(fontMap, USCRIPT_COMMON);
-    return emptyAtom;
-}
-
 double Settings::gDefaultMinDOMTimerInterval = 0.010; // 10 milliseconds
 double Settings::gDefaultDOMTimerAlignmentInterval = 0;
 double Settings::gHiddenPageDOMTimerAlignmentInterval = 1.0;
@@ -143,6 +123,7 @@
 Settings::Settings(Page* page)
     : m_page(0)
     , m_mediaTypeOverride("screen")
+    , m_fontGenericFamilies(FontGenericFamilies::create())
     , m_storageBlockingPolicy(SecurityOrigin::AllowAllStorage)
 #if ENABLE(TEXT_AUTOSIZING)
     , m_textAutosizingFontScaleFactor(1)
@@ -195,10 +176,14 @@
     m_page = page; // Page is not yet fully initialized wen constructing Settings, so keeping m_page null over initializeDefaultFontFamilies() call.
 }
 
+Settings::~Settings()
+{
+}
+
 PassOwnPtr<Settings> Settings::create(Page* page)
 {
     return adoptPtr(new Settings(page));
-} 
+}
 
 SETTINGS_SETTER_BODIES
 
@@ -221,72 +206,86 @@
 
 const AtomicString& Settings::standardFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_standardFontFamilyMap, script);
+    return m_fontGenericFamilies->standardFontFamily(script);
 }
 
 void Settings::setStandardFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_standardFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setStandardFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::fixedFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_fixedFontFamilyMap, script);
+    return m_fontGenericFamilies->fixedFontFamily(script);
 }
 
 void Settings::setFixedFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_fixedFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setFixedFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::serifFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_serifFontFamilyMap, script);
+    return m_fontGenericFamilies->serifFontFamily(script);
 }
 
 void Settings::setSerifFontFamily(const AtomicString& family, UScriptCode script)
 {
-     setGenericFontFamilyMap(m_serifFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setSerifFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::sansSerifFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_sansSerifFontFamilyMap, script);
+    return m_fontGenericFamilies->sansSerifFontFamily(script);
 }
 
 void Settings::setSansSerifFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_sansSerifFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setSansSerifFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::cursiveFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_cursiveFontFamilyMap, script);
+    return m_fontGenericFamilies->cursiveFontFamily(script);
 }
 
 void Settings::setCursiveFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_cursiveFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setCursiveFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::fantasyFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_fantasyFontFamilyMap, script);
+    return m_fontGenericFamilies->fantasyFontFamily(script);
 }
 
 void Settings::setFantasyFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_fantasyFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setFantasyFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 const AtomicString& Settings::pictographFontFamily(UScriptCode script) const
 {
-    return getGenericFontFamilyForScript(m_pictographFontFamilyMap, script);
+    return m_fontGenericFamilies->pictographFontFamily(script);
 }
 
 void Settings::setPictographFontFamily(const AtomicString& family, UScriptCode script)
 {
-    setGenericFontFamilyMap(m_pictographFontFamilyMap, family, script, m_page);
+    bool changes = m_fontGenericFamilies->setPictographFontFamily(family, script);
+    if (changes)
+        invalidateAfterGenericFamilyChange(m_page);
 }
 
 #if ENABLE(TEXT_AUTOSIZING)

Modified: trunk/Source/WebCore/page/Settings.h (150961 => 150962)


--- trunk/Source/WebCore/page/Settings.h	2013-05-30 14:15:28 UTC (rev 150961)
+++ trunk/Source/WebCore/page/Settings.h	2013-05-30 14:26:21 UTC (rev 150962)
@@ -41,6 +41,7 @@
 
 namespace WebCore {
 
+    class FontGenericFamilies;
     class Page;
 
     enum EditableLinkBehavior {
@@ -57,22 +58,13 @@
         TextDirectionSubmenuAlwaysIncluded
     };
 
-    // UScriptCode uses -1 and 0 for UScriptInvalidCode and UScriptCommon.
-    // We need to use -2 and -3 for empty value and deleted value.
-    struct UScriptCodeHashTraits : WTF::GenericHashTraits<int> {
-        static const bool emptyValueIsZero = false;
-        static int emptyValue() { return -2; }
-        static void constructDeletedValue(int& slot) { slot = -3; }
-        static bool isDeletedValue(int value) { return value == -3; }
-    };
-
-    typedef HashMap<int, AtomicString, DefaultHash<int>::Hash, UScriptCodeHashTraits> ScriptFontFamilyMap;
-
     class Settings {
         WTF_MAKE_NONCOPYABLE(Settings); WTF_MAKE_FAST_ALLOCATED;
     public:
         static PassOwnPtr<Settings> create(Page*);
 
+        ~Settings();
+
         void setStandardFontFamily(const AtomicString&, UScriptCode = USCRIPT_COMMON);
         const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
 
@@ -275,13 +267,7 @@
 
         String m_mediaTypeOverride;
         KURL m_userStyleSheetLocation;
-        ScriptFontFamilyMap m_standardFontFamilyMap;
-        ScriptFontFamilyMap m_serifFontFamilyMap;
-        ScriptFontFamilyMap m_fixedFontFamilyMap;
-        ScriptFontFamilyMap m_sansSerifFontFamilyMap;
-        ScriptFontFamilyMap m_cursiveFontFamilyMap;
-        ScriptFontFamilyMap m_fantasyFontFamilyMap;
-        ScriptFontFamilyMap m_pictographFontFamilyMap;
+        RefPtr<FontGenericFamilies> m_fontGenericFamilies;
         SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
 #if ENABLE(TEXT_AUTOSIZING)
         float m_textAutosizingFontScaleFactor;

Added: trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp (0 => 150962)


--- trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/FontGenericFamilies.cpp	2013-05-30 14:26:21 UTC (rev 150962)
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "FontGenericFamilies.h"
+
+namespace WebCore {
+
+static bool setGenericFontFamilyForScript(ScriptFontFamilyMap& fontMap, const AtomicString& family, UScriptCode script)
+{
+    if (family.isEmpty()) {
+        ScriptFontFamilyMap::iterator it = fontMap.find(static_cast<int>(script));
+        if (it == fontMap.end())
+            return false;
+        fontMap.remove(it);
+        return true;
+    }
+    ScriptFontFamilyMap::AddResult addResult = fontMap.add(static_cast<int>(script), family);
+    if (addResult.isNewEntry)
+        return true;
+    if (addResult.iterator->value == family)
+        return false;
+    addResult.iterator->value = family;
+    return true;
+}
+
+static const AtomicString& genericFontFamilyForScript(const ScriptFontFamilyMap& fontMap, UScriptCode script)
+{
+    ScriptFontFamilyMap::const_iterator it = fontMap.find(static_cast<int>(script));
+    if (it != fontMap.end())
+        return it->value;
+    if (script != USCRIPT_COMMON)
+        return genericFontFamilyForScript(fontMap, USCRIPT_COMMON);
+    return emptyAtom;
+}
+
+FontGenericFamilies::FontGenericFamilies()
+{
+}
+
+const AtomicString& FontGenericFamilies::standardFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_standardFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::fixedFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_fixedFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::serifFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_serifFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::sansSerifFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_sansSerifFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::cursiveFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_cursiveFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::fantasyFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_fantasyFontFamilyMap, script);
+}
+
+const AtomicString& FontGenericFamilies::pictographFontFamily(UScriptCode script) const
+{
+    return genericFontFamilyForScript(m_pictographFontFamilyMap, script);
+}
+
+bool FontGenericFamilies::setStandardFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_standardFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setFixedFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_fixedFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setSerifFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_serifFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setSansSerifFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_sansSerifFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setCursiveFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_cursiveFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setFantasyFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_fantasyFontFamilyMap, family, script);
+}
+
+bool FontGenericFamilies::setPictographFontFamily(const AtomicString& family, UScriptCode script)
+{
+    return setGenericFontFamilyForScript(m_pictographFontFamilyMap, family, script);
+}
+
+}

Added: trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h (0 => 150962)


--- trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/FontGenericFamilies.h	2013-05-30 14:26:21 UTC (rev 150962)
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2013 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef FontGenericFamilies_h
+#define FontGenericFamilies_h
+
+#include <wtf/HashMap.h>
+#include <wtf/RefCounted.h>
+#include <wtf/text/AtomicString.h>
+
+namespace WebCore {
+
+// UScriptCode uses -1 and 0 for UScriptInvalidCode and UScriptCommon.
+// We need to use -2 and -3 for empty value and deleted value.
+struct UScriptCodeHashTraits : WTF::GenericHashTraits<int> {
+    static const bool emptyValueIsZero = false;
+    static int emptyValue() { return -2; }
+    static void constructDeletedValue(int& slot) { slot = -3; }
+    static bool isDeletedValue(int value) { return value == -3; }
+};
+
+typedef HashMap<int, AtomicString, DefaultHash<int>::Hash, UScriptCodeHashTraits> ScriptFontFamilyMap;
+
+class FontGenericFamilies : public RefCounted<FontGenericFamilies> {
+public:
+    static PassRefPtr<FontGenericFamilies> create() { return adoptRef(new FontGenericFamilies); }
+
+    const AtomicString& standardFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& fixedFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& serifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& sansSerifFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& cursiveFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& fantasyFontFamily(UScriptCode = USCRIPT_COMMON) const;
+    const AtomicString& pictographFontFamily(UScriptCode = USCRIPT_COMMON) const;
+
+    bool setStandardFontFamily(const AtomicString&, UScriptCode);
+    bool setFixedFontFamily(const AtomicString&, UScriptCode);
+    bool setSerifFontFamily(const AtomicString&, UScriptCode);
+    bool setSansSerifFontFamily(const AtomicString&, UScriptCode);
+    bool setCursiveFontFamily(const AtomicString&, UScriptCode);
+    bool setFantasyFontFamily(const AtomicString&, UScriptCode);
+    bool setPictographFontFamily(const AtomicString&, UScriptCode);
+
+private:
+    FontGenericFamilies();
+
+    ScriptFontFamilyMap m_standardFontFamilyMap;
+    ScriptFontFamilyMap m_serifFontFamilyMap;
+    ScriptFontFamilyMap m_fixedFontFamilyMap;
+    ScriptFontFamilyMap m_sansSerifFontFamilyMap;
+    ScriptFontFamilyMap m_cursiveFontFamilyMap;
+    ScriptFontFamilyMap m_fantasyFontFamilyMap;
+    ScriptFontFamilyMap m_pictographFontFamilyMap;
+};
+
+}
+
+#endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to