1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "ui/views/masked_targeter_delegate.h"
6
7#include "ui/gfx/path.h"
8#include "ui/gfx/skia_util.h"
9#include "ui/views/view.h"
10
11namespace views {
12
13bool MaskedTargeterDelegate::DoesIntersectRect(const View* target,
14                                               const gfx::Rect& rect) const {
15  // Early return if |rect| does not even intersect the rectangular bounds
16  // of |target|.
17  if (!ViewTargeterDelegate::DoesIntersectRect(target, rect))
18    return false;
19
20  // Early return if |mask| is not a valid hit test mask.
21  gfx::Path mask;
22  if (!GetHitTestMask(&mask))
23    return false;
24
25  // Return whether or not |rect| intersects the custom hit test mask
26  // of |target|.
27  SkRegion clip_region;
28  clip_region.setRect(0, 0, target->width(), target->height());
29  SkRegion mask_region;
30  return mask_region.setPath(mask, clip_region) &&
31         mask_region.intersects(RectToSkIRect(rect));
32}
33
34}  // namespace views
35