• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2010 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.
4 
5 #include "webkit/glue/webthemeengine_impl_mac.h"
6 
7 #include <Carbon/Carbon.h>
8 
9 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCanvas.h"
10 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
11 
12 using WebKit::WebCanvas;
13 using WebKit::WebRect;
14 using WebKit::WebThemeEngine;
15 
16 namespace webkit_glue {
17 
stateToHIEnableState(WebThemeEngine::State state)18 static ThemeTrackEnableState stateToHIEnableState(WebThemeEngine::State state) {
19   switch (state) {
20     case WebThemeEngine::StateDisabled:
21       return kThemeTrackDisabled;
22     case WebThemeEngine::StateInactive:
23       return kThemeTrackInactive;
24     default:
25       return kThemeTrackActive;
26   }
27 }
28 
paintScrollbarThumb(WebCanvas * canvas,WebThemeEngine::State state,WebThemeEngine::Size size,const WebRect & rect,const WebThemeEngine::ScrollbarInfo & scrollbarInfo)29 void WebThemeEngineImpl::paintScrollbarThumb(
30     WebCanvas* canvas,
31     WebThemeEngine::State state,
32     WebThemeEngine::Size size,
33     const WebRect& rect,
34     const WebThemeEngine::ScrollbarInfo& scrollbarInfo) {
35   HIThemeTrackDrawInfo trackInfo;
36   trackInfo.version = 0;
37   trackInfo.kind = size == WebThemeEngine::SizeRegular ?
38       kThemeMediumScrollBar : kThemeSmallScrollBar;
39   trackInfo.bounds = CGRectMake(rect.x, rect.y, rect.width, rect.height);
40   trackInfo.min = 0;
41   trackInfo.max = scrollbarInfo.maxValue;
42   trackInfo.value = scrollbarInfo.currentValue;
43   trackInfo.trackInfo.scrollbar.viewsize = scrollbarInfo.visibleSize;
44   trackInfo.attributes = 0;
45   if (scrollbarInfo.orientation ==
46       WebThemeEngine::ScrollbarOrientationHorizontal) {
47     trackInfo.attributes |= kThemeTrackHorizontal;
48   }
49 
50   trackInfo.enableState = stateToHIEnableState(state);
51 
52   trackInfo.trackInfo.scrollbar.pressState =
53       state == WebThemeEngine::StatePressed ? kThemeThumbPressed : 0;
54   trackInfo.attributes |= (kThemeTrackShowThumb | kThemeTrackHideTrack);
55   HIThemeDrawTrack(&trackInfo, 0, canvas, kHIThemeOrientationNormal);
56 }
57 
58 }  // namespace webkit_glue
59