... | ... |
@@ -45,8 +45,8 @@ |
45 | 45 |
#endif |
46 | 46 |
|
47 | 47 |
|
48 |
-static int reui_fillrounded(SDL_Surface *dst, int xo, int yo, int w, int h, int r, const char *rgba); |
|
49 |
-static int reui_triangle(SDL_Surface *dst, int x, int y, int w, int h, char direction, const char *rgba); |
|
48 |
+static int intreui_fillroundedr(SDL_Surface *dst, int xo, int yo, int w, int h, int r, const char *rgba); |
|
49 |
+static int intreui_triangle(SDL_Surface *dst, int x, int y, int w, int h, char direction, const char *rgba); |
|
50 | 50 |
|
51 | 51 |
reui_t * |
52 | 52 |
reui_init(int fontheight, reui_t *parent) |
... | ... |
@@ -245,6 +245,37 @@ reui_fill(reui_t *ui, int x, int y, int w, int h, const char *rgba) |
245 | 245 |
return(0); |
246 | 246 |
} |
247 | 247 |
|
248 |
+int |
|
249 |
+reui_fillrounded(reui_t *ui, int x, int y, int w, int h, const char *rgba) |
|
250 |
+{ |
|
251 |
+ static int rounded5[]={5,3,2,1,1}; |
|
252 |
+ static int rounded4[]={4,2,1,1}; |
|
253 |
+ int i; |
|
254 |
+ if(ui==NULL || rgba==NULL) |
|
255 |
+ return(-1); |
|
256 |
+ if(w<2 || h<2) |
|
257 |
+ return(reui_fill(ui,x,y,w,h,rgba)); |
|
258 |
+ if(w<8 || h<8 || ui->fontheight<8 || ui->fontwidth<8) { |
|
259 |
+ reui_fill(ui,x+1,y,w-2,1,rgba); |
|
260 |
+ reui_fill(ui,x,y+1,w,h-2,rgba); |
|
261 |
+ reui_fill(ui,x+1,y+h-1,w-2,1,rgba); |
|
262 |
+ } else if(w<10 || h<10 || ui->fontheight<10 || ui->fontwidth<10) { |
|
263 |
+ reui_fill(ui,x,y+4,w,h-8,rgba); |
|
264 |
+ for(i=0;i<(sizeof(rounded4)/sizeof(rounded4[0]));i++) { |
|
265 |
+ reui_fill(ui,x+rounded4[i],i,w-(rounded4[i]<<1),1,rgba); |
|
266 |
+ reui_fill(ui,x+rounded4[i],y+h-1-i,w-(rounded4[i]<<1),1,rgba); |
|
267 |
+ } |
|
268 |
+ } else { |
|
269 |
+ reui_fill(ui,x,y+5,w,h-10,rgba); |
|
270 |
+ for(i=0;i<(sizeof(rounded5)/sizeof(rounded5[0]));i++) { |
|
271 |
+ reui_fill(ui,x+rounded5[i],i,w-(rounded5[i]<<1),1,rgba); |
|
272 |
+ reui_fill(ui,x+rounded5[i],y+h-1-i,w-(rounded5[i]<<1),1,rgba); |
|
273 |
+ } |
|
274 |
+ } |
|
275 |
+ return(0); |
|
276 |
+} |
|
277 |
+ |
|
278 |
+ |
|
248 | 279 |
int |
249 | 280 |
reui_scr2renderer(reui_t *ui, int x, int y, int w, int h) |
250 | 281 |
{ |
... | ... |
@@ -359,35 +390,35 @@ reui_balloon(reui_t *ui, char direction, int x, int y, const char *rgbafg, const |
359 | 390 |
return(-1); |
360 | 391 |
} |
361 | 392 |
if(direction=='n') { |
362 |
- reui_fillrounded(bgsurface,0,triangleh-1,bgsurface->w,bgsurface->h-triangleh,radius,rgbabg); |
|
363 |
- reui_triangle(bgsurface,(bgsurface->w-trianglew)/2,0,trianglew,triangleh,direction,rgbabg); |
|
393 |
+ intreui_fillroundedr(bgsurface,0,triangleh-1,bgsurface->w,bgsurface->h-triangleh,radius,rgbabg); |
|
394 |
+ intreui_triangle(bgsurface,(bgsurface->w-trianglew)/2,0,trianglew,triangleh,direction,rgbabg); |
|
364 | 395 |
RECTFILL(dstrect,marginw+marginoffx,triangleh+marginh+marginoffy,fgsurface->w,fgsurface->h); |
365 | 396 |
SDL_BlitSurface(fgsurface,NULL,bgsurface,&dstrect); |
366 | 397 |
offx=-bgsurface->w/2; |
367 | 398 |
offy=0; |
368 | 399 |
} else if(direction=='e') { |
369 |
- reui_fillrounded(bgsurface,0,0,bgsurface->w-trianglew,bgsurface->h,radius,rgbabg); |
|
370 |
- reui_triangle(bgsurface,bgsurface->w-trianglew,(bgsurface->h-triangleh)/2,trianglew,triangleh,direction,rgbabg); |
|
400 |
+ intreui_fillroundedr(bgsurface,0,0,bgsurface->w-trianglew,bgsurface->h,radius,rgbabg); |
|
401 |
+ intreui_triangle(bgsurface,bgsurface->w-trianglew,(bgsurface->h-triangleh)/2,trianglew,triangleh,direction,rgbabg); |
|
371 | 402 |
RECTFILL(dstrect,marginw+marginoffx,marginh+marginoffy,fgsurface->w,fgsurface->h); |
372 | 403 |
SDL_BlitSurface(fgsurface,NULL,bgsurface,&dstrect); |
373 | 404 |
offx=-bgsurface->w; |
374 | 405 |
offy=-bgsurface->h/2; |
375 | 406 |
} else if(direction=='s') { |
376 |
- reui_fillrounded(bgsurface,0,0,bgsurface->w,bgsurface->h-triangleh,radius,rgbabg); |
|
377 |
- reui_triangle(bgsurface,(bgsurface->w-trianglew)/2,bgsurface->h-triangleh,trianglew,triangleh,direction,rgbabg); |
|
407 |
+ intreui_fillroundedr(bgsurface,0,0,bgsurface->w,bgsurface->h-triangleh,radius,rgbabg); |
|
408 |
+ intreui_triangle(bgsurface,(bgsurface->w-trianglew)/2,bgsurface->h-triangleh,trianglew,triangleh,direction,rgbabg); |
|
378 | 409 |
RECTFILL(dstrect,marginw+marginoffx,marginh+marginoffy,fgsurface->w,fgsurface->h); |
379 | 410 |
SDL_BlitSurface(fgsurface,NULL,bgsurface,&dstrect); |
380 | 411 |
offx=-bgsurface->w/2; |
381 | 412 |
offy=-bgsurface->h; |
382 | 413 |
} else if(direction=='w') { |
383 |
- reui_fillrounded(bgsurface,trianglew,0,bgsurface->w-trianglew,bgsurface->h,radius,rgbabg); |
|
384 |
- reui_triangle(bgsurface,0,(bgsurface->h-triangleh)/2,trianglew,triangleh,direction,rgbabg); |
|
414 |
+ intreui_fillroundedr(bgsurface,trianglew,0,bgsurface->w-trianglew,bgsurface->h,radius,rgbabg); |
|
415 |
+ intreui_triangle(bgsurface,0,(bgsurface->h-triangleh)/2,trianglew,triangleh,direction,rgbabg); |
|
385 | 416 |
RECTFILL(dstrect,trianglew+marginw+marginoffx,marginh+marginoffy,fgsurface->w,fgsurface->h); |
386 | 417 |
SDL_BlitSurface(fgsurface,NULL,bgsurface,&dstrect); |
387 | 418 |
offx=0; |
388 | 419 |
offy=-bgsurface->h/2; |
389 | 420 |
} else { /* default: center */ |
390 |
- reui_fillrounded(bgsurface,0,0,bgsurface->w,bgsurface->h,radius,rgbabg); |
|
421 |
+ intreui_fillroundedr(bgsurface,0,0,bgsurface->w,bgsurface->h,radius,rgbabg); |
|
391 | 422 |
RECTFILL(dstrect,marginw+marginoffx,marginh+marginoffy,fgsurface->w,fgsurface->h); |
392 | 423 |
SDL_BlitSurface(fgsurface,NULL,bgsurface,&dstrect); |
393 | 424 |
offx=-bgsurface->w/2; |
... | ... |
@@ -433,7 +464,7 @@ reui_balloon(reui_t *ui, char direction, int x, int y, const char *rgbafg, const |
433 | 464 |
* returns 0 on success |
434 | 465 |
*/ |
435 | 466 |
static int |
436 |
-reui_fillrounded(SDL_Surface *dst, int xo, int yo, int w, int h, int r, const char *rgba) |
|
467 |
+intreui_fillroundedr(SDL_Surface *dst, int xo, int yo, int w, int h, int r, const char *rgba) |
|
437 | 468 |
{ |
438 | 469 |
int yd=(dst->pitch)/(dst->format->BytesPerPixel); |
439 | 470 |
Uint32 *pixels=NULL; |
... | ... |
@@ -501,7 +532,7 @@ reui_fillrounded(SDL_Surface *dst, int xo, int yo, int w, int h, int r, const ch |
501 | 532 |
/* end of external code */ |
502 | 533 |
|
503 | 534 |
static int |
504 |
-reui_triangle(SDL_Surface *dst, int x, int y, int w, int h, char direction, const char *rgba) |
|
535 |
+intreui_triangle(SDL_Surface *dst, int x, int y, int w, int h, char direction, const char *rgba) |
|
505 | 536 |
{ |
506 | 537 |
Uint32 color; |
507 | 538 |
SDL_Rect dstrect; |
... | ... |
@@ -41,6 +41,7 @@ int reui_title(reui_t *ui, char *titlefilename); |
41 | 41 |
int reui_resize(reui_t *ui, int w, int h); |
42 | 42 |
int reui_setfontheight(reui_t *ui, int fontheight); |
43 | 43 |
int reui_fill(reui_t *ui, int x, int y, int w, int h, const char *rgba); |
44 |
+int reui_fillrounded(reui_t *ui, int x, int y, int w, int h, const char *rgba); |
|
44 | 45 |
int reui_scr2renderer(reui_t *ui, int x, int y, int w, int h); |
45 | 46 |
int reui_present(reui_t *ui); |
46 | 47 |
|
... | ... |
@@ -1965,7 +1965,7 @@ re_drawheader_command(re_t *re) |
1965 | 1965 |
reui_printf(re->ui,re->ui->fontwidth*(commandlen+1),0,COLOR_QUERYFG,"%s",re->commandbuf); |
1966 | 1966 |
} else { |
1967 | 1967 |
commandbuflen=redata_generic_utf8len(re->commandbuf,strlen(re->commandbuf)); |
1968 |
- reui_fill(re->ui,re->ui->fontwidth*(commandlen+1)-re->ui->fontwidth/2,0,re->ui->fontwidth*(commandbuflen+1)+1,re->ui->fontheight,COLOR_QUERYBGOLD); |
|
1968 |
+ reui_fillrounded(re->ui,re->ui->fontwidth*(commandlen+1)-re->ui->fontwidth/2,0,re->ui->fontwidth*(commandbuflen+1)+1,re->ui->fontheight,COLOR_QUERYBGOLD); |
|
1969 | 1969 |
reui_printf(re->ui,re->ui->fontwidth*(commandlen+1),0,COLOR_QUERYFGOLD,"%s",re->commandbuf); |
1970 | 1970 |
} |
1971 | 1971 |
} |