Implemented auto scrolling console to bottom on new command or console message and console toggle

dev
Shariq Shah 7 years ago
parent c72089e77d
commit ada2e0efe2
  1. 5
      README.md
  2. 2
      build/genie.lua
  3. 16
      src/libsymmetry/console.c
  4. 1
      src/libsymmetry/console.h

@ -155,7 +155,6 @@
- ## TODO - ## TODO
- Implement Auto scrolling to the bottom in console
- Console commands - Console commands
- Console fix bug when enabled in editor mode - Console fix bug when enabled in editor mode
- Console command history - Console command history
@ -185,6 +184,7 @@
system and move textures/shaders/sounds/geometry etc to that and framebuffer/shaders to renderer system and move textures/shaders/sounds/geometry etc to that and framebuffer/shaders to renderer
- Work on (yet another)entity refactor before moving on to serialization - Work on (yet another)entity refactor before moving on to serialization
- Implement cross-hatching shader - Implement cross-hatching shader
- Implement storing console's scroll location and restore it when console is toggled
- Update README's TODO section to reflect the current state of things and the things that are actually left to do - Update README's TODO section to reflect the current state of things and the things that are actually left to do
- Implement collision/physics data serialization, read and write. - Implement collision/physics data serialization, read and write.
@ -411,4 +411,5 @@
* Switching between editor and game mode/cameras * Switching between editor and game mode/cameras
* In-game basis for scrollable console/log-viewer * In-game basis for scrollable console/log-viewer
* Console log output * Console log output
* Console error/warning output * Console error/warning output
* Implemented Auto scrolling to the bottom in console

@ -137,7 +137,7 @@ solution "Symmetry"
newaction { newaction {
trigger = "build_addon", trigger = "build_addon",
description = "Build blender addon into zip file that can be loaded into blender", description = "Build blender addon into zip file that can be loaded into blender, needs zip installed and available on PATH",
execute = function () execute = function ()
local output = os.outputof("cd ../blender_addon && zip -r io_symmetry_exp.zip io_symmetry_exp/__init__.py io_symmetry_exp/exporter.py && mv io_symmetry_exp.zip ../build"); local output = os.outputof("cd ../blender_addon && zip -r io_symmetry_exp.zip io_symmetry_exp/__init__.py io_symmetry_exp/exporter.py && mv io_symmetry_exp.zip ../build");
printf("Output of blender addon build : \n%s\n", output) printf("Output of blender addon build : \n%s\n", output)

@ -23,6 +23,7 @@ void console_init(struct Console* console)
console_message_color[CMT_NONE] = nk_rgb(255, 0, 255); console_message_color[CMT_NONE] = nk_rgb(255, 0, 255);
console->visible = false; console->visible = false;
console->scroll_to_bottom = true;
console->text_region_height = 22.f; console->text_region_height = 22.f;
console->line_height = 20.f; console->line_height = 20.f;
console->current_message_index = -1; console->current_message_index = -1;
@ -37,6 +38,7 @@ void console_init(struct Console* console)
void console_toggle(struct Console* console) void console_toggle(struct Console* console)
{ {
if(!console->visible) console->scroll_to_bottom = true;
console->visible = !console->visible; console->visible = !console->visible;
} }
@ -54,16 +56,24 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float
if(nk_begin_titled(context, "Console", "Console", nk_recti(0, 0, win_width, half_height), NK_WINDOW_SCROLL_AUTO_HIDE)) if(nk_begin_titled(context, "Console", "Console", nk_recti(0, 0, win_width, half_height), NK_WINDOW_SCROLL_AUTO_HIDE))
{ {
nk_layout_row_dynamic(context, nk_window_get_height(context) - console->text_region_height * 2, 1); nk_layout_row_dynamic(context, nk_window_get_height(context) - console->text_region_height * 2, 1);
if(nk_group_begin(context, "Log", NK_WINDOW_SCROLL_AUTO_HIDE)) if(nk_group_begin(context, "Log", NK_WINDOW_BORDER))
{ {
for(int i = 0; i <= console->current_message_index; i++) for(int i = 0; i <= console->current_message_index; i++)
{ {
nk_layout_row_dynamic(context, console->line_height, 1); nk_layout_row_dynamic(context, console->line_height, 1);
nk_labelf_colored(context, NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE, console_message_color[console->console_messages[i].type], console->console_messages[i].message); nk_labelf_colored(context, NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE, console_message_color[console->console_messages[i].type], console->console_messages[i].message);
} }
if(console->scroll_to_bottom == true) // scroll console message area to the bottom if required
{
*context->current->layout->offset_y = context->current->layout->at_y;
console->scroll_to_bottom = false;
}
nk_group_end(context); nk_group_end(context);
} }
//Edit-string/Textfield for command
nk_layout_row_dynamic(context, console->text_region_height, 1); nk_layout_row_dynamic(context, console->text_region_height, 1);
int edit_flags = NK_EDIT_GOTO_END_ON_ACTIVATE | NK_EDIT_FIELD | NK_EDIT_SIG_ENTER; int edit_flags = NK_EDIT_GOTO_END_ON_ACTIVATE | NK_EDIT_FIELD | NK_EDIT_SIG_ENTER;
nk_edit_focus(context, edit_flags); nk_edit_focus(context, edit_flags);
@ -76,6 +86,7 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float
snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "> %s", console->console_command_text); snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "> %s", console->console_command_text);
console->console_messages[console->current_message_index].type = CMT_COMMAND; console->console_messages[console->current_message_index].type = CMT_COMMAND;
memset(console->console_command_text, '\0', MAX_CONSOLE_MESSAGE_LEN); memset(console->console_command_text, '\0', MAX_CONSOLE_MESSAGE_LEN);
console->scroll_to_bottom = true;
} }
} }
nk_end(context); nk_end(context);
@ -101,6 +112,7 @@ void console_on_log_message(struct Console* console, const char* message, va_lis
console->current_message_index = 0; console->current_message_index = 0;
vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, message, args); vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, message, args);
console->console_messages[console->current_message_index].type = CMT_MESSAGE; console->console_messages[console->current_message_index].type = CMT_MESSAGE;
console->scroll_to_bottom = true;
} }
void console_on_log_warning(struct Console* console, const char* warning_message, va_list args) void console_on_log_warning(struct Console* console, const char* warning_message, va_list args)
@ -109,6 +121,7 @@ void console_on_log_warning(struct Console* console, const char* warning_message
console->current_message_index = 0; console->current_message_index = 0;
vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, warning_message, args); vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, warning_message, args);
console->console_messages[console->current_message_index].type = CMT_WARNING; console->console_messages[console->current_message_index].type = CMT_WARNING;
console->scroll_to_bottom = true;
} }
void console_on_log_error(struct Console* console, const char* context, const char* error, va_list args) void console_on_log_error(struct Console* console, const char* context, const char* error, va_list args)
@ -118,4 +131,5 @@ void console_on_log_error(struct Console* console, const char* context, const ch
int loc = snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "(%s)", context); int loc = snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "(%s)", context);
vsnprintf(console->console_messages[console->current_message_index].message + loc, MAX_CONSOLE_MESSAGE_LEN, error, args); vsnprintf(console->console_messages[console->current_message_index].message + loc, MAX_CONSOLE_MESSAGE_LEN, error, args);
console->console_messages[console->current_message_index].type = CMT_ERROR; console->console_messages[console->current_message_index].type = CMT_ERROR;
console->scroll_to_bottom = true;
} }

@ -26,6 +26,7 @@ struct Console_Message
struct Console struct Console
{ {
bool visible; bool visible;
bool scroll_to_bottom;
float text_region_height; float text_region_height;
float line_height; float line_height;
int current_message_index; int current_message_index;

Loading…
Cancel
Save