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