mirror of
https://github.com/dankamongmen/notcurses.git
synced 2024-11-02 09:40:15 +00:00
rotate_channels: handle top half block #707
This commit is contained in:
parent
03c748476b
commit
5bbd183db4
@ -303,26 +303,28 @@ int ncplane_format(struct ncplane* n, int ystop, int xstop, uint32_t attrword){
|
||||
return total;
|
||||
}
|
||||
|
||||
// if we're a lower block, reverse the channels. if we're a space, set both to
|
||||
// if we're a half block, reverse the channels. if we're a space, set both to
|
||||
// the background. if we're a full block, set both to the foreground.
|
||||
static void
|
||||
static int
|
||||
rotate_channels(ncplane* src, const cell* c, uint32_t* fchan, uint32_t* bchan){
|
||||
if(cell_simple_p(c)){
|
||||
if(!isgraph(c->gcluster)){
|
||||
*fchan = *bchan;
|
||||
}
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
const char* origc = cell_extended_gcluster(src, c);
|
||||
if(strcmp(origc, "▄") == 0){
|
||||
if(strcmp(origc, "▄") == 0 || strcmp(origc, "▄")){
|
||||
uint32_t tmp = *fchan;
|
||||
*fchan = *bchan;
|
||||
*bchan = tmp;
|
||||
return;
|
||||
return 0;
|
||||
}else if(strcmp(origc, "█") == 0){
|
||||
*bchan = *fchan;
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
logerror(src->nc, "Invalid EGC for rotation [%s]\n", origc);
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -392,8 +394,9 @@ rotate_2x1_cw(ncplane* src, ncplane* dst, int srcy, int srcx, int dsty, int dstx
|
||||
uint32_t c2b = cell_bchannel(&c2);
|
||||
uint32_t c1t = cell_fchannel(&c1);
|
||||
uint32_t c2t = cell_fchannel(&c2);
|
||||
rotate_channels(src, &c1, &c1t, &c1b);
|
||||
rotate_channels(src, &c2, &c2t, &c2b);
|
||||
int ret = 0;
|
||||
ret |= rotate_channels(src, &c1, &c1t, &c1b);
|
||||
ret |= rotate_channels(src, &c2, &c2t, &c2b);
|
||||
// right char comes from two tops. left char comes from two bottoms. if
|
||||
// they're the same channel, they become a:
|
||||
//
|
||||
@ -403,7 +406,7 @@ rotate_2x1_cw(ncplane* src, ncplane* dst, int srcy, int srcx, int dsty, int dstx
|
||||
ncplane_cursor_move_yx(dst, dsty, dstx);
|
||||
rotate_output(dst, c1b, c2b);
|
||||
rotate_output(dst, c1t, c2t);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
@ -421,12 +424,13 @@ rotate_2x1_ccw(ncplane* src, ncplane* dst, int srcy, int srcx, int dsty, int dst
|
||||
unsigned c2b = cell_bchannel(&c2);
|
||||
unsigned c1t = cell_fchannel(&c1);
|
||||
unsigned c2t = cell_fchannel(&c2);
|
||||
rotate_channels(src, &c1, &c1t, &c1b);
|
||||
rotate_channels(src, &c2, &c2t, &c2b);
|
||||
int ret = 0;
|
||||
ret |= rotate_channels(src, &c1, &c1t, &c1b);
|
||||
ret |= rotate_channels(src, &c2, &c2t, &c2b);
|
||||
ncplane_cursor_move_yx(dst, dsty, dstx);
|
||||
rotate_output(dst, c1t, c2t);
|
||||
rotate_output(dst, c1b, c2b);
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// copy 'newp' into 'n' after resizing 'n' to match 'newp'
|
||||
|
@ -760,7 +760,7 @@ calc_gradient_channels(uint64_t* channels, uint64_t ul, uint64_t ur,
|
||||
void nclog(const char* fmt, ...);
|
||||
|
||||
// logging
|
||||
#define logerror(nc, fmt, ...) do{ if(nc->loglevel >= NCLOGLEVEL_ERROR){ nclog(__FILE__ "%d" fmt, __LINE__, ##__VA_ARGS__); } }while(0);
|
||||
#define logerror(nc, fmt, ...) do{ if(nc->loglevel >= NCLOGLEVEL_ERROR){ nclog(__FILE__ ":%d:" fmt, __LINE__, ##__VA_ARGS__); } }while(0);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user