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" 474de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins#include "WebCoreFrameBridge.h" 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 490f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qiannamespace WebCore { 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 510f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// Add padding to the fontSize of ListBoxes to get their maximum sizes. 520f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// Listboxes often have a specified size. Since we change them into 530f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian// dropdowns, we want a much smaller height, which encompasses the text. 541890130f485b2a3365409653a1b83396a02eed94Andrei Popescuconst int listboxPadding = 5; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 56f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// This is the color of selection in a textfield. It was computed from 57f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// frameworks/base/core/res/res/values/colors.xml, which uses #9983CC39 58f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// (decimal a = 153, r = 131, g = 204, b = 57) 59f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// for all four highlighted text values. Blending this with white yields: 60f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// R = (131 * 153 + 255 * (255 - 153)) / 255 -> 180.6 61f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// G = (204 * 153 + 255 * (255 - 153)) / 255 -> 224.4 62f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark// B = ( 57 * 153 + 255 * (255 - 153)) / 255 -> 136.2 63f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clark 64f3a90aec9c4763a497ef64d704da10e9625e0da0Cary Clarkconst RGBA32 selectionColor = makeRGB(181, 224, 136); 653c8902f607e797e45524ea76cc30ec24c1ed6d2eLeon Scroggins 66ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockstatic SkCanvas* getCanvasFromInfo(const PaintInfo& info) 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return info.context->platformContext()->mCanvas; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 714de82d04a6a82fee6e2d924768e88af58e966982Leon Scrogginsstatic android::WebFrame* getWebFrame(const Node* node) 724de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins{ 734de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins if (!node) 744de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins return 0; 754de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins return android::WebFrame::getWebFrame(node->document()->frame()); 764de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins} 774de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderTheme* theme() 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 801890130f485b2a3365409653a1b83396a02eed94Andrei Popescu DEFINE_STATIC_LOCAL(RenderThemeAndroid, androidTheme, ()); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return &androidTheme; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8401b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei PopescuPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 8501b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu{ 863b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu static RenderTheme* rt = RenderThemeAndroid::create().releaseRef(); 873b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu return rt; 883b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu} 893b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu 903b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei PopescuPassRefPtr<RenderTheme> RenderThemeAndroid::create() 913b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu{ 923b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu return adoptRef(new RenderThemeAndroid()); 9301b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu} 9401b3621287e7fe5318d3b7d0b74c5810dd717a57Andrei Popescu 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeAndroid::RenderThemeAndroid() 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectRenderThemeAndroid::~RenderThemeAndroid() 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::close() 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1070f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianbool RenderThemeAndroid::stateChanged(RenderObject* obj, ControlState state) const 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (CheckedState == state) { 1100f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian obj->repaint(); 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformActiveSelectionBackgroundColor() const 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1181890130f485b2a3365409653a1b83396a02eed94Andrei Popescu return Color(selectionColor); 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformInactiveSelectionBackgroundColor() const 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1233620888aeeb06e4dd2960323413709461cab663bLeon Scroggins return Color(Color::transparent); 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformActiveSelectionForegroundColor() const 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Color::black; 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformInactiveSelectionForegroundColor() const 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return Color::black; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeAndroid::platformTextSearchHighlightColor() const 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1383620888aeeb06e4dd2960323413709461cab663bLeon Scroggins return Color(Color::transparent); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 141ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformActiveListBoxSelectionBackgroundColor() const 142ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{ 143ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins return Color(Color::transparent); 144ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins} 145ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins 146ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformInactiveListBoxSelectionBackgroundColor() const 147ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{ 148ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins return Color(Color::transparent); 149ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins} 150ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins 151ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformActiveListBoxSelectionForegroundColor() const 152ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{ 153ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins return Color(Color::transparent); 154ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins} 155ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins 156ce5633cace44e557954c70720fac3b47502a6ca5Leon ScrogginsColor RenderThemeAndroid::platformInactiveListBoxSelectionForegroundColor() const 157ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins{ 158ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins return Color(Color::transparent); 159ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins} 160ce5633cace44e557954c70720fac3b47502a6ca5Leon Scroggins 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeAndroid::baselinePosition(const RenderObject* obj) const 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // From the description of this function in RenderTheme.h: 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // A method to obtain the baseline position for a "leaf" control. This will only be used if a baseline 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // position cannot be determined by examining child content. Checkboxes and radio buttons are examples of 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // controls that need to do this. 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Our checkboxes and radio buttons need to be offset to line up properly. 169de617918ccc283c8b5f7ad424732cbcc8597c837Leon Scroggins return RenderTheme::baselinePosition(obj) - 2; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::addIntrinsicMargins(RenderStyle* style) const 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cut out the intrinsic margins completely if we end up using a small font size 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->fontSize() < 11) 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Intrinsic margin value. 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int m = 2; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed. 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->width().isIntrinsicOrAuto()) { 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->marginLeft().quirk()) 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMarginLeft(Length(m, Fixed)); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->marginRight().quirk()) 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMarginRight(Length(m, Fixed)); 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->height().isAuto()) { 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->marginTop().quirk()) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMarginTop(Length(m, Fixed)); 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (style->marginBottom().quirk()) 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMarginBottom(Length(m, Fixed)); 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeAndroid::supportsFocus(ControlPart appearance) 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (appearance) { 2000f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian case PushButtonPart: 2010f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian case ButtonPart: 2020f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian case TextFieldPart: 2030f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian return true; 2040f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian default: 2050f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian return false; 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2110f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustButtonStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 21392294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang // Code is taken from RenderThemeSafari.cpp 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // It makes sure we have enough space for the button text. 215bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck const int paddingHoriz = 12; 216bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck const int paddingVert = 8; 217bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck style->setPaddingLeft(Length(paddingHoriz, Fixed)); 218bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck style->setPaddingRight(Length(paddingHoriz, Fixed)); 219bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck style->setPaddingTop(Length(paddingVert, Fixed)); 220bd6002b8c0c128b058995ad1ad2a75719de3d470John Reck style->setPaddingBottom(Length(paddingVert, Fixed)); 22192294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang 22292294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang // Set a min-height so that we can't get smaller than the mini button. 22392294a3b75e1c95eca24f138802e4afed6972517Shimeng (Simon) Wang style->setMinHeight(Length(15, Fixed)); 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 226ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintCheckbox(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2280f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian RenderSkinRadio::Draw(getCanvasFromInfo(info), obj->node(), rect, true); 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 232ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintButton(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If it is a disabled button, simply paint it to the master picture. 2350f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian Node* node = obj->node(); 236475b74acddb33a28347804dbb02a585517595f31Andrei Popescu Element* formControlElement = static_cast<Element*>(node); 23782ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck if (formControlElement) { 2384de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins android::WebFrame* webFrame = getWebFrame(node); 2394de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins if (webFrame) { 240ce03c1c1203621e552d41a8b3831837636f364a9Ben Murdoch RenderSkinAndroid* skins = webFrame->renderSkins(); 24182ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck if (skins) { 24282ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck RenderSkinAndroid::State state = RenderSkinAndroid::kNormal; 24382ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck if (!formControlElement->isEnabledFormControl()) 24482ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck state = RenderSkinAndroid::kDisabled; 24582ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck skins->renderSkinButton()->draw(getCanvasFromInfo(info), rect, state); 24682ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck } 2474de82d04a6a82fee6e2d924768e88af58e966982Leon Scroggins } 24882ccbd8ce95211b4b5afad6a653462fd3beb771bJohn Reck } 2490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We always return false so we do not request to be redrawn. 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2547f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#if ENABLE(VIDEO) 2557f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 2567f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas RoardString RenderThemeAndroid::extraMediaControlsStyleSheet() 2577f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 2587f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return String(mediaControlsAndroidUserAgentStyleSheet, sizeof(mediaControlsAndroidUserAgentStyleSheet)); 2597f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 2607f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 2617f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roardbool RenderThemeAndroid::shouldRenderMediaControlPart(ControlPart part, Element* e) 2627f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 2637f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard HTMLMediaElement* mediaElement = static_cast<HTMLMediaElement*>(e); 2647f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard switch (part) { 2657f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaMuteButtonPart: 2667f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 2677f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaSeekBackButtonPart: 2687f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaSeekForwardButtonPart: 269cc2679391d89b57997f78365d54d99c9ae062db3Nicolas Roard return false; 2707f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaRewindButtonPart: 271b5618de0bdd440dd8567ef1677dc4e514905dc0bTeng-Hui Zhu return mediaElement->movieLoadType() != MediaPlayer::LiveStream; 2727f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaReturnToRealtimeButtonPart: 2737f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return mediaElement->movieLoadType() == MediaPlayer::LiveStream; 2747f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaFullscreenButtonPart: 2757f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return mediaElement->supportsFullscreen(); 2767f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard case MediaToggleClosedCaptionsButtonPart: 2777f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return mediaElement->hasClosedCaptions(); 2787f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard default: 2797f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return true; 2807f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard } 2817f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 2827f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 283833c9ceaa300f52cf2d1b12a9b3482ad417a3c21Nicolas Roardbool RenderThemeAndroid::paintMediaFullscreenButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 284cc2679391d89b57997f78365d54d99c9ae062db3Nicolas Roard{ 285c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 286c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 287c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 288833c9ceaa300f52cf2d1b12a9b3482ad417a3c21Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::FULLSCREEN, translucent); 289cc2679391d89b57997f78365d54d99c9ae062db3Nicolas Roard return false; 290cc2679391d89b57997f78365d54d99c9ae062db3Nicolas Roard} 291cc2679391d89b57997f78365d54d99c9ae062db3Nicolas Roard 2929130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaMuteButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 2937f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 294c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 295c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 296c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 297c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::MUTE, translucent); 2987f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 2997f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3007f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3019130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaPlayButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3027f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 303c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 304c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 305c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 3067f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard if (MediaControlPlayButtonElement* btn = static_cast<MediaControlPlayButtonElement*>(o->node())) { 3077f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard if (btn->displayType() == MediaPlayButton) 308c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::PLAY, translucent); 3097f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard else 310c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::PAUSE, translucent); 3117f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3127f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard } 3137f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return true; 3147f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3157f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3169130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSeekBackButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3177f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 318c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 319c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 320c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 321c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::REWIND, translucent); 3227f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3237f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3247f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3259130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSeekForwardButton(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3267f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 327c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 328c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 329c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 330c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::FORWARD, translucent); 3317f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3327f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3337f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 334c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roardbool RenderThemeAndroid::paintMediaControlsBackground(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3357f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 336c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 337c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 338c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 339c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::BACKGROUND_SLIDER, translucent); 3407f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3417f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3427f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3439130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSliderTrack(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3447f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 345c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 346c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 347c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 3489d867bf3af621a847929fdc13e4c36ffcaa580f2Leon Scroggins RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, 3499d867bf3af621a847929fdc13e4c36ffcaa580f2Leon Scroggins RenderSkinMediaButton::SLIDER_TRACK, translucent, o); 3507f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3517f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3527f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3539130a2f8733ef12edb2608a84469ddc461bed1f6Steve Blockbool RenderThemeAndroid::paintMediaSliderThumb(RenderObject* o, const PaintInfo& paintInfo, const IntRect& rect) 3547f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 355c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard bool translucent = false; 356c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard if (o && toParentMediaElement(o) && toParentMediaElement(o)->hasTagName(HTMLNames::videoTag)) 357c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard translucent = true; 358c7eaa372f2a1bece832b0efe7ffed793c8c742c4Nicolas Roard RenderSkinMediaButton::Draw(getCanvasFromInfo(paintInfo), rect, RenderSkinMediaButton::SLIDER_THUMB, translucent); 3597f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard return false; 3607f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3617f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3627f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roardvoid RenderThemeAndroid::adjustSliderThumbSize(RenderObject* o) const 3637f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard{ 3647f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard static const int sliderThumbWidth = RenderSkinMediaButton::sliderThumbWidth(); 3657f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard static const int sliderThumbHeight = RenderSkinMediaButton::sliderThumbHeight(); 3667f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard if (o->style()->appearance() == MediaSliderThumbPart) { 3677f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard o->style()->setWidth(Length(sliderThumbWidth, Fixed)); 3687f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard o->style()->setHeight(Length(sliderThumbHeight, Fixed)); 3697f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard } 3707f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard} 3717f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 3727f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard#endif 3737f493d591dfd3492d5916ca301a4dbcd61554a06Nicolas Roard 374ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintRadio(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3760f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian RenderSkinRadio::Draw(getCanvasFromInfo(info), obj->node(), rect, false); 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::setCheckboxSize(RenderStyle* style) const 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setWidth(Length(19, Fixed)); 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setHeight(Length(19, Fixed)); 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeAndroid::setRadioSize(RenderStyle* style) const 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This is the same as checkboxes. 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setCheckboxSize(style); 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3920f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addIntrinsicMargins(style); 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 397ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintTextField(RenderObject*, const PaintInfo&, const IntRect&) 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4020f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustTextAreaStyle(CSSStyleSelector*, RenderStyle* style, WebCore::Element*) const 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addIntrinsicMargins(style); 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 407ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintTextArea(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 40982160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins if (obj->isMenuList()) 41082160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins paintCombo(obj, info, rect); 41182160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins return true; 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4140f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustSearchFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addIntrinsicMargins(style); 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 419ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintSearchField(RenderObject*, const PaintInfo&, const IntRect&) 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4212097884b9e1630c3855a8580f84a308163e085e7Leon Scroggins return true; 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 42482160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsstatic void adjustMenuListStyleCommon(RenderStyle* style) 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 426377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke // Added to make room for our arrow and make the touch target less cramped. 427377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke style->setPaddingLeft(Length(RenderSkinCombo::padding(), Fixed)); 428377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke style->setPaddingTop(Length(RenderSkinCombo::padding(), Fixed)); 429377929b9f78a89a370a95834beb8f32b2ed494b4Leon Clarke style->setPaddingBottom(Length(RenderSkinCombo::padding(), Fixed)); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingRight(Length(RenderSkinCombo::extraWidth(), Fixed)); 431a742a8f1f62517167248dfc0186ee0b845146f56Michael Kolb style->setMinHeight(Length(RenderSkinCombo::minHeight(), Fixed)); 432411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins} 433411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins 43482160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsvoid RenderThemeAndroid::adjustListboxStyle(CSSStyleSelector*, RenderStyle* style, Element*) const 43582160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins{ 43682160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins adjustMenuListButtonStyle(0, style, 0); 43782160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins} 43882160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins 4390f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qianvoid RenderThemeAndroid::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element* e) const 440411b0d686c41482e9934e2b311124109b0311d5fLeon Scroggins{ 44182160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins adjustMenuListStyleCommon(style); 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addIntrinsicMargins(style); 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 445ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintCombo(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 447605e3841dfeddd1eeaa36441c6bd4ec4667b89e8Steve Block if (obj->style() && !obj->style()->visitedDependentColor(CSSPropertyBackgroundColor).alpha()) 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 4493b2690e8ce3643c6dab24021df8946fde45fcfe8Andrei Popescu return RenderSkinCombo::Draw(getCanvasFromInfo(info), obj->node(), rect.x(), rect.y(), rect.width(), rect.height()); 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 452ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintMenuList(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4540f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian return paintCombo(obj, info, rect); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 45782160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scrogginsvoid RenderThemeAndroid::adjustMenuListButtonStyle(CSSStyleSelector*, 45882160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins RenderStyle* style, Element*) const 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Copied from RenderThemeSafari. 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const float baseFontSize = 11.0f; 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int baseBorderRadius = 5; 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float fontScale = style->fontSize() / baseFontSize; 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->resetPadding(); 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setBorderRadius(IntSize(int(baseBorderRadius + fontScale - 1), int(baseBorderRadius + fontScale - 1))); // FIXME: Round up? 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int minHeight = 15; 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setMinHeight(Length(minHeight, Fixed)); 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setLineHeight(RenderStyle::initialLineHeight()); 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Found these padding numbers by trial and error. 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const int padding = 4; 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingTop(Length(padding, Fixed)); 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project style->setPaddingLeft(Length(padding, Fixed)); 47682160d9cd33152498ed3f4e701e713c15e50d7e5Leon Scroggins adjustMenuListStyleCommon(style); 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 479ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeAndroid::paintMenuListButton(RenderObject* obj, const PaintInfo& info, const IntRect& rect) 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4810f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian return paintCombo(obj, info, rect); 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeAndroid::supportsFocusRing(const RenderStyle* style) const 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4860f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian return style->opacity() > 0 4870f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->hasAppearance() 4880f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != TextFieldPart 4890f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != SearchFieldPart 4900f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != TextAreaPart 4910f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != CheckboxPart 4920f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != RadioPart 4930f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != PushButtonPart 4940f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != SquareButtonPart 4950f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != ButtonPart 4960f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != ButtonBevelPart 4970f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != MenulistPart 4980f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian && style->appearance() != MenulistButtonPart; 4990f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian} 5000f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian 5010f03a62aac72e7a2e90983f8acc0ccd04de69289Feng Qian} // namespace WebCore 502