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:
Eran Tiktin 2015-10-03 22:09:57 +03:00
parent 8c31c7fb59
commit aea1f8aebb
3 changed files with 35 additions and 4 deletions

View file

@ -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) {

View file

@ -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)

View file

@ -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 {