RenderThemeAndroid.cpp revision f3a90aec9c4763a497ef64d704da10e9625e0da0
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
21890130f485b2a3365409653a1b83396a02eed94Andrei Popescu * Copyright 2009, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
161890130f485b2a3365409653a1b83396a02eed94Andrei Popescu * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderThemeAndroid.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
293c8902f607e797e45524ea76cc30ec24c1ed6d2eLeon Scroggins#include "Color.h"
30475b74acddb33a28347804dbb02a585517595f31Andrei Popescu#include "Element.h"
313c8902f607e797e45524ea76cc30ec24c1ed6d2eLeon Scroggins#include "GraphicsContext.h"
32ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins#include "HTMLNames.h"
33ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins#include "HTMLOptionElement.h"
34ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins#include "HTMLSelectElement.h"
35ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins#include "Node.h"
363c8902f607e797e45524ea76cc30ec24c1ed6d2eLeon Scroggins#include "PlatformGraphicsContext.h"
377f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#if ENABLE(VIDEO)
387f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#include "RenderMediaControls.h"
397f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#endif
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSkinAndroid.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSkinButton.h"
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSkinCombo.h"
437f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#include "RenderSkinMediaButton.h"
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderSkinRadio.h"
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SkCanvas.h"
467f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#include "UserAgentStyleSheets.h"
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
480f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qiannamespace WebCore {
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
500f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// Add padding to the fontSize of ListBoxes to get their maximum sizes.
510f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// Listboxes often have a specified size.  Since we change them into
520f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// dropdowns, we want a much smaller height, which encompasses the text.
531890130f485b2a3365409653a1b83396a02eed94Andrei Popescuconst int listboxPadding = 5;
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
55f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// This is the color of selection in a textfield.  It was computed from
56f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// frameworks/base/core/res/res/values/colors.xml, which uses #9983CC39
57f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// (decimal a = 153, r = 131, g = 204, b = 57)
58f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// for all four highlighted text values. Blending this with white yields:
59f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// R = (131 * 153 + 255 * (255 - 153)) / 255  -> 180.6
60f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// G = (204 * 153 + 255 * (255 - 153)) / 255  -> 224.4
61f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// B = ( 57 * 153 + 255 * (255 - 153)) / 255  -> 136.2
62f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark
63f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clarkconst RGBA32 selectionColor = makeRGB(181, 224, 136);
643c8902f607e797e45524ea76cc30ec24c1ed6d2eLeon Scroggins
65ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic SkCanvas* getCanvasFromInfo(const PaintInfo& info)
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return info.context->platformContext()->mCanvas;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderTheme* theme()
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
721890130f485b2a3365409653a1b83396a02eed94Andrei Popescu    DEFINE_STATIC_LOCAL(RenderThemeAndroid, androidTheme, ());
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return &androidTheme;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
7601b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei PopescuPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page)
7701b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu{
783b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu    static RenderTheme* rt = RenderThemeAndroid::create().releaseRef();
793b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu    return rt;
803b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu}
813b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu
823b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei PopescuPassRefPtr<RenderTheme> RenderThemeAndroid::create()
833b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu{
843b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu    return adoptRef(new RenderThemeAndroid());
8501b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu}
8601b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeAndroid::RenderThemeAndroid()
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeAndroid::~RenderThemeAndroid()
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::close()
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
990f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianbool RenderThemeAndroid::stateChanged(RenderObject* obj, ControlState state) const
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (CheckedState == state) {
1020f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        obj->repaint();
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformActiveSelectionBackgroundColor() const
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1101890130f485b2a3365409653a1b83396a02eed94Andrei Popescu    return Color(selectionColor);
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformInactiveSelectionBackgroundColor() const
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1153620888aeeb06e4dd2960323413709461cab663bLeon Scroggins    return Color(Color::transparent);
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformActiveSelectionForegroundColor() const
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color::black;
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformInactiveSelectionForegroundColor() const
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color::black;
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformTextSearchHighlightColor() const
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1303620888aeeb06e4dd2960323413709461cab663bLeon Scroggins    return Color(Color::transparent);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
133ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformActiveListBoxSelectionBackgroundColor() const
134ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{
135ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins    return Color(Color::transparent);
136ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins}
137ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins
138ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformInactiveListBoxSelectionBackgroundColor() const
139ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{
140ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins    return Color(Color::transparent);
141ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins}
142ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins
143ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformActiveListBoxSelectionForegroundColor() const
144ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{
145ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins    return Color(Color::transparent);
146ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins}
147ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins
148ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformInactiveListBoxSelectionForegroundColor() const
149ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{
150ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins    return Color(Color::transparent);
151ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins}
152ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeAndroid::baselinePosition(const RenderObject* obj) const
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // From the description of this function in RenderTheme.h:
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method to obtain the baseline position for a "leaf" control.  This will only be used if a baseline
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // controls that need to do this.
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    //
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Our checkboxes and radio buttons need to be offset to line up properly.
161de617918ccc283c8b5f7ad424732cbcc8597c837Leon Scroggins    return RenderTheme::baselinePosition(obj) - 2;
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::addIntrinsicMargins(RenderStyle* style) const
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Cut out the intrinsic margins completely if we end up using a small font size
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->fontSize() < 11)
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Intrinsic margin value.
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int m = 2;
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed.
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->width().isIntrinsicOrAuto()) {
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginLeft().quirk())
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginLeft(Length(m, Fixed));
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginRight().quirk())
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginRight(Length(m, Fixed));
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->height().isAuto()) {
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginTop().quirk())
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginTop(Length(m, Fixed));
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginBottom().quirk())
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginBottom(Length(m, Fixed));
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeAndroid::supportsFocus(ControlPart appearance)
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (appearance) {
1920f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    case PushButtonPart:
1930f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    case ButtonPart:
1940f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    case TextFieldPart:
1950f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        return true;
1960f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    default:
1970f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        return false;
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2030f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustButtonStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
20592294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang    // Code is taken from RenderThemeSafari.cpp
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // It makes sure we have enough space for the button text.
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int padding = 8;
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setPaddingLeft(Length(padding, Fixed));
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setPaddingRight(Length(padding, Fixed));
21092294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang
21192294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang    // Set a min-height so that we can't get smaller than the mini button.
21292294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang    style->setMinHeight(Length(15, Fixed));
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
215ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintCheckbox(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2170f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    RenderSkinRadio::Draw(getCanvasFromInfo(info), obj->node(), rect, true);
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
221ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintButton(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // If it is a disabled button, simply paint it to the master picture.
2240f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    Node* node = obj->node();
225475b74acddb33a28347804dbb02a585517595f31Andrei Popescu    Element* formControlElement = static_cast<Element*>(node);
226475b74acddb33a28347804dbb02a585517595f31Andrei Popescu    if (formControlElement && !formControlElement->isEnabledFormControl())
2270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        RenderSkinButton::Draw(getCanvasFromInfo(info), rect, RenderSkinAndroid::kDisabled);
2280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    else
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Store all the important information in the platform context.
2300f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        info.context->platformContext()->storeButtonInfo(node, rect);
2310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // We always return false so we do not request to be redrawn.
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2367f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#if ENABLE(VIDEO)
2377f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2387f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas RoardString RenderThemeAndroid::extraMediaControlsStyleSheet()
2397f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2407f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return String(mediaControlsAndroidUserAgentStyleSheet, sizeof(mediaControlsAndroidUserAgentStyleSheet));
2417f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2427f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2437f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roardbool RenderThemeAndroid::shouldRenderMediaControlPart(ControlPart part, Element* e)
2447f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2457f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(e);
2467f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      switch (part) {
2477f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaMuteButtonPart:
2487f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return false;
2497f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaSeekBackButtonPart:
2507f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaSeekForwardButtonPart:
2517f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return true;
2527f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaRewindButtonPart:
2537f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return mediaElement->movieLoadType() != MediaPlayer::LiveStream;
2547f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaReturnToRealtimeButtonPart:
2557f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return mediaElement->movieLoadType() == MediaPlayer::LiveStream;
2567f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaFullscreenButtonPart:
2577f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return mediaElement->supportsFullscreen();
2587f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      case MediaToggleClosedCaptionsButtonPart:
2597f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return mediaElement->hasClosedCaptions();
2607f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      default:
2617f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return true;
2627f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      }
2637f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2647f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2659130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaMuteButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
2667f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2677f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::MUTE);
2687f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
2697f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2707f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2719130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaPlayButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
2727f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2737f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      if (MediaControlPlayButtonElement* btn = static_cast<MediaControlPlayButtonElement*>(o->node())) {
2747f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          if (btn->displayType() == MediaPlayButton)
2757f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard              RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::PLAY);
2767f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          else
2777f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard              RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::PAUSE);
2787f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard          return false;
2797f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      }
2807f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return true;
2817f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2827f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2839130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSeekBackButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
2847f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2857f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::REWIND);
2867f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
2877f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2887f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2899130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSeekForwardButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
2907f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2917f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::FORWARD);
2927f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
2937f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
2947f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
2959130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaControlsBackground(RenderObject* object, const PaintInfo& paintInfo, const IntRect& rect)
2967f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
2977f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::BACKGROUND_SLIDER);
2987f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
2997f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
3007f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
3019130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
3027f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
3037f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::SLIDER_TRACK);
3047f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
3057f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
3067f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
3079130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect)
3087f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
3097f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::SLIDER_THUMB);
3107f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard      return false;
3117f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
3127f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
3137f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roardvoid RenderThemeAndroid::adjustSliderThumbSize(RenderObject* o) const
3147f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{
3157f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard    static const int sliderThumbWidth = RenderSkinMediaButton::sliderThumbWidth();
3167f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard    static const int sliderThumbHeight = RenderSkinMediaButton::sliderThumbHeight();
3177f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard    if (o->style()->appearance() == MediaSliderThumbPart) {
3187f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard        o->style()->setWidth(Length(sliderThumbWidth, Fixed));
3197f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard        o->style()->setHeight(Length(sliderThumbHeight, Fixed));
3207f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard    }
3217f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard}
3227f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
3237f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#endif
3247f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard
325ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintRadio(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3270f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    RenderSkinRadio::Draw(getCanvasFromInfo(info), obj->node(), rect, false);
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::setCheckboxSize(RenderStyle* style) const
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setWidth(Length(19, Fixed));
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setHeight(Length(19, Fixed));
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::setRadioSize(RenderStyle* style) const
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This is the same as checkboxes.
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    setCheckboxSize(style);
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3430f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addIntrinsicMargins(style);
3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintTextField(RenderObject*, const PaintInfo&, const IntRect&)
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3530f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustTextAreaStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addIntrinsicMargins(style);
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintTextArea(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
36082160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins    if (obj->isMenuList())
36182160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins        paintCombo(obj, info, rect);
36282160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins    return true;
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3650f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addIntrinsicMargins(style);
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
370ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintSearchField(RenderObject*, const PaintInfo&, const IntRect&)
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3722097884b9e1630c3855a8580f84a308163e085e7Leon Scroggins    return true;
3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
37582160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsstatic void adjustMenuListStyleCommon(RenderStyle* style)
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
377377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke    // Added to make room for our arrow and make the touch target less cramped.
378377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke    style->setPaddingLeft(Length(RenderSkinCombo::padding(), Fixed));
379377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke    style->setPaddingTop(Length(RenderSkinCombo::padding(), Fixed));
380377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke    style->setPaddingBottom(Length(RenderSkinCombo::padding(), Fixed));
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setPaddingRight(Length(RenderSkinCombo::extraWidth(), Fixed));
382411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins}
383411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins
38482160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsvoid RenderThemeAndroid::adjustListboxStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
38582160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins{
38682160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins    adjustMenuListButtonStyle(0, style, 0);
38782160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins}
38882160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins
3890f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element* e) const
390411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins{
39182160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins    adjustMenuListStyleCommon(style);
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addIntrinsicMargins(style);
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
395ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintCombo(RenderObject* obj, const PaintInfo& info,  const IntRect& rect)
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
397605e3841dfeddd1eeaa36441c6bd4ec4667b89e8Steve Block  if (obj->style() && !obj->style()->visitedDependentColor(CSSPropertyBackgroundColor).alpha())
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
3993b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu    return RenderSkinCombo::Draw(getCanvasFromInfo(info), obj->node(), rect.x(), rect.y(), rect.width(), rect.height());
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
402ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintMenuList(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4040f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    return paintCombo(obj, info, rect);
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
40782160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsvoid RenderThemeAndroid::adjustMenuListButtonStyle(CSSStyleSelector*,
40882160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins        RenderStyle* style, Element*) const
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Copied from RenderThemeSafari.
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const float baseFontSize = 11.0f;
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int baseBorderRadius = 5;
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    float fontScale = style->fontSize() / baseFontSize;
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->resetPadding();
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setBorderRadius(IntSize(int(baseBorderRadius + fontScale - 1), int(baseBorderRadius + fontScale - 1))); // FIXME: Round up?
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int minHeight = 15;
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setMinHeight(Length(minHeight, Fixed));
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setLineHeight(RenderStyle::initialLineHeight());
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Found these padding numbers by trial and error.
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int padding = 4;
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setPaddingTop(Length(padding, Fixed));
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    style->setPaddingLeft(Length(padding, Fixed));
42682160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins    adjustMenuListStyleCommon(style);
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
429ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintMenuListButton(RenderObject* obj, const PaintInfo& info, const IntRect& rect)
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4310f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    return paintCombo(obj, info, rect);
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeAndroid::supportsFocusRing(const RenderStyle* style) const
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4360f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian    return style->opacity() > 0
4370f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->hasAppearance()
4380f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != TextFieldPart
4390f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != SearchFieldPart
4400f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != TextAreaPart
4410f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != CheckboxPart
4420f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != RadioPart
4430f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != PushButtonPart
4440f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != SquareButtonPart
4450f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != ButtonPart
4460f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != ButtonBevelPart
4470f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != MenulistPart
4480f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian        && style->appearance() != MenulistButtonPart;
4490f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian}
4500f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian
4510f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian} // namespace WebCore
452