dc2bcaa6c5dc09fd25f33fc9d8dfb44ebb99372f
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / frame / Settings.cpp
1 /*
2  * Copyright (C) 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "core/frame/Settings.h"
28
29 #include "platform/scroll/ScrollbarTheme.h"
30
31 namespace WebCore {
32
33 // NOTEs
34 //  1) EditingMacBehavior comprises builds on Mac;
35 //  2) EditingWindowsBehavior comprises builds on Windows;
36 //  3) EditingUnixBehavior comprises all unix-based systems, but Darwin/MacOS/Android (and then abusing the terminology);
37 //  4) EditingAndroidBehavior comprises Android builds.
38 // 99) MacEditingBehavior is used a fallback.
39 static EditingBehaviorType editingBehaviorTypeForPlatform()
40 {
41     return
42 #if OS(MACOSX)
43     EditingMacBehavior
44 #elif OS(WIN)
45     EditingWindowsBehavior
46 #elif OS(ANDROID)
47     EditingAndroidBehavior
48 #else // Rest of the UNIX-like systems
49     EditingUnixBehavior
50 #endif
51     ;
52 }
53
54 static const bool defaultUnifiedTextCheckerEnabled = false;
55 #if OS(MACOSX)
56 static const bool defaultSmartInsertDeleteEnabled = true;
57 #else
58 static const bool defaultSmartInsertDeleteEnabled = false;
59 #endif
60 #if OS(WIN)
61 static const bool defaultSelectTrailingWhitespaceEnabled = true;
62 #else
63 static const bool defaultSelectTrailingWhitespaceEnabled = false;
64 #endif
65
66 Settings::Settings()
67     : m_openGLMultisamplingEnabled(false)
68 #if HACK_FORCE_TEXT_AUTOSIZING_ON_DESKTOP
69     , m_textAutosizingWindowSizeOverride(320, 480)
70     , m_textAutosizingEnabled(true)
71 #else
72     , m_textAutosizingEnabled(false)
73 #endif
74     SETTINGS_INITIALIZER_LIST
75 {
76 }
77
78 PassOwnPtr<Settings> Settings::create()
79 {
80     return adoptPtr(new Settings);
81 }
82
83 SETTINGS_SETTER_BODIES
84
85 void Settings::setDelegate(SettingsDelegate* delegate)
86 {
87     m_delegate = delegate;
88 }
89
90 void Settings::invalidate(SettingsDelegate::ChangeType changeType)
91 {
92     if (m_delegate)
93         m_delegate->settingsChanged(changeType);
94 }
95
96 void Settings::setTextAutosizingEnabled(bool textAutosizingEnabled)
97 {
98     if (m_textAutosizingEnabled == textAutosizingEnabled)
99         return;
100
101     m_textAutosizingEnabled = textAutosizingEnabled;
102     invalidate(SettingsDelegate::TextAutosizingChange);
103 }
104
105 // FIXME: Move to Settings.in once make_settings can understand IntSize.
106 void Settings::setTextAutosizingWindowSizeOverride(const IntSize& textAutosizingWindowSizeOverride)
107 {
108     if (m_textAutosizingWindowSizeOverride == textAutosizingWindowSizeOverride)
109         return;
110
111     m_textAutosizingWindowSizeOverride = textAutosizingWindowSizeOverride;
112     invalidate(SettingsDelegate::TextAutosizingChange);
113 }
114
115 void Settings::setMockScrollbarsEnabled(bool flag)
116 {
117     ScrollbarTheme::setMockScrollbarsEnabled(flag);
118 }
119
120 bool Settings::mockScrollbarsEnabled()
121 {
122     return ScrollbarTheme::mockScrollbarsEnabled();
123 }
124
125 void Settings::setOpenGLMultisamplingEnabled(bool flag)
126 {
127     if (m_openGLMultisamplingEnabled == flag)
128         return;
129
130     m_openGLMultisamplingEnabled = flag;
131     invalidate(SettingsDelegate::MultisamplingChange);
132 }
133
134 } // namespace WebCore