aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2010-11-15 15:34:15 -0800
committerAndroid Code Review <code-review@android.com>2010-11-15 15:34:15 -0800
commit104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f (patch)
tree116a5d1c97ad97c1f1b4cab14f228e7b936fee63
parent62ff1e577398b526c11f1c626ef959d03ae9d0aa (diff)
parentb8235512174daabfc899ff71b5ffd9241556d305 (diff)
downloadsdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.zip
sdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.tar.gz
sdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.tar.bz2
Merge "Improvements to LinearLayout feedback"
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java36
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java8
2 files changed, 36 insertions, 8 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java
index bc2716a..e5334f8 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java
@@ -140,6 +140,10 @@ public class LinearLayoutRule extends BaseLayout {
last = isVertical ? (bc.y + bc.h) : (bc.x + bc.w);
lastDragged = isDragged;
+ } else {
+ // We still have to count this position even if it has no bounds, or
+ // subsequent children will be inserted at the wrong place
+ pos++;
}
}
@@ -150,7 +154,8 @@ public class LinearLayoutRule extends BaseLayout {
indexes.add(new MatchPos(v, pos));
}
- return new DropFeedback(new LinearDropData(indexes, isVertical, selfPos),
+ int posCount = targetNode.getChildren().length + 1;
+ return new DropFeedback(new LinearDropData(indexes, posCount, isVertical, selfPos),
new IFeedbackPainter() {
public void paint(IGraphics gc, INode node, DropFeedback feedback) {
@@ -223,7 +228,7 @@ public class LinearLayoutRule extends BaseLayout {
}
if (be.isValid()) {
- boolean isLast = (data.getInsertPos() == data.getIndexes().size());
+ boolean isLast = data.isLastPosition();
// At least the first element has a bound. Draw rectangles for
// all dropped elements with valid bounds, offset at the drop
@@ -241,7 +246,16 @@ public class LinearLayoutRule extends BaseLayout {
gc.useStyle(DrawingStyle.DROP_PREVIEW);
for (IDragElement element : elements) {
- drawElement(gc, element, offsetX, offsetY);
+ Rect bounds = element.getBounds();
+ if (bounds.isValid() && (bounds.w > b.w || bounds.h > b.h)) {
+ // The bounds of the child does not fully fit inside the target.
+ // Limit the bounds to the layout bounds.
+ Rect within = new Rect(b.x, b.y,
+ Math.min(bounds.w, b.w), Math.min(bounds.h, b.h));
+ gc.drawRect(within);
+ } else {
+ drawElement(gc, element, offsetX, offsetY);
+ }
}
}
}
@@ -390,6 +404,9 @@ public class LinearLayoutRule extends BaseLayout {
/** Insert points (pixels + index) */
private final List<MatchPos> mIndexes;
+ /** Number of insert positions in the target node */
+ private final int mNumPositions;
+
/** Current marker X position */
private Integer mCurrX;
@@ -409,8 +426,10 @@ public class LinearLayoutRule extends BaseLayout {
/** height of match line if it's a vertical one */
private Integer mHeight;
- public LinearDropData(List<MatchPos> indexes, boolean isVertical, int selfPos) {
+ public LinearDropData(List<MatchPos> indexes, int numPositions,
+ boolean isVertical, int selfPos) {
this.mIndexes = indexes;
+ this.mNumPositions = numPositions;
this.mVertical = isVertical;
this.mSelfPos = selfPos;
}
@@ -479,5 +498,14 @@ public class LinearLayoutRule extends BaseLayout {
private Integer getHeight() {
return mHeight;
}
+
+ /**
+ * Returns true if we are inserting into the last position
+ *
+ * @return true if we are inserting into the last position
+ */
+ public boolean isLastPosition() {
+ return mInsertPos == mNumPositions - 1;
+ }
}
}
diff --git a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java
index c5c43fd..9796104 100644
--- a/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java
+++ b/eclipse/plugins/com.android.ide.eclipse.tests/unittests/com/android/ide/common/layout/LinearLayoutRuleTest.java
@@ -75,7 +75,7 @@ public class LinearLayoutRuleTest extends AbstractLayoutRuleTest {
// Insert position line
"drawLine(1,0,1,480)" + (haveBounds ?
// Outline of dragged node centered over position line
- ", useStyle(DROP_PREVIEW), " + "drawRect(Rect[-49,0,100,80])"
+ ", useStyle(DROP_PREVIEW), " + "drawRect(Rect[1,0,100,80])"
// Nothing when we don't have bounds
: "") + "]", graphics.getDrawn().toString());
@@ -207,17 +207,17 @@ public class LinearLayoutRuleTest extends AbstractLayoutRuleTest {
// Drop zones
"useStyle(DROP_ZONE), drawLine(0,0,240,0), drawLine(0,90,240,90), "
- + "drawLine(0,190,240,190), drawLine(0,290,240,290)",
+ + "drawLine(0,190,240,190), drawLine(0,290,240,290), drawLine(0,381,240,381), ",
// Active nearest line
"useStyle(DROP_ZONE_ACTIVE), useStyle(DROP_PREVIEW), drawLine(0,381,240,381)",
// Preview of the dropped rectangle
- "useStyle(DROP_PREVIEW), drawRect(Rect[0,341,105,80])");
+ "useStyle(DROP_PREVIEW), drawRect(Rect[0,381,105,80])");
// Check without bounds too
dragInto(true, new Rect(0, 0, 105, 80), new Point(30, 500), 4, -1,
- "useStyle(DROP_PREVIEW), drawRect(Rect[0,341,105,80])");
+ "useStyle(DROP_PREVIEW), drawRect(Rect[0,381,105,80])");
}
public void testDragInVerticalMiddle() {