Fix label jump skipping bug
parent
43d6c29e8b
commit
39dbddfa3f
10
4ed_mem.h
10
4ed_mem.h
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
#include "4coder_mem.h"
|
#include "4coder_mem.h"
|
||||||
|
|
||||||
#define MEMORY_DEBUG
|
//#define MEMORY_DEBUG
|
||||||
|
|
||||||
static void
|
static void
|
||||||
general_memory_open(System_Functions *system, General_Memory *general, void *memory, int32_t size){
|
general_memory_open(System_Functions *system, General_Memory *general, void *memory, int32_t size){
|
||||||
|
@ -57,7 +57,7 @@ general_memory_allocate(System_Functions *system, General_Memory *general, int32
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return general_memory_allocate(general, memory, size);
|
return general_memory_allocate(general, size);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ general_memory_free(System_Functions *system, General_Memory *general, void *mem
|
||||||
system->memory_free(0, memory, 0);
|
system->memory_free(0, memory, 0);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return general_memory_free(general, memory, size);
|
return general_memory_free(general, memory);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ general_memory_reallocate(System_Functions *system, General_Memory *general, voi
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return general_memory_reallocate(general, memory, size);
|
return general_memory_reallocate(general, old, old_size, size);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ general_memory_reallocate_nocopy(System_Functions *system, General_Memory *gener
|
||||||
return general_memory_allocate(system, general, size);
|
return general_memory_allocate(system, general, size);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
return general_memory_reallocate_nocopy(general, memory, size);
|
return general_memory_reallocate_nocopy(general, old, size);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -761,68 +761,68 @@ buffer_cursor_seek(Buffer_Cursor_Seek_State *S_ptr, Buffer_Cursor_Seek_Params pa
|
||||||
S.size = buffer_size(params.buffer);
|
S.size = buffer_size(params.buffer);
|
||||||
|
|
||||||
// Get cursor hint
|
// Get cursor hint
|
||||||
i32 line_index = 0;
|
|
||||||
switch (params.seek.type){
|
|
||||||
case buffer_seek_pos:
|
|
||||||
{
|
|
||||||
if (params.seek.pos > S.size){
|
|
||||||
params.seek.pos = S.size;
|
|
||||||
}
|
|
||||||
if (params.seek.pos < 0){
|
|
||||||
params.seek.pos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
line_index = buffer_get_line_index(params.buffer, params.seek.pos);
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case buffer_seek_character_pos:
|
|
||||||
{
|
|
||||||
i32 line_count = params.buffer->line_count;
|
|
||||||
i32 max_character = params.character_starts[line_count] - 1;
|
|
||||||
if (params.seek.pos > max_character){
|
|
||||||
params.seek.pos = max_character;
|
|
||||||
}
|
|
||||||
if (params.seek.pos < 0){
|
|
||||||
params.seek.pos = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
line_index = buffer_get_line_index_from_character_pos(params.character_starts, params.seek.pos,
|
|
||||||
0, params.buffer->line_count);
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case buffer_seek_line_char:
|
|
||||||
{
|
|
||||||
line_index = params.seek.line - 1;
|
|
||||||
if (line_index >= params.buffer->line_count){
|
|
||||||
line_index = params.buffer->line_count - 1;
|
|
||||||
}
|
|
||||||
if (line_index < 0){
|
|
||||||
line_index = 0;
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case buffer_seek_unwrapped_xy:
|
|
||||||
{
|
|
||||||
line_index = (i32)(params.seek.y / params.font_height);
|
|
||||||
if (line_index >= params.buffer->line_count){
|
|
||||||
line_index = params.buffer->line_count - 1;
|
|
||||||
}
|
|
||||||
if (line_index < 0){
|
|
||||||
line_index = 0;
|
|
||||||
}
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case buffer_seek_wrapped_xy:
|
|
||||||
{
|
|
||||||
line_index = buffer_get_line_index_from_wrapped_y(params.wrap_line_index, params.seek.y, params.font_height,
|
|
||||||
0, params.buffer->line_count);
|
|
||||||
}break;
|
|
||||||
|
|
||||||
default: InvalidCodePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the cursor hint
|
|
||||||
{
|
{
|
||||||
|
i32 line_index = 0;
|
||||||
|
switch (params.seek.type){
|
||||||
|
case buffer_seek_pos:
|
||||||
|
{
|
||||||
|
if (params.seek.pos > S.size){
|
||||||
|
params.seek.pos = S.size;
|
||||||
|
}
|
||||||
|
if (params.seek.pos < 0){
|
||||||
|
params.seek.pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
line_index = buffer_get_line_index(params.buffer, params.seek.pos);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case buffer_seek_character_pos:
|
||||||
|
{
|
||||||
|
i32 line_count = params.buffer->line_count;
|
||||||
|
i32 max_character = params.character_starts[line_count] - 1;
|
||||||
|
if (params.seek.pos > max_character){
|
||||||
|
params.seek.pos = max_character;
|
||||||
|
}
|
||||||
|
if (params.seek.pos < 0){
|
||||||
|
params.seek.pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
line_index = buffer_get_line_index_from_character_pos(params.character_starts, params.seek.pos,
|
||||||
|
0, params.buffer->line_count);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case buffer_seek_line_char:
|
||||||
|
{
|
||||||
|
line_index = params.seek.line - 1;
|
||||||
|
if (line_index >= params.buffer->line_count){
|
||||||
|
line_index = params.buffer->line_count - 1;
|
||||||
|
}
|
||||||
|
if (line_index < 0){
|
||||||
|
line_index = 0;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case buffer_seek_unwrapped_xy:
|
||||||
|
{
|
||||||
|
line_index = (i32)(params.seek.y / params.font_height);
|
||||||
|
if (line_index >= params.buffer->line_count){
|
||||||
|
line_index = params.buffer->line_count - 1;
|
||||||
|
}
|
||||||
|
if (line_index < 0){
|
||||||
|
line_index = 0;
|
||||||
|
}
|
||||||
|
}break;
|
||||||
|
|
||||||
|
case buffer_seek_wrapped_xy:
|
||||||
|
{
|
||||||
|
line_index = buffer_get_line_index_from_wrapped_y(params.wrap_line_index, params.seek.y, params.font_height,
|
||||||
|
0, params.buffer->line_count);
|
||||||
|
}break;
|
||||||
|
|
||||||
|
default: InvalidCodePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the cursor hint
|
||||||
S.next_cursor.pos = params.buffer->line_starts[line_index];
|
S.next_cursor.pos = params.buffer->line_starts[line_index];
|
||||||
S.next_cursor.character_pos = params.character_starts[line_index];
|
S.next_cursor.character_pos = params.character_starts[line_index];
|
||||||
S.next_cursor.line = line_index + 1;
|
S.next_cursor.line = line_index + 1;
|
||||||
|
|
Loading…
Reference in New Issue