Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 54 additions & 1 deletion main/gui.c
Original file line number Diff line number Diff line change
Expand Up @@ -1578,7 +1578,7 @@ static bool text_scroll_frame_callback(gui_view_node_t* node, void* extra_args)
return true;
}

void gui_set_text_scroll(gui_view_node_t* node, color_t background_color)
static void init_text_scroll(gui_view_node_t* node, color_t background_color)
{
JADE_ASSERT(node);
JADE_ASSERT(node->kind == TEXT);
Expand All @@ -1594,6 +1594,11 @@ void gui_set_text_scroll(gui_view_node_t* node, color_t background_color)
scroll_data->selected_background_color = background_color;

node->text->scroll = scroll_data;
}

void gui_set_text_scroll(gui_view_node_t* node, color_t background_color)
{
init_text_scroll(node, background_color);

// now push this to the list of updatable elements so that it gets updated every frame
push_updatable(node, text_scroll_frame_callback, NULL);
Expand All @@ -1612,6 +1617,35 @@ void gui_set_text_scroll_selected(
node->text->scroll->selected_background_color = selected_background_color;
}

static void reset_text_scroll(gui_view_node_t* node)
{
JADE_ASSERT(node);
JADE_ASSERT(node->kind == TEXT);

if (node->text->scroll) {
node->text->scroll->prev_offset = 0;
node->text->scroll->offset = 0;
node->text->scroll->going_back = false;
node->text->scroll->wait = GUI_SCROLL_WAIT_END;
}
}

static void set_status_bar_title_scroll(const bool scroll)
{
JADE_ASSERT(status_bar.title);
JADE_ASSERT(status_bar.title->kind == TEXT);

if (scroll && !status_bar.title->text->scroll) {
init_text_scroll(status_bar.title, TFT_BLACK);
} else if (!scroll && status_bar.title->text->scroll) {
free(status_bar.title->text->scroll);
status_bar.title->text->scroll = NULL;
}

reset_text_scroll(status_bar.title);
status_bar.updated = true;
}

void gui_set_text_noise(gui_view_node_t* node, color_t background_color)
{
JADE_ASSERT(node);
Expand Down Expand Up @@ -2348,6 +2382,11 @@ static bool update_status_bar(const bool force_redraw)

status_bar.battery_update_counter--;

if (current_activity->status_bar_title_scroll && status_bar.title->text->scroll
&& text_scroll_frame_callback(status_bar.title, NULL)) {
status_bar.updated = true;
}

if (status_bar.updated || force_redraw) {
render_node(status_bar.root, status_bar_cs, 0);
status_bar.updated = false;
Expand Down Expand Up @@ -2406,6 +2445,7 @@ static size_t handle_gui_input_queue(bool* switched_activities)
if (current_activity->status_bar) {
const bool force_redraw = true;
update_text_node_text(status_bar.title, current_activity->title ? current_activity->title : "");
set_status_bar_title_scroll(current_activity->status_bar_title_scroll);
update_status_bar(force_redraw);
}

Expand Down Expand Up @@ -2802,6 +2842,19 @@ void gui_set_activity_title(gui_activity_t* activity, const char* title)
}
}

void gui_set_activity_status_bar_title_scroll(gui_activity_t* activity, const bool scroll)
{
JADE_ASSERT(activity);
JADE_ASSERT(activity->status_bar);

JADE_SEMAPHORE_TAKE(gui_mutex);
activity->status_bar_title_scroll = scroll;
if (current_activity && activity == current_activity) {
set_status_bar_title_scroll(scroll);
}
JADE_SEMAPHORE_GIVE(gui_mutex);
}

gui_activity_t* gui_current_activity(void) { return current_activity; }

#ifdef CONFIG_BOARD_TYPE_JADE_ANY
Expand Down
3 changes: 3 additions & 0 deletions main/gui.h
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,8 @@ struct __attribute__((__packed__)) gui_activity_t {

// add the status bar on top of this activity (top 24px)
bool status_bar;
// allow the status bar title to scroll when it does not fit
bool status_bar_title_scroll;
// title shown in the status bar (if enabled)
char* title;
// should that cursor "wrap around" when you reach one end?
Expand Down Expand Up @@ -478,6 +480,7 @@ void gui_activity_set_active_selection(
gui_activity_t* activity, gui_view_node_t** nodes, size_t num_nodes, const bool* active, gui_view_node_t* selected);

void gui_set_activity_title(gui_activity_t* activity, const char* title);
void gui_set_activity_status_bar_title_scroll(gui_activity_t* activity, bool scroll);

gui_activity_t* gui_current_activity(void);
gui_activity_t* gui_display_splash(void);
Expand Down
1 change: 1 addition & 0 deletions main/ui/dashboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ gui_activity_t* make_home_screen_activity(const char* device_name, const char* f
gui_activity_t* act = NULL;
gui_make_activity_ex(&act, true, device_name, false);
JADE_ASSERT(act);
gui_set_activity_status_bar_title_scroll(act, true);

gui_view_node_t* node;
gui_view_node_t* hsplit;
Expand Down