Fix calculating min/max size in frameless views
The minimum and maximum size that frameless windows had used, was incorrect. It included the border, so when it was called it actually added that to the size, so window increased in size. The fix makes sure that the view will use the frameless size. This fixes #2945 and partially fixes #1806 (it also refers to some other issues with hidpi which might still exist).
This commit is contained in:
parent
8c31c7fb59
commit
aea1f8aebb
3 changed files with 35 additions and 4 deletions
|
@ -818,9 +818,7 @@ bool NativeWindowViews::ExecuteWindowsCommand(int command_id) {
|
||||||
NotifyWindowExecuteWindowsCommand(command);
|
NotifyWindowExecuteWindowsCommand(command);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
|
||||||
bool NativeWindowViews::PreHandleMSG(
|
bool NativeWindowViews::PreHandleMSG(
|
||||||
UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) {
|
UINT message, WPARAM w_param, LPARAM l_param, LRESULT* result) {
|
||||||
switch (message) {
|
switch (message) {
|
||||||
|
@ -874,6 +872,33 @@ void NativeWindowViews::HandleSizeEvent(WPARAM w_param, LPARAM l_param) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
gfx::Size NativeWindowViews::WindowSizeToFramelessSize(
|
||||||
|
const gfx::Size& size) {
|
||||||
|
if (size.width() == 0 && size.height() == 0)
|
||||||
|
return size;
|
||||||
|
|
||||||
|
gfx::Rect window_bounds = gfx::Rect(size);
|
||||||
|
if (use_content_size_) {
|
||||||
|
if (menu_bar_ && menu_bar_visible_) {
|
||||||
|
window_bounds.set_height(window_bounds.height() + kMenuBarHeight);
|
||||||
|
}
|
||||||
|
} else if (has_frame()) {
|
||||||
|
#if defined(OS_WIN)
|
||||||
|
gfx::Size frame_size = gfx::win::ScreenToDIPRect(
|
||||||
|
window_->non_client_view()->GetWindowBoundsForClientBounds(
|
||||||
|
gfx::Rect())).size();
|
||||||
|
#else
|
||||||
|
gfx::Size frame_size =
|
||||||
|
window_->non_client_view()->GetWindowBoundsForClientBounds(
|
||||||
|
gfx::Rect()).size();
|
||||||
|
#endif
|
||||||
|
window_bounds.set_height(window_bounds.height() - frame_size.height());
|
||||||
|
window_bounds.set_width(window_bounds.width() - frame_size.width());
|
||||||
|
}
|
||||||
|
|
||||||
|
return window_bounds.size();
|
||||||
|
}
|
||||||
|
|
||||||
void NativeWindowViews::HandleKeyboardEvent(
|
void NativeWindowViews::HandleKeyboardEvent(
|
||||||
content::WebContents*,
|
content::WebContents*,
|
||||||
const content::NativeWebKeyboardEvent& event) {
|
const content::NativeWebKeyboardEvent& event) {
|
||||||
|
|
|
@ -94,6 +94,8 @@ class NativeWindowViews : public NativeWindow,
|
||||||
|
|
||||||
gfx::AcceleratedWidget GetAcceleratedWidget();
|
gfx::AcceleratedWidget GetAcceleratedWidget();
|
||||||
|
|
||||||
|
gfx::Size WindowSizeToFramelessSize(const gfx::Size& size);
|
||||||
|
|
||||||
views::Widget* widget() const { return window_.get(); }
|
views::Widget* widget() const { return window_.get(); }
|
||||||
|
|
||||||
#if defined(OS_WIN)
|
#if defined(OS_WIN)
|
||||||
|
|
|
@ -104,11 +104,15 @@ gfx::Size FramelessView::GetPreferredSize() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Size FramelessView::GetMinimumSize() const {
|
gfx::Size FramelessView::GetMinimumSize() const {
|
||||||
return window_->GetMinimumSize();
|
gfx::Size size = window_->WindowSizeToFramelessSize(
|
||||||
|
window_->GetMinimumSize());
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::Size FramelessView::GetMaximumSize() const {
|
gfx::Size FramelessView::GetMaximumSize() const {
|
||||||
return window_->GetMaximumSize();
|
gfx::Size size = window_->WindowSizeToFramelessSize(
|
||||||
|
window_->GetMaximumSize());
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* FramelessView::GetClassName() const {
|
const char* FramelessView::GetClassName() const {
|
||||||
|
|
Loading…
Reference in a new issue