| OLD | NEW |
| 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 "CCScrollbarLayerImpl.h" | 7 #include "CCScrollbarLayerImpl.h" |
| 8 | 8 |
| 9 #include "CCQuadSink.h" | 9 #include "CCQuadSink.h" |
| 10 #include "CCScrollbarAnimationController.h" | 10 #include "CCScrollbarAnimationController.h" |
| 11 #include "CCTextureDrawQuad.h" | 11 #include "CCTextureDrawQuad.h" |
| 12 | 12 |
| 13 using WebKit::WebRect; | 13 using WebKit::WebRect; |
| 14 using WebKit::WebScrollbar; | 14 using WebKit::WebScrollbar; |
| 15 | 15 |
| 16 namespace cc { | 16 namespace cc { |
| 17 | 17 |
| 18 scoped_ptr<CCScrollbarLayerImpl> CCScrollbarLayerImpl::create(int id) | 18 scoped_ptr<ScrollbarLayerImpl> ScrollbarLayerImpl::create(int id) |
| 19 { | 19 { |
| 20 return make_scoped_ptr(new CCScrollbarLayerImpl(id)); | 20 return make_scoped_ptr(new ScrollbarLayerImpl(id)); |
| 21 } | 21 } |
| 22 | 22 |
| 23 CCScrollbarLayerImpl::CCScrollbarLayerImpl(int id) | 23 ScrollbarLayerImpl::ScrollbarLayerImpl(int id) |
| 24 : CCLayerImpl(id) | 24 : LayerImpl(id) |
| 25 , m_scrollbar(this) | 25 , m_scrollbar(this) |
| 26 , m_backTrackResourceId(0) | 26 , m_backTrackResourceId(0) |
| 27 , m_foreTrackResourceId(0) | 27 , m_foreTrackResourceId(0) |
| 28 , m_thumbResourceId(0) | 28 , m_thumbResourceId(0) |
| 29 , m_scrollbarOverlayStyle(WebScrollbar::ScrollbarOverlayStyleDefault) | 29 , m_scrollbarOverlayStyle(WebScrollbar::ScrollbarOverlayStyleDefault) |
| 30 , m_orientation(WebScrollbar::Horizontal) | 30 , m_orientation(WebScrollbar::Horizontal) |
| 31 , m_controlSize(WebScrollbar::RegularScrollbar) | 31 , m_controlSize(WebScrollbar::RegularScrollbar) |
| 32 , m_pressedPart(WebScrollbar::NoPart) | 32 , m_pressedPart(WebScrollbar::NoPart) |
| 33 , m_hoveredPart(WebScrollbar::NoPart) | 33 , m_hoveredPart(WebScrollbar::NoPart) |
| 34 , m_isScrollableAreaActive(false) | 34 , m_isScrollableAreaActive(false) |
| 35 , m_isScrollViewScrollbar(false) | 35 , m_isScrollViewScrollbar(false) |
| 36 , m_enabled(false) | 36 , m_enabled(false) |
| 37 , m_isCustomScrollbar(false) | 37 , m_isCustomScrollbar(false) |
| 38 , m_isOverlayScrollbar(false) | 38 , m_isOverlayScrollbar(false) |
| 39 { | 39 { |
| 40 } | 40 } |
| 41 | 41 |
| 42 CCScrollbarLayerImpl::~CCScrollbarLayerImpl() | 42 ScrollbarLayerImpl::~ScrollbarLayerImpl() |
| 43 { | 43 { |
| 44 } | 44 } |
| 45 | 45 |
| 46 void CCScrollbarLayerImpl::setScrollbarGeometry(scoped_ptr<CCScrollbarGeometryFi
xedThumb> geometry) | 46 void ScrollbarLayerImpl::setScrollbarGeometry(scoped_ptr<ScrollbarGeometryFixedT
humb> geometry) |
| 47 { | 47 { |
| 48 m_geometry = geometry.Pass(); | 48 m_geometry = geometry.Pass(); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void CCScrollbarLayerImpl::setScrollbarData(WebScrollbar* scrollbar) | 51 void ScrollbarLayerImpl::setScrollbarData(WebScrollbar* scrollbar) |
| 52 { | 52 { |
| 53 m_scrollbarOverlayStyle = scrollbar->scrollbarOverlayStyle(); | 53 m_scrollbarOverlayStyle = scrollbar->scrollbarOverlayStyle(); |
| 54 m_orientation = scrollbar->orientation(); | 54 m_orientation = scrollbar->orientation(); |
| 55 m_controlSize = scrollbar->controlSize(); | 55 m_controlSize = scrollbar->controlSize(); |
| 56 m_pressedPart = scrollbar->pressedPart(); | 56 m_pressedPart = scrollbar->pressedPart(); |
| 57 m_hoveredPart = scrollbar->hoveredPart(); | 57 m_hoveredPart = scrollbar->hoveredPart(); |
| 58 m_isScrollableAreaActive = scrollbar->isScrollableAreaActive(); | 58 m_isScrollableAreaActive = scrollbar->isScrollableAreaActive(); |
| 59 m_isScrollViewScrollbar = scrollbar->isScrollViewScrollbar(); | 59 m_isScrollViewScrollbar = scrollbar->isScrollViewScrollbar(); |
| 60 m_enabled = scrollbar->enabled(); | 60 m_enabled = scrollbar->enabled(); |
| 61 m_isCustomScrollbar = scrollbar->isCustomScrollbar(); | 61 m_isCustomScrollbar = scrollbar->isCustomScrollbar(); |
| 62 m_isOverlayScrollbar = scrollbar->isOverlay(); | 62 m_isOverlayScrollbar = scrollbar->isOverlay(); |
| 63 | 63 |
| 64 scrollbar->getTickmarks(m_tickmarks); | 64 scrollbar->getTickmarks(m_tickmarks); |
| 65 | 65 |
| 66 m_geometry->update(scrollbar); | 66 m_geometry->update(scrollbar); |
| 67 } | 67 } |
| 68 | 68 |
| 69 static FloatRect toUVRect(const WebRect& r, const IntRect& bounds) | 69 static FloatRect toUVRect(const WebRect& r, const IntRect& bounds) |
| 70 { | 70 { |
| 71 return FloatRect(static_cast<float>(r.x) / bounds.width(), static_cast<float
>(r.y) / bounds.height(), | 71 return FloatRect(static_cast<float>(r.x) / bounds.width(), static_cast<float
>(r.y) / bounds.height(), |
| 72 static_cast<float>(r.width) / bounds.width(), static_cast<f
loat>(r.height) / bounds.height()); | 72 static_cast<float>(r.width) / bounds.width(), static_cast<f
loat>(r.height) / bounds.height()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 void CCScrollbarLayerImpl::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData&
appendQuadsData) | 75 void ScrollbarLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& append
QuadsData) |
| 76 { | 76 { |
| 77 bool premultipledAlpha = false; | 77 bool premultipledAlpha = false; |
| 78 bool flipped = false; | 78 bool flipped = false; |
| 79 FloatRect uvRect(0, 0, 1, 1); | 79 FloatRect uvRect(0, 0, 1, 1); |
| 80 IntRect boundsRect(IntPoint(), bounds()); | 80 IntRect boundsRect(IntPoint(), bounds()); |
| 81 IntRect contentBoundsRect(IntPoint(), contentBounds()); | 81 IntRect contentBoundsRect(IntPoint(), contentBounds()); |
| 82 | 82 |
| 83 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createShare
dQuadState()); | 83 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQ
uadState()); |
| 84 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); | 84 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); |
| 85 | 85 |
| 86 WebRect thumbRect, backTrackRect, foreTrackRect; | 86 WebRect thumbRect, backTrackRect, foreTrackRect; |
| 87 m_geometry->splitTrack(&m_scrollbar, m_geometry->trackRect(&m_scrollbar), ba
ckTrackRect, thumbRect, foreTrackRect); | 87 m_geometry->splitTrack(&m_scrollbar, m_geometry->trackRect(&m_scrollbar), ba
ckTrackRect, thumbRect, foreTrackRect); |
| 88 if (!m_geometry->hasThumb(&m_scrollbar)) | 88 if (!m_geometry->hasThumb(&m_scrollbar)) |
| 89 thumbRect = WebRect(); | 89 thumbRect = WebRect(); |
| 90 | 90 |
| 91 if (m_thumbResourceId && !thumbRect.isEmpty()) { | 91 if (m_thumbResourceId && !thumbRect.isEmpty()) { |
| 92 scoped_ptr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedQua
dState, layerRectToContentRect(thumbRect), m_thumbResourceId, premultipledAlpha,
uvRect, flipped); | 92 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::create(sharedQuadSta
te, layerRectToContentRect(thumbRect), m_thumbResourceId, premultipledAlpha, uvR
ect, flipped); |
| 93 quad->setNeedsBlending(); | 93 quad->setNeedsBlending(); |
| 94 quadSink.append(quad.PassAs<CCDrawQuad>(), appendQuadsData); | 94 quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData); |
| 95 } | 95 } |
| 96 | 96 |
| 97 if (!m_backTrackResourceId) | 97 if (!m_backTrackResourceId) |
| 98 return; | 98 return; |
| 99 | 99 |
| 100 // We only paint the track in two parts if we were given a texture for the f
orward track part. | 100 // We only paint the track in two parts if we were given a texture for the f
orward track part. |
| 101 if (m_foreTrackResourceId && !foreTrackRect.isEmpty()) | 101 if (m_foreTrackResourceId && !foreTrackRect.isEmpty()) |
| 102 quadSink.append(CCTextureDrawQuad::create(sharedQuadState, layerRectToCo
ntentRect(foreTrackRect), m_foreTrackResourceId, premultipledAlpha, toUVRect(for
eTrackRect, boundsRect), flipped).PassAs<CCDrawQuad>(), appendQuadsData); | 102 quadSink.append(TextureDrawQuad::create(sharedQuadState, layerRectToCont
entRect(foreTrackRect), m_foreTrackResourceId, premultipledAlpha, toUVRect(foreT
rackRect, boundsRect), flipped).PassAs<DrawQuad>(), appendQuadsData); |
| 103 | 103 |
| 104 // Order matters here: since the back track texture is being drawn to the en
tire contents rect, we must append it after the thumb and | 104 // Order matters here: since the back track texture is being drawn to the en
tire contents rect, we must append it after the thumb and |
| 105 // fore track quads. The back track texture contains (and displays) the butt
ons. | 105 // fore track quads. The back track texture contains (and displays) the butt
ons. |
| 106 if (!contentBoundsRect.isEmpty()) | 106 if (!contentBoundsRect.isEmpty()) |
| 107 quadSink.append(CCTextureDrawQuad::create(sharedQuadState, IntRect(conte
ntBoundsRect), m_backTrackResourceId, premultipledAlpha, uvRect, flipped).PassAs
<CCDrawQuad>(), appendQuadsData); | 107 quadSink.append(TextureDrawQuad::create(sharedQuadState, IntRect(content
BoundsRect), m_backTrackResourceId, premultipledAlpha, uvRect, flipped).PassAs<D
rawQuad>(), appendQuadsData); |
| 108 } | 108 } |
| 109 | 109 |
| 110 void CCScrollbarLayerImpl::didLoseContext() | 110 void ScrollbarLayerImpl::didLoseContext() |
| 111 { | 111 { |
| 112 m_backTrackResourceId = 0; | 112 m_backTrackResourceId = 0; |
| 113 m_foreTrackResourceId = 0; | 113 m_foreTrackResourceId = 0; |
| 114 m_thumbResourceId = 0; | 114 m_thumbResourceId = 0; |
| 115 } | 115 } |
| 116 | 116 |
| 117 bool CCScrollbarLayerImpl::CCScrollbar::isOverlay() const | 117 bool ScrollbarLayerImpl::Scrollbar::isOverlay() const |
| 118 { | 118 { |
| 119 return m_owner->m_isOverlayScrollbar; | 119 return m_owner->m_isOverlayScrollbar; |
| 120 } | 120 } |
| 121 | 121 |
| 122 int CCScrollbarLayerImpl::CCScrollbar::value() const | 122 int ScrollbarLayerImpl::Scrollbar::value() const |
| 123 { | 123 { |
| 124 return m_owner->m_currentPos; | 124 return m_owner->m_currentPos; |
| 125 } | 125 } |
| 126 | 126 |
| 127 WebKit::WebPoint CCScrollbarLayerImpl::CCScrollbar::location() const | 127 WebKit::WebPoint ScrollbarLayerImpl::Scrollbar::location() const |
| 128 { | 128 { |
| 129 return WebKit::WebPoint(); | 129 return WebKit::WebPoint(); |
| 130 } | 130 } |
| 131 | 131 |
| 132 WebKit::WebSize CCScrollbarLayerImpl::CCScrollbar::size() const | 132 WebKit::WebSize ScrollbarLayerImpl::Scrollbar::size() const |
| 133 { | 133 { |
| 134 return WebKit::WebSize(m_owner->bounds().width(), m_owner->bounds().height()
); | 134 return WebKit::WebSize(m_owner->bounds().width(), m_owner->bounds().height()
); |
| 135 } | 135 } |
| 136 | 136 |
| 137 bool CCScrollbarLayerImpl::CCScrollbar::enabled() const | 137 bool ScrollbarLayerImpl::Scrollbar::enabled() const |
| 138 { | 138 { |
| 139 return m_owner->m_enabled; | 139 return m_owner->m_enabled; |
| 140 } | 140 } |
| 141 | 141 |
| 142 int CCScrollbarLayerImpl::CCScrollbar::maximum() const | 142 int ScrollbarLayerImpl::Scrollbar::maximum() const |
| 143 { | 143 { |
| 144 return m_owner->m_maximum; | 144 return m_owner->m_maximum; |
| 145 } | 145 } |
| 146 | 146 |
| 147 int CCScrollbarLayerImpl::CCScrollbar::totalSize() const | 147 int ScrollbarLayerImpl::Scrollbar::totalSize() const |
| 148 { | 148 { |
| 149 return m_owner->m_totalSize; | 149 return m_owner->m_totalSize; |
| 150 } | 150 } |
| 151 | 151 |
| 152 bool CCScrollbarLayerImpl::CCScrollbar::isScrollViewScrollbar() const | 152 bool ScrollbarLayerImpl::Scrollbar::isScrollViewScrollbar() const |
| 153 { | 153 { |
| 154 return m_owner->m_isScrollViewScrollbar; | 154 return m_owner->m_isScrollViewScrollbar; |
| 155 } | 155 } |
| 156 | 156 |
| 157 bool CCScrollbarLayerImpl::CCScrollbar::isScrollableAreaActive() const | 157 bool ScrollbarLayerImpl::Scrollbar::isScrollableAreaActive() const |
| 158 { | 158 { |
| 159 return m_owner->m_isScrollableAreaActive; | 159 return m_owner->m_isScrollableAreaActive; |
| 160 } | 160 } |
| 161 | 161 |
| 162 void CCScrollbarLayerImpl::CCScrollbar::getTickmarks(WebKit::WebVector<WebRect>&
tickmarks) const | 162 void ScrollbarLayerImpl::Scrollbar::getTickmarks(WebKit::WebVector<WebRect>& tic
kmarks) const |
| 163 { | 163 { |
| 164 tickmarks = m_owner->m_tickmarks; | 164 tickmarks = m_owner->m_tickmarks; |
| 165 } | 165 } |
| 166 | 166 |
| 167 WebScrollbar::ScrollbarControlSize CCScrollbarLayerImpl::CCScrollbar::controlSiz
e() const | 167 WebScrollbar::ScrollbarControlSize ScrollbarLayerImpl::Scrollbar::controlSize()
const |
| 168 { | 168 { |
| 169 return m_owner->m_controlSize; | 169 return m_owner->m_controlSize; |
| 170 } | 170 } |
| 171 | 171 |
| 172 WebScrollbar::ScrollbarPart CCScrollbarLayerImpl::CCScrollbar::pressedPart() con
st | 172 WebScrollbar::ScrollbarPart ScrollbarLayerImpl::Scrollbar::pressedPart() const |
| 173 { | 173 { |
| 174 return m_owner->m_pressedPart; | 174 return m_owner->m_pressedPart; |
| 175 } | 175 } |
| 176 | 176 |
| 177 WebScrollbar::ScrollbarPart CCScrollbarLayerImpl::CCScrollbar::hoveredPart() con
st | 177 WebScrollbar::ScrollbarPart ScrollbarLayerImpl::Scrollbar::hoveredPart() const |
| 178 { | 178 { |
| 179 return m_owner->m_hoveredPart; | 179 return m_owner->m_hoveredPart; |
| 180 } | 180 } |
| 181 | 181 |
| 182 WebScrollbar::ScrollbarOverlayStyle CCScrollbarLayerImpl::CCScrollbar::scrollbar
OverlayStyle() const | 182 WebScrollbar::ScrollbarOverlayStyle ScrollbarLayerImpl::Scrollbar::scrollbarOver
layStyle() const |
| 183 { | 183 { |
| 184 return m_owner->m_scrollbarOverlayStyle; | 184 return m_owner->m_scrollbarOverlayStyle; |
| 185 } | 185 } |
| 186 | 186 |
| 187 WebScrollbar::Orientation CCScrollbarLayerImpl::CCScrollbar::orientation() const | 187 WebScrollbar::Orientation ScrollbarLayerImpl::Scrollbar::orientation() const |
| 188 { | 188 { |
| 189 return m_owner->m_orientation; | 189 return m_owner->m_orientation; |
| 190 } | 190 } |
| 191 | 191 |
| 192 bool CCScrollbarLayerImpl::CCScrollbar::isCustomScrollbar() const | 192 bool ScrollbarLayerImpl::Scrollbar::isCustomScrollbar() const |
| 193 { | 193 { |
| 194 return m_owner->m_isCustomScrollbar; | 194 return m_owner->m_isCustomScrollbar; |
| 195 } | 195 } |
| 196 | 196 |
| 197 const char* CCScrollbarLayerImpl::layerTypeAsString() const | 197 const char* ScrollbarLayerImpl::layerTypeAsString() const |
| 198 { | 198 { |
| 199 return "ScrollbarLayer"; | 199 return "ScrollbarLayer"; |
| 200 } | 200 } |
| 201 | 201 |
| 202 } | 202 } |
| OLD | NEW |