summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--WebCore/platform/android/RenderThemeAndroid.cpp77
-rw-r--r--WebCore/platform/android/RenderThemeAndroid.h7
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; }