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