Java Code Examples for java.awt.Rectangle#intersects()

The following examples show how to use java.awt.Rectangle#intersects() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: EntityViewManager.java    From stendhal with GNU General Public License v2.0 6 votes vote down vote up
/**
 * Prepare the entity views for drawing. Must be called only from the event
 * dispatch thread.
 *
 * @param area visible area
 * @param setVisibleArea inform the entities about the visible area. This
 * 	should be only done when the whole screen is drawn
 */
void prepareViews(Rectangle area, boolean setVisibleArea) {
	visibleViews.clear();
	synchronized (views) {
		for (EntityView<IEntity> view : views) {
			view.applyChanges();
			if (area.intersects(view.getArea())) {
				visibleViews.add(view);
				if (setVisibleArea) {
					view.setVisibleScreenArea(area);
				}
			}
		}
	}

	Collections.sort(visibleViews, entityViewComparator);
}
 
Example 2
Source File: SheetPainter.java    From audiveris with GNU Affero General Public License v3.0 6 votes vote down vote up
/**
 * Paint the sheet.
 */
public void process ()
{
    sigPainter = getSigPainter();

    if (!sheet.getSystems().isEmpty()) {
        for (SystemInfo system : sheet.getSystems()) {
            // Check whether this system is visible
            Rectangle bounds = system.getBounds();

            if ((bounds != null) && ((clip == null) || bounds.intersects(clip))) {
                processSystem(system);
            }
        }
    }
}
 
Example 3
Source File: Glyph.java    From audiveris with GNU Affero General Public License v3.0 6 votes vote down vote up
@Override
public void renderLine (Graphics2D g)
{
    Rectangle clip = g.getClipBounds();

    if ((clip == null) || clip.intersects(getBounds())) {
        checkLine(); // To make sure the line has been computed

        if (line != null) {
            ///g.draw(line);
            g.draw(
                    new Line2D.Double(
                            line.getX1(),
                            line.getY1() + 0.5,
                            line.getX2() + 1,
                            line.getY2() + 0.5));
        }
    }
}
 
Example 4
Source File: GraphPanelEditor.java    From pdfxtk with Apache License 2.0 6 votes vote down vote up
void select(int x, int y) {
   Rectangle selection = gp.getDotMarkRectangle();
   GraphNode[] nodes = gp.getModel().nodesArray();
   for(int i = 0; i < nodes.length; i++) {
     Component c = (Component)nodes[i].get(gp.COMPONENT);
     if(selection.intersects(c.getBounds(tmpRect)))
gp.getSelectionModel().add(nodes[i]);
   }
   iiuf.util.graph.GraphEdge[] edges = gp.getModel().edgesArray();
   for(int i = 0; i < edges.length; i++) {
     GraphEdge e = (GraphEdge)edges[i].get(gp.GRAPH_EDGE);
     if(e.intersectsWith(selection))
gp.getSelectionModel().add(edges[i]);      
   }
   gp.setDot(x, y);
   gp.setMark(x, y);
 }
 
Example 5
Source File: Sprite.java    From javagame with MIT License 5 votes vote down vote up
/**
 * ���̃X�v���C�g�ƐڐG���Ă��邩
 * @param sprite �X�v���C�g
 */
public boolean isCollision(Sprite sprite) {
    Rectangle playerRect = new Rectangle((int)x, (int)y, width, height);
    Rectangle spriteRect = new Rectangle((int)sprite.getX(), (int)sprite.getY(), sprite.getWidth(), sprite.getHeight());
    // �����̋�`�Ƒ���̋�`���d�Ȃ��Ă��邩���ׂ�
    if (playerRect.intersects(spriteRect)) {
        return true;
    }
    
    return false;
}
 
Example 6
Source File: ThumbsExplorerPanel.java    From jclic with GNU General Public License v2.0 5 votes vote down vote up
@Override
public void paintComponent(Graphics g) {
  super.paintComponent(g);
  Graphics2D g2 = (Graphics2D) g;
  Rectangle clip = g2.getClipBounds();
  Rectangle r = new Rectangle(boxSize);
  for (int i = 0; i < elements.size(); i++) {
    r.x = (i % elementsPerRow) * r.width;
    r.y = (i / elementsPerRow) * r.height;
    if (r.intersects(clip)) {
      getThumbElement(i).paint(g2, r);
    }
  }
}
 
Example 7
Source File: NestView.java    From libreveris with GNU Lesser General Public License v3.0 5 votes vote down vote up
/**
 * Render the box area of a glyph, using inverted color.
 *
 * @param glyph the glyph whose area is to be rendered
 * @param g     the graphic context
 */
protected void renderGlyphArea (Glyph glyph,
                                Graphics2D g)
{
    // Check the clipping
    Rectangle box = glyph.getBounds();

    if ((box != null) && box.intersects(g.getClipBounds())) {
        g.fillRect(box.x, box.y, box.width, box.height);
    }
}
 
Example 8
Source File: CurvedFilament.java    From audiveris with GNU Affero General Public License v3.0 5 votes vote down vote up
@Override
public void renderLine (Graphics2D g,
                        boolean showPoints,
                        double pointWidth)
{
    Rectangle clip = g.getClipBounds();

    if ((clip != null) && !clip.intersects(getBounds())) {
        return;
    }

    // The curved line itself
    if (spline != null) {
        g.draw(spline);
    }

    // Then the absolute defining points?
    if (showPoints && (points != null)) {
        // Point radius
        double r = pointWidth / 2;
        Ellipse2D ellipse = new Ellipse2D.Double();

        for (Point2D p : points) {
            ellipse.setFrame(p.getX() - r, p.getY() - r, 2 * r, 2 * r);

            Color oldColor = null;

            if (p.getClass() != Point2D.Double.class) {
                oldColor = g.getColor();
                g.setColor(Color.red);
            }

            g.fill(ellipse);

            if (oldColor != null) {
                g.setColor(oldColor);
            }
        }
    }
}
 
Example 9
Source File: PlanetScreen.java    From open-ig with GNU Lesser General Public License v3.0 5 votes vote down vote up
/**
 * Retrieve the gun at the given location.
 * @param mx the mouse X
 * @param my the mouse Y
 * @return the gun or null if empty
 */
GroundwarGun gunAt(int mx, int my) {
	Rectangle sel = new Rectangle(0, 0, commons.colony().selectionBoxLight.getWidth(), commons.colony().selectionBoxLight.getHeight());
	for (GroundwarGun g : guns) {
		Rectangle r = gunRectangle(g);
		Rectangle drawRect = new Rectangle((int)(r.x + (r.width - sel.getWidth()) / 2) + offsetX,
				(int)(r.y + (r.height - sel.getHeight()) / 2) + offsetY,
				sel.width, sel.height);
		if (drawRect.intersects(new Rectangle(mx, my, 1, 1))) {
			return g;
		}
	}
	return null;
}
 
Example 10
Source File: PagePhysicalPainter.java    From libreveris with GNU Lesser General Public License v3.0 5 votes vote down vote up
public boolean visit (SystemInfo systemInfo)
{
    try {
        // Check that this system is visible
        Rectangle bounds = systemInfo.getBounds();

        if ((bounds == null) || !bounds.intersects(oldClip)) {
            return false;
        }

        // Determine proper font size for the system
        musicFont = MusicFont.getFont(scale.getInterline());

        g.setColor(defaultColor);

        // Ledgers
        for (Glyph glyph : systemInfo.getGlyphs()) {
            if ((glyph.getShape() == Shape.LEDGER) && glyph.isActive()) {
                // For very short ledgers, glyph line is not reliable
                renderLedger(g, glyph);
            }
        }

        // Endings
        for (Glyph ending : systemInfo.getEndings()) {
            ending.renderLine(g);
        }
    } catch (ConcurrentModificationException ignored) {
    } catch (Exception ex) {
        logger.warn(
                getClass().getSimpleName() + " Error visiting " + systemInfo,
                ex);
    }

    return true;
}
 
Example 11
Source File: Sprite.java    From javagame with MIT License 5 votes vote down vote up
/**
 * ���̃X�v���C�g�ƐڐG���Ă��邩
 * @param sprite �X�v���C�g
 */
public boolean isCollision(Sprite sprite) {
    Rectangle playerRect = new Rectangle((int)x, (int)y, width, height);
    Rectangle spriteRect = new Rectangle((int)sprite.getX(), (int)sprite.getY(), sprite.getWidth(), sprite.getHeight());
    // �����̋�`�Ƒ���̋�`���d�Ȃ��Ă��邩���ׂ�
    if (playerRect.intersects(spriteRect)) {
        return true;
    }
    
    return false;
}
 
Example 12
Source File: ClustersRetriever.java    From libreveris with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Merge compatible clusters as much as possible.
 */
private void mergeClusters ()
{
    // Sort clusters according to their ordinate in page
    Collections.sort(clusters, ordinateComparator);

    for (LineCluster current : clusters) {
        LineCluster candidate = current;

        // Keep on working while we do have a candidate to check for merge
        CandidateLoop:
        while (true) {
            Wrapper<Integer> deltaPos = new Wrapper<>();
            Rectangle candidateBox = candidate.getBounds();
            candidateBox.grow(params.clusterXMargin, params.clusterYMargin);

            // Check the candidate vs all clusters until current excluded
            for (LineCluster head : clusters) {
                if (head == current) {
                    break CandidateLoop; // Actual end of sub list
                }

                if ((head == candidate) || (head.getParent() != null)) {
                    continue;
                }

                // Check rough proximity
                Rectangle headBox = head.getBounds();

                if (headBox.intersects(candidateBox)) {
                    // Try a merge
                    if (canMerge(head, candidate, deltaPos)) {
                        logger.debug("Merging {} with {} delta:{}",
                                candidate, head, deltaPos.value);

                        // Do the merge
                        candidate.mergeWith(head, deltaPos.value);

                        break;
                    }
                }
            }
        }
    }

    removeMergedClusters();
    removeMergedFilaments();
}
 
Example 13
Source File: CrossDetector.java    From audiveris with GNU Affero General Public License v3.0 4 votes vote down vote up
/**
 * Detect all cases where 2 Inters actually overlap while being in separate systems.
 *
 * @param aboves the collection of inters to process from system above
 * @param belows the collection of inters to process from system below
 */
private void detectCrossOverlaps (List<Inter> aboves,
                                  List<Inter> belows)
{
    Collections.sort(aboves, Inters.byAbscissa);
    Collections.sort(belows, Inters.byAbscissa);

    NextLeft:
    for (Inter above : aboves) {
        if (above.isRemoved()) {
            continue;
        }

        final Rectangle aboveBox = above.getBounds();

        final double xMax = aboveBox.getMaxX();

        for (Inter below : belows) {
            if (below.isRemoved()) {
                continue;
            }

            Rectangle belowBox = below.getBounds();

            if (aboveBox.intersects(belowBox)) {
                // Have a more precise look
                try {
                    if (above.overlaps(below) && below.overlaps(above)) {
                        Inter removedInter = resolveConflict(above, below);

                        if (removedInter == above) {
                            continue NextLeft;
                        }
                    }
                } catch (DeletedInterException diex) {
                    if (diex.inter == above) {
                        continue NextLeft;
                    }
                }
            } else if (belowBox.x > xMax) {
                break; // Since below list is sorted by abscissa
            }
        }
    }
}
 
Example 14
Source File: SynthTableUI.java    From jdk8u-jdk with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Paints the specified component.
 *
 * @param context context for the component being painted
 * @param g the {@code Graphics} object used for painting
 * @see #update(Graphics,JComponent)
 */
protected void paint(SynthContext context, Graphics g) {
    Rectangle clip = g.getClipBounds();

    Rectangle bounds = table.getBounds();
    // account for the fact that the graphics has already been translated
    // into the table's bounds
    bounds.x = bounds.y = 0;

    if (table.getRowCount() <= 0 || table.getColumnCount() <= 0 ||
            // this check prevents us from painting the entire table
            // when the clip doesn't intersect our bounds at all
            !bounds.intersects(clip)) {

        paintDropLines(context, g);
        return;
    }

    boolean ltr = table.getComponentOrientation().isLeftToRight();

    Point upperLeft = clip.getLocation();

    Point lowerRight = new Point(clip.x + clip.width - 1,
                                 clip.y + clip.height - 1);

    int rMin = table.rowAtPoint(upperLeft);
    int rMax = table.rowAtPoint(lowerRight);
    // This should never happen (as long as our bounds intersect the clip,
    // which is why we bail above if that is the case).
    if (rMin == -1) {
        rMin = 0;
    }
    // If the table does not have enough rows to fill the view we'll get -1.
    // (We could also get -1 if our bounds don't intersect the clip,
    // which is why we bail above if that is the case).
    // Replace this with the index of the last row.
    if (rMax == -1) {
        rMax = table.getRowCount()-1;
    }

    int cMin = table.columnAtPoint(ltr ? upperLeft : lowerRight);
    int cMax = table.columnAtPoint(ltr ? lowerRight : upperLeft);
    // This should never happen.
    if (cMin == -1) {
        cMin = 0;
    }
    // If the table does not have enough columns to fill the view we'll get -1.
    // Replace this with the index of the last column.
    if (cMax == -1) {
        cMax = table.getColumnCount()-1;
    }

    // Paint the cells.
    paintCells(context, g, rMin, rMax, cMin, cMax);

    // Paint the grid.
    // it is important to paint the grid after the cells, otherwise the grid will be overpainted
    // because in Synth cell renderers are likely to be opaque
    paintGrid(context, g, rMin, rMax, cMin, cMax);

    paintDropLines(context, g);
}
 
Example 15
Source File: SynthTableUI.java    From openjdk-8 with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Paints the specified component.
 *
 * @param context context for the component being painted
 * @param g the {@code Graphics} object used for painting
 * @see #update(Graphics,JComponent)
 */
protected void paint(SynthContext context, Graphics g) {
    Rectangle clip = g.getClipBounds();

    Rectangle bounds = table.getBounds();
    // account for the fact that the graphics has already been translated
    // into the table's bounds
    bounds.x = bounds.y = 0;

    if (table.getRowCount() <= 0 || table.getColumnCount() <= 0 ||
            // this check prevents us from painting the entire table
            // when the clip doesn't intersect our bounds at all
            !bounds.intersects(clip)) {

        paintDropLines(context, g);
        return;
    }

    boolean ltr = table.getComponentOrientation().isLeftToRight();

    Point upperLeft = clip.getLocation();

    Point lowerRight = new Point(clip.x + clip.width - 1,
                                 clip.y + clip.height - 1);

    int rMin = table.rowAtPoint(upperLeft);
    int rMax = table.rowAtPoint(lowerRight);
    // This should never happen (as long as our bounds intersect the clip,
    // which is why we bail above if that is the case).
    if (rMin == -1) {
        rMin = 0;
    }
    // If the table does not have enough rows to fill the view we'll get -1.
    // (We could also get -1 if our bounds don't intersect the clip,
    // which is why we bail above if that is the case).
    // Replace this with the index of the last row.
    if (rMax == -1) {
        rMax = table.getRowCount()-1;
    }

    int cMin = table.columnAtPoint(ltr ? upperLeft : lowerRight);
    int cMax = table.columnAtPoint(ltr ? lowerRight : upperLeft);
    // This should never happen.
    if (cMin == -1) {
        cMin = 0;
    }
    // If the table does not have enough columns to fill the view we'll get -1.
    // Replace this with the index of the last column.
    if (cMax == -1) {
        cMax = table.getColumnCount()-1;
    }

    // Paint the cells.
    paintCells(context, g, rMin, rMax, cMin, cMax);

    // Paint the grid.
    // it is important to paint the grid after the cells, otherwise the grid will be overpainted
    // because in Synth cell renderers are likely to be opaque
    paintGrid(context, g, rMin, rMax, cMin, cMax);

    paintDropLines(context, g);
}
 
Example 16
Source File: SynthTableUI.java    From Java8CN with Apache License 2.0 4 votes vote down vote up
/**
 * Paints the specified component.
 *
 * @param context context for the component being painted
 * @param g the {@code Graphics} object used for painting
 * @see #update(Graphics,JComponent)
 */
protected void paint(SynthContext context, Graphics g) {
    Rectangle clip = g.getClipBounds();

    Rectangle bounds = table.getBounds();
    // account for the fact that the graphics has already been translated
    // into the table's bounds
    bounds.x = bounds.y = 0;

    if (table.getRowCount() <= 0 || table.getColumnCount() <= 0 ||
            // this check prevents us from painting the entire table
            // when the clip doesn't intersect our bounds at all
            !bounds.intersects(clip)) {

        paintDropLines(context, g);
        return;
    }

    boolean ltr = table.getComponentOrientation().isLeftToRight();

    Point upperLeft = clip.getLocation();

    Point lowerRight = new Point(clip.x + clip.width - 1,
                                 clip.y + clip.height - 1);

    int rMin = table.rowAtPoint(upperLeft);
    int rMax = table.rowAtPoint(lowerRight);
    // This should never happen (as long as our bounds intersect the clip,
    // which is why we bail above if that is the case).
    if (rMin == -1) {
        rMin = 0;
    }
    // If the table does not have enough rows to fill the view we'll get -1.
    // (We could also get -1 if our bounds don't intersect the clip,
    // which is why we bail above if that is the case).
    // Replace this with the index of the last row.
    if (rMax == -1) {
        rMax = table.getRowCount()-1;
    }

    int cMin = table.columnAtPoint(ltr ? upperLeft : lowerRight);
    int cMax = table.columnAtPoint(ltr ? lowerRight : upperLeft);
    // This should never happen.
    if (cMin == -1) {
        cMin = 0;
    }
    // If the table does not have enough columns to fill the view we'll get -1.
    // Replace this with the index of the last column.
    if (cMax == -1) {
        cMax = table.getColumnCount()-1;
    }

    // Paint the cells.
    paintCells(context, g, rMin, rMax, cMin, cMax);

    // Paint the grid.
    // it is important to paint the grid after the cells, otherwise the grid will be overpainted
    // because in Synth cell renderers are likely to be opaque
    paintGrid(context, g, rMin, rMax, cMin, cMax);

    paintDropLines(context, g);
}
 
Example 17
Source File: SynthTableUI.java    From hottub with GNU General Public License v2.0 4 votes vote down vote up
/**
 * Paints the specified component.
 *
 * @param context context for the component being painted
 * @param g the {@code Graphics} object used for painting
 * @see #update(Graphics,JComponent)
 */
protected void paint(SynthContext context, Graphics g) {
    Rectangle clip = g.getClipBounds();

    Rectangle bounds = table.getBounds();
    // account for the fact that the graphics has already been translated
    // into the table's bounds
    bounds.x = bounds.y = 0;

    if (table.getRowCount() <= 0 || table.getColumnCount() <= 0 ||
            // this check prevents us from painting the entire table
            // when the clip doesn't intersect our bounds at all
            !bounds.intersects(clip)) {

        paintDropLines(context, g);
        return;
    }

    boolean ltr = table.getComponentOrientation().isLeftToRight();

    Point upperLeft = clip.getLocation();

    Point lowerRight = new Point(clip.x + clip.width - 1,
                                 clip.y + clip.height - 1);

    int rMin = table.rowAtPoint(upperLeft);
    int rMax = table.rowAtPoint(lowerRight);
    // This should never happen (as long as our bounds intersect the clip,
    // which is why we bail above if that is the case).
    if (rMin == -1) {
        rMin = 0;
    }
    // If the table does not have enough rows to fill the view we'll get -1.
    // (We could also get -1 if our bounds don't intersect the clip,
    // which is why we bail above if that is the case).
    // Replace this with the index of the last row.
    if (rMax == -1) {
        rMax = table.getRowCount()-1;
    }

    int cMin = table.columnAtPoint(ltr ? upperLeft : lowerRight);
    int cMax = table.columnAtPoint(ltr ? lowerRight : upperLeft);
    // This should never happen.
    if (cMin == -1) {
        cMin = 0;
    }
    // If the table does not have enough columns to fill the view we'll get -1.
    // Replace this with the index of the last column.
    if (cMax == -1) {
        cMax = table.getColumnCount()-1;
    }

    // Paint the cells.
    paintCells(context, g, rMin, rMax, cMin, cMax);

    // Paint the grid.
    // it is important to paint the grid after the cells, otherwise the grid will be overpainted
    // because in Synth cell renderers are likely to be opaque
    paintGrid(context, g, rMin, rMax, cMin, cMax);

    paintDropLines(context, g);
}
 
Example 18
Source File: Note.java    From libreveris with GNU Lesser General Public License v3.0 4 votes vote down vote up
/**
 * Create a bunch of Note instances for one note pack glyph.
 * A note pack is a glyph whose shape "contains" several notes, just like
 * a NOTEHEAD_BLACK_3 shape represents a vertical sequence of 3 heads.
 * Within a pack, notes are numbered by their vertical top down index,
 * counted from 0.
 *
 * <p>If we have 0 or 1 stem attached to the provided glyph, no specific
 * test is needed, all the note instances are created on the provided chord.
 * </p>
 *
 * <p>When the underlying glyph is stuck to 2 stems, we have to decide
 * which notes go to one stem (the left chord), which notes go to the other
 * (the right chord) and which notes go to both.
 * Every stem gets at least the vertically closest note.
 * At the end, to make sure that all notes from the initial pack are
 * actually assigned, we force the unassigned notes to the stem at hand.
 * </p>
 *
 * <p>(On the diagram below with a note pack of 3, the two upper notes
 * will go to the right stem, and the third note will go to the left stem).
 * </p>
 * <img src="doc-files/Note-Pack.png" alt="Pack of 3">
 *
 * <p>(On the diagram below with a note pack of 1, the "mirrored" note is
 * duplicated, one instance goes to the left stem and the other to the
 * right stem).
 * </p>
 * <img src="doc-files/Note-Pack-both.png" alt="Shared note">
 *
 * @param chord      the containing chord
 * @param glyph      the underlying glyph of the note pack
 * @param assigned   (input/output) the set of note indices assigned so far
 * @param completing true if all unassigned notes must be assigned now
 */
public static void createPack (Chord chord,
                               Glyph glyph,
                               Set<Integer> assigned,
                               boolean completing)
{
    // Number of "notes" to create (not counting the duplicates)
    final int card = packCardOf(glyph.getShape());

    final Glyph stem = chord.getStem();
    Rectangle stemBox = null;
    Scale scale = chord.getScale();

    // Variable stemSir exists only when we have a dual stem situation.
    // It gives the direction of the stem at hand (-1:down, +1:up)
    Integer stemDir = null;

    if (glyph.getStemNumber() >= 2) {
        stemBox = stem.getBounds();
        stemBox.grow(
                scale.toPixels(constants.maxStemDx),
                scale.toPixels(constants.maxMultiStemDy));
        stemDir = Integer.signum(glyph.getAreaCenter().y - stem.getAreaCenter().y);
    }

    // Index goes from top to bottom
    for (int i = 0; i < card; i++) {
        Rectangle itemBox = getItemBox(glyph, i, scale.getInterline());

        if (stemDir != null) {
            // Apply the stem test, except on the item closest to the stem
            if ((stemDir == 1 && i > 0)
                || (stemDir == -1 && i < card - 1)) {
                if (!itemBox.intersects(stemBox)) {
                    // Stem check failed.
                    // Force assignment if unassigned and this is the end.
                    if (assigned.contains(i) || !completing) {
                        continue;
                    }
                }
            }
        }

        Point center = new Point(
                itemBox.x + (itemBox.width / 2),
                itemBox.y + (itemBox.height / 2));
        glyph.addTranslation(new Note(chord, glyph, center, card, i));
        assigned.add(i);
    }
}
 
Example 19
Source File: JavaHelp.java    From netbeans with Apache License 2.0 4 votes vote down vote up
/** If needed, visually rearrange dialogViewer and dlg on screen.
 * If they overlap, try to make them not overlap.
 * @param dlg the visible modal dialog
 * @param dialogOrFrameViewer The viewer, a dialog of a frame.
 */
private void rearrange(Dialog dlg, Window dialogOrFrameViewer) {
    Rectangle r1 = dlg.getBounds();
    Rectangle r2 = dialogOrFrameViewer.getBounds();
    if (r1.intersects(r2)) {
        Installer.log.fine("modal dialog and dialog viewer overlap");
        Dimension s = Toolkit.getDefaultToolkit().getScreenSize();
        int xExtra = s.width - r1.width - r2.width;
        int yExtra = s.height - r1.height - r2.height;
        if(xExtra >= yExtra){
            //compare y axes of r1 and r2 to know how to relocate them - horizontal relocation
            int r1Yaxis = r1.x + (r1.width/2);
            int r2Yaxis = r2.x + (r2.width/2);
            if(r1Yaxis <= r2Yaxis) {
                Installer.log.fine(" send help to the right");
                if((r1.x + r1.width + r2.width) <= s.width) {
                    Installer.log.fine("there is enough place fo help");
                    r2.x = r1.x + r1.width;
                } else {
                    Installer.log.fine("there is not enough place");
                    if((r1.width + r2.width) < s.width) {
                        Installer.log.fine("relocate both");
                        r2.x = s.width - r2.width;
                        r1.x = r2.x - r1.width;
                    } else {
                        Installer.log.fine("relocate both and resize help");
                        r1.x = 0;
                        r2.x = r1.width;
                        r2.width = s.width - r1.width;
                    }
                }
            } else {
                Installer.log.fine("send help to the left");
                if((r1.x - r2.width) > 0) {
                    Installer.log.fine("there is enough place for help");
                    r2.x = r1.x - r2.width;
                } else {
                    Installer.log.fine("there is not enough place");
                    if((r1.width + r2.width) < s.width){
                        Installer.log.fine("relocate both");
                        r2.x = 0;
                        r1.x = r2.width;
                    } else {
                        Installer.log.fine("relocate both and resize help");
                        r1.x = s.width - r1.width;
                        r2.x = 0;
                        r2.width = r1.x;
                    }
                }
            }
        } else {
            //compare x axes of r1 and r2 to know how to relocate them
            int r1Xaxis = r1.y + (r1.height/2);
            int r2Xaxis = r2.y + (r2.height/2);
            if(r1Xaxis <= r2Xaxis) {
                Installer.log.fine(" send help to the bottom");
                if((r1.y + r1.height + r2.height) <= s.height) {
                    Installer.log.fine("there is enough place fo help");
                    r2.y = r1.y + r1.height;
                } else {
                    Installer.log.fine("there is not enough place");
                    if((r1.height + r2.height) < s.height) {
                        Installer.log.fine("relocate both");
                        r2.y = s.height - r2.height;
                        r1.y = r2.y - r1.height;
                    } else {
                        Installer.log.fine("relocate both and resize help");
                        r1.y = 0;
                        r2.y = r1.height;
                        r2.height = s.height - r1.height;
                    }
                }
            } else {
                Installer.log.fine("send help to the top");
                if((r1.y - r2.height) > 0){
                    Installer.log.fine("there is enough place for help");
                    r2.y = r1.y - r2.height;
                } else {
                    Installer.log.fine("there is not enough place");
                    if((r1.height + r2.height) < s.height) {
                        Installer.log.fine("relocate both");
                        r2.y = 0;
                        r1.y = r2.height;
                    } else {
                        Installer.log.fine("relocate both and resize help");
                        r1.y = s.height - r1.height;
                        r2.y = 0;  //or with -1
                        r2.height = r1.y;
                    }
                }
            }
        }
        dlg.setBounds(r1);
        dialogOrFrameViewer.setBounds(r2);
    }
}
 
Example 20
Source File: BufferedCanvasComponent.java    From netbeans with Apache License 2.0 4 votes vote down vote up
protected boolean canDirectlyAccessGraphics() {
        // TODO: what about popup windows / tooltips???

        // TODO: some of the queries could be cached instead of polling,
        // for example isShowing(), isOpaque(), getParent() etc.

//////        // Shouldn't access graphics - no buffering would cause flickering
//////        if (bufferType == BUFFER_NONE) return false;

        // Cannot access graphics - there are some child components
        if (getComponentCount() != 0) return false;

        // Cannot access graphics - component doesn't fully control its area
        if (!isOpaque()) return false;

        // Cannot access graphics - not in Swing tree
        if (!(getParent() instanceof JComponent)) return false;

        // Cannot access graphics - component not showing, doesn't make sense
        if (!isShowing()) return false;

        // Cannot access graphics - component area is not up-to-date
        Rectangle dirtyRegion = RepaintManager.currentManager(this).
                                getDirtyRegion((JComponent)getParent());
        if (dirtyRegion != null && dirtyRegion.width > 0 &&
            dirtyRegion.height > 0) return false;

        // --- Reused from JViewport -------------------------------------------

        Rectangle clip = new Rectangle(0, 0, getWidth(), getHeight());
        Rectangle oldClip = new Rectangle();
        Rectangle tmp2 = null;
        Container parent;
        Component lastParent = null;
        int x, y, w, h;

        for (parent = this; parent != null && isLightweightComponent(parent); parent = parent.getParent()) {
            x = parent.getX();
            y = parent.getY();
            w = parent.getWidth();
            h = parent.getHeight();

            oldClip.setBounds(clip);
            SwingUtilities.computeIntersection(0, 0, w, h, clip);
            if (!clip.equals(oldClip)) return false;

            if (lastParent != null && parent instanceof JComponent &&
               !((JComponent)parent).isOptimizedDrawingEnabled()) {
                Component comps[] = parent.getComponents();
                int index = 0;

                for (int i = comps.length - 1 ;i >= 0; i--) {
                    if (comps[i] == lastParent) {
                    index = i - 1;
                    break;
                    }
                }

                while (index >= 0) {
                    tmp2 = comps[index].getBounds(tmp2);
                    if (tmp2.intersects(clip)) return false;
                    index--;
                }
            }
            clip.x += x;
            clip.y += y;
            lastParent = parent;
        }

        // No Window parent.
        if (parent == null) return false;

        return true;
    }