/** Removes all highlights. */ public void removeAllHighlights() { TextUI mapper = component.getUI(); if (getDrawsLayeredHighlights()) { int len = highlights.size(); if (len != 0) { int minX = 0; int minY = 0; int maxX = 0; int maxY = 0; int p0 = -1; int p1 = -1; for (int i = 0; i < len; i++) { HighlightInfo hi = highlights.elementAt(i); if (hi instanceof LayeredHighlightInfo) { LayeredHighlightInfo info = (LayeredHighlightInfo) hi; minX = Math.min(minX, info.x); minY = Math.min(minY, info.y); maxX = Math.max(maxX, info.x + info.width); maxY = Math.max(maxY, info.y + info.height); } else { if (p0 == -1) { p0 = hi.p0.getOffset(); p1 = hi.p1.getOffset(); } else { p0 = Math.min(p0, hi.p0.getOffset()); p1 = Math.max(p1, hi.p1.getOffset()); } } } if (minX != maxX && minY != maxY) { component.repaint(minX, minY, maxX - minX, maxY - minY); } if (p0 != -1) { try { safeDamageRange(p0, p1); } catch (BadLocationException e) { } } highlights.removeAllElements(); } } else if (mapper != null) { int len = highlights.size(); if (len != 0) { int p0 = Integer.MAX_VALUE; int p1 = 0; for (int i = 0; i < len; i++) { HighlightInfo info = highlights.elementAt(i); p0 = Math.min(p0, info.p0.getOffset()); p1 = Math.max(p1, info.p1.getOffset()); } try { safeDamageRange(p0, p1); } catch (BadLocationException e) { } highlights.removeAllElements(); } } }
/* * Borders are handled by the UI since they are shared between cells * and therefore must overlay after the painting of the cells */ private void paintBorders(Graphics g, int rowMin, int rowMax, int colMin, int colMax) { // Include borders from adjacent rows/columns of the clip region rowMin = Math.max(0, rowMin - 1); rowMax = Math.min(grid.getRowCount() - 1, rowMax + 1); colMin = Math.max(0, colMin - 1); colMax = Math.min(grid.getColumnCount() - 1, colMax + 1); for (int row = rowMin; row <= rowMax; row++) { for (int column = colMin; column <= colMax; column++) { Rectangle cellRect = grid.getCellBounds(row, column); paintBorder(g, cellRect, row, column); } } }
private static boolean computeIntersection(Rectangle dest, int rx, int ry, int rw, int rh) { int x1 = Math.max(rx, dest.x); int x2 = Math.min(rx + rw, dest.x + dest.width); int y1 = Math.max(ry, dest.y); int y2 = Math.min(ry + rh, dest.y + dest.height); dest.x = x1; dest.y = y1; dest.width = x2 - x1; dest.height = y2 - y1; if (dest.width <= 0 || dest.height <= 0) { return false; } return true; }
/* * (non-Javadoc) * * @see * org.jvnet.flamingo.common.ui.BasicCommandButtonUI#paintButtonBackground * (java.awt.Graphics, java.awt.Rectangle) */ @Override protected void paintButtonBackground(Graphics graphics, Rectangle toFill) { if (SubstanceCoreUtilities.isButtonNeverPainted(this.commandButton)) return; ButtonModel actionModel = this.commandButton.getActionModel(); PopupButtonModel popupModel = ((JCommandButton) this.commandButton).getPopupModel(); Rectangle actionArea = this.getLayoutInfo().actionClickArea; Rectangle popupArea = this.getLayoutInfo().popupClickArea; BufferedImage fullAlphaBackground = CommandButtonBackgroundDelegate.getCombinedCommandButtonBackground( this.commandButton, actionModel, actionArea, popupModel, popupArea); // Two special cases here: // 1. Button has flat appearance and doesn't show the popup // 2. Button is disabled. // For both cases, we need to set custom translucency. boolean isFlat = this.commandButton.isFlat() && !((JCommandButton) this.commandButton).getPopupModel().isPopupShowing(); boolean isSpecial = isFlat || !this.commandButton.isEnabled(); float extraAlpha = 1.0f; if (isSpecial) { if (isFlat) { float extraActionAlpha = 0.0f; for (Map.Entry<ComponentState, StateTransitionTracker.StateContributionInfo> activeEntry : getActionTransitionTracker().getModelStateInfo().getStateContributionMap().entrySet()) { ComponentState activeState = activeEntry.getKey(); if (activeState.isDisabled()) continue; if (activeState == ComponentState.ENABLED) continue; extraActionAlpha += activeEntry.getValue().getContribution(); } float extraPopupAlpha = 0.0f; for (Map.Entry<ComponentState, StateTransitionTracker.StateContributionInfo> activeEntry : getPopupTransitionTracker().getModelStateInfo().getStateContributionMap().entrySet()) { ComponentState activeState = activeEntry.getKey(); if (activeState.isDisabled()) continue; if (activeState == ComponentState.ENABLED) continue; extraPopupAlpha += activeEntry.getValue().getContribution(); } extraAlpha = Math.max(extraActionAlpha, extraPopupAlpha); } else { ComponentState actionAreaState = ComponentState.getState(actionModel, this.commandButton); if (actionAreaState.isDisabled()) { extraAlpha = SubstanceColorSchemeUtilities.getAlpha(this.commandButton, actionAreaState); } } } // System.out.println(extraAlpha); extraAlpha = Math.min(1.0f, extraAlpha); if (extraAlpha > 0.0f) { Graphics2D g2d = (Graphics2D) graphics.create(); g2d.setComposite( LafWidgetUtilities.getAlphaComposite(this.commandButton, extraAlpha, graphics)); g2d.drawImage(fullAlphaBackground, 0, 0, null); g2d.dispose(); } }
protected void paintImage( Component c, Graphics g, int x, int y, int imageW, int imageH, Image image, Object[] args) { boolean isVertical = ((Boolean) args[1]).booleanValue(); // Render to the screen g.translate(x, y); if (isVertical) { for (int counter = 0; counter < w; counter += IMAGE_SIZE) { int tileSize = Math.min(IMAGE_SIZE, w - counter); g.drawImage(image, counter, 0, counter + tileSize, h, 0, 0, tileSize, h, null); } } else { for (int counter = 0; counter < h; counter += IMAGE_SIZE) { int tileSize = Math.min(IMAGE_SIZE, h - counter); g.drawImage(image, 0, counter, w, counter + tileSize, 0, 0, w, tileSize, null); } } g.translate(-x, -y); }
/** * Restricts the region based on the receivers offsets and messages the painter to paint the * region. */ void paintLayeredHighlights( Graphics g, int p0, int p1, Shape viewBounds, JTextComponent editor, View view) { int start = getStartOffset(); int end = getEndOffset(); // Restrict the region to what we represent p0 = Math.max(start, p0); p1 = Math.min(end, p1); // Paint the appropriate region using the painter and union // the effected region with our bounds. union( ((LayeredHighlighter.LayerPainter) painter) .paintLayer(g, p0, p1, viewBounds, editor, view)); }
/** * Computes the alpha value for painting the separators. * * @return Alpha value for painting the separators. */ private float getSeparatorAlpha() { ComponentState actionAreaState = this.getActionTransitionTracker().getModelStateInfo().getCurrModelState(); if (!actionAreaState.isFacetActive(ComponentStateFacet.SELECTION) && !actionAreaState.isDisabled()) { float actionRolloverCycle = this.getActionTransitionTracker().getFacetStrength(ComponentStateFacet.ROLLOVER); float popupRolloverCycle = this.getPopupTransitionTracker().getFacetStrength(ComponentStateFacet.ROLLOVER); return Math.min(1.0f, actionRolloverCycle + popupRolloverCycle); } return 1.0f; }
void union(Shape bounds) { if (bounds == null) return; Rectangle alloc; if (bounds instanceof Rectangle) { alloc = (Rectangle) bounds; } else { alloc = bounds.getBounds(); } if (width == 0 || height == 0) { x = alloc.x; y = alloc.y; width = alloc.width; height = alloc.height; } else { width = Math.max(x + width, alloc.x + alloc.width); height = Math.max(y + height, alloc.y + alloc.height); x = Math.min(x, alloc.x); width -= x; y = Math.min(y, alloc.y); height -= y; } }
/** * Changes a highlight. * * @param tag the highlight tag * @param p0 the beginning of the range >= 0 * @param p1 the end of the range >= p0 * @exception BadLocationException if the specified location is invalid */ public void changeHighlight(Object tag, int p0, int p1) throws BadLocationException { if (p0 < 0) { throw new BadLocationException("Invalid beginning of the range", p0); } if (p1 < p0) { throw new BadLocationException("Invalid end of the range", p1); } Document doc = component.getDocument(); if (tag instanceof LayeredHighlightInfo) { LayeredHighlightInfo lhi = (LayeredHighlightInfo) tag; if (lhi.width > 0 && lhi.height > 0) { component.repaint(lhi.x, lhi.y, lhi.width, lhi.height); } // Mark the highlights region as invalid, it will reset itself // next time asked to paint. lhi.width = lhi.height = 0; lhi.p0 = doc.createPosition(p0); lhi.p1 = doc.createPosition(p1); safeDamageRange(Math.min(p0, p1), Math.max(p0, p1)); } else { HighlightInfo info = (HighlightInfo) tag; int oldP0 = info.p0.getOffset(); int oldP1 = info.p1.getOffset(); if (p0 == oldP0) { safeDamageRange(Math.min(oldP1, p1), Math.max(oldP1, p1)); } else if (p1 == oldP1) { safeDamageRange(Math.min(p0, oldP0), Math.max(p0, oldP0)); } else { safeDamageRange(oldP0, oldP1); safeDamageRange(p0, p1); } info.p0 = doc.createPosition(p0); info.p1 = doc.createPosition(p1); } }
public int filterRGB(int x, int y, int rgb) { // Coefficients are from the sRGB color space: int gray = Math.min( 255, (int) (((0.2125f * ((rgb >> 16) & 0xFF)) + (0.7154f * ((rgb >> 8) & 0xFF)) + (0.0721f * (rgb & 0xFF)) + .5f) * factor + min)); return (rgb & 0xff000000) | (gray << 16) | (gray << 8) | (gray << 0); }
private int clipToRange(int i, int a, int b) { return Math.min(Math.max(i, a), b - 1); }
@Override public void paint(Graphics g) { Color origColor; boolean isPressed, isRollOver, isEnabled; int w, h, size; w = getWidth(); h = getHeight(); origColor = g.getColor(); isPressed = getModel().isPressed(); isRollOver = getModel().isRollover(); isEnabled = isEnabled(); g.setColor(getBackground()); g.fillRect(0, 0, w, h); g.setColor(shadow); // Using the background color set above if (direction == WEST) { g.drawLine(0, 0, 0, h - 1); // left g.drawLine(w - 1, 0, w - 1, 0); // right } else g.drawLine(w - 2, h - 1, w - 2, 0); // right g.drawLine(0, 0, w - 2, 0); // top if (isRollOver) { // do highlights or shadows Color color1; Color color2; if (isPressed) { color2 = Color.WHITE; color1 = shadow; } else { color1 = Color.WHITE; color2 = shadow; } g.setColor(color1); if (direction == WEST) { g.drawLine(1, 1, 1, h - 1); // left g.drawLine(1, 1, w - 2, 1); // top g.setColor(color2); g.drawLine(w - 1, h - 1, w - 1, 1); // right } else { g.drawLine(0, 1, 0, h - 1); g.drawLine(0, 1, w - 3, 1); // top g.setColor(color2); g.drawLine(w - 3, h - 1, w - 3, 1); // right } } // g.drawLine(0, h - 1, w - 1, h - 1); //bottom // If there's no room to draw arrow, bail if (h < 5 || w < 5) { g.setColor(origColor); return; } if (isPressed) { g.translate(1, 1); } // Draw the arrow size = Math.min((h - 4) / 3, (w - 4) / 3); size = Math.max(size, 2); boolean highlight = false; if (!highlightedTabs.isEmpty() && ((direction == WEST && tabScroller.scrollBackwardButton.isEnabled()) || (direction == EAST && tabScroller.scrollForwardButton.isEnabled()))) { Rectangle viewRect = tabScroller.viewport.getViewRect(); if (direction == WEST) { int leadingTabIndex = getClosestTab(viewRect.x, viewRect.y); for (int i = 0; i < leadingTabIndex; i++) { if (highlightedTabs.contains(i) && !isScrollTabVisible(i)) { highlight = true; break; } } } else { int leadingTabIndex = getClosestTab(viewRect.x + viewRect.y, viewRect.y); for (int i = leadingTabIndex; i < tabPane.getTabCount(); i++) { if (highlightedTabs.contains(i) && !isScrollTabVisible(i)) { highlight = true; break; } } } if (highlight) { Image img = DesktopUtilActivator.getImage( direction == WEST ? "service.gui.icons.TAB_UNREAD_BACKWARD_ICON" : "service.gui.icons.TAB_UNREAD_FORWARD_ICON"); int wi = img.getWidth(null); g.drawImage(img, (w - wi) / 2, (h - size) / 2 - 2 /* 2 borders 1px width*/, null); } } if (!highlight) paintTriangle(g, (w - size) / 2, (h - size) / 2, size, direction, isEnabled); // Reset the Graphics back to it's original settings if (isPressed) { g.translate(-1, -1); } g.setColor(origColor); }