Skip to content

Commit

Permalink
Fixed clipping problems with panel resizing
Browse files Browse the repository at this point in the history
  • Loading branch information
linleyh committed Apr 15, 2017
1 parent 412fa4f commit 22ffb87
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 8 deletions.
3 changes: 3 additions & 0 deletions src/g_command.c
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,9 @@ void run_commands(void)
int mouse_on_map = 0;
int prevent_edge_scroll = 0;

if (control.mouse_drag == MOUSE_DRAG_PANEL_RESIZE)
prevent_edge_scroll = 1; // shouldn't scroll the map while resizing the panel

if (control.mouse_x_screen_pixels >= view.map_x
&& control.mouse_x_screen_pixels <= view.map_x + view.map_w
&& control.mouse_y_screen_pixels >= view.map_y
Expand Down
2 changes: 1 addition & 1 deletion src/i_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -16882,7 +16882,7 @@ static void vision_check_for_display(void)
int block_min_y = (al_fixtoi(view.camera_y) - (view.window_y_unzoomed / (view.zoom * 2))) / BLOCK_SIZE_PIXELS - 2;
if (block_min_y < 1)
block_min_y = 1;
int block_max_x = block_min_x + ((view.window_x_unzoomed / BLOCK_SIZE_PIXELS) / view.zoom) + 6;
int block_max_x = block_min_x + ((view.window_x_unzoomed / BLOCK_SIZE_PIXELS) / view.zoom) + 7;
if (block_max_x >= w.blocks.x - 1)
block_max_x = w.blocks.x - 1;
int block_max_y = block_min_y + ((view.window_y_unzoomed / BLOCK_SIZE_PIXELS) / view.zoom) + 6;
Expand Down
88 changes: 81 additions & 7 deletions src/v_draw_panel.c
Original file line number Diff line number Diff line change
Expand Up @@ -354,7 +354,8 @@ void draw_bcode_panel(void)
int mouse_x = control.mouse_x_screen_pixels - panel[PANEL_BCODE].x1;
int mouse_y = control.mouse_y_screen_pixels;// - panel[PANEL_BCODE].y1;


int clip_right_x;
int clip_width;


al_clear_to_color(panel[PANEL_BCODE].background_colour);
Expand All @@ -363,12 +364,20 @@ void draw_bcode_panel(void)

al_draw_textf(font[FONT_SQUARE].fnt, colours.base [COL_GREY] [SHADE_MAX], panel[PANEL_BCODE].x1 + 2, panel[PANEL_BCODE].y1 + 2, ALLEGRO_ALIGN_LEFT, "Bytecode");

if (panel[PANEL_BCODE].element[FPE_BCODE_PANEL_RESIZE].last_highlight == inter.running_time)
{
al_draw_filled_rectangle(panel[PANEL_BCODE].x1, 0, panel[PANEL_BCODE].x1 + 5, settings.option [OPTION_WINDOW_H], colours.base [COL_BLUE] [SHADE_MED]);
}
else
al_draw_filled_rectangle(panel[PANEL_BCODE].x1, 0, panel[PANEL_BCODE].x1 + 2, settings.option [OPTION_WINDOW_H], colours.base [COL_BLUE] [SHADE_LOW]);



if (bcp_state.bcp_mode == BCP_MODE_EMPTY)
goto finished_drawing;

if (game.phase == GAME_PHASE_WORLD)
if (game.phase == GAME_PHASE_WORLD
&& control.mouse_panel == PANEL_BCODE)
{

if (mouse_x >= panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1
Expand Down Expand Up @@ -453,7 +462,20 @@ if (bcp_state.bcp_mode == BCP_MODE_EMPTY)
// bcode subpanel:

//al_set_clipping_rectangle(0, 0, 1600, 900);//panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].w, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].h);
al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1, panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].y1, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].w, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].h);

clip_width = panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].w;

clip_right_x = panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].w;

if (clip_right_x > panel[PANEL_BCODE].x2)
{
clip_right_x = panel[PANEL_BCODE].x2;
clip_width = clip_right_x - (panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1);
if (clip_width <= 0)
goto finished_drawing;
}

al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1, panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].y1, clip_width, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].h);
// al_draw_rectangle(panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].y1, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].w, panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_BCODE].h, colours.base [COL_GREY] [SHADE_MAX], 1);
al_clear_to_color(colours.base [BCODE_PANEL_COL_BACKGROUND] [SHADE_LOW]);

Expand Down Expand Up @@ -793,7 +815,20 @@ if (bcp_state.bcp_mode == BCP_MODE_EMPTY)

// memory subpanel:

al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].x1, panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].y1, panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].w, panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].h);

clip_width = panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].w;

clip_right_x = panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].w;

if (clip_right_x > panel[PANEL_BCODE].x2)
{
clip_right_x = panel[PANEL_BCODE].x2;
clip_width = clip_right_x - (panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].x1);
if (clip_width <= 0)
goto finished_drawing;
}

al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].x1, panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].y1, clip_width, panel[PANEL_BCODE].subpanel[FSP_BCODE_MEMORY].h);
al_clear_to_color(colours.base [BCODE_PANEL_COL_BACKGROUND] [SHADE_LOW]);


Expand Down Expand Up @@ -863,9 +898,23 @@ if (bcp_state.bcp_mode == BCP_MODE_EMPTY)

// stack subpanel:


clip_width = panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].w;

clip_right_x = panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].w;

if (clip_right_x > panel[PANEL_BCODE].x2)
{
clip_right_x = panel[PANEL_BCODE].x2;
clip_width = clip_right_x - (panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].x1);
if (clip_width <= 0)
goto finished_drawing;
}


al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].x1,
panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].y1,
panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].w,
clip_width,
panel[PANEL_BCODE].subpanel[FSP_BCODE_STACK].h);
al_clear_to_color(colours.base [BCODE_PANEL_COL_BACKGROUND] [SHADE_LOW]);

Expand Down Expand Up @@ -947,9 +996,22 @@ if (bcp_state.bcp_mode == BCP_MODE_EMPTY)

// Messages...


clip_width = panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].w;

clip_right_x = panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].w;

if (clip_right_x > panel[PANEL_BCODE].x2)
{
clip_right_x = panel[PANEL_BCODE].x2;
clip_width = clip_right_x - (panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].x1);
if (clip_width <= 0)
goto finished_drawing;
}

al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].x1,
panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].y1,
panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].w,
clip_width,
panel[PANEL_BCODE].subpanel[FSP_BCODE_MESSAGES].h);
al_clear_to_color(colours.base [BCODE_PANEL_COL_BACKGROUND] [SHADE_LOW]);

Expand Down Expand Up @@ -1139,9 +1201,21 @@ if (bcp_state.bcp_mode == BCP_MODE_EMPTY)
// target memory:


clip_width = panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].w;

clip_right_x = panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].w;

if (clip_right_x > panel[PANEL_BCODE].x2)
{
clip_right_x = panel[PANEL_BCODE].x2;
clip_width = clip_right_x - (panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].x1);
if (clip_width <= 0)
goto finished_drawing;
}

al_set_clipping_rectangle(panel[PANEL_BCODE].x1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].x1,
panel[PANEL_BCODE].y1 + panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].y1,
panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].w,
clip_width,
panel[PANEL_BCODE].subpanel[FSP_BCODE_TARGET_MEMORY].h);
al_clear_to_color(colours.base [BCODE_PANEL_COL_BACKGROUND] [SHADE_LOW]);

Expand Down

0 comments on commit 22ffb87

Please sign in to comment.