refactor: move draggable regions to WebContents (#36230)

This commit is contained in:
Jeremy Rose 2022-11-07 10:15:57 -08:00 committed by GitHub
parent 2008c9a5d0
commit 184ac2b382
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 96 additions and 202 deletions

View file

@ -76,30 +76,19 @@ gfx::Rect FramelessView::GetWindowBoundsForClientBounds(
return window_bounds;
}
int FramelessView::NonClientHitTest(const gfx::Point& cursor) {
int FramelessView::NonClientHitTest(const gfx::Point& point) {
if (frame_->IsFullscreen())
return HTCLIENT;
// Check attached BrowserViews for potential draggable areas.
for (auto* view : window_->inspectable_views()) {
auto* inspectable_view =
static_cast<InspectableWebContentsViewViews*>(view);
if (inspectable_view->IsContainedInDraggableRegion(window_->content_view(),
cursor))
return HTCAPTION;
}
int contents_hit_test = window_->NonClientHitTest(point);
if (contents_hit_test != HTNOWHERE)
return contents_hit_test;
// Support resizing frameless window by dragging the border.
int frame_component = ResizingBorderHitTest(cursor);
int frame_component = ResizingBorderHitTest(point);
if (frame_component != HTNOWHERE)
return frame_component;
// Check for possible draggable region in the client area for the frameless
// window.
const SkRegion* draggable_region = window_->draggable_region();
if (draggable_region && draggable_region->contains(cursor.x(), cursor.y()))
return HTCAPTION;
return HTCLIENT;
}

View file

@ -105,19 +105,6 @@ InspectableWebContentsViewViews::~InspectableWebContentsViewViews() {
devtools_window_->GetWindowBoundsInScreen());
}
bool InspectableWebContentsViewViews::IsContainedInDraggableRegion(
views::View* root_view,
const gfx::Point& location) {
if (!draggable_region_.get())
return false;
// Draggable regions are defined relative to the web contents.
gfx::Point point_in_contents_web_view_coords(location);
views::View::ConvertPointToTarget(root_view, this,
&point_in_contents_web_view_coords);
return draggable_region_->contains(point_in_contents_web_view_coords.x(),
point_in_contents_web_view_coords.y());
}
views::View* InspectableWebContentsViewViews::GetView() {
return this;
}
@ -227,14 +214,6 @@ void InspectableWebContentsViewViews::SetTitle(const std::u16string& title) {
}
}
void InspectableWebContentsViewViews::UpdateDraggableRegions(
const std::vector<mojom::DraggableRegionPtr>& regions) {
if (&draggable_regions_ == &regions)
return;
draggable_regions_ = mojo::Clone(regions);
draggable_region_ = DraggableRegionsToSkRegion(draggable_regions_);
}
void InspectableWebContentsViewViews::Layout() {
if (!devtools_web_view_->GetVisible()) {
contents_web_view_->SetBoundsRect(GetContentsBounds());

View file

@ -29,9 +29,6 @@ class InspectableWebContentsViewViews : public InspectableWebContentsView,
InspectableWebContents* inspectable_web_contents);
~InspectableWebContentsViewViews() override;
bool IsContainedInDraggableRegion(views::View* root_view,
const gfx::Point& location);
// InspectableWebContentsView:
views::View* GetView() override;
views::View* GetWebView() override;
@ -43,8 +40,6 @@ class InspectableWebContentsViewViews : public InspectableWebContentsView,
void SetContentsResizingStrategy(
const DevToolsContentsResizingStrategy& strategy) override;
void SetTitle(const std::u16string& title) override;
void UpdateDraggableRegions(
const std::vector<mojom::DraggableRegionPtr>& regions) override;
// views::View:
void Layout() override;
@ -61,8 +56,6 @@ class InspectableWebContentsViewViews : public InspectableWebContentsView,
bool devtools_visible_ = false;
views::WidgetDelegate* devtools_window_delegate_ = nullptr;
std::u16string title_;
std::unique_ptr<SkRegion> draggable_region_;
};
} // namespace electron