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 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 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 PaintInfo&, const IntRect&) 173 { 174 notImplemented(); 175 return false; 176 } 177 178 } // namespace WebCore 179