Home | History | Annotate | Download | only in views
      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:
     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