зеркало из https://github.com/electron/electron.git
add function maintainAspectRatioOfInteriorContent to BrowserWindow in order to enforce an aspect ratio for an electron window
This commit is contained in:
Родитель
ca2cb9c9ba
Коммит
666aca7803
|
@ -249,6 +249,10 @@ bool Window::IsFullscreen() {
|
||||||
return window_->IsFullscreen();
|
return window_->IsFullscreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Window::MaintainAspectRatioOfInteriorContent(double aspectRatio, double extraWidth, double extraHeight) {
|
||||||
|
window_->MaintainAspectRatioOfInteriorContent(aspectRatio, gfx::Size(extraWidth, extraHeight));
|
||||||
|
}
|
||||||
|
|
||||||
void Window::SetBounds(const gfx::Rect& bounds) {
|
void Window::SetBounds(const gfx::Rect& bounds) {
|
||||||
window_->SetBounds(bounds);
|
window_->SetBounds(bounds);
|
||||||
}
|
}
|
||||||
|
@ -498,6 +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("maintainAspectRatioOfInteriorContent", &Window::MaintainAspectRatioOfInteriorContent)
|
||||||
.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,6 +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 MaintainAspectRatioOfInteriorContent(double aspectRatio, double extraWidth, double extraHeight);
|
||||||
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,6 +195,19 @@ void NativeWindow::InitFromOptions(const mate::Dictionary& options) {
|
||||||
Show();
|
Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double NativeWindow::GetInteriorContentAspectRatio() {
|
||||||
|
return interiorContentAspectRatio;
|
||||||
|
}
|
||||||
|
|
||||||
|
gfx::Size NativeWindow::GetInteriorContentExtraSize() {
|
||||||
|
return interiorContentExtraSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NativeWindow::MaintainAspectRatioOfInteriorContent(double aspectRatio, const gfx::Size& extraSize) {
|
||||||
|
interiorContentAspectRatio = aspectRatio;
|
||||||
|
interiorContentExtraSize = extraSize;
|
||||||
|
}
|
||||||
|
|
||||||
void NativeWindow::SetSize(const gfx::Size& size) {
|
void NativeWindow::SetSize(const gfx::Size& size) {
|
||||||
SetBounds(gfx::Rect(GetPosition(), size));
|
SetBounds(gfx::Rect(GetPosition(), size));
|
||||||
}
|
}
|
||||||
|
|
|
@ -107,6 +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();
|
||||||
|
virtual gfx::Size GetInteriorContentExtraSize();
|
||||||
|
virtual void MaintainAspectRatioOfInteriorContent(double aspectRatio, 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);
|
||||||
|
@ -285,6 +288,10 @@ class NativeWindow : public content::WebContentsObserver,
|
||||||
// Page's default zoom factor.
|
// Page's default zoom factor.
|
||||||
double zoom_factor_;
|
double zoom_factor_;
|
||||||
|
|
||||||
|
// Used to maintain the aspect ratio of a view which is inside of the content view.
|
||||||
|
double interiorContentAspectRatio = 0.0;
|
||||||
|
gfx::Size interiorContentExtraSize;
|
||||||
|
|
||||||
// The page this window is viewing.
|
// The page this window is viewing.
|
||||||
brightray::InspectableWebContents* inspectable_web_contents_;
|
brightray::InspectableWebContents* inspectable_web_contents_;
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,33 @@ static const CGFloat kAtomWindowCornerRadius = 4.0;
|
||||||
shell_->NotifyWindowBlur();
|
shell_->NotifyWindowBlur();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize {
|
||||||
|
NSSize newSize = frameSize;
|
||||||
|
double interiorContentAspectRatio = shell_->GetInteriorContentAspectRatio();
|
||||||
|
|
||||||
|
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();
|
||||||
|
|
||||||
|
newSize.width = roundf(((frameSize.height - extraHeightPlusFrame) * interiorContentAspectRatio) + 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);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
newSize.width = roundf(((newSize.height - extraHeightPlusFrame) * interiorContentAspectRatio) + extraWidthPlusFrame);
|
||||||
|
newSize.height = roundf(((frameSize.width - extraWidthPlusFrame) / interiorContentAspectRatio) + extraHeightPlusFrame);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newSize;
|
||||||
|
}
|
||||||
|
|
||||||
- (void)windowDidResize:(NSNotification*)notification {
|
- (void)windowDidResize:(NSNotification*)notification {
|
||||||
if (!shell_->has_frame())
|
if (!shell_->has_frame())
|
||||||
shell_->ClipWebView();
|
shell_->ClipWebView();
|
||||||
|
|
Загрузка…
Ссылка в новой задаче