mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 20:25:34 +08:00
[feat] make control bar stick to left/right border
This commit is contained in:
@@ -10,7 +10,7 @@ int Render::ControlBar() {
|
|||||||
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
|
||||||
|
|
||||||
if (control_bar_button_pressed_) {
|
if (control_bar_button_pressed_) {
|
||||||
ImGui::SetCursorPosX(control_winodw_pos_.x + 22);
|
ImGui::SetCursorPosX(control_window_width_ + 2);
|
||||||
// Mouse control
|
// Mouse control
|
||||||
std::string mouse = ICON_FA_COMPUTER_MOUSE;
|
std::string mouse = ICON_FA_COMPUTER_MOUSE;
|
||||||
if (ImGui::Button(mouse.c_str(), ImVec2(25, 25))) {
|
if (ImGui::Button(mouse.c_str(), ImVec2(25, 25))) {
|
||||||
@@ -43,16 +43,16 @@ int Render::ControlBar() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
ImGui::SetCursorPosX(control_winodw_pos_.x + control_window_max_width_ -
|
|
||||||
35);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::SetCursorPosX(control_winodw_pos_.x +
|
ImGui::SetCursorPosX(is_control_bar_in_left_ ? control_window_width_ * 2 - 18
|
||||||
(control_bar_button_pressed_
|
: 2);
|
||||||
? (control_window_max_width_ - 18)
|
|
||||||
: (control_window_min_width_)));
|
|
||||||
std::string control_bar =
|
std::string control_bar =
|
||||||
control_bar_button_pressed_ ? ICON_FA_ANGLE_LEFT : ICON_FA_ANGLE_RIGHT;
|
control_bar_button_pressed_
|
||||||
|
? (is_control_bar_in_left_ ? ICON_FA_ANGLE_LEFT : ICON_FA_ANGLE_RIGHT)
|
||||||
|
: (is_control_bar_in_left_ ? ICON_FA_ANGLE_RIGHT
|
||||||
|
: ICON_FA_ANGLE_LEFT);
|
||||||
if (ImGui::Button(control_bar.c_str(), ImVec2(15, 25))) {
|
if (ImGui::Button(control_bar.c_str(), ImVec2(15, 25))) {
|
||||||
control_bar_button_pressed_ = !control_bar_button_pressed_;
|
control_bar_button_pressed_ = !control_bar_button_pressed_;
|
||||||
control_bar_button_pressed_time_ = ImGui::GetTime();
|
control_bar_button_pressed_time_ = ImGui::GetTime();
|
||||||
|
|||||||
@@ -1,29 +1,151 @@
|
|||||||
|
#include "rd_log.h"
|
||||||
#include "render.h"
|
#include "render.h"
|
||||||
|
|
||||||
int Render::ControlWindow() {
|
int Render::ControlWindow() {
|
||||||
auto time_duration = ImGui::GetTime() - control_bar_button_pressed_time_;
|
auto time_duration = ImGui::GetTime() - control_bar_button_pressed_time_;
|
||||||
auto control_window_width =
|
// if (time_duration <= 0.25f) {
|
||||||
!control_bar_button_pressed_
|
// control_window_width_is_changing_ = true;
|
||||||
? time_duration < 0.25f
|
// } else {
|
||||||
? control_window_max_width_ -
|
// control_window_width_is_changing_ = false;
|
||||||
(control_window_max_width_ - control_window_min_width_) *
|
// }
|
||||||
4 * time_duration
|
|
||||||
: control_window_min_width_
|
// control_window_width_ =
|
||||||
: time_duration < 0.25f
|
// !control_bar_button_pressed_
|
||||||
? control_window_min_width_ +
|
// ? (time_duration < 0.25f
|
||||||
(control_window_max_width_ - control_window_min_width_) * 4 *
|
// ? control_window_max_width_ -
|
||||||
time_duration
|
// (control_window_max_width_ -
|
||||||
: control_window_max_width_;
|
// control_window_min_width_) *
|
||||||
|
// 4 * time_duration
|
||||||
|
// : control_window_min_width_)
|
||||||
|
// : (time_duration < 0.25f
|
||||||
|
// ? control_window_min_width_ +
|
||||||
|
// (control_window_max_width_ -
|
||||||
|
// control_window_min_width_) *
|
||||||
|
// 4 * time_duration
|
||||||
|
// : control_window_max_width_);
|
||||||
|
|
||||||
|
if (control_window_width_is_changing_) {
|
||||||
|
if (control_bar_button_pressed_) {
|
||||||
|
// control_window_width_ =
|
||||||
|
// control_window_width_is_changing_
|
||||||
|
// ? control_window_min_width_ +
|
||||||
|
// (control_window_max_width_ - control_window_min_width_) *
|
||||||
|
// 4
|
||||||
|
// *
|
||||||
|
// time_duration
|
||||||
|
// : control_window_max_width_;
|
||||||
|
|
||||||
|
control_window_width_ =
|
||||||
|
control_window_min_width_ +
|
||||||
|
(control_window_max_width_ - control_window_min_width_) * 4 *
|
||||||
|
time_duration;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// control_window_width_ =
|
||||||
|
// control_window_width_is_changing_
|
||||||
|
// ? control_window_max_width_ -
|
||||||
|
// (control_window_max_width_ - control_window_min_width_) *
|
||||||
|
// 4
|
||||||
|
// *
|
||||||
|
// time_duration
|
||||||
|
// : control_window_min_width_;
|
||||||
|
|
||||||
|
control_window_width_ =
|
||||||
|
control_window_max_width_ -
|
||||||
|
(control_window_max_width_ - control_window_min_width_) * 4 *
|
||||||
|
time_duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1, 1, 1, 1));
|
ImGui::PushStyleColor(ImGuiCol_WindowBg, ImVec4(1, 1, 1, 1));
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0));
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 10.0f);
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0);
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 10.0f);
|
ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 10.0f);
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0));
|
||||||
ImGui::SetNextWindowPos(
|
|
||||||
ImVec2(-control_window_min_width_ / 2, title_bar_height_),
|
|
||||||
ImGuiCond_Once);
|
|
||||||
|
|
||||||
ImGui::SetNextWindowSize(ImVec2(control_window_width, control_window_height_),
|
ImGui::SetNextWindowSize(
|
||||||
ImGuiCond_Always);
|
ImVec2(control_window_width_, control_window_height_), ImGuiCond_Always);
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(0, title_bar_height_), ImGuiCond_Once);
|
||||||
|
if (ImGui::IsMouseReleased(ImGuiPopupFlags_MouseButtonLeft) ||
|
||||||
|
control_window_width_is_changing_) {
|
||||||
|
if (control_winodw_pos_.x <= main_window_width_ / 2 ||
|
||||||
|
(control_winodw_pos_.y < title_bar_height_ ||
|
||||||
|
control_winodw_pos_.y >
|
||||||
|
main_window_height_ - control_window_height_)) {
|
||||||
|
ImGui::SetNextWindowPos(
|
||||||
|
ImVec2(0,
|
||||||
|
(control_winodw_pos_.y >= title_bar_height_ &&
|
||||||
|
control_winodw_pos_.y <=
|
||||||
|
main_window_height_ - control_window_height_)
|
||||||
|
? control_winodw_pos_.y
|
||||||
|
: (control_winodw_pos_.y < title_bar_height_
|
||||||
|
? title_bar_height_
|
||||||
|
: (main_window_height_ - control_window_height_))),
|
||||||
|
ImGuiCond_Always);
|
||||||
|
is_control_bar_in_left_ = true;
|
||||||
|
} else if (control_winodw_pos_.x > main_window_width_ / 2 ||
|
||||||
|
(control_winodw_pos_.y < title_bar_height_ ||
|
||||||
|
control_winodw_pos_.y >
|
||||||
|
main_window_height_ - control_window_height_)) {
|
||||||
|
int pos_x = 0;
|
||||||
|
int pos_y = (control_winodw_pos_.y >= title_bar_height_ &&
|
||||||
|
control_winodw_pos_.y <=
|
||||||
|
main_window_height_ - control_window_height_)
|
||||||
|
? control_winodw_pos_.y
|
||||||
|
: (control_winodw_pos_.y < title_bar_height_
|
||||||
|
? title_bar_height_
|
||||||
|
: (main_window_height_ - control_window_height_));
|
||||||
|
|
||||||
|
if (control_bar_button_pressed_) {
|
||||||
|
if (control_window_width_ > control_window_max_width_) {
|
||||||
|
control_window_width_ = control_window_max_width_;
|
||||||
|
control_window_width_is_changing_ = false;
|
||||||
|
pos_x = main_window_width_ - control_window_max_width_;
|
||||||
|
} else {
|
||||||
|
control_window_width_is_changing_ = true;
|
||||||
|
pos_x = main_window_width_ - control_window_width_;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (control_window_width_ < control_window_min_width_) {
|
||||||
|
control_window_width_ = control_window_min_width_;
|
||||||
|
control_window_width_is_changing_ = false;
|
||||||
|
pos_x = main_window_width_ - control_window_min_width_;
|
||||||
|
} else {
|
||||||
|
control_window_width_is_changing_ = true;
|
||||||
|
pos_x = main_window_width_ - control_window_width_;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// int pos_x =
|
||||||
|
// control_bar_button_pressed_
|
||||||
|
// ? (control_window_width_is_changing_
|
||||||
|
// ? (main_window_width_ - control_window_width_)
|
||||||
|
// : (main_window_width_ - control_window_max_width_))
|
||||||
|
// : (control_window_width_is_changing_
|
||||||
|
// ? (main_window_width_ - control_window_width_)
|
||||||
|
// : (main_window_width_ - control_window_min_width_));
|
||||||
|
|
||||||
|
// int pos_y = (control_winodw_pos_.y >= title_bar_height_ &&
|
||||||
|
// control_winodw_pos_.y <=
|
||||||
|
// main_window_height_ - control_window_height_)
|
||||||
|
// ? control_winodw_pos_.y
|
||||||
|
// : (control_winodw_pos_.y < title_bar_height_
|
||||||
|
// ? title_bar_height_
|
||||||
|
// : (main_window_height_ -
|
||||||
|
// control_window_height_));
|
||||||
|
|
||||||
|
ImGui::SetNextWindowPos(ImVec2(pos_x, pos_y), ImGuiCond_Always);
|
||||||
|
is_control_bar_in_left_ = false;
|
||||||
|
LOG_ERROR("x [{}], y[{}], [{}] | [{}]", pos_x, pos_y, main_window_width_,
|
||||||
|
control_window_width_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// LOG_ERROR("x[{}], y[{}], w[{}]", control_winodw_pos_.x,
|
||||||
|
// control_winodw_pos_.y,
|
||||||
|
// control_window_width_);
|
||||||
|
|
||||||
ImGui::Begin("ControlWindow", nullptr,
|
ImGui::Begin("ControlWindow", nullptr,
|
||||||
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
|
ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize |
|
||||||
ImGuiWindowFlags_NoScrollbar |
|
ImGuiWindowFlags_NoScrollbar |
|
||||||
@@ -31,19 +153,18 @@ int Render::ControlWindow() {
|
|||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
control_winodw_pos_ = ImGui::GetWindowPos();
|
control_winodw_pos_ = ImGui::GetWindowPos();
|
||||||
if (control_winodw_pos_.x != -control_window_min_width_ / 2) {
|
|
||||||
ImGui::SetWindowPos(
|
|
||||||
ImVec2(-control_window_min_width_ / 2, control_winodw_pos_.y),
|
|
||||||
ImGuiCond_Always);
|
|
||||||
}
|
|
||||||
|
|
||||||
ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||||
static bool a, b, c, d, e;
|
static bool a, b, c, d, e;
|
||||||
ImGui::SetNextWindowPos(ImVec2(0, title_bar_height_), ImGuiCond_Once);
|
ImGui::SetNextWindowPos(
|
||||||
|
ImVec2(is_control_bar_in_left_
|
||||||
|
? control_winodw_pos_.x - control_window_width_
|
||||||
|
: control_winodw_pos_.x,
|
||||||
|
control_winodw_pos_.y),
|
||||||
|
ImGuiCond_Always);
|
||||||
ImGui::SetWindowFontScale(0.5f);
|
ImGui::SetWindowFontScale(0.5f);
|
||||||
|
|
||||||
ImGui::BeginChild("ControlBar",
|
ImGui::BeginChild("ControlBar",
|
||||||
ImVec2(control_window_width, control_window_height_),
|
ImVec2(control_window_width_ * 2, control_window_height_),
|
||||||
ImGuiChildFlags_Border, ImGuiWindowFlags_NoDecoration);
|
ImGuiChildFlags_Border, ImGuiWindowFlags_NoDecoration);
|
||||||
ImGui::SetWindowFontScale(1.0f);
|
ImGui::SetWindowFontScale(1.0f);
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
@@ -52,7 +173,7 @@ int Render::ControlWindow() {
|
|||||||
|
|
||||||
ImGui::EndChild();
|
ImGui::EndChild();
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
ImGui::PopStyleVar();
|
ImGui::PopStyleVar(4);
|
||||||
ImGui::PopStyleColor();
|
ImGui::PopStyleColor();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -141,8 +141,9 @@ class Render {
|
|||||||
int stream_window_height_last_ = 720;
|
int stream_window_height_last_ = 720;
|
||||||
int main_window_width_before_maximized_ = 960;
|
int main_window_width_before_maximized_ = 960;
|
||||||
int main_window_height_before_maximized_ = 570;
|
int main_window_height_before_maximized_ = 570;
|
||||||
int control_window_min_width_ = 40;
|
int control_window_min_width_ = 20;
|
||||||
int control_window_max_width_ = 150;
|
int control_window_max_width_ = 150;
|
||||||
|
int control_window_width_ = 0;
|
||||||
int control_window_height_ = 40;
|
int control_window_height_ = 40;
|
||||||
int local_window_width_ = 350;
|
int local_window_width_ = 350;
|
||||||
int status_bar_height_ = 20;
|
int status_bar_height_ = 20;
|
||||||
@@ -153,6 +154,9 @@ class Render {
|
|||||||
int about_window_width_ = 200;
|
int about_window_width_ = 200;
|
||||||
int about_window_height_ = 150;
|
int about_window_height_ = 150;
|
||||||
|
|
||||||
|
int control_bar_pos_x_ = 0;
|
||||||
|
int control_bar_pos_y_ = 30;
|
||||||
|
|
||||||
int main_window_width_real_ = 960;
|
int main_window_width_real_ = 960;
|
||||||
int main_window_height_real_ = 540;
|
int main_window_height_real_ = 540;
|
||||||
float dpi_scaling_w_ = 1.0f;
|
float dpi_scaling_w_ = 1.0f;
|
||||||
@@ -196,6 +200,8 @@ class Render {
|
|||||||
bool window_maximized_ = false;
|
bool window_maximized_ = false;
|
||||||
bool streaming_ = true;
|
bool streaming_ = true;
|
||||||
bool is_client_mode_ = true;
|
bool is_client_mode_ = true;
|
||||||
|
bool is_control_bar_in_left_ = true;
|
||||||
|
bool control_window_width_is_changing_ = false;
|
||||||
|
|
||||||
double copy_start_time_ = 0;
|
double copy_start_time_ = 0;
|
||||||
double regenerate_password_start_time_ = 0;
|
double regenerate_password_start_time_ = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user