Files
fs2open.github.com/code/ui/checkbox.cpp
T
asarium 16be3b7cc5 Add support for TrueType fonts
This allows to use standard TrueType Fonts for text rendering in FSO. It uses the NanoVG library which provides the ability of drawing 2D shapes. This library is used for most 2D operations now and can also be used directly by using the PathRenderer class.
2016-08-02 10:57:28 +02:00

195 lines
3.6 KiB
C++

/*
* Copyright (C) Volition, Inc. 1999. All rights reserved.
*
* All source code herein is the property of Volition, Inc. You may not sell
* or otherwise commercially exploit the source or things you created based on the
* source.
*
*/
#include "globalincs/alphacolors.h"
#include "ui/ui.h"
#include "ui/uidefs.h"
void UI_CHECKBOX::create(UI_WINDOW *wnd, char *_text, int _x, int _y, int _state )
{
int _w, _h;
// gr_get_string_size( &_w, &_h, "X" );
_w = 18;
_h = 18;
if ( _text )
text = vm_strdup( _text );
else
text = NULL;
base_create( wnd, UI_KIND_CHECKBOX, _x, _y, _w, _h );
position = 0;
pressed_down = 0;
flag = _state;
}
void UI_CHECKBOX::destroy()
{
if (text)
vm_free(text);
UI_GADGET::destroy();
}
void UI_CHECKBOX::draw()
{
int offset;
if ( uses_bmaps ) {
if ( disabled_flag ) {
if ( flag ) {
if ( bmap_ids[CBOX_DISABLED_MARKED] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_DISABLED_MARKED]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
else {
if ( bmap_ids[CBOX_DISABLED_CLEAR] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_DISABLED_CLEAR]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
}
else { // not disabled
if ( position == 0 ) { // up
if ( flag ) { // marked
if ( bmap_ids[CBOX_UP_MARKED] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_UP_MARKED]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
else { // not marked
if ( bmap_ids[CBOX_UP_CLEAR] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_UP_CLEAR]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
}
else { // down
if ( flag ) { // marked
if ( bmap_ids[CBOX_DOWN_MARKED] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_DOWN_MARKED]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
else { // not marked
if ( bmap_ids[CBOX_DOWN_CLEAR] != -1 ) {
gr_set_bitmap(bmap_ids[CBOX_DOWN_CLEAR]);
gr_bitmap(x,y,GR_RESIZE_MENU);
}
}
}
}
} else {
font::set_font(my_wnd->f_id);
gr_set_clip( x, y, w, h, GR_RESIZE_MENU );
if (position == 0 ) {
ui_draw_box_out( 0, 0, w-1, h-1 );
offset = 0;
} else {
ui_draw_box_in( 0, 0, w-1, h-1 );
offset = 1;
}
if (disabled_flag)
gr_set_color_fast( &CGRAY );
else if (my_wnd->selected_gadget == this)
gr_set_color_fast( &CBRIGHT_GREEN );
else
gr_set_color_fast( &CGREEN );
if (flag)
ui_string_centered( Middle(w) + offset, Middle(h) + offset, "X" );
else
ui_string_centered( Middle(w) + offset, Middle(h) + offset, " " );
if (text) {
gr_reset_clip();
gr_string( x+w+4, y+2, text, GR_RESIZE_MENU );
}
}
}
void UI_CHECKBOX::process(int focus)
{
int OnMe, oldposition;
if (disabled_flag) {
position = 0;
return;
}
if (my_wnd->selected_gadget == this)
focus = 1;
OnMe = is_mouse_on();
oldposition = position;
if ( B1_PRESSED && OnMe ) {
position = 1;
} else {
position = 0;
}
if (my_wnd->keypress == hotkey ) {
position = 2;
my_wnd->last_keypress = 0;
}
if ( focus && ((my_wnd->keypress == KEY_SPACEBAR) || (my_wnd->keypress == KEY_ENTER)) )
position = 2;
if (focus)
if ( (oldposition == 2) && (keyd_pressed[KEY_SPACEBAR] || keyd_pressed[KEY_ENTER]) )
position = 2;
pressed_down = 0;
if (position == 0) {
if ( (oldposition == 1) && OnMe ){
pressed_down = 1;
}
if ( (oldposition == 2) && focus ){
pressed_down = 1;
}
}
if (pressed_down && user_function ) {
user_function();
}
if (pressed_down)
flag = !flag;
}
int UI_CHECKBOX::changed()
{
return pressed_down;
}
int UI_CHECKBOX::checked()
{
return flag;
}
void UI_CHECKBOX::set_state(int _state)
{
flag = _state;
}