Browse code

rounded corners for commandbuf suggestion

Dario Rodriguez authored on 01/09/2021 20:33:06
Showing 3 changed files
... ...
@@ -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
         }