• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2011 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.eclipse.org/org/documents/epl-v10.php
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.ide.common.api;
18 
19 /** A segment type describes the different roles or positions a segment can have in a node */
20 public enum SegmentType {
21     LEFT, TOP, RIGHT, BOTTOM, BASELINE, CENTER_VERTICAL, CENTER_HORIZONTAL, UNKNOWN;
22 
isHorizontal()23     public boolean isHorizontal() {
24         return this == TOP || this == BOTTOM || this == BASELINE || this == CENTER_HORIZONTAL;
25     }
26 
27     /**
28      * Returns the X coordinate for an edge of this type given its bounds
29      *
30      * @param node the node containing the edge
31      * @param bounds the bounds of the node
32      * @return the X coordinate for an edge of this type given its bounds
33      */
getX(INode node, Rect bounds)34     public int getX(INode node, Rect bounds) {
35         // We pass in the bounds rather than look it up via node.getBounds() because
36         // during a resize or move operation, we call this method to look up proposed
37         // bounds rather than actual bounds
38         switch (this) {
39             case RIGHT:
40                 return bounds.x + bounds.w;
41             case TOP:
42             case BOTTOM:
43             case CENTER_VERTICAL:
44                 return bounds.x + bounds.w / 2;
45             case UNKNOWN:
46                 assert false;
47                 return bounds.x;
48             case LEFT:
49             case BASELINE:
50             default:
51                 return bounds.x;
52         }
53     }
54 
55     /**
56      * Returns the Y coordinate for an edge of this type given its bounds
57      *
58      * @param node the node containing the edge
59      * @param bounds the bounds of the node
60      * @return the Y coordinate for an edge of this type given its bounds
61      */
getY(INode node, Rect bounds)62     public int getY(INode node, Rect bounds) {
63         switch (this) {
64             case TOP:
65                 return bounds.y;
66             case BOTTOM:
67                 return bounds.y + bounds.h;
68             case BASELINE: {
69                 int baseline = node != null ? node.getBaseline() : -1;
70                 if (node == null) {
71                     // This happens when you are dragging an element and we don't have
72                     // a node (only an IDragElement) such as on a palette drag.
73                     // For now just hack it.
74                     baseline = (int) (bounds.h * 0.8f); // HACK
75                 }
76                 return bounds.y + baseline;
77             }
78             case UNKNOWN:
79                 assert false;
80                 return bounds.y;
81             case RIGHT:
82             case LEFT:
83             case CENTER_HORIZONTAL:
84             default:
85                 return bounds.y + bounds.h / 2;
86         }
87     }
88 
89     @Override
toString()90     public String toString() {
91         return name();
92     }
93 }
94