/* ui/button.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include #include "audio/audio.h" #include "auxiliary/functions.h" #include "core/application.h" #include "core/commandbuffer.h" #include "sys/sys.h" #include "ui/ui.h" #include "ui/paint.h" #include "ui/button.h" namespace ui { Button::Button(Widget *parent, const char *text, const char *command) : Label(parent, text) { set_label("button"); set_command(command); set_alignment(AlignCenter); set_background(true); } Button::~Button() { } void Button::print(const size_t indent) const { std::string marker(""); con_print << aux::pad_left(marker, indent*2) << label() << " \"" << text() << "\" \"" << command() << "\"" << std::endl; } void Button::set_command(const char *command) { if (command) button_command.assign(command); else button_command.clear(); } void Button::set_command(const std::string &command) { button_command.assign(command); } void Button::draw_background() { Paint::draw_material(global_location(), size(), "ui/button"); } void Button::draw_border() { if (disabled()) { Paint::set_color(palette()->disabled()); } else if (has_mouse_focus()) { math::Color color(palette()->foreground()); float t = core::application()->time(); t = t - floorf(t); if (t > 0.5) t = 1 - t; color.a = 0.5f + t; Paint::set_color(color); } else { Paint::set_color(palette()->border()); } Paint::draw_border(global_location(), size()); } void Button::draw() { if (!text().size()) return; if (disabled()) { Paint::set_color(palette()->disabled()); } else if (has_mouse_focus()) { Paint::set_color(palette()->highlight()); } else { Paint::set_color(palette()->foreground()); } Paint::draw_label(global_location(), size(), font(), text(), alignment()); // if (enabled() && has_mouse_focus()) { // root()->set_pointer("action", Palette::Highlight); // } } bool Button::on_mousepress(const unsigned int button) { if (button == SDL_BUTTON_LEFT) { if (enabled()) { if (button_command.size()) { core::cmd() << button_command << std::endl; } audio::play("ui/clicked"); emit(EventButtonClicked); } return true; } return false; } }