changes requested for pull request #2250 into electron master

This commit is contained in:
Michael S. Barthelemy 2015-07-22 10:23:31 -04:00
parent 6656afd57f
commit 6d25c81bd1
6 changed files with 40 additions and 33 deletions

View file

@ -249,9 +249,8 @@ bool Window::IsFullscreen() {
return window_->IsFullscreen();
}
void Window::MaintainContentAspectRatio(double aspectRatio,
double width, double height) {
window_->MaintainContentAspectRatio(aspectRatio, gfx::Size(width, height));
void Window::SetAspectRatio(double aspectRatio, gfx::Size extraSize) {
window_->SetAspectRatio(aspectRatio, extraSize);
}
void Window::SetBounds(const gfx::Rect& bounds) {
@ -503,8 +502,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isMinimized", &Window::IsMinimized)
.SetMethod("setFullScreen", &Window::SetFullScreen)
.SetMethod("isFullScreen", &Window::IsFullscreen)
.SetMethod("maintainContentAspectRatio",
&Window::MaintainContentAspectRatio)
.SetMethod("setAspectRatio", &Window::SetAspectRatio)
.SetMethod("getBounds", &Window::GetBounds)
.SetMethod("setBounds", &Window::SetBounds)
.SetMethod("getSize", &Window::GetSize)

View file

@ -95,8 +95,7 @@ class Window : public mate::TrackableObject<Window>,
bool IsMinimized();
void SetFullScreen(bool fullscreen);
bool IsFullscreen();
void MaintainContentAspectRatio(double aspectRatio,
double width, double height);
void SetAspectRatio(double aspectRatio, gfx::Size extraSize);
void SetBounds(const gfx::Rect& bounds);
gfx::Rect GetBounds();
void SetSize(int width, int height);

View file

@ -195,18 +195,18 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
Show();
}
double NativeWindow::GetInteriorContentAspectRatio() {
return interiorContentAspectRatio;
double NativeWindow::GetAspectRatio() {
return aspectRatio_;
}
gfx::Size NativeWindow::GetInteriorContentExtraSize() {
return interiorContentExtraSize;
gfx::Size NativeWindow::GetAspectRatioExtraSize() {
return aspectRatioExtraSize_;
}
void NativeWindow::MaintainContentAspectRatio(double aspectRatio,
const gfx::Size& extraSize) {
interiorContentAspectRatio = aspectRatio;
interiorContentExtraSize = extraSize;
void NativeWindow::SetAspectRatio(double aspectRatio,
const gfx::Size& extraSize) {
aspectRatio_ = aspectRatio;
aspectRatioExtraSize_ = extraSize;
}
void NativeWindow::SetSize(const gfx::Size& size) {

View file

@ -107,10 +107,9 @@ class NativeWindow : public content::WebContentsObserver,
virtual bool IsMinimized() = 0;
virtual void SetFullScreen(bool fullscreen) = 0;
virtual bool IsFullscreen() const = 0;
double GetInteriorContentAspectRatio();
virtual gfx::Size GetInteriorContentExtraSize();
virtual void MaintainContentAspectRatio(double aspectRatio,
const gfx::Size& extraSize);
double GetAspectRatio();
virtual gfx::Size GetAspectRatioExtraSize();
virtual void SetAspectRatio(double aspectRatio, const gfx::Size& extraSize);
virtual void SetBounds(const gfx::Rect& bounds) = 0;
virtual gfx::Rect GetBounds() = 0;
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
// content view.
double interiorContentAspectRatio = 0.0;
gfx::Size interiorContentExtraSize;
double aspectRatio_ = 0.0;
gfx::Size aspectRatioExtraSize_;
// The page this window is viewing.
brightray::InspectableWebContents* inspectable_web_contents_;

View file

@ -97,25 +97,25 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize {
NSSize newSize = frameSize;
double interiorContentAspectRatio = shell_->GetInteriorContentAspectRatio();
double aspectRatio = shell_->GetAspectRatio();
if (interiorContentAspectRatio > 0.0) {
NSRect windowFrame = [sender frame];
NSRect contentViewBounds = [[sender contentView] bounds];
gfx::Size interiorContentExtraSize = shell_->GetInteriorContentExtraSize();
double extraWidthPlusFrame = windowFrame.size.width - contentViewBounds.size.width + interiorContentExtraSize.width();
double extraHeightPlusFrame = windowFrame.size.height - contentViewBounds.size.height + interiorContentExtraSize.height();
if (aspectRatio > 0.0) {
gfx::Size windowFrameSize = shell_->GetSize();
gfx::Size contentViewSize = shell_->GetContentSize();
gfx::Size aspectRatioExtraSize = shell_->GetAspectRatioExtraSize();
double extraWidthPlusFrame = windowFrameSize.width() - contentViewSize.width() + aspectRatioExtraSize.width();
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
// by this method will never be larger than the users requested window size.
if (newSize.width < frameSize.width) {
newSize.height = roundf(((newSize.width - extraWidthPlusFrame) / interiorContentAspectRatio) + extraHeightPlusFrame);
if (newSize.width <= frameSize.width) {
newSize.height = roundf(((newSize.width - extraWidthPlusFrame) / aspectRatio) + extraHeightPlusFrame);
}
else {
newSize.height = roundf(((frameSize.width - extraWidthPlusFrame) / interiorContentAspectRatio) + extraHeightPlusFrame);
newSize.width = roundf(((newSize.height - extraHeightPlusFrame) * interiorContentAspectRatio) + extraWidthPlusFrame);
newSize.height = roundf(((frameSize.width - extraWidthPlusFrame) / aspectRatio) + extraHeightPlusFrame);
newSize.width = roundf(((newSize.height - extraHeightPlusFrame) * aspectRatio) + extraWidthPlusFrame);
}
}