summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c2
-rw-r--r--src/interface.c40
2 files changed, 22 insertions, 20 deletions
diff --git a/src/graphics.c b/src/graphics.c
index a3cbf87..ea8d0d5 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -448,6 +448,8 @@ void draw_tool(pixel *vid_buf, int b, int sl, int sr, unsigned pc, unsigned iswa
int draw_tool_xy(pixel *vid_buf, int x, int y, int b, unsigned pc)
{
int i, j, c;
+ if (x > XRES-26 || x < 0)
+ return 26;
if (b>=UI_WALLSTART)
{
b = b-100;
diff --git a/src/interface.c b/src/interface.c
index 2aef363..e43bd9a 100644
--- a/src/interface.c
+++ b/src/interface.c
@@ -1531,13 +1531,14 @@ void menu_ui(pixel *vid_buf, int i, int *sl, int *sr)
void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx, int my)
{
- int h,x,y,n=0,height,width,sy,rows=0;
+ int h,x,y,n=0,height,width,sy,rows=0,xoff=0,fwidth;
SEC = SEC2;
mx /= sdl_scale;
my /= sdl_scale;
rows = ceil((float)msections[i].itemcount/16.0f);
height = (ceil((float)msections[i].itemcount/16.0f)*18);
width = restrict_flt(msections[i].itemcount*31, 0, 16*31);
+ fwidth = msections[i].itemcount*31;
h = -1;
x = XRES-BARSIZE-18;
y = YRES+1;
@@ -1548,11 +1549,11 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
{
if (n!=SPC_AIR&&n!=SPC_HEAT&&n!=SPC_COOL&&n!=SPC_VACUUM)
{
- if (x-18<=2)
+ /*if (x-18<=2)
{
x = XRES-BARSIZE-18;
y += 19;
- }
+ }*/
x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-UI_WALLSTART].colour)+5;
if (!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
{
@@ -1585,11 +1586,11 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
{
if (n==SPC_AIR||n==SPC_HEAT||n==SPC_COOL||n==SPC_VACUUM)
{
- if (x-18<=0)
+ /*if (x-18<=0)
{
x = XRES-BARSIZE-18;
y += 19;
- }
+ }*/
x -= draw_tool_xy(vid_buf, x, y, n, mwalls[n-UI_WALLSTART].colour)+5;
if (!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
{
@@ -1619,11 +1620,11 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
{
if (ptypes[n].menusection==i&&ptypes[n].menu==1)
{
- if (x-18<=0)
+ /*if (x-18<=0)
{
x = XRES-BARSIZE-18;
y += 19;
- }
+ }*/
x -= draw_tool_xy(vid_buf, x, y, n, ptypes[n].pcolors)+5;
if (!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
{
@@ -1652,37 +1653,36 @@ void menu_ui_v3(pixel *vid_buf, int i, int *sl, int *sr, int b, int bq, int mx,
}
else
{
+ if (fwidth > XRES){
+ float overflow = fwidth-XRES+BARSIZE, location = ((float)XRES+BARSIZE)/((float)(mx-XRES+BARSIZE));
+ xoff = (int)(overflow / location);
+ }
for (n = 0; n<PT_NUM; n++)
{
if (ptypes[n].menusection==i&&ptypes[n].menu==1)
{
- if (x-18<=0)
- {
- x = XRES-BARSIZE-18;
- y += 19;
- }
- x -= draw_tool_xy(vid_buf, x, y, n, ptypes[n].pcolors)+5;
- if (!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15)
+ x -= draw_tool_xy(vid_buf, x-xoff, y, n, ptypes[n].pcolors)+5;
+ if (!bq && mx>=x+32-xoff && mx<x+58-xoff && my>=y && my< y+15)
{
- drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255);
+ drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 255, 0, 0, 255);
h = n;
}
- if (!bq && mx>=x+32 && mx<x+58 && my>=y && my< y+15&&(sdl_mod & (KMOD_LALT) && sdl_mod & (KMOD_SHIFT)))
+ if (!bq && mx>=x+32-xoff && mx<x+58-xoff && my>=y && my< y+15&&(sdl_mod & (KMOD_LALT) && sdl_mod & (KMOD_SHIFT)))
{
- drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255);
+ drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 0, 255, 255, 255);
h = n;
}
else if (n==SLALT)
{
- drawrect(vid_buf, x+30, y-1, 29, 17, 0, 255, 255, 255);
+ drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 0, 255, 255, 255);
}
else if (n==*sl)
{
- drawrect(vid_buf, x+30, y-1, 29, 17, 255, 0, 0, 255);
+ drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 255, 0, 0, 255);
}
else if (n==*sr)
{
- drawrect(vid_buf, x+30, y-1, 29, 17, 0, 0, 255, 255);
+ drawrect(vid_buf, x+30-xoff, y-1, 29, 17, 0, 0, 255, 255);
}
}
}