Skip to content

Commit

Permalink
Menu/render tree cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
EmilyV99 committed Mar 2, 2023
1 parent 1298646 commit f2359a4
Show file tree
Hide file tree
Showing 13 changed files with 233 additions and 289 deletions.
11 changes: 0 additions & 11 deletions src/base/gui.cpp
Expand Up @@ -38,17 +38,6 @@

extern int32_t zq_screen_w, zq_screen_h;

static BITMAP* saved_gui_bmp = nullptr;
void zc_set_gui_bmp(BITMAP* bmp)
{
saved_gui_bmp = bmp;
}

BITMAP* zc_get_gui_bmp()
{
return saved_gui_bmp;
}

void broadcast_dialog_message(DIALOG* dialog, int32_t msg, int32_t c)
{
while(dialog->proc)
Expand Down
2 changes: 0 additions & 2 deletions src/base/gui.h
Expand Up @@ -17,8 +17,6 @@

extern DIALOG_PLAYER *player;

void zc_set_gui_bmp(BITMAP* bmp);
BITMAP* zc_get_gui_bmp();
int32_t zc_do_dialog(DIALOG *d, int32_t f);
int32_t zc_popup_dialog(DIALOG *d, int32_t f);
int32_t PopUp_dialog(DIALOG *d,int32_t f);
Expand Down
10 changes: 5 additions & 5 deletions src/base/render.cpp
Expand Up @@ -319,7 +319,7 @@ void popup_zqdialog_start(int x, int y, int w, int h, int transp)
screen = tmp_bmp;

RenderTreeItem* rti = new RenderTreeItem();
set_bitmap_create_flags(false);
set_bitmap_create_flags(true);
rti->bitmap = al_create_bitmap(w, h);
rti->a4_bitmap = tmp_bmp;
rti->owned = true;
Expand Down Expand Up @@ -423,8 +423,8 @@ void popup_zqdialog_start_a5(int x, int y, int w, int h)
al_set_new_bitmap_flags(0);

old_a5_states.emplace_back();
ALLEGRO_STATE& oldstate = old_a5_states.back();
al_store_state(&oldstate, ALLEGRO_STATE_TARGET_BITMAP);
ALLEGRO_STATE& old_state = old_a5_states.back();
al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP);
al_set_target_bitmap(rti->bitmap);
}

Expand All @@ -440,8 +440,8 @@ void popup_zqdialog_end_a5()
if(rti_dialogs.children.empty())
zqdialog_bg_bmp = nullptr;

ALLEGRO_STATE& oldstate = old_a5_states.back();
al_restore_state(&oldstate);
ALLEGRO_STATE& old_state = old_a5_states.back();
al_restore_state(&old_state);
old_a5_states.pop_back();

delete to_del;
Expand Down
2 changes: 2 additions & 0 deletions src/base/render.h
Expand Up @@ -91,6 +91,8 @@ RenderTreeItem* add_dlg_layer();
RenderTreeItem* add_dlg_layer_a4(int transp);
void remove_dlg_layer(RenderTreeItem* rti);

void popup_zqdialog_menu();
void popup_zqdialog_menu_end();

//From jwin_a5

Expand Down
62 changes: 27 additions & 35 deletions src/jwin.cpp
Expand Up @@ -5420,7 +5420,7 @@ static void draw_menu_item(MENU_INFO *m, int32_t c)
}
}

if((c == m->sel) && m->bar)
if((c == m->sel) && m->bar && !d)
{
ALLEGRO_COLOR c1 = jwin_a5_pal(m->hover ? jcLIGHT : jcMEDDARK);
ALLEGRO_COLOR c2 = jwin_a5_pal(m->hover ? jcMEDDARK : jcLIGHT);
Expand Down Expand Up @@ -5669,8 +5669,6 @@ int32_t _jwin_do_menu(MENU *menu, MENU_INFO *parent, int32_t bar, int32_t x, int
int32_t _x, _y;
int32_t redraw = TRUE;

scare_mouse();

fill_menu_info(&m, menu, parent, bar, x, y, minw, minh);

if(repos)
Expand All @@ -5679,7 +5677,7 @@ int32_t _jwin_do_menu(MENU *menu, MENU_INFO *parent, int32_t bar, int32_t x, int
m.y = MID(0, m.y, zq_screen_h-m.h-1);
}

popup_zqdialog_start_a5();
popup_zqdialog_menu();

m.sel = mouse_sel = menu_mouse_object(&m);

Expand All @@ -5688,8 +5686,6 @@ int32_t _jwin_do_menu(MENU *menu, MENU_INFO *parent, int32_t bar, int32_t x, int

if((m.sel < 0) && (!mouse_on) && (!bar))
m.sel = 0;

unscare_mouse();

do
{
Expand Down Expand Up @@ -5991,7 +5987,7 @@ int32_t _jwin_do_menu(MENU *menu, MENU_INFO *parent, int32_t bar, int32_t x, int
}
}

popup_zqdialog_end_a5();
popup_zqdialog_menu_end();
return ret;
}

Expand Down Expand Up @@ -8434,7 +8430,6 @@ void jwin_ulalign_dialog(DIALOG *dialog)
//Custom slider proc
int32_t d_jslider_proc(int32_t msg, DIALOG *d, int32_t c)
{
BITMAP *gui_bmp = screen;
BITMAP *slhan = NULL;
int32_t oldpos, newpos;
int32_t sfg; /* slider foreground color */
Expand Down Expand Up @@ -8488,15 +8483,15 @@ int32_t d_jslider_proc(int32_t msg, DIALOG *d, int32_t c)

if(vert)
{
rectfill(gui_bmp, d->x, d->y, d->x+d->w/2-2, d->y+d->h-1, d->bg);
rectfill(gui_bmp, d->x+d->w/2-1, d->y, d->x+d->w/2+1, d->y+d->h-1, sfg);
rectfill(gui_bmp, d->x+d->w/2+2, d->y, d->x+d->w-1, d->y+d->h-1, d->bg);
rectfill(screen, d->x, d->y, d->x+d->w/2-2, d->y+d->h-1, d->bg);
rectfill(screen, d->x+d->w/2-1, d->y, d->x+d->w/2+1, d->y+d->h-1, sfg);
rectfill(screen, d->x+d->w/2+2, d->y, d->x+d->w-1, d->y+d->h-1, d->bg);
}
else
{
rectfill(gui_bmp, d->x, d->y, d->x+d->w-1, d->y+d->h/2-2, d->bg);
rectfill(gui_bmp, d->x, d->y+d->h/2-1, d->x+d->w-1, d->y+d->h/2+1, sfg);
rectfill(gui_bmp, d->x, d->y+d->h/2+2, d->x+d->w-1, d->y+d->h-1, d->bg);
rectfill(screen, d->x, d->y, d->x+d->w-1, d->y+d->h/2-2, d->bg);
rectfill(screen, d->x, d->y+d->h/2-1, d->x+d->w-1, d->y+d->h/2+1, sfg);
rectfill(screen, d->x, d->y+d->h/2+2, d->x+d->w-1, d->y+d->h-1, d->bg);
}

/* okay, background and slot are drawn, now draw the handle */
Expand All @@ -8513,7 +8508,7 @@ int32_t d_jslider_proc(int32_t msg, DIALOG *d, int32_t c)
sly = d->y+(d->h/2)-(slhan->h/2);
}

draw_sprite(gui_bmp, slhan, slx, sly);
draw_sprite(screen, slhan, slx, sly);
}
else
{
Expand All @@ -8534,18 +8529,18 @@ int32_t d_jslider_proc(int32_t msg, DIALOG *d, int32_t c)
}

/* draw body */
rectfill(gui_bmp, slx+2, sly, slx+(slw-2), sly+slh, sfg);
vline(gui_bmp, slx+1, sly+1, sly+slh-1, sfg);
vline(gui_bmp, slx+slw-1, sly+1, sly+slh-1, sfg);
vline(gui_bmp, slx, sly+2, sly+slh-2, sfg);
vline(gui_bmp, slx+slw, sly+2, sly+slh-2, sfg);
vline(gui_bmp, slx+1, sly+2, sly+slh-2, d->bg);
hline(gui_bmp, slx+2, sly+1, slx+slw-2, d->bg);
putpixel(gui_bmp, slx+2, sly+2, d->bg);
rectfill(screen, slx+2, sly, slx+(slw-2), sly+slh, sfg);
vline(screen, slx+1, sly+1, sly+slh-1, sfg);
vline(screen, slx+slw-1, sly+1, sly+slh-1, sfg);
vline(screen, slx, sly+2, sly+slh-2, sfg);
vline(screen, slx+slw, sly+2, sly+slh-2, sfg);
vline(screen, slx+1, sly+2, sly+slh-2, d->bg);
hline(screen, slx+2, sly+1, slx+slw-2, d->bg);
putpixel(screen, slx+2, sly+2, d->bg);
}

if(d->flags & D_GOTFOCUS)
dotted_rect(gui_bmp, d->x, d->y, d->x+d->w-1, d->y+d->h-1, sfg, d->bg);
dotted_rect(screen, d->x, d->y, d->x+d->w-1, d->y+d->h-1, sfg, d->bg);

break;

Expand Down Expand Up @@ -8711,15 +8706,12 @@ int32_t d_jslider_proc(int32_t msg, DIALOG *d, int32_t c)
// This is only used by jwin_check_proc and jwin_radio_proc.
int32_t d_jwinbutton_proc(int32_t msg, DIALOG *d, int32_t)
{
BITMAP *gui_bmp;
int32_t state1, state2;
int32_t black;
int32_t swap;
int32_t g;
ASSERT(d);

gui_bmp = screen;

switch(msg)
{
case MSG_DRAW:
Expand All @@ -8737,25 +8729,25 @@ int32_t d_jwinbutton_proc(int32_t msg, DIALOG *d, int32_t)
state2 = d->bg;
}

rectfill(gui_bmp, d->x+1+g, d->y+1+g, d->x+d->w-3+g, d->y+d->h-3+g, state2);
rect(gui_bmp, d->x+g, d->y+g, d->x+d->w-2+g, d->y+d->h-2+g, state1);
gui_textout_ex(gui_bmp, (char *)d->dp, d->x+d->w/2+g, d->y+d->h/2-text_height(font)/2+g, state1, -1, TRUE);
rectfill(screen, d->x+1+g, d->y+1+g, d->x+d->w-3+g, d->y+d->h-3+g, state2);
rect(screen, d->x+g, d->y+g, d->x+d->w-2+g, d->y+d->h-2+g, state1);
gui_textout_ex(screen, (char *)d->dp, d->x+d->w/2+g, d->y+d->h/2-text_height(font)/2+g, state1, -1, TRUE);

if(d->flags & D_SELECTED)
{
vline(gui_bmp, d->x, d->y, d->y+d->h-2, d->bg);
hline(gui_bmp, d->x, d->y, d->x+d->w-2, d->bg);
vline(screen, d->x, d->y, d->y+d->h-2, d->bg);
hline(screen, d->x, d->y, d->x+d->w-2, d->bg);
}
else
{
black = makecol(0,0,0);
vline(gui_bmp, d->x+d->w-1, d->y+1, d->y+d->h-2, black);
hline(gui_bmp, d->x+1, d->y+d->h-1, d->x+d->w-1, black);
vline(screen, d->x+d->w-1, d->y+1, d->y+d->h-2, black);
hline(screen, d->x+1, d->y+d->h-1, d->x+d->w-1, black);
}

if((d->flags & D_GOTFOCUS) &&
(!(d->flags & D_SELECTED) || !(d->flags & D_EXIT)))
dotted_rect(gui_bmp, d->x+1+g, d->y+1+g, d->x+d->w-3+g, d->y+d->h-3+g, state1, state2);
dotted_rect(screen, d->x+1+g, d->y+1+g, d->x+d->w-3+g, d->y+d->h-3+g, state1, state2);

break;
}
Expand Down
9 changes: 3 additions & 6 deletions src/jwin_a5.cpp
Expand Up @@ -135,8 +135,8 @@ void init_static_texture()
al_set_new_bitmap_flags(0);


ALLEGRO_STATE oldstate;
al_store_state(&oldstate, ALLEGRO_STATE_TARGET_BITMAP);
ALLEGRO_STATE old_state;
al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP);

al_set_target_bitmap(static_tex);
al_lock_bitmap(static_tex,ALLEGRO_PIXEL_FORMAT_ANY,ALLEGRO_LOCK_WRITEONLY);
Expand All @@ -146,7 +146,7 @@ void init_static_texture()
al_put_pixel(x,y,grayscale[zc_rand(255)]);
}
al_unlock_bitmap(static_tex);
al_restore_state(&oldstate);
al_restore_state(&old_state);
initd = true;
}
void draw_static(int x, int y, int w, int h)
Expand Down Expand Up @@ -2382,15 +2382,12 @@ int32_t jwin_button_proc_a5(int32_t msg, DIALOG *d, int32_t)

int32_t d_jwinbutton_proc_a5(int32_t msg, DIALOG *d, int32_t)
{
BITMAP *gui_bmp;
int32_t state1, state2;
int32_t black;
int32_t swap;
int32_t g;
ASSERT(d);

gui_bmp = screen;

switch(msg)
{
case MSG_DRAW:
Expand Down
18 changes: 13 additions & 5 deletions src/launcher/launcher.cpp
Expand Up @@ -556,21 +556,29 @@ static void configure_render_tree()
}
}

void popup_zqdialog_menu()
{
popup_zqdialog_start_a5();
}
void popup_zqdialog_menu_end()
{
popup_zqdialog_end_a5();
}

static void render_launcher()
{
if(render_frozen()) return;
ALLEGRO_STATE oldstate;
al_store_state(&oldstate, ALLEGRO_STATE_TARGET_BITMAP);

init_render_tree();
configure_render_tree();
if(render_frozen()) return;
ALLEGRO_STATE old_state;
al_store_state(&old_state, ALLEGRO_STATE_TARGET_BITMAP);

al_set_target_backbuffer(all_get_display());
al_clear_to_color(al_map_rgb_f(0, 0, 0));
render_tree_draw(&rti_root);

al_flip_display();
al_restore_state(&oldstate);
al_restore_state(&old_state);
}

bool update_hw_pal = false;
Expand Down

0 comments on commit f2359a4

Please sign in to comment.