diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/EmptyViewsOverlay.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/EmptyViewsOverlay.java | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/EmptyViewsOverlay.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/EmptyViewsOverlay.java new file mode 100644 index 000000000..daa3e0eae --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/gle2/EmptyViewsOverlay.java @@ -0,0 +1,96 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.eclipse.org/org/documents/epl-v10.php + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.ide.eclipse.adt.internal.editors.layout.gle2; + +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.Device; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Rectangle; + +/** + * The {@link EmptyViewsOverlay} paints bounding rectangles for any of the empty and + * invisible container views in the scene. + */ +public class EmptyViewsOverlay extends Overlay { + /** The {@link ViewHierarchy} containing visible view information. */ + private final ViewHierarchy mViewHierarchy; + + /** Border color to paint the bounding boxes with. */ + private Color mBorderColor; + + /** Vertical scaling & scrollbar information. */ + private CanvasTransform mVScale; + + /** Horizontal scaling & scrollbar information. */ + private CanvasTransform mHScale; + + /** + * Constructs a new {@link EmptyViewsOverlay} linked to the given view hierarchy. + * + * @param viewHierarchy The {@link ViewHierarchy} to render. + * @param hScale The {@link CanvasTransform} to use to transfer horizontal layout + * coordinates to screen coordinates. + * @param vScale The {@link CanvasTransform} to use to transfer vertical layout coordinates + * to screen coordinates. + */ + public EmptyViewsOverlay( + ViewHierarchy viewHierarchy, + CanvasTransform hScale, + CanvasTransform vScale) { + super(); + mViewHierarchy = viewHierarchy; + mHScale = hScale; + mVScale = vScale; + } + + @Override + public void create(Device device) { + mBorderColor = new Color(device, SwtDrawingStyle.EMPTY.getStrokeColor()); + } + + @Override + public void dispose() { + if (mBorderColor != null) { + mBorderColor.dispose(); + mBorderColor = null; + } + } + + @Override + public void paint(GC gc) { + gc.setForeground(mBorderColor); + gc.setLineDash(null); + gc.setLineStyle(SwtDrawingStyle.EMPTY.getLineStyle()); + int oldAlpha = gc.getAlpha(); + gc.setAlpha(SwtDrawingStyle.EMPTY.getStrokeAlpha()); + gc.setLineWidth(SwtDrawingStyle.EMPTY.getLineWidth()); + + for (CanvasViewInfo info : mViewHierarchy.getInvisibleViews()) { + Rectangle r = info.getAbsRect(); + + int x = mHScale.translate(r.x); + int y = mVScale.translate(r.y); + int w = mHScale.scale(r.width); + int h = mVScale.scale(r.height); + + // +1: See explanation in equivalent code in {@link OutlineOverlay#paint} + gc.drawRectangle(x, y, w + 1, h + 1); + } + + gc.setAlpha(oldAlpha); + } +} |