18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com>
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 * 1. 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 * 2. 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 APPLE COMPUTER, INC. ``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
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. 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 "RenderTheme.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h"
32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "HostWindow.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h"
342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "PaintInfo.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderView.h"
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wx/defs.h>
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include <wx/dc.h>
40635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wx/dcgraph.h>
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/renderer.h>
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/dcclient.h>
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/scrolwin.h>
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/settings.h>
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderThemeWx : public RenderTheme {
490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochprivate:
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    RenderThemeWx() : RenderTheme() { }
510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    virtual ~RenderThemeWx();
520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochpublic:
540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static PassRefPtr<RenderTheme> create();
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // A method asking if the theme's controls actually care about redrawing when hovered.
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool supportsHover(const RenderStyle*) const { return true; }
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
59ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintCheckbox(RenderObject* o, const PaintInfo& i, const IntRect& r)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return paintButton(o, i, r);
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setCheckboxSize(RenderStyle*) const;
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
66ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintRadio(RenderObject* o, const PaintInfo& i, const IntRect& r)
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return paintButton(o, i, r);
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void setRadioSize(RenderStyle*) const;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustRepaintRect(const RenderObject*, IntRect&);
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
76ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&);
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustTextFieldStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
79ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&);
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int minimumMenuListSize(RenderStyle*) const;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustMenuListStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
84ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMenuList(RenderObject*, const PaintInfo&, const IntRect&);
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const;
87ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block    virtual bool paintMenuListButton(RenderObject*, const PaintInfo&, const IntRect&);
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool isControlStyled(const RenderStyle*, const BorderData&,
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                 const FillLayer&, const Color&) const;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual bool controlSupportsTints(const RenderObject*) const;
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual void systemFont(int propId, FontDescription&) const;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual Color platformActiveSelectionBackgroundColor() const;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual Color platformInactiveSelectionBackgroundColor() const;
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual Color platformActiveSelectionForegroundColor() const;
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual Color platformInactiveSelectionForegroundColor() const;
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingLeft(RenderStyle*) const;
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingRight(RenderStyle*) const;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingTop(RenderStyle*) const;
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    virtual int popupInternalPaddingBottom(RenderStyle*) const;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void addIntrinsicMargins(RenderStyle*) const;
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void close();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    bool supportsFocus(ControlPart) const;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Constants
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MINIMUM_MENU_LIST_SIZE 21
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define POPUP_INTERNAL_PADDING_LEFT 6
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define POPUP_INTERNAL_PADDING_TOP 2
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define POPUP_INTERNAL_PADDING_BOTTOM 2
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef __WXMAC__
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define POPUP_INTERNAL_PADDING_RIGHT 22
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define POPUP_INTERNAL_PADDING_RIGHT 20
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochRenderThemeWx::~RenderThemeWx()
1290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderThemeWx::create()
1330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{
1340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return adoptRef(new RenderThemeWx());
1350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch}
1360bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1370bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochPassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page)
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    static RenderTheme* rt = RenderThemeWx::create().releaseRef();
1400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return rt;
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockwxWindow* nativeWindowForRenderObject(RenderObject* o)
144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    FrameView* frameView = o->view()->frameView();
146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ASSERT(frameView);
147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    ASSERT(frameView->hostWindow());
148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return frameView->hostWindow()->platformPageClient();
149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeWx::isControlStyled(const RenderStyle* style, const BorderData& border,
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                     const FillLayer& background, const Color& backgroundColor) const
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->appearance() == TextFieldPart || style->appearance() == TextAreaPart)
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return style->border() != border;
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
158635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Normally CSS can be used to set properties of form controls (such as adding a background bitmap).
159635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // However, for this to work RenderThemeWx needs to adjust uncustomized elements (e.g. buttons) to reflect the
160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // changes made by CSS. Since we don't do that right now, the native parts of form elements appear in odd places.
161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // Until we have time to implement that support, we return false here, so that we ignore customizations
162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    // and always use the native theme drawing to draw form controls.
163635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return false;
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::adjustRepaintRect(const RenderObject* o, IntRect& r)
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (o->style()->appearance()) {
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case MenulistPart: {
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            r.setWidth(r.width() + 100);
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default:
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeWx::controlSupportsTints(const RenderObject* o) const
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!isEnabled(o))
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Checkboxes only have tint when checked.
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (o->style()->appearance() == CheckboxPart)
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return isChecked(o);
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // For now assume other controls have tint if enabled.
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return true;
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::systemFont(int propId, FontDescription& fontDescription) const
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // no-op
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::addIntrinsicMargins(RenderStyle* style) const
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Cut out the intrinsic margins completely if we end up using a small font size
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->fontSize() < 11)
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Intrinsic margin value.
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    const int m = 2;
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // FIXME: Using width/height alone and not also dealing with min-width/max-width is flawed.
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->width().isIntrinsicOrAuto()) {
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginLeft().quirk())
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginLeft(Length(m, Fixed));
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginRight().quirk())
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginRight(Length(m, Fixed));
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->height().isAuto()) {
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginTop().quirk())
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginTop(Length(m, Fixed));
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (style->marginBottom().quirk())
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            style->setMarginBottom(Length(m, Fixed));
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::setCheckboxSize(RenderStyle* style) const
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // If the width and height are both specified, then we have nothing to do.
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return;
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // FIXME:  A hard-coded size of 13 is used.  This is wrong but necessary for now.  It matches Firefox.
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // At different DPI settings on Windows, querying the theme gives you a larger size that accounts for
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // the higher DPI.  Until our entire engine honors a DPI setting other than 96, we can't rely on the theme's
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // metrics.
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->width().isIntrinsicOrAuto())
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        style->setWidth(Length(13, Fixed));
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (style->height().isAuto())
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        style->setHeight(Length(13, Fixed));
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::setRadioSize(RenderStyle* style) const
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // This is the same as checkboxes.
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    setCheckboxSize(style);
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool RenderThemeWx::supportsFocus(ControlPart part) const
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    switch (part) {
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case PushButtonPart:
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case ButtonPart:
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        case TextFieldPart:
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return true;
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        default: // No for all others...
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return false;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::adjustButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    addIntrinsicMargins(style);
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
263ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWx::paintButton(RenderObject* o, const PaintInfo& i, const IntRect& r)
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
265231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxWindow* window = nativeWindowForRenderObject(o);
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxDC* dc = static_cast<wxDC*>(i.context->platformContext());
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int flags = 0;
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
269231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    IntRect rect = r;
270231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
271d0825bca7fe65beaee391d30da42e937db621564Steve Block// On Mac, wxGraphicsContext and wxDC share the same native implementation,
272d0825bca7fe65beaee391d30da42e937db621564Steve Block// and so transformations are available.
273d0825bca7fe65beaee391d30da42e937db621564Steve Block// On Win and Linux, however, this is not true and transforms are lost,
274d0825bca7fe65beaee391d30da42e937db621564Steve Block// so we need to restore them here.
275d0825bca7fe65beaee391d30da42e937db621564Steve Block#if USE(WXGC) && !defined(__WXMAC__)
276231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    double xtrans = 0;
277231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    double ytrans = 0;
278231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
279231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxGCDC* gcdc = static_cast<wxGCDC*>(dc);
280231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxGraphicsContext* gc = gcdc->GetGraphicsContext();
281231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    gc->GetTransform().TransformPoint(&xtrans, &ytrans);
282231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    rect.setX(r.x() + (int)xtrans);
283231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    rect.setY(r.y() + (int)ytrans);
284231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
285231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!isEnabled(o))
2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_DISABLED;
2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ControlPart part = o->style()->appearance();
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (supportsFocus(part) && isFocused(o))
2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_FOCUSED;
2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (isPressed(o))
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_PRESSED;
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (part == PushButtonPart || part == ButtonPart)
297231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxRendererNative::Get().DrawPushButton(window, *dc, rect, flags);
2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else if(part == RadioPart) {
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (isChecked(o))
300635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project            flags |= wxCONTROL_CHECKED;
301231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if wxCHECK_VERSION(2,9,1)
302d0825bca7fe65beaee391d30da42e937db621564Steve Block        wxRendererNative::Get().DrawRadioBitmap(window, *dc, rect, flags);
303231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#elif wxCHECK_VERSION(2,9,0)
304231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxRendererNative::Get().DrawRadioButton(window, *dc, rect, flags);
305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else
306231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxRenderer_DrawRadioButton(window, *dc, rect, flags);
307635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    else if(part == CheckboxPart) {
3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (isChecked(o))
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            flags |= wxCONTROL_CHECKED;
312231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        wxRendererNative::Get().DrawCheckBox(window, *dc, rect, flags);
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::adjustTextFieldStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
322ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWx::paintTextField(RenderObject* o, const PaintInfo& i, const IntRect& r)
3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
324231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxWindow* window = nativeWindowForRenderObject(o);
3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxDC* dc = static_cast<wxDC*>(i.context->platformContext());
326635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if wxCHECK_VERSION(2,9,0)
327635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    wxRendererNative::Get().DrawTextCtrl(window, *dc, r, 0);
328635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxRenderer_DrawTextCtrl(window, *dc, r, 0);
330635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
331635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeWx::minimumMenuListSize(RenderStyle*) const
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return MINIMUM_MENU_LIST_SIZE;
3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
344ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWx::paintMenuList(RenderObject* o, const PaintInfo& i, const IntRect& r)
3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
346231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxWindow* window = nativeWindowForRenderObject(o);
3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxDC* dc = static_cast<wxDC*>(i.context->platformContext());
3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int flags = 0;
3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!isEnabled(o))
3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_DISABLED;
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (supportsFocus(o->style()->appearance()) && isFocused(o))
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_FOCUSED;
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (isPressed(o))
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_PRESSED;
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
359635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if wxCHECK_VERSION(2,9,0)
360635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    wxRendererNative::Get().DrawChoice(window, *dc, r, flags);
361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else
3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxRenderer_DrawChoice(window, *dc, r, flags);
363635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid RenderThemeWx::adjustMenuListButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    notImplemented();
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
373ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockbool RenderThemeWx::paintMenuListButton(RenderObject* o, const PaintInfo& i, const IntRect& r)
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
375231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    wxWindow* window = nativeWindowForRenderObject(o);
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxDC* dc = static_cast<wxDC*>(i.context->platformContext());
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int flags = 0;
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!isEnabled(o))
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_DISABLED;
3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (supportsFocus(o->style()->appearance()) && isFocused(o))
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_FOCUSED;
3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (isPressed(o))
3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        flags |= wxCONTROL_PRESSED;
3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    wxRendererNative::Get().DrawComboBoxDropButton(window, *dc, r, flags);
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWx::platformActiveSelectionBackgroundColor() const
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWx::platformInactiveSelectionBackgroundColor() const
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWx::platformActiveSelectionForegroundColor() const
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // FIXME: Get wx to return the correct value for each platform.
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if __WXMAC__
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color();
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color(255, 255, 255);
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectColor RenderThemeWx::platformInactiveSelectionForegroundColor() const
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if __WXMAC__
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color();
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return Color(255, 255, 255);
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeWx::popupInternalPaddingLeft(RenderStyle*) const
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return POPUP_INTERNAL_PADDING_LEFT;
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeWx::popupInternalPaddingRight(RenderStyle*) const
4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return POPUP_INTERNAL_PADDING_RIGHT;
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeWx::popupInternalPaddingTop(RenderStyle*) const
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return POPUP_INTERNAL_PADDING_TOP;
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint RenderThemeWx::popupInternalPaddingBottom(RenderStyle*) const
4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return POPUP_INTERNAL_PADDING_BOTTOM;
4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
445