forked from Green-Sky/tomato
add shortcuts to scroll the message log (j/k and page up/down)
also end to jump to ...
This commit is contained in:
@@ -672,6 +672,28 @@ void ChatGui4::sendFilePath(std::string_view file_path) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ChatGui4::renderChatLog(Contact4 c, bool window_focused, const std::vector<Contact4>* sub_contacts) {
|
void ChatGui4::renderChatLog(Contact4 c, bool window_focused, const std::vector<Contact4>* sub_contacts) {
|
||||||
|
const float scroll_amount {2.f * TEXT_BASE_HEIGHT};
|
||||||
|
bool manually_scrolled {false};
|
||||||
|
// TODO: replace with IsKeyPressed version in the future
|
||||||
|
if (ImGui::Shortcut(ImGuiKey_J, ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteGlobal)) {
|
||||||
|
ImGui::SetScrollY(ImGui::GetScrollY() + scroll_amount);
|
||||||
|
manually_scrolled = true;
|
||||||
|
}
|
||||||
|
if (ImGui::Shortcut(ImGuiKey_K, ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteGlobal)) {
|
||||||
|
ImGui::SetScrollY(ImGui::GetScrollY() - scroll_amount);
|
||||||
|
manually_scrolled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: figure ot page size
|
||||||
|
if (ImGui::Shortcut(ImGuiKey_PageDown, ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteGlobal)) {
|
||||||
|
ImGui::SetScrollY(ImGui::GetScrollY() + scroll_amount*10.f);
|
||||||
|
manually_scrolled = true;
|
||||||
|
}
|
||||||
|
if (ImGui::Shortcut(ImGuiKey_PageUp, ImGuiInputFlags_Repeat | ImGuiInputFlags_RouteGlobal)) {
|
||||||
|
ImGui::SetScrollY(ImGui::GetScrollY() - scroll_amount*10.f);
|
||||||
|
manually_scrolled = true;
|
||||||
|
}
|
||||||
|
|
||||||
auto* msg_reg_ptr = _rmm.get(c);
|
auto* msg_reg_ptr = _rmm.get(c);
|
||||||
|
|
||||||
constexpr ImGuiTableFlags table_flags =
|
constexpr ImGuiTableFlags table_flags =
|
||||||
@@ -1051,8 +1073,13 @@ void ChatGui4::renderChatLog(Contact4 c, bool window_focused, const std::vector<
|
|||||||
ImGui::EndTable();
|
ImGui::EndTable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ImGui::Shortcut(ImGuiKey_End, ImGuiInputFlags_RouteGlobal)) {
|
||||||
|
ImGui::SetScrollHereY(1.f);
|
||||||
|
manually_scrolled = true;
|
||||||
|
}
|
||||||
|
|
||||||
// follow if at bottom (this is a frame delayed, but thats just how it works)
|
// follow if at bottom (this is a frame delayed, but thats just how it works)
|
||||||
if (ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) {
|
if (!manually_scrolled && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()) {
|
||||||
ImGui::SetScrollHereY(1.f);
|
ImGui::SetScrollHereY(1.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user