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
12using WebKit::WebCanvas;
13using WebKit::WebRect;
14using WebKit::WebThemeEngine;
15
16namespace webkit_glue {
17
18static 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
29void 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