mirror of
https://github.com/kunkundi/crossdesk.git
synced 2025-10-26 20:25:34 +08:00
[fix] fix display errors when stream window resized
This commit is contained in:
@@ -84,19 +84,24 @@ int Render::ControlWindow() {
|
|||||||
stream_render_rect_.y;
|
stream_render_rect_.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// set cursor pos
|
|
||||||
new_cursor_pos_x = new_control_window_pos_x + mouse_diff_control_bar_pos_x_;
|
|
||||||
new_cursor_pos_y = new_control_window_pos_y + mouse_diff_control_bar_pos_y_;
|
|
||||||
|
|
||||||
ImGui::SetNextWindowPos(
|
ImGui::SetNextWindowPos(
|
||||||
ImVec2(new_control_window_pos_x, new_control_window_pos_y),
|
ImVec2(new_control_window_pos_x, new_control_window_pos_y),
|
||||||
ImGuiCond_Always);
|
ImGuiCond_Always);
|
||||||
|
|
||||||
if (0 != mouse_diff_control_bar_pos_x_ &&
|
if (0 != mouse_diff_control_bar_pos_x_ &&
|
||||||
0 != mouse_diff_control_bar_pos_y_) {
|
0 != mouse_diff_control_bar_pos_y_) {
|
||||||
|
// set cursor pos
|
||||||
|
new_cursor_pos_x =
|
||||||
|
new_control_window_pos_x + mouse_diff_control_bar_pos_x_;
|
||||||
|
new_cursor_pos_y =
|
||||||
|
new_control_window_pos_y + mouse_diff_control_bar_pos_y_;
|
||||||
|
|
||||||
|
if (new_cursor_pos_x < stream_window_width_ &&
|
||||||
|
new_cursor_pos_y < stream_window_height_) {
|
||||||
SDL_WarpMouseInWindow(stream_window_, (int)new_cursor_pos_x,
|
SDL_WarpMouseInWindow(stream_window_, (int)new_cursor_pos_x,
|
||||||
(int)new_cursor_pos_y);
|
(int)new_cursor_pos_y);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
reset_control_bar_pos_ = false;
|
reset_control_bar_pos_ = false;
|
||||||
} else if (!reset_control_bar_pos_ &&
|
} else if (!reset_control_bar_pos_ &&
|
||||||
ImGui::IsMouseReleased(ImGuiPopupFlags_MouseButtonLeft) ||
|
ImGui::IsMouseReleased(ImGuiPopupFlags_MouseButtonLeft) ||
|
||||||
|
|||||||
@@ -507,10 +507,10 @@ int Render::CreateStreamWindow() {
|
|||||||
|
|
||||||
SDL_WindowFlags window_flags =
|
SDL_WindowFlags window_flags =
|
||||||
(SDL_WindowFlags)(SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_BORDERLESS);
|
(SDL_WindowFlags)(SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_BORDERLESS);
|
||||||
stream_window_ = SDL_CreateWindow(
|
stream_window_ =
|
||||||
"Stream window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
|
SDL_CreateWindow("Stream window", SDL_WINDOWPOS_UNDEFINED,
|
||||||
(int)stream_window_width_default_, (int)stream_window_height_default_,
|
SDL_WINDOWPOS_UNDEFINED, stream_window_width_default_,
|
||||||
window_flags);
|
stream_window_height_default_, window_flags);
|
||||||
|
|
||||||
stream_renderer_ = SDL_CreateRenderer(
|
stream_renderer_ = SDL_CreateRenderer(
|
||||||
stream_window_, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
|
stream_window_, -1, SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_ACCELERATED);
|
||||||
@@ -529,12 +529,22 @@ int Render::CreateStreamWindow() {
|
|||||||
// for window region action
|
// for window region action
|
||||||
SDL_SetWindowHitTest(stream_window_, HitTestCallback, this);
|
SDL_SetWindowHitTest(stream_window_, HitTestCallback, this);
|
||||||
|
|
||||||
|
// change stream_render_rect_
|
||||||
|
SDL_Event event;
|
||||||
|
event.type = SDL_WINDOWEVENT;
|
||||||
|
event.window.windowID = SDL_GetWindowID(stream_window_);
|
||||||
|
event.window.event = SDL_WINDOWEVENT_SIZE_CHANGED;
|
||||||
|
SDL_PushEvent(&event);
|
||||||
|
|
||||||
stream_window_created_ = true;
|
stream_window_created_ = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int Render::DestroyStreamWindow() {
|
int Render::DestroyStreamWindow() {
|
||||||
|
stream_window_width_ = (float)stream_window_width_default_;
|
||||||
|
stream_window_height_ = (float)stream_window_height_default_;
|
||||||
|
|
||||||
if (stream_ctx_) {
|
if (stream_ctx_) {
|
||||||
ImGui::SetCurrentContext(stream_ctx_);
|
ImGui::SetCurrentContext(stream_ctx_);
|
||||||
}
|
}
|
||||||
@@ -626,10 +636,12 @@ int Render::SetupStreamWindow() {
|
|||||||
|
|
||||||
SDL_GL_GetDrawableSize(stream_window_, &main_window_width_real_,
|
SDL_GL_GetDrawableSize(stream_window_, &main_window_width_real_,
|
||||||
&main_window_height_real_);
|
&main_window_height_real_);
|
||||||
|
|
||||||
stream_window_dpi_scaling_w_ =
|
stream_window_dpi_scaling_w_ =
|
||||||
stream_window_width_real_ / stream_window_width_;
|
stream_window_width_real_ / stream_window_width_;
|
||||||
stream_window_dpi_scaling_h_ =
|
stream_window_dpi_scaling_h_ =
|
||||||
stream_window_width_real_ / stream_window_width_;
|
stream_window_width_real_ / stream_window_width_;
|
||||||
|
|
||||||
SDL_RenderSetScale(stream_renderer_, stream_window_dpi_scaling_w_,
|
SDL_RenderSetScale(stream_renderer_, stream_window_dpi_scaling_w_,
|
||||||
stream_window_dpi_scaling_h_);
|
stream_window_dpi_scaling_h_);
|
||||||
LOG_INFO("Use dpi scaling [{}x{}] for stream window",
|
LOG_INFO("Use dpi scaling [{}x{}] for stream window",
|
||||||
@@ -874,7 +886,6 @@ int Render::Run() {
|
|||||||
streaming_ = false;
|
streaming_ = false;
|
||||||
rejoin_ = false;
|
rejoin_ = false;
|
||||||
connection_established_ = false;
|
connection_established_ = false;
|
||||||
received_frame_ = false;
|
|
||||||
is_client_mode_ = false;
|
is_client_mode_ = false;
|
||||||
audio_capture_button_pressed_ = false;
|
audio_capture_button_pressed_ = false;
|
||||||
fullscreen_button_pressed_ = false;
|
fullscreen_button_pressed_ = false;
|
||||||
@@ -884,14 +895,6 @@ int Render::Run() {
|
|||||||
memset(&net_traffic_stats_, 0, sizeof(net_traffic_stats_));
|
memset(&net_traffic_stats_, 0, sizeof(net_traffic_stats_));
|
||||||
SDL_SetWindowFullscreen(main_window_, SDL_FALSE);
|
SDL_SetWindowFullscreen(main_window_, SDL_FALSE);
|
||||||
memset(audio_buffer_, 0, 720);
|
memset(audio_buffer_, 0, 720);
|
||||||
SDL_SetWindowSize(main_window_, (int)main_window_width_default_,
|
|
||||||
(int)main_window_height_default_);
|
|
||||||
|
|
||||||
// SDL_Rect display_bounds;
|
|
||||||
// SDL_GetDisplayBounds(0, &display_bounds);
|
|
||||||
// int center_x = (display_bounds.w - main_window_width_default_) / 2;
|
|
||||||
// int center_y = (display_bounds.h - main_window_height_default_) /
|
|
||||||
// 2; SDL_SetWindowPosition(main_window_, center_x, center_y);
|
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
@@ -902,10 +905,15 @@ int Render::Run() {
|
|||||||
} else if (event.window.event == SDL_WINDOWEVENT_MINIMIZED) {
|
} else if (event.window.event == SDL_WINDOWEVENT_MINIMIZED) {
|
||||||
} else if (event.window.event == SDL_WINDOWEVENT_RESTORED) {
|
} else if (event.window.event == SDL_WINDOWEVENT_RESTORED) {
|
||||||
window_maximized_ = false;
|
window_maximized_ = false;
|
||||||
} else if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED) {
|
} else if (event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED &&
|
||||||
|
stream_window_created_ &&
|
||||||
|
event.window.windowID == SDL_GetWindowID(stream_window_)) {
|
||||||
reset_control_bar_pos_ = true;
|
reset_control_bar_pos_ = true;
|
||||||
SDL_GetWindowSize(stream_window_, (int*)&stream_window_width_,
|
int stream_window_width, stream_window_height;
|
||||||
(int*)&stream_window_height_);
|
SDL_GetWindowSize(stream_window_, &stream_window_width,
|
||||||
|
&stream_window_height);
|
||||||
|
stream_window_width_ = (float)stream_window_width;
|
||||||
|
stream_window_height_ = (float)stream_window_height;
|
||||||
|
|
||||||
float video_ratio = (float)video_width_ / (float)video_height_;
|
float video_ratio = (float)video_width_ / (float)video_height_;
|
||||||
float video_ratio_reverse = (float)video_height_ / (float)video_width_;
|
float video_ratio_reverse = (float)video_height_ / (float)video_width_;
|
||||||
|
|||||||
@@ -180,8 +180,8 @@ class Render {
|
|||||||
float main_window_height_ = 480;
|
float main_window_height_ = 480;
|
||||||
float main_window_width_last_ = 640;
|
float main_window_width_last_ = 640;
|
||||||
float main_window_height_last_ = 480;
|
float main_window_height_last_ = 480;
|
||||||
float stream_window_width_default_ = 1280;
|
int stream_window_width_default_ = 1280;
|
||||||
float stream_window_height_default_ = 720;
|
int stream_window_height_default_ = 720;
|
||||||
float stream_window_width_ = 1280;
|
float stream_window_width_ = 1280;
|
||||||
float stream_window_height_ = 720;
|
float stream_window_height_ = 720;
|
||||||
int stream_window_width_last_ = 1280;
|
int stream_window_width_last_ = 1280;
|
||||||
@@ -279,7 +279,6 @@ class Render {
|
|||||||
bool mouse_control_button_pressed_ = false;
|
bool mouse_control_button_pressed_ = false;
|
||||||
bool audio_capture_button_pressed_ = false;
|
bool audio_capture_button_pressed_ = false;
|
||||||
bool show_settings_window_ = false;
|
bool show_settings_window_ = false;
|
||||||
bool received_frame_ = false;
|
|
||||||
bool is_create_connection_ = false;
|
bool is_create_connection_ = false;
|
||||||
bool audio_buffer_fresh_ = false;
|
bool audio_buffer_fresh_ = false;
|
||||||
bool rejoin_ = false;
|
bool rejoin_ = false;
|
||||||
|
|||||||
@@ -162,11 +162,6 @@ void Render::OnReceiveVideoBufferCb(const XVideoFrame *video_frame,
|
|||||||
if (!render->dst_buffer_) {
|
if (!render->dst_buffer_) {
|
||||||
render->dst_buffer_capacity_ = video_frame->size;
|
render->dst_buffer_capacity_ = video_frame->size;
|
||||||
render->dst_buffer_ = new unsigned char[video_frame->size];
|
render->dst_buffer_ = new unsigned char[video_frame->size];
|
||||||
// Adapt stream_render_rect_ to the video resolution
|
|
||||||
SDL_Event event;
|
|
||||||
event.type = SDL_WINDOWEVENT;
|
|
||||||
event.window.event = SDL_WINDOWEVENT_SIZE_CHANGED;
|
|
||||||
SDL_PushEvent(&event);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (render->dst_buffer_capacity_ < video_frame->size) {
|
if (render->dst_buffer_capacity_ < video_frame->size) {
|
||||||
@@ -183,7 +178,6 @@ void Render::OnReceiveVideoBufferCb(const XVideoFrame *video_frame,
|
|||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
event.type = REFRESH_EVENT;
|
event.type = REFRESH_EVENT;
|
||||||
SDL_PushEvent(&event);
|
SDL_PushEvent(&event);
|
||||||
render->received_frame_ = true;
|
|
||||||
render->streaming_ = true;
|
render->streaming_ = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user