Don't consider a Bluetooth adapter present until it has an address.
[chromium-blink-merge.git] / cc / CCScrollbarLayerImpl.cpp
blobbac0fe4112b138cb43bc65eb8d036fd9cc445f1f
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
3 // found in the LICENSE file.
5 #include "config.h"
7 #if USE(ACCELERATED_COMPOSITING)
9 #include "CCScrollbarLayerImpl.h"
11 #include "CCQuadSink.h"
12 #include "CCScrollbarAnimationController.h"
13 #include "CCTextureDrawQuad.h"
15 using WebKit::WebRect;
16 using WebKit::WebScrollbar;
18 namespace WebCore {
20 PassOwnPtr<CCScrollbarLayerImpl> CCScrollbarLayerImpl::create(int id)
22 return adoptPtr(new CCScrollbarLayerImpl(id));
25 CCScrollbarLayerImpl::CCScrollbarLayerImpl(int id)
26 : CCLayerImpl(id)
27 , m_scrollbar(this)
28 , m_backTrackResourceId(0)
29 , m_foreTrackResourceId(0)
30 , m_thumbResourceId(0)
31 , m_scrollbarOverlayStyle(WebScrollbar::ScrollbarOverlayStyleDefault)
32 , m_orientation(WebScrollbar::Horizontal)
33 , m_controlSize(WebScrollbar::RegularScrollbar)
34 , m_pressedPart(WebScrollbar::NoPart)
35 , m_hoveredPart(WebScrollbar::NoPart)
36 , m_isScrollableAreaActive(false)
37 , m_isScrollViewScrollbar(false)
38 , m_enabled(false)
39 , m_isCustomScrollbar(false)
40 , m_isOverlayScrollbar(false)
44 void CCScrollbarLayerImpl::setScrollbarGeometry(PassOwnPtr<CCScrollbarGeometryFixedThumb> geometry)
46 m_geometry = geometry;
49 void CCScrollbarLayerImpl::setScrollbarData(WebScrollbar* scrollbar)
51 m_scrollbarOverlayStyle = scrollbar->scrollbarOverlayStyle();
52 m_orientation = scrollbar->orientation();
53 m_controlSize = scrollbar->controlSize();
54 m_pressedPart = scrollbar->pressedPart();
55 m_hoveredPart = scrollbar->hoveredPart();
56 m_isScrollableAreaActive = scrollbar->isScrollableAreaActive();
57 m_isScrollViewScrollbar = scrollbar->isScrollViewScrollbar();
58 m_enabled = scrollbar->enabled();
59 m_isCustomScrollbar = scrollbar->isCustomScrollbar();
60 m_isOverlayScrollbar = scrollbar->isOverlay();
62 scrollbar->getTickmarks(m_tickmarks);
64 m_geometry->update(scrollbar);
67 static FloatRect toUVRect(const WebRect& r, const IntRect& bounds)
69 return FloatRect(static_cast<float>(r.x) / bounds.width(), static_cast<float>(r.y) / bounds.height(),
70 static_cast<float>(r.width) / bounds.width(), static_cast<float>(r.height) / bounds.height());
73 void CCScrollbarLayerImpl::appendQuads(CCQuadSink& quadSink, CCAppendQuadsData& appendQuadsData)
75 bool premultipledAlpha = false;
76 bool flipped = false;
77 FloatRect uvRect(0, 0, 1, 1);
78 IntRect boundsRect(IntPoint(), contentBounds());
80 CCSharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQuadState());
81 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData);
83 WebRect thumbRect, backTrackRect, foreTrackRect;
84 m_geometry->splitTrack(&m_scrollbar, m_geometry->trackRect(&m_scrollbar), backTrackRect, thumbRect, foreTrackRect);
85 if (!m_geometry->hasThumb(&m_scrollbar))
86 thumbRect = WebRect();
88 if (m_thumbResourceId && !thumbRect.isEmpty()) {
89 OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedQuadState, IntRect(thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height), m_thumbResourceId, premultipledAlpha, uvRect, flipped);
90 quad->setNeedsBlending();
91 quadSink.append(quad.release(), appendQuadsData);
94 if (!m_backTrackResourceId)
95 return;
97 // We only paint the track in two parts if we were given a texture for the forward track part.
98 if (m_foreTrackResourceId && !foreTrackRect.isEmpty())
99 quadSink.append(CCTextureDrawQuad::create(sharedQuadState, IntRect(foreTrackRect.x, foreTrackRect.y, foreTrackRect.width, foreTrackRect.height), m_foreTrackResourceId, premultipledAlpha, toUVRect(foreTrackRect, boundsRect), flipped), appendQuadsData);
101 // Order matters here: since the back track texture is being drawn to the entire contents rect, we must append it after the thumb and
102 // fore track quads. The back track texture contains (and displays) the buttons.
103 if (!boundsRect.isEmpty())
104 quadSink.append(CCTextureDrawQuad::create(sharedQuadState, IntRect(boundsRect), m_backTrackResourceId, premultipledAlpha, uvRect, flipped), appendQuadsData);
107 void CCScrollbarLayerImpl::didLoseContext()
109 m_backTrackResourceId = 0;
110 m_foreTrackResourceId = 0;
111 m_thumbResourceId = 0;
114 bool CCScrollbarLayerImpl::CCScrollbar::isOverlay() const
116 return m_owner->m_isOverlayScrollbar;
119 int CCScrollbarLayerImpl::CCScrollbar::value() const
121 return m_owner->m_currentPos;
124 WebKit::WebPoint CCScrollbarLayerImpl::CCScrollbar::location() const
126 return WebKit::WebPoint();
129 WebKit::WebSize CCScrollbarLayerImpl::CCScrollbar::size() const
131 return WebKit::WebSize(m_owner->contentBounds().width(), m_owner->contentBounds().height());
134 bool CCScrollbarLayerImpl::CCScrollbar::enabled() const
136 return m_owner->m_enabled;
139 int CCScrollbarLayerImpl::CCScrollbar::maximum() const
141 return m_owner->m_maximum;
144 int CCScrollbarLayerImpl::CCScrollbar::totalSize() const
146 return m_owner->m_totalSize;
149 bool CCScrollbarLayerImpl::CCScrollbar::isScrollViewScrollbar() const
151 return m_owner->m_isScrollViewScrollbar;
154 bool CCScrollbarLayerImpl::CCScrollbar::isScrollableAreaActive() const
156 return m_owner->m_isScrollableAreaActive;
159 void CCScrollbarLayerImpl::CCScrollbar::getTickmarks(WebKit::WebVector<WebRect>& tickmarks) const
161 tickmarks = m_owner->m_tickmarks;
164 WebScrollbar::ScrollbarControlSize CCScrollbarLayerImpl::CCScrollbar::controlSize() const
166 return m_owner->m_controlSize;
169 WebScrollbar::ScrollbarPart CCScrollbarLayerImpl::CCScrollbar::pressedPart() const
171 return m_owner->m_pressedPart;
174 WebScrollbar::ScrollbarPart CCScrollbarLayerImpl::CCScrollbar::hoveredPart() const
176 return m_owner->m_hoveredPart;
179 WebScrollbar::ScrollbarOverlayStyle CCScrollbarLayerImpl::CCScrollbar::scrollbarOverlayStyle() const
181 return m_owner->m_scrollbarOverlayStyle;
184 WebScrollbar::Orientation CCScrollbarLayerImpl::CCScrollbar::orientation() const
186 return m_owner->m_orientation;
189 bool CCScrollbarLayerImpl::CCScrollbar::isCustomScrollbar() const
191 return m_owner->m_isCustomScrollbar;
195 #endif // USE(ACCELERATED_COMPOSITING)