Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: Source/core/dom/ViewportArguments.cpp

Issue 14813025: Refactor viewport initialization logic out of WebViewImpl. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add tests for new behavior Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2011 Apple Inc. All rights reserv ed.
7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) 7 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/)
8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 8 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
9 * Copyright (C) 2012 Intel Corporation. All rights reserved. 9 * Copyright (C) 2012 Intel Corporation. All rights reserved.
10 * 10 *
(...skipping 24 matching lines...) Expand all
35 #include "core/page/DOMWindow.h" 35 #include "core/page/DOMWindow.h"
36 #include "core/page/Frame.h" 36 #include "core/page/Frame.h"
37 #include "core/page/Page.h" 37 #include "core/page/Page.h"
38 #include "core/platform/graphics/IntSize.h" 38 #include "core/platform/graphics/IntSize.h"
39 #include <wtf/text/WTFString.h> 39 #include <wtf/text/WTFString.h>
40 40
41 using namespace std; 41 using namespace std;
42 42
43 namespace WebCore { 43 namespace WebCore {
44 44
45 const float ViewportArguments::deprecatedTargetDPI = 160;
46
47 static const float& compareIgnoringAuto(const float& value1, const float& value2 , const float& (*compare) (const float&, const float&)) 45 static const float& compareIgnoringAuto(const float& value1, const float& value2 , const float& (*compare) (const float&, const float&))
48 { 46 {
49 ASSERT(value1 != ViewportArguments::ValueAuto || value2 != ViewportArguments ::ValueAuto); 47 ASSERT(value1 != ViewportArguments::ValueAuto || value2 != ViewportArguments ::ValueAuto);
50 48
51 if (value1 == ViewportArguments::ValueAuto) 49 if (value1 == ViewportArguments::ValueAuto)
52 return value2; 50 return value2;
53 51
54 if (value2 == ViewportArguments::ValueAuto) 52 if (value2 == ViewportArguments::ValueAuto)
55 return value1; 53 return value1;
56 54
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 // Clamp values to a valid range, but not for @viewport since is 182 // Clamp values to a valid range, but not for @viewport since is
185 // not mandated by the specification. 183 // not mandated by the specification.
186 resultWidth = clampLengthValue(resultWidth); 184 resultWidth = clampLengthValue(resultWidth);
187 resultHeight = clampLengthValue(resultHeight); 185 resultHeight = clampLengthValue(resultHeight);
188 resultZoom = clampScaleValue(resultZoom); 186 resultZoom = clampScaleValue(resultZoom);
189 resultMinZoom = clampScaleValue(resultMinZoom); 187 resultMinZoom = clampScaleValue(resultMinZoom);
190 resultMaxZoom = clampScaleValue(resultMaxZoom); 188 resultMaxZoom = clampScaleValue(resultMaxZoom);
191 } 189 }
192 190
193 ViewportAttributes result; 191 ViewportAttributes result;
194 result.orientation = orientation;
195 192
196 // Resolve minimum-scale and maximum-scale values according to spec. 193 // Resolve minimum-scale and maximum-scale values according to spec.
197 if (resultMinZoom == ViewportArguments::ValueAuto) 194 if (resultMinZoom == ViewportArguments::ValueAuto)
198 result.minimumScale = float(0.25); 195 result.minimumScale = float(0.25);
199 else 196 else
200 result.minimumScale = resultMinZoom; 197 result.minimumScale = resultMinZoom;
201 198
202 if (resultMaxZoom == ViewportArguments::ValueAuto) { 199 if (resultMaxZoom == ViewportArguments::ValueAuto) {
203 result.maximumScale = float(5.0); 200 result.maximumScale = float(5.0);
204 result.minimumScale = min(float(5.0), result.minimumScale); 201 result.minimumScale = min(float(5.0), result.minimumScale);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 234
238 if (type == ViewportArguments::ViewportMeta) { 235 if (type == ViewportArguments::ViewportMeta) {
239 // Extend width and height to fill the visual viewport for the resolved initial-scale. 236 // Extend width and height to fill the visual viewport for the resolved initial-scale.
240 resultWidth = max<float>(resultWidth, initialViewportSize.width() / resu lt.initialScale); 237 resultWidth = max<float>(resultWidth, initialViewportSize.width() / resu lt.initialScale);
241 resultHeight = max<float>(resultHeight, initialViewportSize.height() / r esult.initialScale); 238 resultHeight = max<float>(resultHeight, initialViewportSize.height() / r esult.initialScale);
242 } 239 }
243 240
244 result.layoutSize.setWidth(resultWidth); 241 result.layoutSize.setWidth(resultWidth);
245 result.layoutSize.setHeight(resultHeight); 242 result.layoutSize.setHeight(resultHeight);
246 243
247 // FIXME: This might affect some ports, but is the right thing to do. 244 // If user-scalable = no, lock the min/max scale to the computed initial
248 // Only set initialScale to a value if it was explicitly set. 245 // scale.
249 // if (resultZoom == ViewportArguments::ValueAuto) 246 if (!resultUserZoom)
250 // result.initialScale = ViewportArguments::ValueAuto; 247 result.maximumScale = result.minimumScale = result.initialScale;
251
252 result.userScalable = resultUserZoom;
253 result.orientation = orientation;
254 248
255 return result; 249 return result;
256 } 250 }
257 251
258 static FloatSize convertToUserSpace(const FloatSize& deviceSize, float devicePix elRatio)
259 {
260 FloatSize result = deviceSize;
261 if (devicePixelRatio != 1)
262 result.scale(1 / devicePixelRatio);
263 return result;
264 }
265
266 ViewportAttributes computeViewportAttributes(ViewportArguments args, int desktop Width, int deviceWidth, int deviceHeight, float devicePixelRatio, IntSize visibl eViewport)
267 {
268 FloatSize initialViewportSize = convertToUserSpace(visibleViewport, devicePi xelRatio);
269 FloatSize deviceSize = convertToUserSpace(FloatSize(deviceWidth, deviceHeigh t), devicePixelRatio);
270
271 return args.resolve(initialViewportSize, deviceSize, desktopWidth);
272 }
273
274 float computeMinimumScaleFactorForContentContained(const ViewportAttributes& res ult, const IntSize& visibleViewport, const IntSize& contentsSize)
275 {
276 FloatSize viewportSize(visibleViewport);
277 return max<float>(result.minimumScale, max(viewportSize.width() / contentsSi ze.width(), viewportSize.height() / contentsSize.height()));
278 }
279
280 void restrictMinimumScaleFactorToViewportSize(ViewportAttributes& result, IntSiz e visibleViewport, float devicePixelRatio)
281 {
282 FloatSize viewportSize = convertToUserSpace(visibleViewport, devicePixelRati o);
283
284 result.minimumScale = max<float>(result.minimumScale, max(viewportSize.width () / result.layoutSize.width(), viewportSize.height() / result.layoutSize.height ()));
285 }
286
287 void restrictScaleFactorToInitialScaleIfNotUserScalable(ViewportAttributes& resu lt)
288 {
289 if (!result.userScalable)
290 result.maximumScale = result.minimumScale = result.initialScale;
291 }
292
293 static float numericPrefix(const String& keyString, const String& valueString, D ocument* document, bool* ok = 0) 252 static float numericPrefix(const String& keyString, const String& valueString, D ocument* document, bool* ok = 0)
294 { 253 {
295 size_t parsedLength; 254 size_t parsedLength;
296 float value; 255 float value;
297 if (valueString.is8Bit()) 256 if (valueString.is8Bit())
298 value = charactersToFloat(valueString.characters8(), valueString.length( ), parsedLength); 257 value = charactersToFloat(valueString.characters8(), valueString.length( ), parsedLength);
299 else 258 else
300 value = charactersToFloat(valueString.characters16(), valueString.length (), parsedLength); 259 value = charactersToFloat(valueString.characters16(), valueString.length (), parsedLength);
301 if (!parsedLength) { 260 if (!parsedLength) {
302 reportViewportWarning(document, UnrecognizedViewportArgumentValueError, valueString, keyString); 261 reportViewportWarning(document, UnrecognizedViewportArgumentValueError, valueString, keyString);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 message.replace("%replacement2", replacement2); 425 message.replace("%replacement2", replacement2);
467 426
468 if ((errorCode == UnrecognizedViewportArgumentValueError || errorCode == Tru ncatedViewportArgumentValueError) && replacement1.find(';') != WTF::notFound) 427 if ((errorCode == UnrecognizedViewportArgumentValueError || errorCode == Tru ncatedViewportArgumentValueError) && replacement1.find(';') != WTF::notFound)
469 message.append(" Note that ';' is not a separator in viewport values. Th e list should be comma-separated."); 428 message.append(" Note that ';' is not a separator in viewport values. Th e list should be comma-separated.");
470 429
471 // FIXME: This message should be moved off the console once a solution to ht tps://bugs.webkit.org/show_bug.cgi?id=103274 exists. 430 // FIXME: This message should be moved off the console once a solution to ht tps://bugs.webkit.org/show_bug.cgi?id=103274 exists.
472 document->addConsoleMessage(RenderingMessageSource, viewportErrorMessageLeve l(errorCode), message); 431 document->addConsoleMessage(RenderingMessageSource, viewportErrorMessageLeve l(errorCode), message);
473 } 432 }
474 433
475 } // namespace WebCore 434 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698