src/macosx/classes/sun/lwawt/LWComponentPeer.java

Print this page

        

*** 422,433 **** return false; } @Override public final Graphics getGraphics() { ! Graphics g = getWindowPeerOrSelf().isOpaque() ? getOnscreenGraphics() ! : getOffscreenGraphics(); if (g != null) { synchronized (getPeerTreeLock()){ applyConstrain(g); } } --- 422,432 ---- return false; } @Override public final Graphics getGraphics() { ! final Graphics g = getOnscreenGraphics(); if (g != null) { synchronized (getPeerTreeLock()){ applyConstrain(g); } }
*** 441,457 **** */ public final Graphics getOnscreenGraphics() { final LWWindowPeer wp = getWindowPeerOrSelf(); return wp.getOnscreenGraphics(getForeground(), getBackground(), getFont()); - } - - public final Graphics getOffscreenGraphics() { - final LWWindowPeer wp = getWindowPeerOrSelf(); - return wp.getOffscreenGraphics(getForeground(), getBackground(), - getFont()); } private void applyConstrain(final Graphics g) { final SunGraphics2D sg2d = (SunGraphics2D) g; final Rectangle constr = localToWindow(getSize()); --- 440,450 ----
*** 461,471 **** //sg2d.constrain(getVisibleRegion()); SG2DConstraint(sg2d, getVisibleRegion()); } //TODO Move this method to SG2D? ! private void SG2DConstraint(final SunGraphics2D sg2d, Region r) { sg2d.constrainX = sg2d.transX; sg2d.constrainY = sg2d.transY; Region c = sg2d.constrainClip; if ((sg2d.constrainX | sg2d.constrainY) != 0) { --- 454,464 ---- //sg2d.constrain(getVisibleRegion()); SG2DConstraint(sg2d, getVisibleRegion()); } //TODO Move this method to SG2D? ! void SG2DConstraint(final SunGraphics2D sg2d, Region r) { sg2d.constrainX = sg2d.transX; sg2d.constrainY = sg2d.transY; Region c = sg2d.constrainClip; if ((sg2d.constrainX | sg2d.constrainY) != 0) {
*** 708,718 **** // Borrow the metrics from the top-level window // return getWindowPeer().getFontMetrics(f); // Obtain the metrics from the offscreen window where this peer is // mostly drawn to. // TODO: check for "use platform metrics" settings ! Graphics g = getWindowPeer().getOffscreenGraphics(); try { if (g != null) { return g.getFontMetrics(f); } else { synchronized (getDelegateLock()) { --- 701,711 ---- // Borrow the metrics from the top-level window // return getWindowPeer().getFontMetrics(f); // Obtain the metrics from the offscreen window where this peer is // mostly drawn to. // TODO: check for "use platform metrics" settings ! Graphics g = getWindowPeer().getGraphics(); try { if (g != null) { return g.getFontMetrics(f); } else { synchronized (getDelegateLock()) {
*** 1009,1026 **** } @Override public final void applyShape(final Region shape) { synchronized (getStateLock()) { region = shape; } repaintParent(getBounds()); } protected final Region getRegion() { synchronized (getStateLock()) { ! return region == null ? Region.getInstance(getSize()) : region; } } // DropTargetPeer Method @Override --- 1002,1034 ---- } @Override public final void applyShape(final Region shape) { synchronized (getStateLock()) { + if (region == shape || (region != null && region.equals(shape))) { + return; + } + } + applyShapeImpl(shape); + } + + void applyShapeImpl(final Region shape) { + synchronized (getStateLock()) { region = shape; } repaintParent(getBounds()); } protected final Region getRegion() { synchronized (getStateLock()) { ! return isShaped() ? region : Region.getInstance(getSize()); ! } ! } ! ! public boolean isShaped() { ! synchronized (getStateLock()) { ! return region != null; } } // DropTargetPeer Method @Override
*** 1384,1438 **** getDelegate().print(g); } } } - // Just a helper method, thus final - protected final void flushOffscreenGraphics() { - flushOffscreenGraphics(getSize()); - } - protected static final void flushOnscreenGraphics(){ final OGLRenderQueue rq = OGLRenderQueue.getInstance(); rq.lock(); try { rq.flushNow(); } finally { rq.unlock(); } } - /* - * Flushes the given rectangle from the back buffer to the screen. - */ - protected void flushOffscreenGraphics(Rectangle r) { - flushOffscreenGraphics(r.x, r.y, r.width, r.height); - } - - private void flushOffscreenGraphics(int x, int y, int width, int height) { - Image bb = getWindowPeerOrSelf().getBackBuffer(); - if (bb != null) { - // g is a screen Graphics from the delegate - final Graphics g = getOnscreenGraphics(); - - if (g != null && g instanceof Graphics2D) { - try { - Graphics2D g2d = (Graphics2D)g; - Point p = localToWindow(new Point(0, 0)); - Composite composite = g2d.getComposite(); - g2d.setComposite(AlphaComposite.Src); - g.drawImage(bb, x, y, x + width, y + height, p.x + x, - p.y + y, p.x + x + width, p.y + y + height, - null); - g2d.setComposite(composite); - } finally { - g.dispose(); - } - } - } - } - /** * Used by ContainerPeer to skip all the paint events during layout. * * @param isLayouting layouting state. */ --- 1392,1411 ----