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.
5 #include "ui/wm/core/masked_window_targeter.h"
7 #include "ui/aura/window.h"
8 #include "ui/gfx/path.h"
12 MaskedWindowTargeter::MaskedWindowTargeter(aura::Window
* masked_window
)
13 : masked_window_(masked_window
) {
16 MaskedWindowTargeter::~MaskedWindowTargeter() {}
18 bool MaskedWindowTargeter::EventLocationInsideBounds(
19 ui::EventTarget
* target
,
20 const ui::LocatedEvent
& event
) const {
21 aura::Window
* window
= static_cast<aura::Window
*>(target
);
22 if (window
== masked_window_
) {
24 if (!GetHitTestMask(window
, &mask
))
25 return WindowTargeter::EventLocationInsideBounds(window
, event
);
27 gfx::Size size
= window
->bounds().size();
29 clip_region
.setRect(0, 0, size
.width(), size
.height());
31 gfx::Point point
= event
.location();
33 aura::Window::ConvertPointToTarget(window
->parent(), window
, &point
);
36 return mask_region
.setPath(mask
, clip_region
) &&
37 mask_region
.contains(point
.x(), point
.y());
40 return WindowTargeter::EventLocationInsideBounds(window
, event
);