mirror of https://github.com/aseprite/aseprite.git
76 lines
1.6 KiB
C++
76 lines
1.6 KiB
C++
// Aseprite
|
|
// Copyright (C) 2001-2017 David Capello
|
|
//
|
|
// This program is distributed under the terms of
|
|
// the End-User License Agreement for Aseprite.
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include "app/ui/icon_button.h"
|
|
|
|
#include "app/ui/skin/skin_theme.h"
|
|
#include "os/surface.h"
|
|
#include "ui/message.h"
|
|
#include "ui/paint_event.h"
|
|
#include "ui/size_hint_event.h"
|
|
#include "ui/system.h"
|
|
|
|
namespace app {
|
|
|
|
using namespace ui;
|
|
using namespace app::skin;
|
|
|
|
IconButton::IconButton(const SkinPartPtr& part)
|
|
: Button("")
|
|
, m_part(part)
|
|
{
|
|
initTheme();
|
|
}
|
|
|
|
void IconButton::onInitTheme(InitThemeEvent& ev)
|
|
{
|
|
Button::onInitTheme(ev);
|
|
setBgColor(SkinTheme::instance()->colors.menuitemNormalFace());
|
|
}
|
|
|
|
void IconButton::onSizeHint(SizeHintEvent& ev)
|
|
{
|
|
os::Surface* icon = m_part->bitmap(0);
|
|
ev.setSizeHint(
|
|
gfx::Size(icon->width(),
|
|
icon->height()) + 4*guiscale());
|
|
}
|
|
|
|
void IconButton::onPaint(PaintEvent& ev)
|
|
{
|
|
SkinTheme* theme = SkinTheme::instance();
|
|
Graphics* g = ev.graphics();
|
|
gfx::Color fg, bg;
|
|
|
|
if (isSelected()) {
|
|
fg = theme->colors.menuitemHighlightText();
|
|
bg = theme->colors.menuitemHighlightFace();
|
|
}
|
|
else if (isEnabled() && hasMouseOver()) {
|
|
fg = theme->colors.menuitemHotText();
|
|
bg = theme->colors.menuitemHotFace();
|
|
}
|
|
else {
|
|
fg = theme->colors.menuitemNormalText();
|
|
bg = bgColor();
|
|
}
|
|
|
|
g->fillRect(bg, g->getClipBounds());
|
|
|
|
gfx::Rect bounds = clientBounds();
|
|
os::Surface* icon = m_part->bitmap(0);
|
|
g->drawColoredRgbaSurface(
|
|
icon, fg,
|
|
bounds.x+bounds.w/2-icon->width()/2,
|
|
bounds.y+bounds.h/2-icon->height()/2);
|
|
}
|
|
|
|
} // namespace app
|