rendering with virtual whitespace skips whitespace on first line correctly now
parent
a29af32a42
commit
da7a09ca0d
|
@ -895,128 +895,122 @@ buffer_render_data(Buffer_Render_State *S_ptr, Buffer_Render_Params params, f32
|
||||||
S.write.x_min = params.port_x;
|
S.write.x_min = params.port_x;
|
||||||
S.write.x_max = params.port_x + params.clip_w;
|
S.write.x_max = params.port_x + params.clip_w;
|
||||||
|
|
||||||
if (params.adv){
|
if (params.virtual_white){
|
||||||
S.i = params.start_cursor.pos;
|
S.skipping_whitespace = 1;
|
||||||
if (buffer_stringify_loop(&S.stream, params.buffer, S.i, size)){
|
}
|
||||||
do{
|
|
||||||
for (; S.i < S.stream.end; ++S.i){
|
S.i = params.start_cursor.pos;
|
||||||
S.ch = (u8)S.stream.data[S.i];
|
if (buffer_stringify_loop(&S.stream, params.buffer, S.i, size)){
|
||||||
S.ch_width = params.adv[S.ch];
|
do{
|
||||||
|
for (; S.i < S.stream.end; ++S.i){
|
||||||
if (S.ch_width + S.write.x > params.width + shift_x && S.ch != '\n' && params.wrapped){
|
S.ch = (u8)S.stream.data[S.i];
|
||||||
if (params.virtual_white){
|
S.ch_width = params.adv[S.ch];
|
||||||
S_stop.status = BLStatus_NeedWrapLineShift;
|
|
||||||
S_stop.line_index = S.line;
|
if (S.ch_width + S.write.x > params.width + shift_x && S.ch != '\n' && params.wrapped){
|
||||||
S_stop.pos = S.i+1;
|
if (params.virtual_white){
|
||||||
DrYield(2, S_stop);
|
S_stop.status = BLStatus_NeedWrapLineShift;
|
||||||
}
|
S_stop.line_index = S.line;
|
||||||
|
S_stop.pos = S.i+1;
|
||||||
S.write.x = shift_x + line_shift;
|
DrYield(2, S_stop);
|
||||||
S.write.y += params.font_height;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S.write.y > params.height + shift_y){
|
S.write.x = shift_x + line_shift;
|
||||||
goto buffer_get_render_data_end;
|
S.write.y += params.font_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (S.ch != ' ' && S.ch != '\t'){
|
if (S.write.y > params.height + shift_y){
|
||||||
S.skipping_whitespace = 0;
|
goto buffer_get_render_data_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!S.skipping_whitespace){
|
if (S.ch != ' ' && S.ch != '\t'){
|
||||||
switch (S.ch){
|
S.skipping_whitespace = 0;
|
||||||
case '\n':
|
}
|
||||||
if (S.write.item < item_end){
|
|
||||||
S.write = write_render_item(S.write, S.i, ' ', 0);
|
if (!S.skipping_whitespace){
|
||||||
|
switch (S.ch){
|
||||||
if (params.virtual_white){
|
case '\n':
|
||||||
S_stop.status = BLStatus_NeedLineShift;
|
if (S.write.item < item_end){
|
||||||
S_stop.line_index = S.line+1;
|
S.write = write_render_item(S.write, S.i, ' ', 0);
|
||||||
S_stop.pos = S.i+1;
|
|
||||||
DrYield(3, S_stop);
|
if (params.virtual_white){
|
||||||
|
S_stop.status = BLStatus_NeedLineShift;
|
||||||
S.skipping_whitespace = 1;
|
S_stop.line_index = S.line+1;
|
||||||
}
|
S_stop.pos = S.i+1;
|
||||||
|
DrYield(3, S_stop);
|
||||||
++S.line;
|
|
||||||
|
S.skipping_whitespace = 1;
|
||||||
S.write.x = shift_x + line_shift;
|
}
|
||||||
S.write.y += params.font_height;
|
|
||||||
}
|
++S.line;
|
||||||
break;
|
|
||||||
|
S.write.x = shift_x + line_shift;
|
||||||
|
S.write.y += params.font_height;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\r':
|
||||||
|
if (S.write.item < item_end){
|
||||||
|
S.write = write_render_item(S.write, S.i, '\\', BRFlag_Special_Character);
|
||||||
|
|
||||||
case '\r':
|
|
||||||
if (S.write.item < item_end){
|
if (S.write.item < item_end){
|
||||||
|
S.write = write_render_item(S.write, S.i, 'r', BRFlag_Special_Character);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '\t':
|
||||||
|
if (S.write.item < item_end){
|
||||||
|
f32 new_x = S.write.x + S.ch_width;
|
||||||
|
S.write = write_render_item(S.write, S.i, ' ', 0);
|
||||||
|
S.write.x = new_x;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
if (S.write.item < item_end){
|
||||||
|
if (S.ch >= ' ' && S.ch <= '~'){
|
||||||
|
S.write = write_render_item(S.write, S.i, S.ch, 0);
|
||||||
|
}
|
||||||
|
else{
|
||||||
S.write = write_render_item(S.write, S.i, '\\', BRFlag_Special_Character);
|
S.write = write_render_item(S.write, S.i, '\\', BRFlag_Special_Character);
|
||||||
|
|
||||||
|
char ch = S.ch;
|
||||||
|
char C = '0' + (ch / 0x10);
|
||||||
|
if ((ch / 0x10) > 0x9){
|
||||||
|
C = ('A' - 0xA) + (ch / 0x10);
|
||||||
|
}
|
||||||
|
|
||||||
if (S.write.item < item_end){
|
if (S.write.item < item_end){
|
||||||
S.write = write_render_item(S.write, S.i, 'r', BRFlag_Special_Character);
|
S.write = write_render_item(S.write, S.i, C, BRFlag_Special_Character);
|
||||||
|
}
|
||||||
|
|
||||||
|
ch = (ch % 0x10);
|
||||||
|
C = '0' + ch;
|
||||||
|
if (ch > 0x9){
|
||||||
|
C = ('A' - 0xA) + ch;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (S.write.item < item_end){
|
||||||
|
S.write = write_render_item(S.write, S.i, C, BRFlag_Special_Character);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case '\t':
|
|
||||||
if (S.write.item < item_end){
|
|
||||||
f32 new_x = S.write.x + S.ch_width;
|
|
||||||
S.write = write_render_item(S.write, S.i, ' ', 0);
|
|
||||||
S.write.x = new_x;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
if (S.write.item < item_end){
|
|
||||||
if (S.ch >= ' ' && S.ch <= '~'){
|
|
||||||
S.write = write_render_item(S.write, S.i, S.ch, 0);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
S.write = write_render_item(S.write, S.i, '\\', BRFlag_Special_Character);
|
|
||||||
|
|
||||||
char ch = S.ch;
|
|
||||||
char C = '0' + (ch / 0x10);
|
|
||||||
if ((ch / 0x10) > 0x9){
|
|
||||||
C = ('A' - 0xA) + (ch / 0x10);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (S.write.item < item_end){
|
|
||||||
S.write = write_render_item(S.write, S.i, C, BRFlag_Special_Character);
|
|
||||||
}
|
|
||||||
|
|
||||||
ch = (ch % 0x10);
|
|
||||||
C = '0' + ch;
|
|
||||||
if (ch > 0x9){
|
|
||||||
C = ('A' - 0xA) + ch;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (S.write.item < item_end){
|
|
||||||
S.write = write_render_item(S.write, S.i, C, BRFlag_Special_Character);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
|
||||||
if (S.write.y > params.height + shift_y){
|
|
||||||
goto buffer_get_render_data_end;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
S.still_looping = buffer_stringify_next(&S.stream);
|
|
||||||
}while(S.still_looping);
|
if (S.write.y > params.height + shift_y){
|
||||||
}
|
goto buffer_get_render_data_end;
|
||||||
|
}
|
||||||
buffer_get_render_data_end:;
|
|
||||||
if (S.write.y <= params.height + shift_y || S.write.item == params.items){
|
|
||||||
if (S.write.item < item_end){
|
|
||||||
S.write = write_render_item(S.write, size, ' ', 0);
|
|
||||||
}
|
}
|
||||||
}
|
S.still_looping = buffer_stringify_next(&S.stream);
|
||||||
|
}while(S.still_looping);
|
||||||
}
|
}
|
||||||
else{
|
|
||||||
f32 zero = 0;
|
buffer_get_render_data_end:;
|
||||||
S.write.adv = &zero;
|
if (S.write.y <= params.height + shift_y || S.write.item == params.items){
|
||||||
|
|
||||||
if (S.write.item < item_end){
|
if (S.write.item < item_end){
|
||||||
S.write = write_render_item(S.write, size, 0, 0);
|
S.write = write_render_item(S.write, size, ' ', 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue