OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
50 m_constraintsDirty = true; | 50 m_constraintsDirty = true; |
51 } | 51 } |
52 | 52 |
53 const PageScaleConstraints& PageScaleConstraintsSet::defaultConstraints() const | 53 const PageScaleConstraints& PageScaleConstraintsSet::defaultConstraints() const |
54 { | 54 { |
55 return m_defaultConstraints; | 55 return m_defaultConstraints; |
56 } | 56 } |
57 | 57 |
58 void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportDescrip
tion& description, Length legacyFallbackWidth) | 58 void PageScaleConstraintsSet::updatePageDefinedConstraints(const ViewportDescrip
tion& description, Length legacyFallbackWidth) |
59 { | 59 { |
60 m_pageDefinedConstraints = description.resolve(FloatSize(m_viewSize), legacy
FallbackWidth); | 60 m_pageDefinedConstraints = description.resolve(FloatSize(m_icbSize), legacyF
allbackWidth); |
61 | 61 |
62 m_constraintsDirty = true; | 62 m_constraintsDirty = true; |
63 } | 63 } |
64 | 64 |
65 void PageScaleConstraintsSet::clearPageDefinedConstraints() | 65 void PageScaleConstraintsSet::clearPageDefinedConstraints() |
66 { | 66 { |
67 m_pageDefinedConstraints = PageScaleConstraints(); | 67 m_pageDefinedConstraints = PageScaleConstraints(); |
68 m_constraintsDirty = true; | 68 m_constraintsDirty = true; |
69 } | 69 } |
70 | 70 |
(...skipping 21 matching lines...) Expand all Loading... |
92 void PageScaleConstraintsSet::computeFinalConstraints() | 92 void PageScaleConstraintsSet::computeFinalConstraints() |
93 { | 93 { |
94 m_finalConstraints = computeConstraintsStack(); | 94 m_finalConstraints = computeConstraintsStack(); |
95 | 95 |
96 m_constraintsDirty = false; | 96 m_constraintsDirty = false; |
97 } | 97 } |
98 | 98 |
99 void PageScaleConstraintsSet::adjustFinalConstraintsToContentsSize(IntSize conte
ntsSize, int nonOverlayScrollbarWidth, bool shrinksViewportContentToFit) | 99 void PageScaleConstraintsSet::adjustFinalConstraintsToContentsSize(IntSize conte
ntsSize, int nonOverlayScrollbarWidth, bool shrinksViewportContentToFit) |
100 { | 100 { |
101 if (shrinksViewportContentToFit) | 101 if (shrinksViewportContentToFit) |
102 m_finalConstraints.fitToContentsWidth(contentsSize.width(), m_viewSize.w
idth() - nonOverlayScrollbarWidth); | 102 m_finalConstraints.fitToContentsWidth(contentsSize.width(), m_icbSize.wi
dth() - nonOverlayScrollbarWidth); |
103 | 103 |
104 m_finalConstraints.resolveAutoInitialScale(); | 104 m_finalConstraints.resolveAutoInitialScale(); |
105 } | 105 } |
106 | 106 |
107 void PageScaleConstraintsSet::setNeedsReset(bool needsReset) | 107 void PageScaleConstraintsSet::setNeedsReset(bool needsReset) |
108 { | 108 { |
109 m_needsReset = needsReset; | 109 m_needsReset = needsReset; |
110 if (needsReset) | 110 if (needsReset) |
111 m_constraintsDirty = true; | 111 m_constraintsDirty = true; |
112 } | 112 } |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 static float getLayoutWidthForNonWideViewport(const FloatSize& deviceSize, float
initialScale) | 145 static float getLayoutWidthForNonWideViewport(const FloatSize& deviceSize, float
initialScale) |
146 { | 146 { |
147 return initialScale == -1 ? deviceSize.width() : deviceSize.width() / initia
lScale; | 147 return initialScale == -1 ? deviceSize.width() : deviceSize.width() / initia
lScale; |
148 } | 148 } |
149 | 149 |
150 static float computeHeightByAspectRatio(float width, const FloatSize& deviceSize
) | 150 static float computeHeightByAspectRatio(float width, const FloatSize& deviceSize
) |
151 { | 151 { |
152 return width * (deviceSize.height() / deviceSize.width()); | 152 return width * (deviceSize.height() / deviceSize.width()); |
153 } | 153 } |
154 | 154 |
155 void PageScaleConstraintsSet::didChangeViewSize(const IntSize& size) | 155 void PageScaleConstraintsSet::didChangeInitialContainingBlockSize(const IntSize&
size) |
156 { | 156 { |
157 if (m_viewSize == size) | 157 if (m_icbSize == size) |
158 return; | 158 return; |
159 | 159 |
160 m_viewSize = size; | 160 m_icbSize = size; |
161 m_constraintsDirty = true; | 161 m_constraintsDirty = true; |
162 } | 162 } |
163 | 163 |
164 IntSize PageScaleConstraintsSet::mainFrameSize() const | |
165 { | |
166 // The frame size should match the viewport size at minimum scale, since the | |
167 // viewport must always be contained by the frame. | |
168 FloatSize frameSize(m_viewSize); | |
169 frameSize.scale(1 / finalConstraints().minimumScale); | |
170 return expandedIntSize(frameSize); | |
171 } | |
172 | |
173 IntSize PageScaleConstraintsSet::layoutSize() const | 164 IntSize PageScaleConstraintsSet::layoutSize() const |
174 { | 165 { |
175 return flooredIntSize(computeConstraintsStack().layoutSize); | 166 return flooredIntSize(computeConstraintsStack().layoutSize); |
176 } | 167 } |
177 | 168 |
178 void PageScaleConstraintsSet::adjustForAndroidWebViewQuirks(const ViewportDescri
ption& description, int layoutFallbackWidth, float deviceScaleFactor, bool suppo
rtTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWideViewport, bool lo
adWithOverviewMode, bool nonUserScalableQuirkEnabled) | 169 void PageScaleConstraintsSet::adjustForAndroidWebViewQuirks(const ViewportDescri
ption& description, int layoutFallbackWidth, float deviceScaleFactor, bool suppo
rtTargetDensityDPI, bool wideViewportQuirkEnabled, bool useWideViewport, bool lo
adWithOverviewMode, bool nonUserScalableQuirkEnabled) |
179 { | 170 { |
180 if (!supportTargetDensityDPI && !wideViewportQuirkEnabled && loadWithOvervie
wMode && !nonUserScalableQuirkEnabled) | 171 if (!supportTargetDensityDPI && !wideViewportQuirkEnabled && loadWithOvervie
wMode && !nonUserScalableQuirkEnabled) |
181 return; | 172 return; |
182 | 173 |
(...skipping 25 matching lines...) Expand all Loading... |
208 if (wideViewportQuirkEnabled && (!useWideViewport || description.maxWidt
h.type() == DeviceWidth)) { | 199 if (wideViewportQuirkEnabled && (!useWideViewport || description.maxWidt
h.type() == DeviceWidth)) { |
209 adjustedLayoutSizeWidth /= targetDensityDPIFactor; | 200 adjustedLayoutSizeWidth /= targetDensityDPIFactor; |
210 adjustedLayoutSizeHeight /= targetDensityDPIFactor; | 201 adjustedLayoutSizeHeight /= targetDensityDPIFactor; |
211 } | 202 } |
212 } | 203 } |
213 | 204 |
214 if (wideViewportQuirkEnabled) { | 205 if (wideViewportQuirkEnabled) { |
215 if (useWideViewport && (description.maxWidth.isAuto() || description.max
Width.type() == ExtendToZoom) && description.zoom != 1.0f) { | 206 if (useWideViewport && (description.maxWidth.isAuto() || description.max
Width.type() == ExtendToZoom) && description.zoom != 1.0f) { |
216 if (layoutFallbackWidth) | 207 if (layoutFallbackWidth) |
217 adjustedLayoutSizeWidth = layoutFallbackWidth; | 208 adjustedLayoutSizeWidth = layoutFallbackWidth; |
218 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_viewSize)); | 209 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_icbSize)); |
219 } else if (!useWideViewport) { | 210 } else if (!useWideViewport) { |
220 const float nonWideScale = description.zoom < 1 && description.maxWi
dth.type() != DeviceWidth && description.maxWidth.type() != DeviceHeight ? -1 :
oldInitialScale; | 211 const float nonWideScale = description.zoom < 1 && description.maxWi
dth.type() != DeviceWidth && description.maxWidth.type() != DeviceHeight ? -1 :
oldInitialScale; |
221 adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(FloatSize
(m_viewSize), nonWideScale) / targetDensityDPIFactor; | 212 adjustedLayoutSizeWidth = getLayoutWidthForNonWideViewport(FloatSize
(m_icbSize), nonWideScale) / targetDensityDPIFactor; |
222 float newInitialScale = targetDensityDPIFactor; | 213 float newInitialScale = targetDensityDPIFactor; |
223 if (m_userAgentConstraints.initialScale != -1 && (description.maxWid
th.type() == DeviceWidth || ((description.maxWidth.isAuto() || description.maxWi
dth.type() == ExtendToZoom) && description.zoom == -1))) { | 214 if (m_userAgentConstraints.initialScale != -1 && (description.maxWid
th.type() == DeviceWidth || ((description.maxWidth.isAuto() || description.maxWi
dth.type() == ExtendToZoom) && description.zoom == -1))) { |
224 adjustedLayoutSizeWidth /= m_userAgentConstraints.initialScale; | 215 adjustedLayoutSizeWidth /= m_userAgentConstraints.initialScale; |
225 newInitialScale = m_userAgentConstraints.initialScale; | 216 newInitialScale = m_userAgentConstraints.initialScale; |
226 } | 217 } |
227 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_viewSize)); | 218 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_icbSize)); |
228 if (description.zoom < 1) { | 219 if (description.zoom < 1) { |
229 m_pageDefinedConstraints.initialScale = newInitialScale; | 220 m_pageDefinedConstraints.initialScale = newInitialScale; |
230 if (m_pageDefinedConstraints.minimumScale != -1) | 221 if (m_pageDefinedConstraints.minimumScale != -1) |
231 m_pageDefinedConstraints.minimumScale = std::min<float>(m_pa
geDefinedConstraints.minimumScale, m_pageDefinedConstraints.initialScale); | 222 m_pageDefinedConstraints.minimumScale = std::min<float>(m_pa
geDefinedConstraints.minimumScale, m_pageDefinedConstraints.initialScale); |
232 if (m_pageDefinedConstraints.maximumScale != -1) | 223 if (m_pageDefinedConstraints.maximumScale != -1) |
233 m_pageDefinedConstraints.maximumScale = std::max<float>(m_pa
geDefinedConstraints.maximumScale, m_pageDefinedConstraints.initialScale); | 224 m_pageDefinedConstraints.maximumScale = std::max<float>(m_pa
geDefinedConstraints.maximumScale, m_pageDefinedConstraints.initialScale); |
234 } | 225 } |
235 } | 226 } |
236 } | 227 } |
237 | 228 |
238 if (nonUserScalableQuirkEnabled && !description.userZoom) { | 229 if (nonUserScalableQuirkEnabled && !description.userZoom) { |
239 m_pageDefinedConstraints.initialScale = targetDensityDPIFactor; | 230 m_pageDefinedConstraints.initialScale = targetDensityDPIFactor; |
240 m_pageDefinedConstraints.minimumScale = m_pageDefinedConstraints.initial
Scale; | 231 m_pageDefinedConstraints.minimumScale = m_pageDefinedConstraints.initial
Scale; |
241 m_pageDefinedConstraints.maximumScale = m_pageDefinedConstraints.initial
Scale; | 232 m_pageDefinedConstraints.maximumScale = m_pageDefinedConstraints.initial
Scale; |
242 if (description.maxWidth.isAuto() || description.maxWidth.type() == Exte
ndToZoom || description.maxWidth.type() == DeviceWidth) { | 233 if (description.maxWidth.isAuto() || description.maxWidth.type() == Exte
ndToZoom || description.maxWidth.type() == DeviceWidth) { |
243 adjustedLayoutSizeWidth = m_viewSize.width() / targetDensityDPIFacto
r; | 234 adjustedLayoutSizeWidth = m_icbSize.width() / targetDensityDPIFactor
; |
244 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_viewSize)); | 235 adjustedLayoutSizeHeight = computeHeightByAspectRatio(adjustedLayout
SizeWidth, FloatSize(m_icbSize)); |
245 } | 236 } |
246 } | 237 } |
247 | 238 |
248 m_pageDefinedConstraints.layoutSize.setWidth(adjustedLayoutSizeWidth); | 239 m_pageDefinedConstraints.layoutSize.setWidth(adjustedLayoutSizeWidth); |
249 m_pageDefinedConstraints.layoutSize.setHeight(adjustedLayoutSizeHeight); | 240 m_pageDefinedConstraints.layoutSize.setHeight(adjustedLayoutSizeHeight); |
250 } | 241 } |
251 | 242 |
252 } // namespace blink | 243 } // namespace blink |
OLD | NEW |