/* * Copyright (C) 2018-2019 Rob van den Berg * Copyright (C) 2020-2021 Filipe Coelho * * This file is part of CharacterCompressor * * Nnjas2 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * CharacterCompressor 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with CharacterCompressor. If not, see . */ #include "NanoButton.hpp" #include "Window.hpp" START_NAMESPACE_DGL Button::Button(Widget* const parent, ButtonEventHandler::Callback* const cb) : NanoWidget(parent), ButtonEventHandler(this), backgroundColor(32, 32, 32), labelColor(255, 255, 255), label("button"), fontScale(1.0f) { #ifdef DGL_NO_SHARED_RESOURCES createFontFromFile("sans", "/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf"); #else loadSharedResources(); #endif ButtonEventHandler::setCallback(cb); } void Button::setBackgroundColor(const Color color) { backgroundColor = color; } void Button::setFontScale(const float scale) { fontScale = scale; } void Button::setLabel(const std::string& label2) { label = label2; } void Button::setLabelColor(const Color color) { labelColor = color; } void Button::onNanoDisplay() { const uint w = getWidth(); const uint h = getHeight(); const float margin = 1.0f; // Background beginPath(); fillColor(backgroundColor); strokeColor(labelColor); rect(margin, margin, w - 2 * margin, h - 2 * margin); fill(); stroke(); closePath(); // Label beginPath(); fontSize(14 * fontScale); fillColor(labelColor); Rectangle bounds; textBounds(0, 0, label.c_str(), NULL, bounds); float tx = w / 2.0f ; float ty = h / 2.0f; textAlign(ALIGN_CENTER | ALIGN_MIDDLE); fillColor(255, 255, 255, 255); text(tx, ty, label.c_str(), NULL); closePath(); } bool Button::onMouse(const MouseEvent& ev) { return ButtonEventHandler::mouseEvent(ev); } bool Button::onMotion(const MotionEvent& ev) { return ButtonEventHandler::motionEvent(ev); } END_NAMESPACE_DGL