mirror of https://git.suyu.dev/suyu/suyu
main: Convert to device independent coordinates for scaling
devicePixelRatioF() returns the scaling ratio when high dpi scaling is enabled. When high dpi scaling is enabled, the raw screen coordinate system is scaled to device independent coordinates.
This commit is contained in:
parent
5be85c556e
commit
ad6cec71ec
|
@ -575,7 +575,7 @@ void QtSoftwareKeyboardDialog::MoveAndResizeWindow(QPoint pos, QSize size) {
|
||||||
QDialog::resize(size);
|
QDialog::resize(size);
|
||||||
|
|
||||||
// High DPI
|
// High DPI
|
||||||
const float dpi_scale = qApp->screenAt(pos)->logicalDotsPerInch() / 96.0f;
|
const float dpi_scale = screen()->logicalDotsPerInch() / 96.0f;
|
||||||
|
|
||||||
RescaleKeyboardElements(size.width(), size.height(), dpi_scale);
|
RescaleKeyboardElements(size.width(), size.height(), dpi_scale);
|
||||||
}
|
}
|
||||||
|
|
|
@ -680,8 +680,10 @@ void GMainWindow::SoftwareKeyboardShowNormal() {
|
||||||
const auto y = layout.screen.top;
|
const auto y = layout.screen.top;
|
||||||
const auto w = layout.screen.GetWidth();
|
const auto w = layout.screen.GetWidth();
|
||||||
const auto h = layout.screen.GetHeight();
|
const auto h = layout.screen.GetHeight();
|
||||||
|
const auto scale_ratio = devicePixelRatioF();
|
||||||
|
|
||||||
software_keyboard->ShowNormalKeyboard(render_window->mapToGlobal(QPoint(x, y)), QSize(w, h));
|
software_keyboard->ShowNormalKeyboard(render_window->mapToGlobal(QPoint(x, y) / scale_ratio),
|
||||||
|
QSize(w, h) / scale_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::SoftwareKeyboardShowTextCheck(
|
void GMainWindow::SoftwareKeyboardShowTextCheck(
|
||||||
|
@ -714,9 +716,11 @@ void GMainWindow::SoftwareKeyboardShowInline(
|
||||||
(1.0f - appear_parameters.key_top_scale_y))));
|
(1.0f - appear_parameters.key_top_scale_y))));
|
||||||
const auto w = static_cast<int>(layout.screen.GetWidth() * appear_parameters.key_top_scale_x);
|
const auto w = static_cast<int>(layout.screen.GetWidth() * appear_parameters.key_top_scale_x);
|
||||||
const auto h = static_cast<int>(layout.screen.GetHeight() * appear_parameters.key_top_scale_y);
|
const auto h = static_cast<int>(layout.screen.GetHeight() * appear_parameters.key_top_scale_y);
|
||||||
|
const auto scale_ratio = devicePixelRatioF();
|
||||||
|
|
||||||
software_keyboard->ShowInlineKeyboard(std::move(appear_parameters),
|
software_keyboard->ShowInlineKeyboard(std::move(appear_parameters),
|
||||||
render_window->mapToGlobal(QPoint(x, y)), QSize(w, h));
|
render_window->mapToGlobal(QPoint(x, y) / scale_ratio),
|
||||||
|
QSize(w, h) / scale_ratio);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMainWindow::SoftwareKeyboardHideInline() {
|
void GMainWindow::SoftwareKeyboardHideInline() {
|
||||||
|
@ -796,10 +800,11 @@ void GMainWindow::WebBrowserOpenWebPage(const std::string& main_url,
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& layout = render_window->GetFramebufferLayout();
|
const auto& layout = render_window->GetFramebufferLayout();
|
||||||
web_browser_view.resize(layout.screen.GetWidth(), layout.screen.GetHeight());
|
const auto scale_ratio = devicePixelRatioF();
|
||||||
web_browser_view.move(layout.screen.left, layout.screen.top + menuBar()->height());
|
web_browser_view.resize(layout.screen.GetWidth() / scale_ratio,
|
||||||
web_browser_view.setZoomFactor(static_cast<qreal>(layout.screen.GetWidth()) /
|
layout.screen.GetHeight() / scale_ratio);
|
||||||
static_cast<qreal>(Layout::ScreenUndocked::Width));
|
web_browser_view.move(layout.screen.left / scale_ratio,
|
||||||
|
(layout.screen.top / scale_ratio) + menuBar()->height());
|
||||||
|
|
||||||
web_browser_view.setFocus();
|
web_browser_view.setFocus();
|
||||||
web_browser_view.show();
|
web_browser_view.show();
|
||||||
|
|
|
@ -163,7 +163,7 @@ void OverlayDialog::MoveAndResizeWindow() {
|
||||||
const auto height = static_cast<float>(parentWidget()->height());
|
const auto height = static_cast<float>(parentWidget()->height());
|
||||||
|
|
||||||
// High DPI
|
// High DPI
|
||||||
const float dpi_scale = parentWidget()->windowHandle()->screen()->logicalDotsPerInch() / 96.0f;
|
const float dpi_scale = screen()->logicalDotsPerInch() / 96.0f;
|
||||||
|
|
||||||
const auto title_text_font_size = BASE_TITLE_FONT_SIZE * (height / BASE_HEIGHT) / dpi_scale;
|
const auto title_text_font_size = BASE_TITLE_FONT_SIZE * (height / BASE_HEIGHT) / dpi_scale;
|
||||||
const auto body_text_font_size =
|
const auto body_text_font_size =
|
||||||
|
|
Loading…
Reference in New Issue