Skip to content

Commit

Permalink
fix: compensate for title bar height when setting bounds on `BrowserV…
Browse files Browse the repository at this point in the history
…iew` (electron#34713)

fix: compensate for title bar height when setting bounds
  • Loading branch information
codebytere authored Aug 29, 2022
1 parent d0e220c commit 75f9573
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 9 deletions.
39 changes: 31 additions & 8 deletions shell/browser/native_browser_view_mac.mm
Original file line number Diff line number Diff line change
Expand Up @@ -262,9 +262,21 @@ - (void)drawDebugRect:(NSRect)aRect {
auto* view = iwc_view->GetNativeView().GetNativeNSView();
auto* superview = view.superview;
const auto superview_height = superview ? superview.frame.size.height : 0;

// We need to use the content rect to calculate the titlebar height if the
// superview is an framed NSWindow, otherwise it will be offset incorrectly by
// the height of the titlebar.
auto titlebar_height = 0;
if (auto* win = [superview window]) {
const auto content_rect_height =
[win contentRectForFrameRect:superview.frame].size.height;
titlebar_height = superview_height - content_rect_height;
}

auto new_height =
superview_height - bounds.y() - bounds.height() + titlebar_height;
view.frame =
NSMakeRect(bounds.x(), superview_height - bounds.y() - bounds.height(),
bounds.width(), bounds.height());
NSMakeRect(bounds.x(), new_height, bounds.width(), bounds.height());

// Ensure draggable regions are properly updated to reflect new bounds.
UpdateDraggableRegions(draggable_regions_);
Expand All @@ -275,12 +287,23 @@ - (void)drawDebugRect:(NSRect)aRect {
if (!iwc_view)
return gfx::Rect();
NSView* view = iwc_view->GetNativeView().GetNativeNSView();
const int superview_height =
(view.superview) ? view.superview.frame.size.height : 0;
return gfx::Rect(
view.frame.origin.x,
superview_height - view.frame.origin.y - view.frame.size.height,
view.frame.size.width, view.frame.size.height);
auto* superview = view.superview;
const int superview_height = superview ? superview.frame.size.height : 0;

// We need to use the content rect to calculate the titlebar height if the
// superview is an framed NSWindow, otherwise it will be offset incorrectly by
// the height of the titlebar.
auto titlebar_height = 0;
if (auto* win = [superview window]) {
const auto content_rect_height =
[win contentRectForFrameRect:superview.frame].size.height;
titlebar_height = superview_height - content_rect_height;
}

auto new_height = superview_height - view.frame.origin.y -
view.frame.size.height + titlebar_height;
return gfx::Rect(view.frame.origin.x, new_height, view.frame.size.width,
view.frame.size.height);
}

void NativeBrowserViewMac::SetBackgroundColor(SkColor color) {
Expand Down
9 changes: 8 additions & 1 deletion spec/api-browser-view-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,14 @@ describe('BrowserView module', () => {
});

describe('BrowserView.getBounds()', () => {
it('returns the current bounds', () => {
it('returns correct bounds on a framed window', () => {
view = new BrowserView();
const bounds = { x: 10, y: 20, width: 30, height: 40 };
view.setBounds(bounds);
expect(view.getBounds()).to.deep.equal(bounds);
});

it('returns correct bounds on a frameless window', () => {
view = new BrowserView();
const bounds = { x: 10, y: 20, width: 30, height: 40 };
view.setBounds(bounds);
Expand Down

0 comments on commit 75f9573

Please sign in to comment.