diff options
author | Tor Norbye <tnorbye@google.com> | 2010-11-15 15:34:15 -0800 |
---|---|---|
committer | Android Code Review <code-review@android.com> | 2010-11-15 15:34:15 -0800 |
commit | 104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f (patch) | |
tree | 116a5d1c97ad97c1f1b4cab14f228e7b936fee63 | |
parent | 62ff1e577398b526c11f1c626ef959d03ae9d0aa (diff) | |
parent | b8235512174daabfc899ff71b5ffd9241556d305 (diff) | |
download | sdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.zip sdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.tar.gz sdk-104180ac6e1b70e4772bc82f65d5c4a4e0d69b6f.tar.bz2 |
Merge "Improvements to LinearLayout feedback"
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() { |