1 /**
2  * File name: RkButtonImpl.h
3  * Project: Redkite (A small GUI toolkit)
4  *
5  * Copyright (C) 2020 Iurie Nistor <http://geontime.com>
6  *
7  * This file is part of Redkite.
8  *
9  * Redkite is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 3 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  */
23 
24 #ifndef RK_LABEL_IMPL_H
25 #define RK_LABEL_IMPL_H
26 
27 #include "RkWidgetImpl.h"
28 #include "RkButton.h"
29 #include "RkImageImpl.h"
30 #include "RkPainter.h"
31 
32 class RkButton::RkButtonImpl : public RkWidget::RkWidgetImpl {
33  public:
34         RkButtonImpl(RkButton *interface, RkWidget *parent = nullptr);
35         virtual ~RkButtonImpl() = default;
36         void setText(const RkString &text);
37         RkString text() const;
38         void setImage(const RkImage &img, RkButton::State type);
39         bool isPressed() const;
40         void setPressed(bool pressed);
41         ButtonType type() const;
42         void setType(ButtonType type);
43 	void drawButton(RkPainter &painter);
44         void setEmphasize(bool b);
45 
46  protected:
47         void applyEffect(RkImage &img);
48         void updateButtonState();
49 
50  private:
51         RK_DECALRE_INTERFACE_PTR(RkButton);
52         ButtonType buttonType;
53         bool is_pressed;
54         std::array<RkImage, 4> buttonImages;
55         RkButton::State buttonState;
56         bool isEmphasizeEnabled;
57         RkString buttonText;
58 };
59 
60 #endif // RK_LABEL_H
61