1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 3635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2008, 2009 Google, Inc. 4635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is free software; you can redistribute it and/or 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modify it under the terms of the GNU Library General Public 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * License as published by the Free Software Foundation; either 8635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * version 2 of the License, or (at your option) any later version. 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * This library is distributed in the hope that it will be useful, 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Library General Public License for more details. 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * You should have received a copy of the GNU Library General Public License 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 18635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Boston, MA 02110-1301, USA. 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "config.h" 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import "RenderThemeChromiumMac.h" 2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#import "PaintInfo.h" 24ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#import "PlatformBridge.h" 25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import "RenderMediaControlsChromium.h" 26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import "UserAgentStyleSheets.h" 27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import <Carbon/Carbon.h> 28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import <Cocoa/Cocoa.h> 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#import <wtf/RetainPtr.h> 30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import <wtf/StdLibExtras.h> 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#import <math.h> 32635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block@interface RTCMFlippedView : NSView 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{} 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (BOOL)isFlipped; 37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (NSText *)currentEditor; 38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block@end 40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block@implementation RTCMFlippedView 42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (BOOL)isFlipped { 44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return [[NSGraphicsContext currentContext] isFlipped]; 45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block- (NSText *)currentEditor { 48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return nil; 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block@end 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 53635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 54635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockNSView* FlippedView() 56635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static NSView* view = [[RTCMFlippedView alloc] init]; 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return view; 59635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 60635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page*) 62635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static RenderTheme* rt = RenderThemeChromiumMac::create().releaseRef(); 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return rt; 65635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 66635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeChromiumMac::create() 68635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return adoptRef(new RenderThemeChromiumMac); 700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 7221939df44de1705786c545cd1bf519d47250322dBen Murdochbool RenderThemeChromiumMac::usesTestModeFocusRingColor() const 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 74ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return PlatformBridge::layoutTestMode(); 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7721939df44de1705786c545cd1bf519d47250322dBen MurdochNSView* RenderThemeChromiumMac::documentViewFor(RenderObject*) const 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 7921939df44de1705786c545cd1bf519d47250322dBen Murdoch return FlippedView(); 80231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 81231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 82231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// Updates the control tint (a.k.a. active state) of |cell| (from |o|). 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// In the Chromium port, the renderer runs as a background process and controls' 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// NSCell(s) lack a parent NSView. Therefore controls don't have their tint 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// color updated correctly when the application is activated/deactivated. 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// FocusController's setActive() is called when the application is 87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// activated/deactivated, which causes a repaint at which time this code is 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// called. 89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// This function should be called before drawing any NSCell-derived controls, 90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block// unless you're sure it isn't needed. 91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid RenderThemeChromiumMac::updateActiveState(NSCell* cell, const RenderObject* o) 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NSControlTint oldTint = [cell controlTint]; 94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NSControlTint tint = isActive(o) ? [NSColor currentControlTint] : 9506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen static_cast<NSControlTint>(NSClearControlTint); 96231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 97231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (tint != oldTint) 98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block [cell setControlTint:tint]; 99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 10121939df44de1705786c545cd1bf519d47250322dBen Murdoch#if ENABLE(VIDEO) 1025e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 10321939df44de1705786c545cd1bf519d47250322dBen Murdochvoid RenderThemeChromiumMac::adjustMediaSliderThumbSize(RenderObject* o) const 1045e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 1055e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block RenderMediaControlsChromium::adjustMediaSliderThumbSize(o); 1065e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 1075e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 108ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaPlayButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 109635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 110231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return RenderMediaControlsChromium::paintMediaControlsPart(MediaPlayButton, object, paintInfo, rect); 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 113ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaMuteButton(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 115231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return RenderMediaControlsChromium::paintMediaControlsPart(MediaMuteButton, object, paintInfo, rect); 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 118ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaSliderTrack(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return RenderMediaControlsChromium::paintMediaControlsPart(MediaSlider, object, paintInfo, rect); 121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 123ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaControlsBackground(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 124635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return RenderMediaControlsChromium::paintMediaControlsPart(MediaTimelineContainer, object, paintInfo, rect); 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1275e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockString RenderThemeChromiumMac::extraMediaControlsStyleSheet() 129635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return String(mediaControlsChromiumUserAgentStyleSheet, sizeof(mediaControlsChromiumUserAgentStyleSheet)); 131635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(FULLSCREEN_API) 1342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochString RenderThemeChromiumMac::extraFullScreenStyleSheet() 1352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 1362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // FIXME: Chromium may wish to style its default media controls differently in fullscreen. 1372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return String(); 1382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 1392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 1402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 141f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickbool RenderThemeChromiumMac::paintMediaVolumeSliderContainer(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 142f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 143f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return true; 144f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 145f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 146ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaVolumeSliderTrack(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 147635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 14821939df44de1705786c545cd1bf519d47250322dBen Murdoch return RenderMediaControlsChromium::paintMediaControlsPart(MediaVolumeSlider, object, paintInfo, rect); 149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 151ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeChromiumMac::paintMediaVolumeSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 15321939df44de1705786c545cd1bf519d47250322dBen Murdoch return RenderMediaControlsChromium::paintMediaControlsPart(MediaVolumeSliderThumb, object, paintInfo, rect); 154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 156f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickbool RenderThemeChromiumMac::paintMediaSliderThumb(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect) 157f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 158f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick return RenderMediaControlsChromium::paintMediaControlsPart(MediaSliderThumb, object, paintInfo, rect); 159f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 160f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 16181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochIntPoint RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton(RenderBox* muteButtonBox, const IntSize& size) const 162f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{ 16381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return RenderTheme::volumeSliderOffsetFromMuteButton(muteButtonBox, size); 164f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} 16521939df44de1705786c545cd1bf519d47250322dBen Murdoch#endif 166635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 167635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} // namespace WebCore 168