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

Side by Side Diff: cc/scrollbar_layer.cc

Issue 11276060: Pass accurate contentsScale to LayerImpl. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 1 month 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 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 6
7 #include "cc/scrollbar_layer.h" 7 #include "cc/scrollbar_layer.h"
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 25 matching lines...) Expand all
36 , m_textureFormat(GL_INVALID_ENUM) 36 , m_textureFormat(GL_INVALID_ENUM)
37 { 37 {
38 } 38 }
39 39
40 ScrollbarLayer::~ScrollbarLayer() 40 ScrollbarLayer::~ScrollbarLayer()
41 { 41 {
42 } 42 }
43 43
44 void ScrollbarLayer::pushPropertiesTo(LayerImpl* layer) 44 void ScrollbarLayer::pushPropertiesTo(LayerImpl* layer)
45 { 45 {
46 Layer::pushPropertiesTo(layer); 46 ContentsScalingLayer::pushPropertiesTo(layer);
47 47
48 ScrollbarLayerImpl* scrollbarLayer = static_cast<ScrollbarLayerImpl*>(layer) ; 48 ScrollbarLayerImpl* scrollbarLayer = static_cast<ScrollbarLayerImpl*>(layer) ;
49 49
50 if (!scrollbarLayer->scrollbarGeometry()) 50 if (!scrollbarLayer->scrollbarGeometry())
51 scrollbarLayer->setScrollbarGeometry(ScrollbarGeometryFixedThumb::create (make_scoped_ptr(m_geometry->clone()))); 51 scrollbarLayer->setScrollbarGeometry(ScrollbarGeometryFixedThumb::create (make_scoped_ptr(m_geometry->clone())));
52 52
53 scrollbarLayer->setScrollbarData(m_scrollbar.get()); 53 scrollbarLayer->setScrollbarData(m_scrollbar.get());
54 54
55 if (m_backTrack && m_backTrack->texture()->haveBackingTexture()) 55 if (m_backTrack && m_backTrack->texture()->haveBackingTexture())
56 scrollbarLayer->setBackTrackResourceId(m_backTrack->texture()->resourceI d()); 56 scrollbarLayer->setBackTrackResourceId(m_backTrack->texture()->resourceI d());
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 } 124 }
125 125
126 WebKit::WebScrollbar* m_scrollbar; 126 WebKit::WebScrollbar* m_scrollbar;
127 WebKit::WebScrollbarThemePainter m_painter; 127 WebKit::WebScrollbarThemePainter m_painter;
128 WebKit::WebScrollbarThemeGeometry* m_geometry; 128 WebKit::WebScrollbarThemeGeometry* m_geometry;
129 WebKit::WebScrollbar::ScrollbarPart m_trackPart; 129 WebKit::WebScrollbar::ScrollbarPart m_trackPart;
130 130
131 DISALLOW_COPY_AND_ASSIGN(ScrollbarBackgroundPainter); 131 DISALLOW_COPY_AND_ASSIGN(ScrollbarBackgroundPainter);
132 }; 132 };
133 133
134 bool ScrollbarLayer::needsContentsScale() const
135 {
136 return true;
137 }
138
139 IntSize ScrollbarLayer::contentBounds() const
140 {
141 return IntSize(lroundf(bounds().width() * contentsScale()), lroundf(bounds() .height() * contentsScale()));
142 }
143
144 class ScrollbarThumbPainter : public LayerPainter { 134 class ScrollbarThumbPainter : public LayerPainter {
145 public: 135 public:
146 static scoped_ptr<ScrollbarThumbPainter> create(WebKit::WebScrollbar* scroll bar, WebKit::WebScrollbarThemePainter painter, WebKit::WebScrollbarThemeGeometry * geometry) 136 static scoped_ptr<ScrollbarThumbPainter> create(WebKit::WebScrollbar* scroll bar, WebKit::WebScrollbarThemePainter painter, WebKit::WebScrollbarThemeGeometry * geometry)
147 { 137 {
148 return make_scoped_ptr(new ScrollbarThumbPainter(scrollbar, painter, geo metry)); 138 return make_scoped_ptr(new ScrollbarThumbPainter(scrollbar, painter, geo metry));
149 } 139 }
150 140
151 virtual void paint(SkCanvas* skCanvas, const IntRect& contentRect, FloatRect & opaque) OVERRIDE 141 virtual void paint(SkCanvas* skCanvas, const IntRect& contentRect, FloatRect & opaque) OVERRIDE
152 { 142 {
153 WebKit::WebCanvas* canvas = skCanvas; 143 WebKit::WebCanvas* canvas = skCanvas;
(...skipping 22 matching lines...) Expand all
176 166
177 void ScrollbarLayer::setLayerTreeHost(LayerTreeHost* host) 167 void ScrollbarLayer::setLayerTreeHost(LayerTreeHost* host)
178 { 168 {
179 if (!host || host != layerTreeHost()) { 169 if (!host || host != layerTreeHost()) {
180 m_backTrackUpdater = NULL; 170 m_backTrackUpdater = NULL;
181 m_backTrack.reset(); 171 m_backTrack.reset();
182 m_thumbUpdater = NULL; 172 m_thumbUpdater = NULL;
183 m_thumb.reset(); 173 m_thumb.reset();
184 } 174 }
185 175
186 Layer::setLayerTreeHost(host); 176 ContentsScalingLayer::setLayerTreeHost(host);
187 } 177 }
188 178
189 void ScrollbarLayer::createUpdaterIfNeeded() 179 void ScrollbarLayer::createUpdaterIfNeeded()
190 { 180 {
191 m_textureFormat = layerTreeHost()->rendererCapabilities().bestTextureFormat; 181 m_textureFormat = layerTreeHost()->rendererCapabilities().bestTextureFormat;
192 182
193 if (!m_backTrackUpdater) 183 if (!m_backTrackUpdater)
194 m_backTrackUpdater = CachingBitmapContentLayerUpdater::Create(ScrollbarB ackgroundPainter::create(m_scrollbar.get(), m_painter, m_geometry.get(), WebKit: :WebScrollbar::BackTrackPart).PassAs<LayerPainter>()); 184 m_backTrackUpdater = CachingBitmapContentLayerUpdater::Create(ScrollbarB ackgroundPainter::create(m_scrollbar.get(), m_painter, m_geometry.get(), WebKit: :WebScrollbar::BackTrackPart).PassAs<LayerPainter>());
195 if (!m_backTrack) 185 if (!m_backTrack)
196 m_backTrack = m_backTrackUpdater->createResource(layerTreeHost()->conten tsTextureManager()); 186 m_backTrack = m_backTrackUpdater->createResource(layerTreeHost()->conten tsTextureManager());
(...skipping 20 matching lines...) Expand all
217 && texture->texture()->size() == rect.size() 207 && texture->texture()->size() == rect.size()
218 && m_updateRect.isEmpty()) 208 && m_updateRect.isEmpty())
219 return; 209 return;
220 210
221 // We should always have enough memory for UI. 211 // We should always have enough memory for UI.
222 DCHECK(texture->texture()->canAcquireBackingTexture()); 212 DCHECK(texture->texture()->canAcquireBackingTexture());
223 if (!texture->texture()->canAcquireBackingTexture()) 213 if (!texture->texture()->canAcquireBackingTexture())
224 return; 214 return;
225 215
226 // Paint and upload the entire part. 216 // Paint and upload the entire part.
227 float widthScale = static_cast<float>(contentBounds().width()) / bounds().wi dth();
228 float heightScale = static_cast<float>(contentBounds().height()) / bounds(). height();
229 IntRect paintedOpaqueRect; 217 IntRect paintedOpaqueRect;
230 painter->prepareToUpdate(rect, rect.size(), widthScale, heightScale, painted OpaqueRect, stats); 218 painter->prepareToUpdate(rect, rect.size(), contentsScaleX(), contentsScaleY (), paintedOpaqueRect, stats);
231 if (!painter->pixelsDidChange() && texture->texture()->haveBackingTexture()) { 219 if (!painter->pixelsDidChange() && texture->texture()->haveBackingTexture()) {
232 TRACE_EVENT_INSTANT0("cc","ScrollbarLayer::updatePart no texture upload needed"); 220 TRACE_EVENT_INSTANT0("cc","ScrollbarLayer::updatePart no texture upload needed");
233 return; 221 return;
234 } 222 }
235 223
236 IntSize destOffset(0, 0); 224 IntSize destOffset(0, 0);
237 texture->update(queue, rect, destOffset, false, stats); 225 texture->update(queue, rect, destOffset, false, stats);
238 } 226 }
239 227
240 228
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 updatePart(m_foreTrackUpdater.get(), m_foreTrack.get(), contentRect, que ue, stats); 263 updatePart(m_foreTrackUpdater.get(), m_foreTrack.get(), contentRect, que ue, stats);
276 264
277 // Consider the thumb to be at the origin when painting. 265 // Consider the thumb to be at the origin when painting.
278 WebKit::WebRect thumbRect = m_geometry->thumbRect(m_scrollbar.get()); 266 WebKit::WebRect thumbRect = m_geometry->thumbRect(m_scrollbar.get());
279 IntRect originThumbRect = layerRectToContentRect(WebKit::WebRect(0, 0, thumb Rect.width, thumbRect.height)); 267 IntRect originThumbRect = layerRectToContentRect(WebKit::WebRect(0, 0, thumb Rect.width, thumbRect.height));
280 if (!originThumbRect.isEmpty()) 268 if (!originThumbRect.isEmpty())
281 updatePart(m_thumbUpdater.get(), m_thumb.get(), originThumbRect, queue, stats); 269 updatePart(m_thumbUpdater.get(), m_thumb.get(), originThumbRect, queue, stats);
282 } 270 }
283 271
284 } 272 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698