• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef UI_VIEWS_MASKED_VIEW_TARGETER_H_
6 #define UI_VIEWS_MASKED_VIEW_TARGETER_H_
7 
8 #include "ui/views/view_targeter.h"
9 #include "ui/views/views_export.h"
10 
11 namespace gfx {
12 class Path;
13 }
14 
15 namespace views {
16 
17 // Derived classes of MaskedViewTargeter are used to define custom-shaped
18 // hit test regions for a View used in event targeting.
19 // TODO(tdanderson|sadrul): Some refactoring opportunities may be possible
20 //                          between this class and MaskedWindowTargeter.
21 class VIEWS_EXPORT MaskedViewTargeter : public ViewTargeter {
22  public:
23   explicit MaskedViewTargeter(View* masked_view);
24   virtual ~MaskedViewTargeter();
25 
26   // Sets the hit-test mask for |view| in |mask| (in |view|'s local
27   // coordinate system). Returns whether a valid mask has been set in |mask|.
28   virtual bool GetHitTestMask(const View* view, gfx::Path* mask) const = 0;
29 
30  protected:
masked_view()31   const View* masked_view() const { return masked_view_; }
32 
33   // ui::EventTargeter:
34   virtual bool EventLocationInsideBounds(
35       ui::EventTarget* target,
36       const ui::LocatedEvent& event) const OVERRIDE;
37 
38  private:
39   View* masked_view_;
40 
41   DISALLOW_COPY_AND_ASSIGN(MaskedViewTargeter);
42 };
43 
44 }  // namespace views
45 
46 #endif  // UI_VIEWS_MASKED_VIEW_TARGETER_H_
47