Index: ash/common/wm/workspace/magnetism_matcher.h |
diff --git a/ash/common/wm/workspace/magnetism_matcher.h b/ash/common/wm/workspace/magnetism_matcher.h |
deleted file mode 100644 |
index 034f9c3420ddbf3d0914f42cfe4c330ee5035ccd..0000000000000000000000000000000000000000 |
--- a/ash/common/wm/workspace/magnetism_matcher.h |
+++ /dev/null |
@@ -1,192 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef ASH_COMMON_WM_WORKSPACE_MAGNETISM_MATCHER_H_ |
-#define ASH_COMMON_WM_WORKSPACE_MAGNETISM_MATCHER_H_ |
- |
-#include <stdint.h> |
- |
-#include <memory> |
-#include <utility> |
-#include <vector> |
- |
-#include "ash/ash_export.h" |
-#include "base/compiler_specific.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "ui/gfx/geometry/rect.h" |
- |
-namespace ash { |
- |
-enum MagnetismEdge { |
- MAGNETISM_EDGE_TOP = 1 << 0, |
- MAGNETISM_EDGE_LEFT = 1 << 1, |
- MAGNETISM_EDGE_BOTTOM = 1 << 2, |
- MAGNETISM_EDGE_RIGHT = 1 << 3, |
-}; |
- |
-const uint32_t kAllMagnetismEdges = MAGNETISM_EDGE_TOP | MAGNETISM_EDGE_LEFT | |
- MAGNETISM_EDGE_BOTTOM | |
- MAGNETISM_EDGE_RIGHT; |
- |
-// MagnetismEdgeMatcher is used for matching a particular edge of a window. You |
-// shouldn't need to use this directly, instead use MagnetismMatcher which takes |
-// care of all edges. |
-// MagnetismEdgeMatcher maintains a range of the visible portions of the |
-// edge. As ShouldAttach() is invoked the visible range is updated. |
-class MagnetismEdgeMatcher { |
- public: |
- MagnetismEdgeMatcher(const gfx::Rect& bounds, MagnetismEdge edge); |
- ~MagnetismEdgeMatcher(); |
- |
- MagnetismEdge edge() const { return edge_; } |
- const gfx::Rect& bounds() const { return bounds_; } |
- |
- // Returns true if the edge is completely obscured. If true ShouldAttach() |
- // will return false. |
- bool is_edge_obscured() const { return ranges_.empty(); } |
- |
- // Returns true if should attach to the specified bounds. |
- bool ShouldAttach(const gfx::Rect& bounds); |
- |
- private: |
- typedef std::pair<int, int> Range; |
- typedef std::vector<Range> Ranges; |
- |
- // Removes |range| from |ranges_|. |
- void UpdateRanges(const Range& range); |
- |
- static int GetPrimaryCoordinate(const gfx::Rect& bounds, MagnetismEdge edge) { |
- switch (edge) { |
- case MAGNETISM_EDGE_TOP: |
- return bounds.y(); |
- case MAGNETISM_EDGE_LEFT: |
- return bounds.x(); |
- case MAGNETISM_EDGE_BOTTOM: |
- return bounds.bottom(); |
- case MAGNETISM_EDGE_RIGHT: |
- return bounds.right(); |
- } |
- NOTREACHED(); |
- return 0; |
- } |
- |
- static MagnetismEdge FlipEdge(MagnetismEdge edge) { |
- switch (edge) { |
- case MAGNETISM_EDGE_TOP: |
- return MAGNETISM_EDGE_BOTTOM; |
- case MAGNETISM_EDGE_BOTTOM: |
- return MAGNETISM_EDGE_TOP; |
- case MAGNETISM_EDGE_LEFT: |
- return MAGNETISM_EDGE_RIGHT; |
- case MAGNETISM_EDGE_RIGHT: |
- return MAGNETISM_EDGE_LEFT; |
- } |
- NOTREACHED(); |
- return MAGNETISM_EDGE_LEFT; |
- } |
- |
- Range GetPrimaryRange(const gfx::Rect& bounds) const { |
- switch (edge_) { |
- case MAGNETISM_EDGE_TOP: |
- case MAGNETISM_EDGE_BOTTOM: |
- return Range(bounds.y(), bounds.bottom()); |
- case MAGNETISM_EDGE_LEFT: |
- case MAGNETISM_EDGE_RIGHT: |
- return Range(bounds.x(), bounds.right()); |
- } |
- NOTREACHED(); |
- return Range(); |
- } |
- |
- Range GetSecondaryRange(const gfx::Rect& bounds) const { |
- switch (edge_) { |
- case MAGNETISM_EDGE_TOP: |
- case MAGNETISM_EDGE_BOTTOM: |
- return Range(bounds.x(), bounds.right()); |
- case MAGNETISM_EDGE_LEFT: |
- case MAGNETISM_EDGE_RIGHT: |
- return Range(bounds.y(), bounds.bottom()); |
- } |
- NOTREACHED(); |
- return Range(); |
- } |
- |
- static bool RangesIntersect(const Range& r1, const Range& r2) { |
- return r2.first < r1.second && r2.second > r1.first; |
- } |
- |
- // The bounds of window. |
- const gfx::Rect bounds_; |
- |
- // The edge this matcher checks. |
- const MagnetismEdge edge_; |
- |
- // Visible ranges of the edge. Initialized with GetSecondaryRange() and |
- // updated as ShouldAttach() is invoked. When empty the edge is completely |
- // obscured by other bounds. |
- Ranges ranges_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MagnetismEdgeMatcher); |
-}; |
- |
-enum SecondaryMagnetismEdge { |
- SECONDARY_MAGNETISM_EDGE_LEADING, |
- SECONDARY_MAGNETISM_EDGE_TRAILING, |
- SECONDARY_MAGNETISM_EDGE_NONE, |
-}; |
- |
-// Used to identify a matched edge. |primary_edge| is relative to the source and |
-// indicates the edge the two are to share. For example, if |primary_edge| is |
-// MAGNETISM_EDGE_RIGHT then the right edge of the source should snap to to the |
-// left edge of the target. |secondary_edge| indicates one of the edges along |
-// the opposite axis should should also be aligned. For example, if |
-// |primary_edge| is MAGNETISM_EDGE_RIGHT and |secondary_edge| is |
-// SECONDARY_MAGNETISM_EDGE_LEADING then the source should snap to the left top |
-// corner of the target. |
-struct MatchedEdge { |
- MagnetismEdge primary_edge; |
- SecondaryMagnetismEdge secondary_edge; |
-}; |
- |
-// MagnetismMatcher is used to test if a window should snap to another window. |
-// To use MagnetismMatcher do the following: |
-// . Create it with the bounds of the window being dragged. |
-// . Iterate over the child windows checking if the window being dragged should |
-// attach to it using ShouldAttach(). |
-// . Use AreEdgesObscured() to test if no other windows can match (because all |
-// edges are completely obscured). |
-class ASH_EXPORT MagnetismMatcher { |
- public: |
- static const int kMagneticDistance; |
- |
- // |edges| is a bitmask of MagnetismEdges to match against. |
- MagnetismMatcher(const gfx::Rect& bounds, uint32_t edges); |
- ~MagnetismMatcher(); |
- |
- // Returns true if |bounds| is close enough to the initial bounds that the two |
- // should be attached. If true is returned |edge| is set to indicates how the |
- // two should snap together. See description of MatchedEdge for details. |
- bool ShouldAttach(const gfx::Rect& bounds, MatchedEdge* edge); |
- |
- // Returns true if no other matches are possible. |
- bool AreEdgesObscured() const; |
- |
- private: |
- // Sets |secondary_edge| based on whether the secondary edges should snap. |
- void AttachToSecondaryEdge(const gfx::Rect& bounds, |
- MagnetismEdge edge, |
- SecondaryMagnetismEdge* secondary_edge) const; |
- |
- // The edges to match against. |
- const int32_t edges_; |
- |
- std::vector<std::unique_ptr<MagnetismEdgeMatcher>> matchers_; |
- |
- DISALLOW_COPY_AND_ASSIGN(MagnetismMatcher); |
-}; |
- |
-} // namespace ash |
- |
-#endif // ASH_COMMON_WM_WORKSPACE_MAGNETISM_MATCHER_H_ |