- for( int y=0; y<th; ++y ) {
- uint8_t *cp = bar_rows[y];
- for( int x=0; x<tw; ++x ) {
- cp[0] = cr; cp[1] = cg; cp[2] = cb;
- if( bpp > 3 ) cp[3] = 0xff;
- cp += bpp;
+ const uint8_t gap_grey = 0x4a;
+ if( BC_CModels::has_alpha(colormodel) && // fast path
+ BC_CModels::calculate_pixelsize(colormodel) == sizeof(unsigned) ) {
+ const unsigned gap_rgba = (0xff<<24) |
+ (gap_grey<<16) | (gap_grey<<8) | (gap_grey<<0);
+ if( th > 0 ) {
+ unsigned *bp = (unsigned *)bar_rows[0];
+ for( int i=tw; --i>=0; ) *bp++ = gap_rgba;
+ }
+ unsigned rgba = (0xff<<24) | (color & 0xffffff);
+ for( int y=1; y<th; ++y ) {
+ unsigned *bp = (unsigned *)bar_rows[y];
+ if( tw > 0 ) *bp++ = gap_rgba;
+ for( int i=tw1; --i>0; ++bp ) *bp = rgba;
+ if( tw > 1 ) *bp = gap_rgba;
+ }
+ }
+ else {
+ uint8_t cr = (color>>16), cg = (color>>8), cb = (color>>0);
+ if( th > 0 ) {
+ uint8_t *cp = bar_rows[0];
+ for( int x=0; x<tw; ++x ) {
+ cp[0] = cp[1] = cp[2] = gap_grey;
+ if( bpp > 3 ) cp[3] = 0xff;
+ cp += bpp;
+ }
+ }
+ for( int y=1; y<th; ++y ) {
+ uint8_t *cp = bar_rows[y];
+ if( tw > 0 ) {
+ cp[0] = cp[1] = cp[2] = gap_grey;
+ if( bpp > 3 ) cp[3] = 0xff;
+ cp += bpp;
+ }
+ for( int x=1; x<tw1; ++x ) {
+ cp[0] = cr; cp[1] = cg; cp[2] = cb;
+ if( bpp > 3 ) cp[3] = 0xff;
+ cp += bpp;
+ }
+ if( tw > 1 ) {
+ cp[0] = cp[1] = cp[2] = gap_grey;
+ if( bpp > 3 ) cp[3] = 0xff;
+ }