ncplane_at_cursor_cell: rewrite with ncplane_at_yx_cell()

This commit is contained in:
nick black 2020-12-18 01:39:44 -05:00
parent 1798e061e1
commit bf3e3eb0b5
No known key found for this signature in database
GPG Key ID: 5F43400C21CBFACC
2 changed files with 16 additions and 20 deletions

View File

@ -1336,16 +1336,7 @@ API char* ncplane_at_cursor(struct ncplane* n, uint16_t* stylemask, uint64_t* ch
// Retrieve the current contents of the cell under the cursor into 'c'. This // Retrieve the current contents of the cell under the cursor into 'c'. This
// cell is invalidated if the associated plane is destroyed. // cell is invalidated if the associated plane is destroyed.
static inline int API int ncplane_at_cursor_cell(struct ncplane* n, nccell* c);
ncplane_at_cursor_cell(struct ncplane* n, nccell* c){
char* egc = ncplane_at_cursor(n, &c->stylemask, &c->channels);
if(!egc){
return -1;
}
int r = cell_load(n, c, egc);
free(egc);
return r;
}
// Retrieve the current contents of the specified cell. The EGC is returned, or // Retrieve the current contents of the specified cell. The EGC is returned, or
// NULL on error. This EGC must be free()d by the caller. The stylemask and // NULL on error. This EGC must be free()d by the caller. The stylemask and

View File

@ -219,25 +219,30 @@ cursor_invalid_p(const ncplane* n){
} }
char* ncplane_at_cursor(ncplane* n, uint16_t* stylemask, uint64_t* channels){ char* ncplane_at_cursor(ncplane* n, uint16_t* stylemask, uint64_t* channels){
if(cursor_invalid_p(n)){ return ncplane_at_yx(n, n->y, n->x, stylemask, channels);
return NULL;
}
return cell_extract(n, &n->fb[nfbcellidx(n, n->y, n->x)], stylemask, channels);
} }
char* ncplane_at_yx(const ncplane* n, int y, int x, uint16_t* stylemask, uint64_t* channels){ char* ncplane_at_yx(const ncplane* n, int y, int x, uint16_t* stylemask, uint64_t* channels){
char* ret = NULL;
if(y < n->leny && x < n->lenx){ if(y < n->leny && x < n->lenx){
if(y >= 0 && x >= 0){ if(y >= 0 && x >= 0){
ret = cell_extract(n, &n->fb[nfbcellidx(n, y, x)], stylemask, channels); return cell_extract(n, &n->fb[nfbcellidx(n, y, x)], stylemask, channels);
} }
} }
return ret; return NULL;
} }
int ncplane_at_yx_cell(struct ncplane* n, int y, int x, nccell* c){ int ncplane_at_cursor_cell(ncplane* n, nccell* c){
nccell* targ = ncplane_cell_ref_yx(n, y, x); return ncplane_at_yx_cell(n, n->y, n->x, c);
return cell_duplicate(n, c, targ); }
int ncplane_at_yx_cell(ncplane* n, int y, int x, nccell* c){
if(y < n->leny && x < n->lenx){
if(y >= 0 && x >= 0){
nccell* targ = ncplane_cell_ref_yx(n, y, x);
return cell_duplicate(n, c, targ);
}
}
return -1;
} }
void ncplane_dim_yx(const ncplane* n, int* rows, int* cols){ void ncplane_dim_yx(const ncplane* n, int* rows, int* cols){