aboutsummaryrefslogtreecommitdiffstats
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/common/layout/LinearLayoutRule.java36
1 files changed, 32 insertions, 4 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;
+ }
}
}