/*
* This file is part of the WebKit project.
*
* Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
* 2006 Nikolas Zimmermann <zimmermann@kde.org>
* Copyright (C) 2007 Ryan Leavengood <leavengood@gmail.com>
* Copyright (C) 2009 Maxime Simon <simon.maxime@gmail.com>
*
* All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public License
* along with this library; see the file COPYING.LIB. If not, write to
* the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
#include "config.h"
#include "RenderThemeHaiku.h"
#include "GraphicsContext.h"
#include "NotImplemented.h"
#include <ControlLook.h>
#include <View.h>
namespace WebCore {
PassRefPtr<RenderTheme> RenderThemeHaiku::create()
{
return adoptRef(new RenderThemeHaiku());
}
PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page*)
{
static RenderTheme* renderTheme = RenderThemeHaiku::create().releaseRef();
return renderTheme;
}
RenderThemeHaiku::RenderThemeHaiku()
{
}
RenderThemeHaiku::~RenderThemeHaiku()
{
}
static bool supportsFocus(ControlPart appearance)
{
switch (appearance) {
case PushButtonPart:
case ButtonPart:
case TextFieldPart:
case TextAreaPart:
case SearchFieldPart:
case MenulistPart:
case RadioPart:
case CheckboxPart:
return true;
default:
return false;
}
}
bool RenderThemeHaiku::supportsFocusRing(const RenderStyle* style) const
{
return supportsFocus(style->appearance());
}
Color RenderThemeHaiku::platformActiveSelectionBackgroundColor() const
{
return Color(ui_color(B_CONTROL_HIGHLIGHT_COLOR));
}
Color RenderThemeHaiku::platformInactiveSelectionBackgroundColor() const
{
return Color(ui_color(B_CONTROL_HIGHLIGHT_COLOR));
}
Color RenderThemeHaiku::platformActiveSelectionForegroundColor() const
{
return Color(ui_color(B_CONTROL_TEXT_COLOR));
}
Color RenderThemeHaiku::platformInactiveSelectionForegroundColor() const
{
return Color(ui_color(B_CONTROL_TEXT_COLOR));
}
Color RenderThemeHaiku::platformTextSearchHighlightColor() const
{
return Color(ui_color(B_MENU_SELECTED_BACKGROUND_COLOR));
}
void RenderThemeHaiku::systemFont(int propId, FontDescription&) const
{
notImplemented();
}
bool RenderThemeHaiku::paintCheckbox(RenderObject*, const RenderObject::PaintInfo& info, const IntRect& intRect)
{
if (info.context->paintingDisabled())
return false;
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
BRect rect = intRect;
BView* view = info.context->platformContext();
if (!be_control_look)
return false;
be_control_look->DrawCheckBox(view, rect, rect, base);
return true;
}
void RenderThemeHaiku::setCheckboxSize(RenderStyle* style) const
{
int size = 10;
// If the width and height are both specified, then we have nothing to do.
if (!style->width().isIntrinsicOrAuto() && !style->height().isAuto())
return;
// FIXME: A hard-coded size of 'size' is used. This is wrong but necessary for now.
if (style->width().isIntrinsicOrAuto())
style->setWidth(Length(size, Fixed));
if (style->height().isAuto())
style->setHeight(Length(size, Fixed));
}
bool RenderThemeHaiku::paintRadio(RenderObject*, const RenderObject::PaintInfo& info, const IntRect& intRect)
{
if (info.context->paintingDisabled())
return false;
rgb_color base = ui_color(B_PANEL_BACKGROUND_COLOR);
BRect rect = intRect;
BView* view = info.context->platformContext();
if (!be_control_look)
return false;
be_control_look->DrawRadioButton(view, rect, rect, base);
return true;
}
void RenderThemeHaiku::setRadioSize(RenderStyle* style) const
{
// This is the same as checkboxes.
setCheckboxSize(style);
}
void RenderThemeHaiku::adjustMenuListStyle(CSSStyleSelector*, RenderStyle* style, Element*) const
{
// Leave some space for the arrow.
style->setPaddingRight(Length(22, Fixed));
const int minHeight = 20;
style->setMinHeight(Length(minHeight, Fixed));
}
bool RenderThemeHaiku::paintMenuList(RenderObject*, const RenderObject::PaintInfo&, const IntRect&)
{
notImplemented();
return false;
}
} // namespace WebCore