diff options
| -rw-r--r-- | WebCore/platform/android/RenderThemeAndroid.cpp | 77 | ||||
| -rw-r--r-- | WebCore/platform/android/RenderThemeAndroid.h | 7 |
2 files changed, 81 insertions, 3 deletions
diff --git a/WebCore/platform/android/RenderThemeAndroid.cpp b/WebCore/platform/android/RenderThemeAndroid.cpp index ff20014..4dafae2 100644 --- a/WebCore/platform/android/RenderThemeAndroid.cpp +++ b/WebCore/platform/android/RenderThemeAndroid.cpp @@ -29,6 +29,10 @@ #include "Color.h" #include "Element.h" #include "GraphicsContext.h" +#include "HTMLNames.h" +#include "HTMLOptionElement.h" +#include "HTMLSelectElement.h" +#include "Node.h" #include "PlatformGraphicsContext.h" #include "RenderSkinAndroid.h" #include "RenderSkinButton.h" @@ -120,6 +124,26 @@ Color RenderThemeAndroid::platformTextSearchHighlightColor() const return Color(Color::transparent); } +Color RenderThemeAndroid::platformActiveListBoxSelectionBackgroundColor() const +{ + return Color(Color::transparent); +} + +Color RenderThemeAndroid::platformInactiveListBoxSelectionBackgroundColor() const +{ + return Color(Color::transparent); +} + +Color RenderThemeAndroid::platformActiveListBoxSelectionForegroundColor() const +{ + return Color(Color::transparent); +} + +Color RenderThemeAndroid::platformInactiveListBoxSelectionForegroundColor() const +{ + return Color(Color::transparent); +} + int RenderThemeAndroid::baselinePosition(const RenderObject* obj) const { // From the description of this function in RenderTheme.h: @@ -236,8 +260,55 @@ void RenderThemeAndroid::adjustTextAreaStyle(CSSStyleSelector*, RenderStyle* sty bool RenderThemeAndroid::paintTextArea(RenderObject* obj, const RenderObject::PaintInfo& info, const IntRect& rect) { - if (obj->isMenuList()) - return paintCombo(obj, info, rect); + if (obj->isListBox()) { + paintCombo(obj, info, rect); + RenderStyle* style = obj->style(); + if (style) + style->setColor(Color::transparent); + Node* node = obj->node(); + if (!node || !node->hasTagName(HTMLNames::selectTag)) { + return true; + } + HTMLSelectElement* select = static_cast<HTMLSelectElement*>(node); + // The first item may be visible. Make sure it does not draw. + // If it has a style, it overrides the RenderListBox's style, so we + // need to make sure both are set to transparent. + node = select->item(0); + if (node) { + RenderObject* renderer = node->renderer(); + if (renderer) { + RenderStyle* renderStyle = renderer->style(); + if (renderStyle) + renderStyle->setColor(Color::transparent); + } + } + // Find the first selected option, and draw its text. + // FIXME: In a later change, if there is more than one item selected, + // draw a string that says "X items" like iPhone Safari does + int index = select->selectedIndex(); + node = select->item(index); + if (!node || !node->hasTagName(HTMLNames::optionTag)) { + return true; + } + HTMLOptionElement* option = static_cast<HTMLOptionElement*>(node); + String label = option->textIndentedToRespectGroupLabel(); + SkRect r(rect); + + SkPaint paint; + paint.setAntiAlias(true); + paint.setTextEncoding(SkPaint::kUTF16_TextEncoding); + // Values for text size and positioning determined by trial and error + paint.setTextSize(r.height() - SkIntToScalar(6)); + + SkCanvas* canvas = getCanvasFromInfo(info); + int saveCount = canvas->save(); + r.fRight -= SkIntToScalar(RenderSkinCombo::extraWidth()); + canvas->clipRect(r); + canvas->drawText(label.characters(), label.length() << 1, + r.fLeft + SkIntToScalar(5), r.fBottom - SkIntToScalar(5), + paint); + canvas->restoreToCount(saveCount); + } return true; } @@ -255,6 +326,8 @@ void RenderThemeAndroid::adjustListboxStyle(CSSStyleSelector*, RenderStyle* styl { style->setPaddingRight(Length(RenderSkinCombo::extraWidth(), Fixed)); style->setMaxHeight(Length(style->fontSize() + LISTBOX_PADDING, Fixed)); + // Make webkit draw invisible, since it will simply draw the first element + style->setColor(Color::transparent); addIntrinsicMargins(style); } diff --git a/WebCore/platform/android/RenderThemeAndroid.h b/WebCore/platform/android/RenderThemeAndroid.h index 2e54302..ae1213c 100644 --- a/WebCore/platform/android/RenderThemeAndroid.h +++ b/WebCore/platform/android/RenderThemeAndroid.h @@ -63,7 +63,12 @@ public: virtual Color platformActiveSelectionForegroundColor() const; virtual Color platformInactiveSelectionForegroundColor() const; virtual Color platformTextSearchHighlightColor() const; - + + virtual Color platformActiveListBoxSelectionBackgroundColor() const; + virtual Color platformInactiveListBoxSelectionBackgroundColor() const; + virtual Color platformActiveListBoxSelectionForegroundColor() const; + virtual Color platformInactiveListBoxSelectionForegroundColor() const; + virtual void systemFont(int, WebCore::FontDescription&) const {} virtual int minimumMenuListSize(RenderStyle*) const { return 0; } |
