Skip to content

Commit

Permalink
Separate generic font family settings to a class
Browse files Browse the repository at this point in the history
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):



Canonical link: https://commits.webkit.org/135294@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@150962 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
anttijk committed May 30, 2013
1 parent e517c8a commit 73904e2
Show file tree
Hide file tree
Showing 12 changed files with 333 additions and 55 deletions.
1 change: 1 addition & 0 deletions Source/WebCore/CMakeLists.txt
Expand Up @@ -1892,6 +1892,7 @@ set(WebCore_SOURCES
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
Expand Down
54 changes: 54 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,57 @@
2013-05-30 Antti Koivisto <antti@apple.com>

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 <akling@apple.com>

Avoid using CSSOM style declarations in HTML editing.
Expand Down
2 changes: 2 additions & 0 deletions Source/WebCore/GNUmakefile.list.am
Expand Up @@ -5626,6 +5626,8 @@ webcore_platform_sources += \
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 \
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Target.pri
Expand Up @@ -986,6 +986,7 @@ SOURCES += \
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 \
Expand Down
8 changes: 8 additions & 0 deletions Source/WebCore/WebCore.vcproj/WebCore.vcproj
Expand Up @@ -29881,6 +29881,14 @@
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"
>
Expand Down
2 changes: 2 additions & 0 deletions Source/WebCore/WebCore.vcxproj/WebCore.vcxproj
Expand Up @@ -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" />
Expand Down Expand Up @@ -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" />
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.vcxproj/WebCore.vcxproj.filters
Expand Up @@ -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>
Expand Down Expand Up @@ -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>
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Expand Up @@ -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 */; };
Expand Down Expand Up @@ -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>"; };
Expand Down Expand Up @@ -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 */,
Expand Down Expand Up @@ -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 */,
Expand Down
73 changes: 36 additions & 37 deletions Source/WebCore/page/Settings.cpp
Expand Up @@ -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"
Expand All @@ -57,34 +58,13 @@ static void setImageLoadingSettings(Page* page)
}
}

// 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;
Expand Down Expand Up @@ -143,6 +123,7 @@ static const bool defaultSelectTrailingWhitespaceEnabled = false;
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)
Expand Down Expand Up @@ -195,10 +176,14 @@ Settings::Settings(Page* page)
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

Expand All @@ -221,72 +206,86 @@ void Settings::initializeDefaultFontFamilies()

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)
Expand Down
22 changes: 4 additions & 18 deletions Source/WebCore/page/Settings.h
Expand Up @@ -41,6 +41,7 @@

namespace WebCore {

class FontGenericFamilies;
class Page;

enum EditableLinkBehavior {
Expand All @@ -57,22 +58,13 @@ namespace WebCore {
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;

Expand Down Expand Up @@ -275,13 +267,7 @@ namespace WebCore {

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;
Expand Down

0 comments on commit 73904e2

Please sign in to comment.