1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
#pragma once
#include "ui_base_item.h"
namespace ui
{
class c_checkbox : public base_item {
public:
c_checkbox( int x, int y, const char* txt, bool* setting ) :
base_item( x, y, 16, 16, txt ), m_setting( setting ) { }
virtual bool is_hovered( ) override {
if ( m_disabled ) return false;
int mouse_x, mouse_y;
ui_get_cursor_pos( mouse_x, mouse_y );
int rel_x = get_relative_x( );
int rel_y = get_relative_y( );
return mouse_x >= rel_x && mouse_x <= rel_x + m_width
&& mouse_y >= rel_y && mouse_y <= rel_y + m_height;
}
inline void render_checkbox( const int& x, const int& y ) {
clr_t col = ui_get_bg_col( );
if ( is_hovered( ) ) {
col = *m_setting ? ui_get_accent_col( ) * 0.8f : ui_get_bg_col( ) * 1.3f;
}
else if ( *m_setting ) {
col = ui_get_accent_col( );
}
ui_draw_rect( x, y, m_width, m_height, ui_get_disabled_col( ) );
ui_draw_rect( x + 1, y + 1, m_width - 2, m_height - 2, col );
//ui_draw_outlined_rect( x, y, m_width, m_height, ui_get_accent_col( ) );
}
inline void input( ) {
bool mouse_presesed = g_input.is_key_pressed( KEYS_MOUSE1 );
if ( is_hovered( ) && mouse_presesed ) {
if ( !m_mouse_held ) {
*m_setting = !*m_setting;
}
m_mouse_held = true;
}
else {
m_mouse_held = false;
}
}
virtual void render( ) override {
int x = get_relative_x( );
int y = get_relative_y( );
render_checkbox( x, y );
input( );
ui_draw_string( x + m_width + 6, y + 2, false, ui_get_text_col( ), m_text );
}
protected:
bool* m_setting;
bool m_mouse_held{ };
};
}
|