Chromium Code Reviews| Index: Source/core/inspector/InspectorPageAgent.cpp |
| diff --git a/Source/core/inspector/InspectorPageAgent.cpp b/Source/core/inspector/InspectorPageAgent.cpp |
| index 77df7da6316ad9c6b982ad5ccd3fdc8989e63035..54d9256f3f154cbff012e72dd06fbff71a2cf8c4 100644 |
| --- a/Source/core/inspector/InspectorPageAgent.cpp |
| +++ b/Source/core/inspector/InspectorPageAgent.cpp |
| @@ -97,7 +97,6 @@ static const char deviceOffsetX[] = "deviceOffsetX"; |
| static const char deviceOffsetY[] = "deviceOffsetY"; |
| static const char fontScaleFactor[] = "fontScaleFactor"; |
| static const char pageAgentShowFPSCounter[] = "pageAgentShowFPSCounter"; |
| -static const char pageAgentTextAutosizingOverride[] = "pageAgentTextAutosizingOverride"; |
| static const char pageAgentContinuousPaintingEnabled[] = "pageAgentContinuousPaintingEnabled"; |
| static const char pageAgentShowPaintRects[] = "pageAgentShowPaintRects"; |
| static const char pageAgentShowDebugBorders[] = "pageAgentShowDebugBorders"; |
| @@ -117,6 +116,31 @@ KURL urlWithoutFragment(const KURL& url) |
| return result; |
| } |
| +static float calculateFontScaleFactor(int width, int height, float deviceScaleFactor) |
| +{ |
| + // Chromium on Android uses a device scale adjustment for fonts used in text autosizing for |
| + // improved legibility. This function computes this adjusted value for text autosizing. |
| + // For a description of the Android device scale adjustment algorithm, see: |
| + // chrome/browser/chrome_content_browser_client.cc, GetFontScaleMultiplier(...) |
|
pfeldman
2014/06/23 13:23:56
There is no such file.
dgozman
2014/06/27 11:40:03
There is, but function was renamed to GetDeviceSca
|
| + if (!width || !height || !deviceScaleFactor) |
| + return 1; |
| + |
| + const float kMinFSM = 1.05f; |
| + const int kWidthForMinFSM = 320; |
| + const float kMaxFSM = 1.3f; |
| + const int kWidthForMaxFSM = 800; |
| + |
| + float minWidth = std::min(width, height) / deviceScaleFactor; |
| + if (minWidth <= kWidthForMinFSM) |
| + return kMinFSM; |
| + if (minWidth >= kWidthForMaxFSM) |
| + return kMaxFSM; |
| + |
| + // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. |
| + float ratio = 1.f * (minWidth - kWidthForMinFSM) / (kWidthForMaxFSM - kWidthForMinFSM); |
| + return ratio * (kMaxFSM - kMinFSM) + kMinFSM; |
| +} |
| + |
| } |
| static bool decodeBuffer(const char* buffer, unsigned size, const String& textEncodingName, String* result) |
| @@ -354,14 +378,16 @@ InspectorPageAgent::InspectorPageAgent(Page* page, InjectedScriptManager* inject |
| void InspectorPageAgent::setTextAutosizingEnabled(bool enabled) |
| { |
| m_embedderTextAutosizingEnabled = enabled; |
| - if (!m_deviceMetricsOverridden) |
| + bool emulateViewportEnabled = m_enabled && m_deviceMetricsOverridden && m_emulateViewportEnabled; |
| + if (!emulateViewportEnabled) |
| m_page->settings().setTextAutosizingEnabled(enabled); |
| } |
| void InspectorPageAgent::setDeviceScaleAdjustment(float deviceScaleAdjustment) |
| { |
| m_embedderFontScaleFactor = deviceScaleAdjustment; |
| - if (!m_deviceMetricsOverridden) |
| + bool emulateViewportEnabled = m_enabled && m_deviceMetricsOverridden && m_emulateViewportEnabled; |
| + if (!emulateViewportEnabled) |
| m_page->settings().setDeviceScaleAdjustment(deviceScaleAdjustment); |
| } |
| @@ -434,11 +460,11 @@ void InspectorPageAgent::disable(ErrorString*) |
| m_state->setBoolean(PageAgentState::touchEventEmulationEnabled, false); |
| } |
| - if (!deviceMetricsChanged(false, 0, 0, 0, false, false, 1, 0, 0, 1, false)) |
| + if (!deviceMetricsChanged(false, 0, 0, 0, false, false, 1, 0, 0)) |
| return; |
| // When disabling the agent, reset the override values if necessary. |
| - updateViewMetrics(false, 0, 0, 0, false, false, 1, 0, 0, m_embedderFontScaleFactor, m_embedderTextAutosizingEnabled); |
| + updateViewMetrics(false, 0, 0, 0, false, false, 1, 0, 0); |
| m_state->setLong(PageAgentState::pageAgentScreenWidthOverride, 0); |
| m_state->setLong(PageAgentState::pageAgentScreenHeightOverride, 0); |
| m_state->setDouble(PageAgentState::pageAgentDeviceScaleFactorOverride, 0); |
| @@ -447,8 +473,6 @@ void InspectorPageAgent::disable(ErrorString*) |
| m_state->setDouble(PageAgentState::deviceScale, 1); |
| m_state->setDouble(PageAgentState::deviceOffsetX, 0); |
| m_state->setDouble(PageAgentState::deviceOffsetY, 0); |
| - m_state->setDouble(PageAgentState::fontScaleFactor, 1); |
| - m_state->setBoolean(PageAgentState::pageAgentTextAutosizingOverride, false); |
| } |
| void InspectorPageAgent::addScriptToEvaluateOnLoad(ErrorString*, const String& source, String* identifier) |
| @@ -689,7 +713,7 @@ void InspectorPageAgent::setDocumentContent(ErrorString* errorString, const Stri |
| DOMPatchSupport::patchDocument(*document, html); |
| } |
| -void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, const double* optionalScale, const double* optionalOffsetX, const double* optionalOffsetY, const bool* optionalTextAutosizing, const double* optionalFontScaleFactor) |
| +void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, const double* optionalScale, const double* optionalOffsetX, const double* optionalOffsetY) |
| { |
| const static long maxDimension = 10000000; |
| const static double maxScale = 10; |
| @@ -697,8 +721,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
| double scale = optionalScale ? *optionalScale : 1; |
| double offsetX = optionalOffsetX ? *optionalOffsetX : 0; |
| double offsetY = optionalOffsetY ? *optionalOffsetY : 0; |
| - bool textAutosizing = optionalTextAutosizing ? *optionalTextAutosizing : false; |
| - double fontScaleFactor = optionalFontScaleFactor ? *optionalFontScaleFactor : 1; |
| if (width < 0 || height < 0 || width > maxDimension || height > maxDimension) { |
| *errorString = "Width and height values must be positive, not greater than " + String::number(maxDimension); |
| @@ -715,11 +737,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
| return; |
| } |
| - if (fontScaleFactor <= 0) { |
| - *errorString = "fontScaleFactor must be positive"; |
| - return; |
| - } |
| - |
| Settings& settings = m_page->settings(); |
| if (!settings.acceleratedCompositingEnabled()) { |
| if (errorString) |
| @@ -727,7 +744,7 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
| return; |
| } |
| - if (!deviceMetricsChanged(true, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY, fontScaleFactor, textAutosizing)) |
| + if (!deviceMetricsChanged(true, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY)) |
| return; |
| m_state->setBoolean(PageAgentState::deviceMetricsOverrideEnabled, true); |
| @@ -739,8 +756,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
| m_state->setDouble(PageAgentState::deviceScale, scale); |
| m_state->setDouble(PageAgentState::deviceOffsetX, offsetX); |
| m_state->setDouble(PageAgentState::deviceOffsetY, offsetY); |
| - m_state->setDouble(PageAgentState::fontScaleFactor, fontScaleFactor); |
| - m_state->setBoolean(PageAgentState::pageAgentTextAutosizingOverride, textAutosizing); |
| updateViewMetricsFromState(); |
| } |
| @@ -752,7 +767,7 @@ void InspectorPageAgent::clearDeviceMetricsOverride(ErrorString*) |
| } |
| } |
| -bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY, double fontScaleFactor, bool textAutosizing) |
| +bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY) |
| { |
| bool currentEnabled = m_state->getBoolean(PageAgentState::deviceMetricsOverrideEnabled); |
| // These two always fit an int. |
| @@ -764,8 +779,6 @@ bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int heigh |
| double currentScale = m_state->getDouble(PageAgentState::deviceScale, 1); |
| double currentOffsetX = m_state->getDouble(PageAgentState::deviceOffsetX, 0); |
| double currentOffsetY = m_state->getDouble(PageAgentState::deviceOffsetY, 0); |
| - double currentFontScaleFactor = m_state->getDouble(PageAgentState::fontScaleFactor, 1); |
| - bool currentTextAutosizing = m_state->getBoolean(PageAgentState::pageAgentTextAutosizingOverride); |
| return enabled != currentEnabled |
| || width != currentWidth |
| @@ -775,9 +788,7 @@ bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int heigh |
| || fitWindow != currentFitWindow |
| || scale != currentScale |
| || offsetX != currentOffsetX |
| - || offsetY != currentOffsetY |
| - || fontScaleFactor != currentFontScaleFactor |
| - || textAutosizing != currentTextAutosizing; |
| + || offsetY != currentOffsetY; |
| } |
| void InspectorPageAgent::setShowPaintRects(ErrorString*, bool show) |
| @@ -1189,12 +1200,10 @@ void InspectorPageAgent::updateViewMetricsFromState() |
| double scale = m_state->getDouble(PageAgentState::deviceScale, 1); |
| double offsetX = m_state->getDouble(PageAgentState::deviceOffsetX, 0); |
| double offsetY = m_state->getDouble(PageAgentState::deviceOffsetY, 0); |
| - double fontScaleFactor = m_state->getDouble(PageAgentState::fontScaleFactor); |
| - bool textAutosizingEnabled = m_state->getBoolean(PageAgentState::pageAgentTextAutosizingOverride); |
| - updateViewMetrics(enabled, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY, fontScaleFactor, textAutosizingEnabled); |
| + updateViewMetrics(enabled, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY); |
| } |
| -void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY, double fontScaleFactor, bool textAutosizingEnabled) |
| +void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY) |
| { |
| if (enabled && !m_page->settings().acceleratedCompositingEnabled()) |
| return; |
| @@ -1214,8 +1223,8 @@ void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, |
| InspectorInstrumentation::mediaQueryResultChanged(document); |
| if (m_deviceMetricsOverridden) { |
| - m_page->settings().setTextAutosizingEnabled(textAutosizingEnabled); |
| - m_page->settings().setDeviceScaleAdjustment(fontScaleFactor); |
| + m_page->settings().setTextAutosizingEnabled(emulateViewport); |
| + m_page->settings().setDeviceScaleAdjustment(calculateFontScaleFactor(width, height, static_cast<float>(deviceScaleFactor))); |
| } else { |
| m_page->settings().setTextAutosizingEnabled(m_embedderTextAutosizingEnabled); |
| m_page->settings().setDeviceScaleAdjustment(m_embedderFontScaleFactor); |