15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "webkit/child/webthemeengine_impl_mac.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <Carbon/Carbon.h> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "skia/ext/skia_utils_mac.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebCanvas.h" 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebRect.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebCanvas; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebRect; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using WebKit::WebThemeEngine; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace webkit_glue { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static ThemeTrackEnableState stateToHIEnableState(WebThemeEngine::State state) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (state) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebThemeEngine::StateDisabled: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kThemeTrackDisabled; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case WebThemeEngine::StateInactive: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kThemeTrackInactive; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return kThemeTrackActive; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebThemeEngineImpl::paintScrollbarThumb( 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebCanvas* canvas, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebThemeEngine::State state, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebThemeEngine::Size size, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebRect& rect, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const WebThemeEngine::ScrollbarInfo& scrollbarInfo) { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HIThemeTrackDrawInfo trackInfo; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.version = 0; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.kind = size == WebThemeEngine::SizeRegular ? 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kThemeMediumScrollBar : kThemeSmallScrollBar; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.bounds = CGRectMake(rect.x, rect.y, rect.width, rect.height); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.min = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.max = scrollbarInfo.maxValue; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.value = scrollbarInfo.currentValue; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.trackInfo.scrollbar.viewsize = scrollbarInfo.visibleSize; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.attributes = 0; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (scrollbarInfo.orientation == 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebThemeEngine::ScrollbarOrientationHorizontal) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.attributes |= kThemeTrackHorizontal; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.enableState = stateToHIEnableState(state); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.trackInfo.scrollbar.pressState = 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state == WebThemeEngine::StatePressed ? kThemeThumbPressed : 0; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) trackInfo.attributes |= (kThemeTrackShowThumb | kThemeTrackHideTrack); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::SkiaBitLocker bitLocker(canvas); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CGContextRef cgContext = bitLocker.cgContext(); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HIThemeDrawTrack(&trackInfo, 0, cgContext, kHIThemeOrientationNormal); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace webkit_glue 62