Home | History | Annotate | Download | only in haiku
      1 /*
      2  * This file is part of the WebKit project.
      3  *
      4  * Copyright (C) 2006 Dirk Mueller <mueller (at) kde.org>
      5  *               2006 Nikolas Zimmermann <zimmermann (at) kde.org>
      6  * Copyright (C) 2007 Ryan Leavengood <leavengood (at) gmail.com>
      7  * Copyright (C) 2009 Maxime Simon <simon.maxime (at) gmail.com>
      8  *
      9  * All rights reserved.
     10  *
     11  * This library is free software; you can redistribute it and/or
     12  * modify it under the terms of the GNU Library General Public
     13  * License as published by the Free Software Foundation; either
     14  * version 2 of the License, or (at your option) any later version.
     15  *
     16  * This library is distributed in the hope that it will be useful,
     17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     19  * Library General Public License for more details.
     20  *
     21  * You should have received a copy of the GNU Library General Public License
     22  * along with this library; see the file COPYING.LIB.  If not, write to
     23  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
     24  * Boston, MA 02111-1307, USA.
     25  *
     26  */
     27 
     28 #include "config.h"
     29 #include "RenderThemeHaiku.h"
     30 
     31 #include "GraphicsContext.h"
     32 #include "NotImplemented.h"
     33 #include <ControlLook.h>
     34 #include <View.h>
     35 
     36 
     37 namespace WebCore {
     38 
     39 PassRefPtr<RenderTheme> RenderThemeHaiku::create()
     40 {
     41     return adoptRef(new RenderThemeHaiku());
     42 }
     43 
     44 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page*)
     45 {
     46     static RenderTheme* renderTheme = RenderThemeHaiku::create().releaseRef();
     47     return renderTheme;
     48 }
     49 
     50 RenderThemeHaiku::RenderThemeHaiku()
     51 {
     52 }
     53 
     54 RenderThemeHaiku::~RenderThemeHaiku()
     55 {
     56 }
     57 
     58 static bool supportsFocus(ControlPart appearance)
     59 {
     60     switch (appearance) {
     61     case PushButtonPart:
     62     case ButtonPart:
     63     case TextFieldPart:
     64     case TextAreaPart:
     65     case SearchFieldPart:
     66     case MenulistPart:
     67     case RadioPart:
     68     case CheckboxPart:
     69         return true;
     70     default:
     71         return false;
     72     }
     73 }
     74 
     75 bool RenderThemeHaiku::supportsFocusRing(const RenderStyle* style) const
     76 {
     77     return supportsFocus(style->appearance());
     78 }
     79 
     80 Color RenderThemeHaiku::platformActiveSelectionBackgroundColor() const
     81 {
     82     return Color(ui_color(B_CONTROL_HIGHLIGHT_COLOR));
     83 }
     84 
     85 Color RenderThemeHaiku::platformInactiveSelectionBackgroundColor() const
     86 {
     87     return Color(ui_color(B_CONTROL_HIGHLIGHT_COLOR));
     88 }
     89 
     90 Color RenderThemeHaiku::platformActiveSelectionForegroundColor() const
     91 {
     92     return Color(ui_color(B_CONTROL_TEXT_COLOR));
     93 }
     94 
     95 Color RenderThemeHaiku::platformInactiveSelectionForegroundColor() const
     96 {
     97     return Color(ui_color(B_CONTROL_TEXT_COLOR));
     98 }
     99 
    100 Color RenderThemeHaiku::platformTextSearchHighlightColor() const
    101 {
    102     return Color(ui_color(B_MENU_SELECTED_BACKGROUND_COLOR));
    103 }
    104 
    105 void RenderThemeHaiku::systemFont(int propId, FontDescription&) const
    106 {
    107     notImplemented();
    108 }
    109 
    110 bool RenderThemeHaiku::paintCheckbox(RenderObject*, const RenderObject::PaintInfo& info, const IntRect& intRect)
    111 {
    112     if (info.context->paintingDisabled())
    113         return false;
    114 
    115     rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
    116     BRect rect = intRect;
    117     BView* view = info.context->platformContext();
    118 
    119     if (!be_control_look)
    120         return false;
    121 
    122     be_control_look->DrawCheckBox(view, rect, rect, base);
    123     return true;
    124 }
    125 
    126 void RenderThemeHaiku::setCheckboxSize(RenderStyle* style) const
    127 {
    128     int size = 10;
    129 
    130     // If the width and height are both specified, then we have nothing to do.
    131     if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
    132         return;
    133 
    134     // FIXME: A hard-coded size of 'size' is used. This is wrong but necessary for now.
    135     if (style->width().isIntrinsicOrAuto())
    136         style->setWidth(Length(size, Fixed));
    137 
    138     if (style->height().isAuto())
    139         style->setHeight(Length(size, Fixed));
    140 }
    141 
    142 bool RenderThemeHaiku::paintRadio(RenderObject*, const RenderObject::PaintInfo& info, const IntRect& intRect)
    143 {
    144     if (info.context->paintingDisabled())
    145         return false;
    146 
    147     rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
    148     BRect rect = intRect;
    149     BView* view = info.context->platformContext();
    150 
    151     if (!be_control_look)
    152         return false;
    153 
    154     be_control_look->DrawRadioButton(view, rect, rect, base);
    155     return true;
    156 }
    157 
    158 void RenderThemeHaiku::setRadioSize(RenderStyle* style) const
    159 {
    160     // This is the same as checkboxes.
    161     setCheckboxSize(style);
    162 }
    163 
    164 void RenderThemeHaiku::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
    165 {
    166     // Leave some space for the arrow.
    167     style->setPaddingRight(Length(22, Fixed));
    168     const int minHeight = 20;
    169     style->setMinHeight(Length(minHeight, Fixed));
    170 }
    171 
    172 bool RenderThemeHaiku::paintMenuList(RenderObject*, const RenderObject::PaintInfo&, const IntRect&)
    173 {
    174     notImplemented();
    175     return false;
    176 }
    177 
    178 } // namespace WebCore
    179