| OLD | NEW |
| 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 18 matching lines...) Expand all Loading... |
| 29 #include "core/dom/ViewportArguments.h" | 29 #include "core/dom/ViewportArguments.h" |
| 30 | 30 |
| 31 #include "core/dom/Document.h" | 31 #include "core/dom/Document.h" |
| 32 #include "core/platform/graphics/IntSize.h" | 32 #include "core/platform/graphics/IntSize.h" |
| 33 #include <wtf/text/WTFString.h> | 33 #include <wtf/text/WTFString.h> |
| 34 | 34 |
| 35 using namespace std; | 35 using namespace std; |
| 36 | 36 |
| 37 namespace WebCore { | 37 namespace WebCore { |
| 38 | 38 |
| 39 const float ViewportArguments::deprecatedTargetDPI = 160; | |
| 40 | |
| 41 static const float& compareIgnoringAuto(const float& value1, const float& value2
, const float& (*compare) (const float&, const float&)) | 39 static const float& compareIgnoringAuto(const float& value1, const float& value2
, const float& (*compare) (const float&, const float&)) |
| 42 { | 40 { |
| 43 ASSERT(value1 != ViewportArguments::ValueAuto || value2 != ViewportArguments
::ValueAuto); | 41 ASSERT(value1 != ViewportArguments::ValueAuto || value2 != ViewportArguments
::ValueAuto); |
| 44 | 42 |
| 45 if (value1 == ViewportArguments::ValueAuto) | 43 if (value1 == ViewportArguments::ValueAuto) |
| 46 return value2; | 44 return value2; |
| 47 | 45 |
| 48 if (value2 == ViewportArguments::ValueAuto) | 46 if (value2 == ViewportArguments::ValueAuto) |
| 49 return value1; | 47 return value1; |
| 50 | 48 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 66 { | 64 { |
| 67 ASSERT(value != ViewportArguments::ValueDeviceWidth); | 65 ASSERT(value != ViewportArguments::ValueDeviceWidth); |
| 68 ASSERT(value != ViewportArguments::ValueDeviceHeight); | 66 ASSERT(value != ViewportArguments::ValueDeviceHeight); |
| 69 | 67 |
| 70 // Limits as defined in the css-device-adapt spec. | 68 // Limits as defined in the css-device-adapt spec. |
| 71 if (value != ViewportArguments::ValueAuto) | 69 if (value != ViewportArguments::ValueAuto) |
| 72 return min(float(10), max(value, float(0.1))); | 70 return min(float(10), max(value, float(0.1))); |
| 73 return value; | 71 return value; |
| 74 } | 72 } |
| 75 | 73 |
| 76 ViewportAttributes ViewportArguments::resolve(const FloatSize& initialViewportSi
ze, const FloatSize& deviceSize, int defaultWidth) const | 74 PageScaleConstraints ViewportArguments::resolve(const FloatSize& initialViewport
Size, const FloatSize& deviceSize, int defaultWidth) const |
| 77 { | 75 { |
| 78 float resultWidth = width; | 76 float resultWidth = width; |
| 79 float resultMaxWidth = maxWidth; | 77 float resultMaxWidth = maxWidth; |
| 80 float resultMinWidth = minWidth; | 78 float resultMinWidth = minWidth; |
| 81 float resultHeight = height; | 79 float resultHeight = height; |
| 82 float resultMinHeight = minHeight; | 80 float resultMinHeight = minHeight; |
| 83 float resultMaxHeight = maxHeight; | 81 float resultMaxHeight = maxHeight; |
| 84 float resultZoom = zoom; | 82 float resultZoom = zoom; |
| 85 float resultMinZoom = minZoom; | 83 float resultMinZoom = minZoom; |
| 86 float resultMaxZoom = maxZoom; | 84 float resultMaxZoom = maxZoom; |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 if (type != ViewportArguments::CSSDeviceAdaptation && type != ViewportArgume
nts::Implicit) { | 175 if (type != ViewportArguments::CSSDeviceAdaptation && type != ViewportArgume
nts::Implicit) { |
| 178 // Clamp values to a valid range, but not for @viewport since is | 176 // Clamp values to a valid range, but not for @viewport since is |
| 179 // not mandated by the specification. | 177 // not mandated by the specification. |
| 180 resultWidth = clampLengthValue(resultWidth); | 178 resultWidth = clampLengthValue(resultWidth); |
| 181 resultHeight = clampLengthValue(resultHeight); | 179 resultHeight = clampLengthValue(resultHeight); |
| 182 resultZoom = clampScaleValue(resultZoom); | 180 resultZoom = clampScaleValue(resultZoom); |
| 183 resultMinZoom = clampScaleValue(resultMinZoom); | 181 resultMinZoom = clampScaleValue(resultMinZoom); |
| 184 resultMaxZoom = clampScaleValue(resultMaxZoom); | 182 resultMaxZoom = clampScaleValue(resultMaxZoom); |
| 185 } | 183 } |
| 186 | 184 |
| 187 ViewportAttributes result; | 185 PageScaleConstraints result; |
| 188 result.orientation = orientation; | |
| 189 | 186 |
| 190 // Resolve minimum-scale and maximum-scale values according to spec. | 187 // Resolve minimum-scale and maximum-scale values according to spec. |
| 191 if (resultMinZoom == ViewportArguments::ValueAuto) | 188 if (resultMinZoom == ViewportArguments::ValueAuto) |
| 192 result.minimumScale = float(0.25); | 189 result.minimumScale = float(0.25); |
| 193 else | 190 else |
| 194 result.minimumScale = resultMinZoom; | 191 result.minimumScale = resultMinZoom; |
| 195 | 192 |
| 196 if (resultMaxZoom == ViewportArguments::ValueAuto) { | 193 if (resultMaxZoom == ViewportArguments::ValueAuto) { |
| 197 result.maximumScale = float(5.0); | 194 result.maximumScale = float(5.0); |
| 198 result.minimumScale = min(float(5.0), result.minimumScale); | 195 result.minimumScale = min(float(5.0), result.minimumScale); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 | 228 |
| 232 if (type == ViewportArguments::ViewportMeta) { | 229 if (type == ViewportArguments::ViewportMeta) { |
| 233 // Extend width and height to fill the visual viewport for the resolved
initial-scale. | 230 // Extend width and height to fill the visual viewport for the resolved
initial-scale. |
| 234 resultWidth = max<float>(resultWidth, initialViewportSize.width() / resu
lt.initialScale); | 231 resultWidth = max<float>(resultWidth, initialViewportSize.width() / resu
lt.initialScale); |
| 235 resultHeight = max<float>(resultHeight, initialViewportSize.height() / r
esult.initialScale); | 232 resultHeight = max<float>(resultHeight, initialViewportSize.height() / r
esult.initialScale); |
| 236 } | 233 } |
| 237 | 234 |
| 238 result.layoutSize.setWidth(resultWidth); | 235 result.layoutSize.setWidth(resultWidth); |
| 239 result.layoutSize.setHeight(resultHeight); | 236 result.layoutSize.setHeight(resultHeight); |
| 240 | 237 |
| 241 // FIXME: This might affect some ports, but is the right thing to do. | 238 // If user-scalable = no, lock the min/max scale to the computed initial |
| 239 // scale. |
| 240 if (!resultUserZoom) |
| 241 result.maximumScale = result.minimumScale = result.initialScale; |
| 242 |
| 242 // Only set initialScale to a value if it was explicitly set. | 243 // Only set initialScale to a value if it was explicitly set. |
| 243 // if (resultZoom == ViewportArguments::ValueAuto) | 244 if (resultZoom == ViewportArguments::ValueAuto) |
| 244 // result.initialScale = ViewportArguments::ValueAuto; | 245 result.initialScale = ViewportArguments::ValueAuto; |
| 245 | |
| 246 result.userScalable = resultUserZoom; | |
| 247 result.orientation = orientation; | |
| 248 | 246 |
| 249 return result; | 247 return result; |
| 250 } | 248 } |
| 251 | 249 |
| 252 static FloatSize convertToUserSpace(const FloatSize& deviceSize, float devicePix
elRatio) | |
| 253 { | |
| 254 FloatSize result = deviceSize; | |
| 255 if (devicePixelRatio != 1) | |
| 256 result.scale(1 / devicePixelRatio); | |
| 257 return result; | |
| 258 } | |
| 259 | |
| 260 ViewportAttributes computeViewportAttributes(ViewportArguments args, int desktop
Width, int deviceWidth, int deviceHeight, float devicePixelRatio, IntSize visibl
eViewport) | |
| 261 { | |
| 262 FloatSize initialViewportSize = convertToUserSpace(visibleViewport, devicePi
xelRatio); | |
| 263 FloatSize deviceSize = convertToUserSpace(FloatSize(deviceWidth, deviceHeigh
t), devicePixelRatio); | |
| 264 | |
| 265 return args.resolve(initialViewportSize, deviceSize, desktopWidth); | |
| 266 } | |
| 267 | |
| 268 float computeMinimumScaleFactorForContentContained(const ViewportAttributes& res
ult, const IntSize& visibleViewport, const IntSize& contentsSize) | |
| 269 { | |
| 270 FloatSize viewportSize(visibleViewport); | |
| 271 return max<float>(result.minimumScale, max(viewportSize.width() / contentsSi
ze.width(), viewportSize.height() / contentsSize.height())); | |
| 272 } | |
| 273 | |
| 274 void restrictMinimumScaleFactorToViewportSize(ViewportAttributes& result, IntSiz
e visibleViewport, float devicePixelRatio) | |
| 275 { | |
| 276 FloatSize viewportSize = convertToUserSpace(visibleViewport, devicePixelRati
o); | |
| 277 | |
| 278 result.minimumScale = max<float>(result.minimumScale, max(viewportSize.width
() / result.layoutSize.width(), viewportSize.height() / result.layoutSize.height
())); | |
| 279 } | |
| 280 | |
| 281 void restrictScaleFactorToInitialScaleIfNotUserScalable(ViewportAttributes& resu
lt) | |
| 282 { | |
| 283 if (!result.userScalable) | |
| 284 result.maximumScale = result.minimumScale = result.initialScale; | |
| 285 } | |
| 286 | |
| 287 static float numericPrefix(const String& keyString, const String& valueString, D
ocument* document, bool* ok = 0) | 250 static float numericPrefix(const String& keyString, const String& valueString, D
ocument* document, bool* ok = 0) |
| 288 { | 251 { |
| 289 size_t parsedLength; | 252 size_t parsedLength; |
| 290 float value; | 253 float value; |
| 291 if (valueString.is8Bit()) | 254 if (valueString.is8Bit()) |
| 292 value = charactersToFloat(valueString.characters8(), valueString.length(
), parsedLength); | 255 value = charactersToFloat(valueString.characters8(), valueString.length(
), parsedLength); |
| 293 else | 256 else |
| 294 value = charactersToFloat(valueString.characters16(), valueString.length
(), parsedLength); | 257 value = charactersToFloat(valueString.characters16(), valueString.length
(), parsedLength); |
| 295 if (!parsedLength) { | 258 if (!parsedLength) { |
| 296 reportViewportWarning(document, UnrecognizedViewportArgumentValueError,
valueString, keyString); | 259 reportViewportWarning(document, UnrecognizedViewportArgumentValueError,
valueString, keyString); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 message.replace("%replacement2", replacement2); | 423 message.replace("%replacement2", replacement2); |
| 461 | 424 |
| 462 if ((errorCode == UnrecognizedViewportArgumentValueError || errorCode == Tru
ncatedViewportArgumentValueError) && replacement1.find(';') != WTF::notFound) | 425 if ((errorCode == UnrecognizedViewportArgumentValueError || errorCode == Tru
ncatedViewportArgumentValueError) && replacement1.find(';') != WTF::notFound) |
| 463 message.append(" Note that ';' is not a separator in viewport values. Th
e list should be comma-separated."); | 426 message.append(" Note that ';' is not a separator in viewport values. Th
e list should be comma-separated."); |
| 464 | 427 |
| 465 // FIXME: This message should be moved off the console once a solution to ht
tps://bugs.webkit.org/show_bug.cgi?id=103274 exists. | 428 // FIXME: This message should be moved off the console once a solution to ht
tps://bugs.webkit.org/show_bug.cgi?id=103274 exists. |
| 466 document->addConsoleMessage(RenderingMessageSource, viewportErrorMessageLeve
l(errorCode), message); | 429 document->addConsoleMessage(RenderingMessageSource, viewportErrorMessageLeve
l(errorCode), message); |
| 467 } | 430 } |
| 468 | 431 |
| 469 } // namespace WebCore | 432 } // namespace WebCore |
| OLD | NEW |