feat: implement win.setAspectRatio() on Linux (#19516)
This commit is contained in:
parent
4240017cb6
commit
dcf6f046d9
5 changed files with 45 additions and 2 deletions
|
@ -946,11 +946,11 @@ Returns `Boolean` - Whether the window is in simple (pre-Lion) fullscreen mode.
|
||||||
|
|
||||||
Returns `Boolean` - Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode).
|
Returns `Boolean` - Whether the window is in normal state (not maximized, not minimized, not in fullscreen mode).
|
||||||
|
|
||||||
#### `win.setAspectRatio(aspectRatio[, extraSize])` _macOS_
|
#### `win.setAspectRatio(aspectRatio[, extraSize])` _macOS_ _Linux_
|
||||||
|
|
||||||
* `aspectRatio` Float - The aspect ratio to maintain for some portion of the
|
* `aspectRatio` Float - The aspect ratio to maintain for some portion of the
|
||||||
content view.
|
content view.
|
||||||
* `extraSize` [Size](structures/size.md) (optional) - The extra size not to be included while
|
* `extraSize` [Size](structures/size.md) (optional) _macOS_ - The extra size not to be included while
|
||||||
maintaining the aspect ratio.
|
maintaining the aspect ratio.
|
||||||
|
|
||||||
This will make a window maintain an aspect ratio. The extra size allows a
|
This will make a window maintain an aspect ratio. The extra size allows a
|
||||||
|
|
|
@ -84,3 +84,4 @@ build_win_fix_ambiguous_reference_with_msstl.patch
|
||||||
build_win_iwyu_for_smil_time.patch
|
build_win_iwyu_for_smil_time.patch
|
||||||
remove_usage_of_incognito_apis_in_the_spellchecker.patch
|
remove_usage_of_incognito_apis_in_the_spellchecker.patch
|
||||||
chore_use_electron_resources_not_chrome_for_spellchecker.patch
|
chore_use_electron_resources_not_chrome_for_spellchecker.patch
|
||||||
|
feat_unset_window_aspect_ratio_on_linux.patch
|
||||||
|
|
|
@ -0,0 +1,28 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Erick Zhao <erickzhao@github.com>
|
||||||
|
Date: Thu, 1 Aug 2019 13:40:17 -0700
|
||||||
|
Subject: feat: unset window aspect ratio on linux
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/ui/base/x/x11_window.cc b/ui/base/x/x11_window.cc
|
||||||
|
index 7df0a3a8ed268e9b2ca1bad8ac5fd35115b98f77..a895defd2b695e2d5b2b4324551adcaac487f588 100644
|
||||||
|
--- a/ui/base/x/x11_window.cc
|
||||||
|
+++ b/ui/base/x/x11_window.cc
|
||||||
|
@@ -676,9 +676,14 @@ void XWindow::SetAspectRatio(const gfx::SizeF& aspect_ratio) {
|
||||||
|
long supplied_return;
|
||||||
|
|
||||||
|
XGetWMNormalHints(xdisplay_, xwindow_, &size_hints, &supplied_return);
|
||||||
|
- size_hints.flags |= PAspect;
|
||||||
|
- size_hints.min_aspect.x = size_hints.max_aspect.x = aspect_ratio.width();
|
||||||
|
- size_hints.min_aspect.y = size_hints.max_aspect.y = aspect_ratio.height();
|
||||||
|
+ // if ratio parameter has length 0, unforce the aspect ratio
|
||||||
|
+ if (aspect_ratio.IsEmpty()) {
|
||||||
|
+ size_hints.flags &= ~PAspect;
|
||||||
|
+ } else {
|
||||||
|
+ size_hints.flags |= PAspect;
|
||||||
|
+ size_hints.min_aspect.x = size_hints.max_aspect.x = aspect_ratio.width();
|
||||||
|
+ size_hints.min_aspect.y = size_hints.max_aspect.y = aspect_ratio.height();
|
||||||
|
+ }
|
||||||
|
XSetWMNormalHints(xdisplay_, xwindow_, &size_hints);
|
||||||
|
}
|
||||||
|
|
|
@ -709,6 +709,18 @@ bool NativeWindowViews::IsResizable() {
|
||||||
return CanResize();
|
return CanResize();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NativeWindowViews::SetAspectRatio(double aspect_ratio,
|
||||||
|
const gfx::Size& extra_size) {
|
||||||
|
NativeWindow::SetAspectRatio(aspect_ratio, extra_size);
|
||||||
|
#if defined(OS_LINUX)
|
||||||
|
gfx::SizeF aspect(aspect_ratio, 1.0);
|
||||||
|
// Scale up because SetAspectRatio() truncates aspect value to int
|
||||||
|
aspect.Scale(100);
|
||||||
|
|
||||||
|
widget()->SetAspectRatio(aspect);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void NativeWindowViews::SetMovable(bool movable) {
|
void NativeWindowViews::SetMovable(bool movable) {
|
||||||
movable_ = movable;
|
movable_ = movable;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,8 @@ class NativeWindowViews : public NativeWindow,
|
||||||
bool MoveAbove(const std::string& sourceId) override;
|
bool MoveAbove(const std::string& sourceId) override;
|
||||||
void MoveTop() override;
|
void MoveTop() override;
|
||||||
bool IsResizable() override;
|
bool IsResizable() override;
|
||||||
|
void SetAspectRatio(double aspect_ratio,
|
||||||
|
const gfx::Size& extra_size) override;
|
||||||
void SetMovable(bool movable) override;
|
void SetMovable(bool movable) override;
|
||||||
bool IsMovable() override;
|
bool IsMovable() override;
|
||||||
void SetMinimizable(bool minimizable) override;
|
void SetMinimizable(bool minimizable) override;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue