Home | History | Annotate | Download | only in frame
      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 "core/inspector/InspectorInstrumentation.h"
     30 #include "platform/scroll/ScrollbarTheme.h"
     31 
     32 namespace WebCore {
     33 
     34 // NOTEs
     35 //  1) EditingMacBehavior comprises builds on Mac;
     36 //  2) EditingWindowsBehavior comprises builds on Windows;
     37 //  3) EditingUnixBehavior comprises all unix-based systems, but Darwin/MacOS/Android (and then abusing the terminology);
     38 //  4) EditingAndroidBehavior comprises Android builds.
     39 // 99) MacEditingBehavior is used a fallback.
     40 static EditingBehaviorType editingBehaviorTypeForPlatform()
     41 {
     42     return
     43 #if OS(MACOSX)
     44     EditingMacBehavior
     45 #elif OS(WIN)
     46     EditingWindowsBehavior
     47 #elif OS(ANDROID)
     48     EditingAndroidBehavior
     49 #else // Rest of the UNIX-like systems
     50     EditingUnixBehavior
     51 #endif
     52     ;
     53 }
     54 
     55 static const bool defaultUnifiedTextCheckerEnabled = false;
     56 #if OS(MACOSX)
     57 static const bool defaultSmartInsertDeleteEnabled = true;
     58 #else
     59 static const bool defaultSmartInsertDeleteEnabled = false;
     60 #endif
     61 #if OS(WIN)
     62 static const bool defaultSelectTrailingWhitespaceEnabled = true;
     63 #else
     64 static const bool defaultSelectTrailingWhitespaceEnabled = false;
     65 #endif
     66 
     67 Settings::Settings()
     68     : m_deviceScaleAdjustment(1.0f)
     69 #if HACK_FORCE_TEXT_AUTOSIZING_ON_DESKTOP
     70     , m_textAutosizingWindowSizeOverride(320, 480)
     71     , m_textAutosizingEnabled(true)
     72 #else
     73     , m_textAutosizingEnabled(false)
     74 #endif
     75     SETTINGS_INITIALIZER_LIST
     76     , m_isScriptEnabled(false)
     77     , m_openGLMultisamplingEnabled(false)
     78 {
     79 }
     80 
     81 PassOwnPtr<Settings> Settings::create()
     82 {
     83     return adoptPtr(new Settings);
     84 }
     85 
     86 SETTINGS_SETTER_BODIES
     87 
     88 void Settings::setDelegate(SettingsDelegate* delegate)
     89 {
     90     m_delegate = delegate;
     91 }
     92 
     93 void Settings::invalidate(SettingsDelegate::ChangeType changeType)
     94 {
     95     if (m_delegate)
     96         m_delegate->settingsChanged(changeType);
     97 }
     98 
     99 // This is a total hack and should be removed.
    100 Page* Settings::pageOfShame() const
    101 {
    102     if (!m_delegate)
    103         return 0;
    104     return m_delegate->page();
    105 }
    106 
    107 void Settings::setTextAutosizingEnabled(bool textAutosizingEnabled)
    108 {
    109     if (m_textAutosizingEnabled == textAutosizingEnabled)
    110         return;
    111 
    112     m_textAutosizingEnabled = textAutosizingEnabled;
    113     invalidate(SettingsDelegate::StyleChange);
    114 }
    115 
    116 bool Settings::textAutosizingEnabled() const
    117 {
    118     return InspectorInstrumentation::overrideTextAutosizing(pageOfShame(), m_textAutosizingEnabled);
    119 }
    120 
    121 // FIXME: Move to Settings.in once make_settings can understand IntSize.
    122 void Settings::setTextAutosizingWindowSizeOverride(const IntSize& textAutosizingWindowSizeOverride)
    123 {
    124     if (m_textAutosizingWindowSizeOverride == textAutosizingWindowSizeOverride)
    125         return;
    126 
    127     m_textAutosizingWindowSizeOverride = textAutosizingWindowSizeOverride;
    128     invalidate(SettingsDelegate::StyleChange);
    129 }
    130 
    131 void Settings::setDeviceScaleAdjustment(float deviceScaleAdjustment)
    132 {
    133     m_deviceScaleAdjustment = deviceScaleAdjustment;
    134     invalidate(SettingsDelegate::TextAutosizingChange);
    135 }
    136 
    137 float Settings::deviceScaleAdjustment() const
    138 {
    139     return InspectorInstrumentation::overrideFontScaleFactor(pageOfShame(), m_deviceScaleAdjustment);
    140 }
    141 
    142 void Settings::setScriptEnabled(bool isScriptEnabled)
    143 {
    144     m_isScriptEnabled = isScriptEnabled;
    145     InspectorInstrumentation::scriptsEnabled(pageOfShame(), m_isScriptEnabled);
    146 }
    147 
    148 void Settings::setMockScrollbarsEnabled(bool flag)
    149 {
    150     ScrollbarTheme::setMockScrollbarsEnabled(flag);
    151 }
    152 
    153 bool Settings::mockScrollbarsEnabled()
    154 {
    155     return ScrollbarTheme::mockScrollbarsEnabled();
    156 }
    157 
    158 void Settings::setOpenGLMultisamplingEnabled(bool flag)
    159 {
    160     if (m_openGLMultisamplingEnabled == flag)
    161         return;
    162 
    163     m_openGLMultisamplingEnabled = flag;
    164     invalidate(SettingsDelegate::MultisamplingChange);
    165 }
    166 
    167 } // namespace WebCore
    168