changes requested for pull request #2250 into electron master
This commit is contained in:
parent
6656afd57f
commit
6d25c81bd1
6 changed files with 40 additions and 33 deletions
|
@ -249,9 +249,8 @@ bool Window::IsFullscreen() {
|
||||||
return window_->IsFullscreen();
|
return window_->IsFullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::MaintainContentAspectRatio(double aspectRatio,
|
void Window::SetAspectRatio(double aspectRatio, gfx::Size extraSize) {
|
||||||
double width, double height) {
|
window_->SetAspectRatio(aspectRatio, extraSize);
|
||||||
window_->MaintainContentAspectRatio(aspectRatio, gfx::Size(width, height));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::SetBounds(const gfx::Rect& bounds) {
|
void Window::SetBounds(const gfx::Rect& bounds) {
|
||||||
|
@ -503,8 +502,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
|
||||||
.SetMethod("isMinimized", &Window::IsMinimized)
|
.SetMethod("isMinimized", &Window::IsMinimized)
|
||||||
.SetMethod("setFullScreen", &Window::SetFullScreen)
|
.SetMethod("setFullScreen", &Window::SetFullScreen)
|
||||||
.SetMethod("isFullScreen", &Window::IsFullscreen)
|
.SetMethod("isFullScreen", &Window::IsFullscreen)
|
||||||
.SetMethod("maintainContentAspectRatio",
|
.SetMethod("setAspectRatio", &Window::SetAspectRatio)
|
||||||
&Window::MaintainContentAspectRatio)
|
|
||||||
.SetMethod("getBounds", &Window::GetBounds)
|
.SetMethod("getBounds", &Window::GetBounds)
|
||||||
.SetMethod("setBounds", &Window::SetBounds)
|
.SetMethod("setBounds", &Window::SetBounds)
|
||||||
.SetMethod("getSize", &Window::GetSize)
|
.SetMethod("getSize", &Window::GetSize)
|
||||||
|
|
|
@ -95,8 +95,7 @@ class Window : public mate::TrackableObject<Window>,
|
||||||
bool IsMinimized();
|
bool IsMinimized();
|
||||||
void SetFullScreen(bool fullscreen);
|
void SetFullScreen(bool fullscreen);
|
||||||
bool IsFullscreen();
|
bool IsFullscreen();
|
||||||
void MaintainContentAspectRatio(double aspectRatio,
|
void SetAspectRatio(double aspectRatio, gfx::Size extraSize);
|
||||||
double width, double height);
|
|
||||||
void SetBounds(const gfx::Rect& bounds);
|
void SetBounds(const gfx::Rect& bounds);
|
||||||
gfx::Rect GetBounds();
|
gfx::Rect GetBounds();
|
||||||
void SetSize(int width, int height);
|
void SetSize(int width, int height);
|
||||||
|
|
|
@ -195,18 +195,18 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
|
||||||
Show();
|
Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
double NativeWindow::GetInteriorContentAspectRatio() {
|
double NativeWindow::GetAspectRatio() {
|
||||||
return interiorContentAspectRatio;
|
return aspectRatio_;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Size NativeWindow::GetInteriorContentExtraSize() {
|
gfx::Size NativeWindow::GetAspectRatioExtraSize() {
|
||||||
return interiorContentExtraSize;
|
return aspectRatioExtraSize_;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindow::MaintainContentAspectRatio(double aspectRatio,
|
void NativeWindow::SetAspectRatio(double aspectRatio,
|
||||||
const gfx::Size& extraSize) {
|
const gfx::Size& extraSize) {
|
||||||
interiorContentAspectRatio = aspectRatio;
|
aspectRatio_ = aspectRatio;
|
||||||
interiorContentExtraSize = extraSize;
|
aspectRatioExtraSize_ = extraSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NativeWindow::SetSize(const gfx::Size& size) {
|
void NativeWindow::SetSize(const gfx::Size& size) {
|
||||||
|
|
|
@ -107,10 +107,9 @@ class NativeWindow : public content::WebContentsObserver,
|
||||||
virtual bool IsMinimized() = 0;
|
virtual bool IsMinimized() = 0;
|
||||||
virtual void SetFullScreen(bool fullscreen) = 0;
|
virtual void SetFullScreen(bool fullscreen) = 0;
|
||||||
virtual bool IsFullscreen() const = 0;
|
virtual bool IsFullscreen() const = 0;
|
||||||
double GetInteriorContentAspectRatio();
|
double GetAspectRatio();
|
||||||
virtual gfx::Size GetInteriorContentExtraSize();
|
virtual gfx::Size GetAspectRatioExtraSize();
|
||||||
virtual void MaintainContentAspectRatio(double aspectRatio,
|
virtual void SetAspectRatio(double aspectRatio, const gfx::Size& extraSize);
|
||||||
const gfx::Size& extraSize);
|
|
||||||
virtual void SetBounds(const gfx::Rect& bounds) = 0;
|
virtual void SetBounds(const gfx::Rect& bounds) = 0;
|
||||||
virtual gfx::Rect GetBounds() = 0;
|
virtual gfx::Rect GetBounds() = 0;
|
||||||
virtual void SetSize(const gfx::Size& size);
|
virtual void SetSize(const gfx::Size& size);
|
||||||
|
@ -291,8 +290,8 @@ class NativeWindow : public content::WebContentsObserver,
|
||||||
|
|
||||||
// Used to maintain the aspect ratio of a view which is inside of the
|
// Used to maintain the aspect ratio of a view which is inside of the
|
||||||
// content view.
|
// content view.
|
||||||
double interiorContentAspectRatio = 0.0;
|
double aspectRatio_ = 0.0;
|
||||||
gfx::Size interiorContentExtraSize;
|
gfx::Size aspectRatioExtraSize_;
|
||||||
|
|
||||||
// The page this window is viewing.
|
// The page this window is viewing.
|
||||||
brightray::InspectableWebContents* inspectable_web_contents_;
|
brightray::InspectableWebContents* inspectable_web_contents_;
|
||||||
|
|
|
@ -97,25 +97,25 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
|
||||||
|
|
||||||
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize {
|
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize {
|
||||||
NSSize newSize = frameSize;
|
NSSize newSize = frameSize;
|
||||||
double interiorContentAspectRatio = shell_->GetInteriorContentAspectRatio();
|
double aspectRatio = shell_->GetAspectRatio();
|
||||||
|
|
||||||
if (interiorContentAspectRatio > 0.0) {
|
if (aspectRatio > 0.0) {
|
||||||
NSRect windowFrame = [sender frame];
|
gfx::Size windowFrameSize = shell_->GetSize();
|
||||||
NSRect contentViewBounds = [[sender contentView] bounds];
|
gfx::Size contentViewSize = shell_->GetContentSize();
|
||||||
gfx::Size interiorContentExtraSize = shell_->GetInteriorContentExtraSize();
|
gfx::Size aspectRatioExtraSize = shell_->GetAspectRatioExtraSize();
|
||||||
double extraWidthPlusFrame = windowFrame.size.width - contentViewBounds.size.width + interiorContentExtraSize.width();
|
double extraWidthPlusFrame = windowFrameSize.width() - contentViewSize.width() + aspectRatioExtraSize.width();
|
||||||
double extraHeightPlusFrame = windowFrame.size.height - contentViewBounds.size.height + interiorContentExtraSize.height();
|
double extraHeightPlusFrame = windowFrameSize.height() - contentViewSize.height() + aspectRatioExtraSize.height();
|
||||||
|
|
||||||
newSize.width = roundf(((frameSize.height - extraHeightPlusFrame) * interiorContentAspectRatio) + extraWidthPlusFrame);
|
newSize.width = roundf(((frameSize.height - extraHeightPlusFrame) * aspectRatio) + extraWidthPlusFrame);
|
||||||
|
|
||||||
// If the new width is less than the frame size use it as the primary constraint. This ensures that the value returned
|
// If the new width is less than the frame size use it as the primary constraint. This ensures that the value returned
|
||||||
// by this method will never be larger than the users requested window size.
|
// by this method will never be larger than the users requested window size.
|
||||||
if (newSize.width < frameSize.width) {
|
if (newSize.width <= frameSize.width) {
|
||||||
newSize.height = roundf(((newSize.width - extraWidthPlusFrame) / interiorContentAspectRatio) + extraHeightPlusFrame);
|
newSize.height = roundf(((newSize.width - extraWidthPlusFrame) / aspectRatio) + extraHeightPlusFrame);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newSize.height = roundf(((frameSize.width - extraWidthPlusFrame) / interiorContentAspectRatio) + extraHeightPlusFrame);
|
newSize.height = roundf(((frameSize.width - extraWidthPlusFrame) / aspectRatio) + extraHeightPlusFrame);
|
||||||
newSize.width = roundf(((newSize.height - extraHeightPlusFrame) * interiorContentAspectRatio) + extraWidthPlusFrame);
|
newSize.width = roundf(((newSize.height - extraHeightPlusFrame) * aspectRatio) + extraWidthPlusFrame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -361,6 +361,17 @@ Sets whether the window should be in fullscreen mode.
|
||||||
|
|
||||||
Returns whether the window is in fullscreen mode.
|
Returns whether the window is in fullscreen mode.
|
||||||
|
|
||||||
|
### BrowserWindow.setAspectRatio(aspectRatio, [extraSize])
|
||||||
|
|
||||||
|
* `aspectRatio` The aspect ratio we want to maintain for some portion of the content view.
|
||||||
|
* `rect` Object - The extra size to not be included in the aspect ratio to be maintained.
|
||||||
|
* `width` Integer
|
||||||
|
* `height` Integer
|
||||||
|
|
||||||
|
This will have a window maintain an aspect ratio. The extra size allows a developer to be able to have space, specifified in pixels, not included within the aspect ratio calculations. This API already takes into account the difference between a window's size and it's content size.
|
||||||
|
|
||||||
|
Consider a normal window with an HD video player and associated controls. Perhaps there are 15 pixels of controls on the left edge, 25 pixels of controls on the right edge and 50 pixels of controls below the player. In order to maintain a 16:9 aspect ratio (standard aspect ratio for HD @1920x1080) within the player itself we would call this function with arguments of 16/9 and [ 40, 50 ]. The second argument doesn't care where the extra width and height are within the content view — only that they exist. Just sum any extra width and height areas you have within the overall content view.
|
||||||
|
|
||||||
### BrowserWindow.setBounds(options)
|
### BrowserWindow.setBounds(options)
|
||||||
|
|
||||||
* `options` Object
|
* `options` Object
|
||||||
|
|
Loading…
Reference in a new issue