📄 badctrls.c
字号:
void bad_button_set_state(p_object o, l_dword st, l_bool set)
{
view_set_state(o, st, set);
if ( st & OB_SF_FOCUSED ) {
VIEW(o)->draw_view(VIEW(o));
};
};
void bad_button_translate_event(p_object o, t_event *event)
{
RETVIEW(o, event);
view_translate_event(o, event);
/* check if we're clicked by the mouse */
if (event->type & EV_MOUSE && OBJECT(mouse)->state & MO_SF_MOUSELDOWN)
{
l_bool in_view = false;
if (VIEW(o)->is_mouse_in_view(VIEW(o))) {
BAD_BUTTON(o)->draw_state(BAD_BUTTON(o), in_view);
};
while (OBJECT(mouse)->state & MO_SF_MOUSELPRESS)
{
l_bool safe_in_view = in_view;
in_view = VIEW(o)->is_mouse_in_view(VIEW(o));
if (in_view != safe_in_view) {
BAD_BUTTON(o)->draw_state(BAD_BUTTON(o), in_view);
};
o->get_event(o, event);
};
if (in_view) {
if (BAD_BUTTON(o)->state < 2) {
if (BAD_BUTTON(o)->switch_button == true)
BAD_BUTTON(o)->state = 1-BAD_BUTTON(o)->state;
else
BAD_BUTTON(o)->state = 0;
BAD_BUTTON(o)->draw_state(BAD_BUTTON(o), false);
set_event(event, EV_MESSAGE, BAD_BUTTON(o)->message, o);
o->put_event(o, event);
clear_event(event);
} else {
BAD_BUTTON(o)->state = 0;
BAD_BUTTON(o)->draw_state(BAD_BUTTON(o), false);
};
};
};
};
void bad_button_draw_state(p_bad_button o, l_int astate)
{
t_rect r = VIEW(o)->get_local_extent(VIEW(o));
t_point p;
BITMAP *out = VIEW(o)->begin_paint(VIEW(o), &p, r);
if ( out ) {
rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 0));
switch (o->style) {
case BBS_SEAL: {
if (astate)
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, COLOR(0), COLOR(15));
else
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, COLOR(15), COLOR(0));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
} break;
case BBS_BADSEAL: {
if (astate) {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 1));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
} else {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 3));
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
};
} break;
case BBS_KDE: {
if (astate) {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 1));
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 1));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x+1, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
} else {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
};
} break;
case BBS_WIN95: {
if (astate) {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, COLOR(0), COLOR(0));
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x+1, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
} else {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 1), COLOR(0));
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 0), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
};
} break;
case BBS_WIN31: {
line(out, r.a.x+p.x, r.a.y+p.y+1, r.a.x+p.x, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 4));
line(out, r.b.x+p.x, r.a.y+p.y+1, r.b.x+p.x, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 4));
line(out, r.a.x+p.x+1, r.a.y+p.y, r.b.x+p.x-1, r.a.y+p.y, VIEW(o)->get_color(VIEW(o), 4));
line(out, r.a.x+p.x+1, r.b.y+p.y, r.b.x+p.x-1, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 4));
if (astate) {
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 0));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x+1, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+2, r.a.y+p.y+1, r.b.x+p.x+2, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
} else {
draw_bevel(out, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x-1, r.b.y+p.y-1, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
draw_bevel(out, r.a.x+p.x+2, r.a.y+p.y+2, r.b.x+p.x-2, r.b.y+p.y-2, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y, r.b.x+p.x+1, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 5), TX_NOCOLOR, 0);
};
} break;
case BBS_MODERN: {
if (astate) {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+2, r.a.y+p.y+2, r.b.x+p.x+2, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 1), TX_NOCOLOR, 0);
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x+1, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 2), TX_NOCOLOR, 0);
} else {
draw_bevel(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 2));
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x+1, r.a.y+p.y+1, r.b.x+p.x+1, r.b.y+p.y+1, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 1), TX_NOCOLOR, 0);
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, VIEW(o)->get_color(VIEW(o), 2), TX_NOCOLOR, 0);
};
} break;
case BBS_LIQUID: {
if (astate) {
stretch_sprite(out, Get_Bitmap(2), r.a.x+p.x, r.a.y+p.y, rect_sizex(r), rect_sizey(r));
} else {
stretch_sprite(out, Get_Bitmap(1), r.a.x+p.x, r.a.y+p.y, rect_sizex(r), rect_sizey(r));
};
textout_draw_rect(out, VIEW(o)->font, o->caption, -1, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, TX_ALIGN_CENTER, COLOR(0), TX_NOCOLOR, 0);
} break;
};
};
VIEW(o)->end_of_paint(VIEW(o), r);
};
void bad_button_change_state(p_bad_button o, l_int newstate)
{
o->state = newstate;
VIEW(o)->draw_view(VIEW(o));
};
void bad_button_change_style(p_bad_button o, l_int newstyle)
{
o->style = newstyle;
VIEW(o)->draw_view(VIEW(o));
};
void bad_button_change_caption(p_bad_button o, l_text newcap)
{
afree(&(BAD_BUTTON(o)->caption));
o->caption = (l_text)_strdup((char*)newcap);
VIEW(o)->draw_view(VIEW(o));
}
void bad_button_draw(p_view o)
{
BAD_BUTTON(o)->draw_state(BAD_BUTTON(o), false);
};
p_bad_button _bad_button_init(p_bad_button o, t_rect r, l_text cap, l_int style, l_dword msg)
{
if (!o) return NULL;
clear_type(o, sizeof(t_bad_button));
view_init(&o->obclass, r);
o->caption = (l_text)_strdup((char*)cap);
o->message = msg;
o->state = 0;
o->style = style;
OBJECT(o)->translate_event = &bad_button_translate_event;
OBJECT(o)->set_state = &bad_button_set_state;
OBJECT(o)->done = &bad_button_done;
VIEW(o)->draw = &bad_button_draw;
VIEW(o)->set_palette(VIEW(o), pal_bad_common);
o->draw_state = &bad_button_draw_state;
o->change_state = &bad_button_change_state;
o->change_style = &bad_button_change_style;
o->change_caption = &bad_button_change_caption;
return o;
};
/* t_bad_vtrackbar */
void bad_vtrackbar_set_state(p_object o, l_dword st, l_bool set)
{
view_set_state(o, st, set);
if ( st & OB_SF_FOCUSED ) {
VIEW(o)->draw_view(VIEW(o));
};
};
void bad_vtrackbar_translate_event(p_object o, t_event *event)
{
RETVIEW(o, event);
view_translate_event(o, event);
/* check if we're clicked by the mouse */
if (event->type & EV_MOUSE && OBJECT(mouse)->state & MO_SF_MOUSELDOWN)
{
t_point p = VIEW(o)->get_global_point(VIEW(o), point_assign(0, 0));
t_rect r = VIEW(o)->get_local_extent(VIEW(o));
l_long my = (r.b.y-r.a.y-4);
l_long first_pos = BAD_VTRACKBAR(o)->pos;
l_bool in_view;
VIEW(o)->draw_view(VIEW(o));
while (OBJECT(mouse)->state & MO_SF_MOUSELPRESS)
{
l_bool old_in_view = in_view;
l_long old_pos = BAD_VTRACKBAR(o)->pos;
in_view = VIEW(o)->is_mouse_in_view(VIEW(o));
if (in_view) BAD_VTRACKBAR(o)->pos = ((mouse->where.y)-p.y)*BAD_VTRACKBAR(o)->max/my;
if (BAD_VTRACKBAR(o)->pos > BAD_VTRACKBAR(o)->max) BAD_VTRACKBAR(o)->pos = BAD_VTRACKBAR(o)->max;
if (BAD_VTRACKBAR(o)->pos < BAD_VTRACKBAR(o)->min) BAD_VTRACKBAR(o)->pos = BAD_VTRACKBAR(o)->min;
if (in_view != old_in_view)
{
if (in_view) BAD_VTRACKBAR(o)->pressed = true; else BAD_VTRACKBAR(o)->pressed = false;
VIEW(o)->draw_view(VIEW(o));
};
if (BAD_VTRACKBAR(o)->pos != old_pos) VIEW(o)->draw_view(VIEW(o));
o->get_event(o, event);
};
BAD_VTRACKBAR(o)->pressed = false;
VIEW(o)->draw_view(VIEW(o));
if (BAD_VTRACKBAR(o)->pos != first_pos)
{
VIEW(o)->draw_view(VIEW(o));
set_event(event, EV_MESSAGE, BAD_VTRACKBAR(o)->message, o);
o->put_event(o, event);
clear_event(event);
};
};
};
void bad_vtrackbar_change_pos(p_bad_vtrackbar o, l_long pos)
{
o->pos = pos;
VIEW(o)->draw_view(VIEW(o));
};
void bad_vtrackbar_draw(p_view o)
{
t_rect r = VIEW(o)->get_local_extent(VIEW(o));
t_point p;
l_long px, py, my;
BITMAP *out = VIEW(o)->begin_paint(VIEW(o), &p, r);
if ( out ) {
px = r.a.x+p.x+((r.b.x-r.a.x)/2);
my = (r.b.y-r.a.y-8);
if (BAD_VTRACKBAR(o)->max == 0) py = r.a.y+p.y+4; else py = BAD_VTRACKBAR(o)->pos*my/BAD_VTRACKBAR(o)->max+r.a.y+p.y+4;
rectfill(out, r.a.x+p.x, r.a.y+p.y, r.b.x+p.x, r.b.y+p.y, VIEW(o)->get_color(VIEW(o), 0));
draw_bevel(out, px-1, r.a.y+p.y+4, px+1, r.b.y+p.y-4, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 1));
vline(out, px, r.a.y+p.y+5, r.b.y+p.y-5, COLOR(0));
rectfill(out, px-10, py-4, px+10, py+4, VIEW(o)->get_color(VIEW(o), 0));
draw_bevel(out, px-10, py-4, px+10, py+4, VIEW(o)->get_color(VIEW(o), 1), VIEW(o)->get_color(VIEW(o), 3));
draw_bevel(out, px-9, py-3, px+9, py+3, VIEW(o)->get_color(VIEW(o), 0), VIEW(o)->get_color(VIEW(o), 2));
if (BAD_VTRACKBAR(o)->pressed) draw_bevel(out, px-7, py-1, px+7, py+1, VIEW(o)->get_color(VIEW(o), 2), VIEW(o)->get_color(VIEW(o), 1));
};
VIEW(o)->end_of_paint(VIEW(o), r);
};
p_bad_vtrackbar _bad_vtrackbar_init(p_bad_vtrackbar o, t_rect r, l_dword msg)
{
if (!o) return NULL;
clear_type(o, sizeof(t_bad_vtrackbar));
view_init(&o->obclass, r);
o->message = msg;
o->min = 0;
o->max = 100;
o->pos = 0;
o->pressed = false;
OBJECT(o)->translate_event = &bad_vtrackbar_translate_event;
OBJECT(o)->set_state = &bad_vtrackbar_set_state;
VIEW(o)->draw = &bad_vtrackbar_draw;
VIEW(o)->set_palette(VIEW(o), pal_bad_common);
o->change_pos = &bad_vtrackbar_change_pos;
return o;
};
/* t_bad_tabbook */
void bad_tabbook_set_state(p_object o, l_dword st, l_bool set)
{
view_set_state(o, st, set);
if ( st & OB_SF_FOCUSED ) {
VIEW(o)->draw_view(VIEW(o));
};
};
void bad_tabbook_translate_event(p_object o, t_event *event)
{
t_rect r = VIEW(o)->get_local_extent(VIEW(o));
t_point p = VIEW(o)->get_global_point(VIEW(o), point_assign(0, 0));
l_int i;
view_translate_event(o, event);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -