# HG changeset patch # User serb # Date 1348508021 -14400 # Node ID 8b3fe3d8badbdeefd147fd164be636739014334f # Parent d1b65c4e924c2339a85bd1d2e28dda73c4296fbf 7160627: [macosx] TextArea has wrong initial size 7124213: [macosx] pack() does ignore size of a component; doesn't on the other platforms Reviewed-by: anthony, art diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWCanvasPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,26 +26,27 @@ package sun.lwawt; +import java.awt.AWTException; import java.awt.BufferCapabilities; -import java.awt.Canvas; import java.awt.Component; +import java.awt.Dimension; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.peer.CanvasPeer; import javax.swing.JComponent; -final class LWCanvasPeer extends LWComponentPeer - implements CanvasPeer { +class LWCanvasPeer + extends LWComponentPeer implements CanvasPeer { - LWCanvasPeer(final Canvas target, PlatformComponent platformComponent) { + LWCanvasPeer(final T target, final PlatformComponent platformComponent) { super(target, platformComponent); } - // ---- PEER METHODS ---- // @Override - public void createBuffers(int numBuffers, BufferCapabilities caps) { + public void createBuffers(int numBuffers, BufferCapabilities caps) + throws AWTException { // TODO } @@ -67,10 +68,20 @@ } @Override - public GraphicsConfiguration getAppropriateGraphicsConfiguration( + public final GraphicsConfiguration getAppropriateGraphicsConfiguration( GraphicsConfiguration gc) { // TODO return gc; } + + @Override + public final Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override + public final Dimension getMinimumSize() { + return getBounds().getSize(); + } } diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWCheckboxPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -186,6 +186,11 @@ } @Override + public Dimension getPreferredSize() { + return getCurrentButton().getPreferredSize(); + } + + @Override @Transient public Dimension getMinimumSize() { return getCurrentButton().getMinimumSize(); diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWComponentPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -123,7 +123,7 @@ // private volatile boolean paintPending; private volatile boolean isLayouting; - private D delegate = null; + private final D delegate; private Container delegateContainer; private Component delegateDropTarget; private final Object dropTargetLock = new Object(); @@ -133,6 +133,11 @@ private final PlatformComponent platformComponent; + /** + * Character with reasonable value between the minimum width and maximum. + */ + static final char WIDE_CHAR = '0'; + private final class DelegateContainer extends Container { { enableEvents(0xFFFFFFFF); @@ -267,9 +272,7 @@ } protected final D getDelegate() { - synchronized (getStateLock()) { - return delegate; - } + return delegate; } protected Component getDelegateFocusOwner() { @@ -698,26 +701,23 @@ } @Override - public FontMetrics getFontMetrics(Font f) { + public FontMetrics getFontMetrics(final Font f) { // 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) { + final Graphics g = getOnscreenGraphics(); + if (g != null) { + try { return g.getFontMetrics(f); - } else { - synchronized (getDelegateLock()) { - return delegateContainer.getFontMetrics(f); - } - } - } finally { - if (g != null) { + } finally { g.dispose(); } } + synchronized (getDelegateLock()) { + return delegateContainer.getFontMetrics(f); + } } @Override @@ -847,31 +847,46 @@ } /** - * Should be overridden in subclasses to forward the request - * to the Swing helper component, if required. + * Determines the preferred size of the component. By default forwards the + * request to the Swing helper component. Should be overridden in subclasses + * if required. */ @Override public Dimension getPreferredSize() { - // It looks like a default implementation for all toolkits - return getMinimumSize(); + final Dimension size; + synchronized (getDelegateLock()) { + size = getDelegate().getPreferredSize(); + } + return validateSize(size); } - /* - * Should be overridden in subclasses to forward the request - * to the Swing helper component. + /** + * Determines the minimum size of the component. By default forwards the + * request to the Swing helper component. Should be overridden in subclasses + * if required. */ @Override public Dimension getMinimumSize() { - D delegate = getDelegate(); + final Dimension size; + synchronized (getDelegateLock()) { + size = getDelegate().getMinimumSize(); + } + return validateSize(size); + } - if (delegate == null) { - // Is it a correct default value? - return getBounds().getSize(); - } else { - synchronized (getDelegateLock()) { - return delegate.getMinimumSize(); - } + /** + * In some situations delegates can return empty minimum/preferred size. + * (For example: empty JLabel, etc), but awt components never should be + * empty. In the XPeers or WPeers we use some magic constants, but here we + * try to use something more useful, + */ + private Dimension validateSize(final Dimension size) { + if (size.width == 0 || size.height == 0) { + final FontMetrics fm = getFontMetrics(getFont()); + size.width = fm.charWidth(WIDE_CHAR); + size.height = fm.getHeight(); } + return size; } @Override diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWContainerPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,7 +41,7 @@ import javax.swing.JComponent; abstract class LWContainerPeer - extends LWComponentPeer + extends LWCanvasPeer implements ContainerPeer { // List of child peers sorted by z-order from bottom-most diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWLabelPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,37 +26,26 @@ package sun.lwawt; -import java.awt.Dimension; -import java.awt.FontMetrics; import java.awt.Label; import java.awt.peer.LabelPeer; import javax.swing.JLabel; import javax.swing.SwingConstants; -import javax.tools.annotation.GenerateNativeHeader; - /** * Lightweight implementation of {@link LabelPeer}. Delegates most of the work * to the {@link JLabel}. */ -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader final class LWLabelPeer extends LWComponentPeer implements LabelPeer { - private static final int TEXT_XPAD = 5; - private static final int TEXT_YPAD = 1; - LWLabelPeer(final Label target, final PlatformComponent platformComponent) { super(target, platformComponent); } @Override protected JLabel createDelegate() { - final JLabel label = new JLabel(); - label.setVerticalAlignment(SwingConstants.TOP); - return label; + return new JLabel(); } @Override @@ -80,24 +69,6 @@ } } - @Override - public Dimension getMinimumSize() { - int w = TEXT_XPAD; - int h = TEXT_YPAD; - final FontMetrics fm = getFontMetrics(getFont()); - if (fm != null) { - final String text; - synchronized (getDelegateLock()) { - text = getDelegate().getText(); - } - if (text != null) { - w += fm.stringWidth(text); - } - h += fm.getHeight(); - } - return new Dimension(w, h); - } - /** * Converts {@code Label} alignment constant to the {@code JLabel} constant. * If wrong Label alignment provided returns default alignment. diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWListPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWListPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,10 +32,22 @@ import java.awt.peer.ListPeer; import java.util.Arrays; -final class LWListPeer - extends LWComponentPeer +/** + * Lightweight implementation of {@link ListPeer}. + */ +final class LWListPeer extends LWComponentPeer implements ListPeer { + /** + * The default number of visible rows. + */ + private static final int DEFAULT_VISIBLE_ROWS = 4; // From java.awt.List, + + /** + * This text is used for cell bounds calculation. + */ + private static final String TEXT = "0123456789abcde"; + LWListPeer(final List target, final PlatformComponent platformComponent) { super(target, platformComponent); if (!getTarget().isBackgroundSet()) { @@ -135,6 +147,16 @@ } @Override + public Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override + public Dimension getMinimumSize() { + return getMinimumSize(DEFAULT_VISIBLE_ROWS); + } + + @Override public Dimension getPreferredSize(final int rows) { return getMinimumSize(rows); } @@ -142,16 +164,26 @@ @Override public Dimension getMinimumSize(final int rows) { synchronized (getDelegateLock()) { - final int margin = 2; - final int space = 1; + final Dimension size = getCellSize(); + size.height *= rows; + // Always take vertical scrollbar into account. + final JScrollBar vbar = getDelegate().getVerticalScrollBar(); + size.width += vbar != null ? vbar.getMinimumSize().width : 0; + // JScrollPane and JList insets + final Insets pi = getDelegate().getInsets(); + final Insets vi = getDelegate().getView().getInsets(); + size.width += pi.left + pi.right + vi.left + vi.right; + size.height += pi.top + pi.bottom + vi.top + vi.bottom; + return size; + } + } - // TODO: count ScrollPane's scrolling elements if any. - final FontMetrics fm = getFontMetrics(getFont()); - final int itemHeight = (fm.getHeight() - fm.getLeading()) + (2 * space); - - return new Dimension(20 + (fm == null ? 10 * 15 : fm.stringWidth("0123456789abcde")), - (fm == null ? 10 : itemHeight) * rows + (2 * margin)); - } + private Dimension getCellSize() { + final JList jList = getDelegate().getView(); + final ListCellRenderer cr = jList.getCellRenderer(); + final Component cell = cr.getListCellRendererComponent(jList, TEXT, 0, + false, false); + return cell.getPreferredSize(); } private void revalidate() { @@ -165,10 +197,10 @@ private boolean skipStateChangedEvent; - private DefaultListModel model = - new DefaultListModel() { + private final DefaultListModel model = + new DefaultListModel() { @Override - public void add(final int index, final Object element) { + public void add(final int index, final String element) { if (index == -1) { addElement(element); } else { @@ -181,7 +213,7 @@ ScrollableJList() { getViewport().setScrollMode(JViewport.SIMPLE_SCROLL_MODE); - final JList list = new JListDelegate(); + final JList list = new JListDelegate(); list.addListSelectionListener(this); getViewport().setView(list); @@ -223,11 +255,11 @@ } } - public JList getView() { - return (JList) getViewport().getView(); + public JList getView() { + return (JList) getViewport().getView(); } - public DefaultListModel getModel() { + public DefaultListModel getModel() { return model; } @@ -254,7 +286,7 @@ } } - private final class JListDelegate extends JList { + private final class JListDelegate extends JList { JListDelegate() { super(ScrollableJList.this.model); @@ -272,7 +304,7 @@ final int index = locationToIndex(e.getPoint()); if (0 <= index && index < getModel().getSize()) { LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED, - getModel().getElementAt(index).toString(), e.getWhen(), e.getModifiers())); + getModel().getElementAt(index), e.getWhen(), e.getModifiers())); } } } @@ -281,10 +313,10 @@ protected void processKeyEvent(final KeyEvent e) { super.processKeyEvent(e); if (e.getID() == KeyEvent.KEY_PRESSED && e.getKeyCode() == KeyEvent.VK_ENTER) { - final Object selectedValue = getSelectedValue(); + final String selectedValue = getSelectedValue(); if(selectedValue != null){ LWListPeer.this.postEvent(new ActionEvent(getTarget(), ActionEvent.ACTION_PERFORMED, - selectedValue.toString(), e.getWhen(), e.getModifiers())); + selectedValue, e.getWhen(), e.getModifiers())); } } } diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWPanelPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -26,7 +26,6 @@ package sun.lwawt; -import java.awt.Dimension; import java.awt.Panel; import java.awt.peer.PanelPeer; @@ -43,9 +42,4 @@ public JPanel createDelegate() { return new JPanel(); } - - @Override - public Dimension getMinimumSize() { - return getBounds().getSize(); - } } diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWScrollBarPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -27,7 +27,6 @@ package sun.lwawt; import java.awt.Adjustable; -import java.awt.Dimension; import java.awt.Scrollbar; import java.awt.event.AdjustmentEvent; import java.awt.event.AdjustmentListener; @@ -93,13 +92,6 @@ } } - @Override - public Dimension getPreferredSize() { - synchronized (getDelegateLock()) { - return getDelegate().getPreferredSize(); - } - } - // Peer also registered as a listener for ComponentDelegate component @Override public void adjustmentValueChanged(final AdjustmentEvent e) { diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextAreaPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; +import java.awt.Insets; import java.awt.Point; import java.awt.TextArea; import java.awt.event.TextEvent; @@ -41,11 +42,22 @@ import javax.swing.text.Document; import javax.swing.text.JTextComponent; +/** + * Lightweight implementation of {@link TextAreaPeer}. Delegates most of the + * work to the {@link JTextArea} inside JScrollPane. + */ final class LWTextAreaPeer extends LWTextComponentPeer implements TextAreaPeer { + /** + * The default number of visible columns. + */ private static final int DEFAULT_COLUMNS = 60; + + /** + * The default number of visible rows. + */ private static final int DEFAULT_ROWS = 10; LWTextAreaPeer(final TextArea target, @@ -87,26 +99,41 @@ } @Override + public Dimension getPreferredSize() { + return getMinimumSize(); + } + + @Override public Dimension getMinimumSize() { return getMinimumSize(DEFAULT_ROWS, DEFAULT_COLUMNS); } @Override - public Dimension getMinimumSize(final int rows, final int columns) { - return getPreferredSize(rows, columns); + public Dimension getPreferredSize(final int rows, final int columns) { + return getMinimumSize(rows, columns); } @Override - public Dimension getPreferredSize(final int rows, final int columns) { - final Dimension size = super.getPreferredSize(rows, columns); + public Dimension getMinimumSize(final int rows, final int columns) { + final Dimension size = super.getMinimumSize(rows, columns); synchronized (getDelegateLock()) { - final JScrollBar vbar = getDelegate().getVerticalScrollBar(); - final JScrollBar hbar = getDelegate().getHorizontalScrollBar(); - final int scrollbarW = vbar != null ? vbar.getWidth() : 0; - final int scrollbarH = hbar != null ? hbar.getHeight() : 0; - return new Dimension(size.width + scrollbarW, - size.height + scrollbarH); + // JScrollPane insets + final Insets pi = getDelegate().getInsets(); + size.width += pi.left + pi.right; + size.height += pi.top + pi.bottom; + // Take scrollbars into account. + final int vsbPolicy = getDelegate().getVerticalScrollBarPolicy(); + if (vsbPolicy == ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) { + final JScrollBar vbar = getDelegate().getVerticalScrollBar(); + size.width += vbar != null ? vbar.getMinimumSize().width : 0; + } + final int hsbPolicy = getDelegate().getHorizontalScrollBarPolicy(); + if (hsbPolicy == ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS) { + final JScrollBar hbar = getDelegate().getHorizontalScrollBar(); + size.height += hbar != null ? hbar.getMinimumSize().height : 0; + } } + return size; } @Override diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextComponentPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -48,10 +48,7 @@ extends LWComponentPeer implements DocumentListener, TextComponentPeer, InputMethodListener { - /** - * Character with reasonable value between the minimum width and maximum. - */ - protected static final char WIDE_CHAR = 'w'; + private volatile boolean firstChangeSkipped; LWTextComponentPeer(final T target, @@ -95,18 +92,16 @@ */ abstract JTextComponent getTextComponent(); - public Dimension getPreferredSize(final int rows, final int columns) { + public Dimension getMinimumSize(final int rows, final int columns) { final Insets insets; synchronized (getDelegateLock()) { - insets = getDelegate().getInsets(); + insets = getTextComponent().getInsets(); } final int borderHeight = insets.top + insets.bottom; final int borderWidth = insets.left + insets.right; final FontMetrics fm = getFontMetrics(getFont()); - final int charWidth = (fm != null) ? fm.charWidth(WIDE_CHAR) : 10; - final int itemHeight = (fm != null) ? fm.getHeight() : 10; - return new Dimension(columns * charWidth + borderWidth, - rows * itemHeight + borderHeight); + return new Dimension(fm.charWidth(WIDE_CHAR) * columns + borderWidth, + fm.getHeight() * rows + borderHeight); } @Override @@ -187,6 +182,7 @@ } } + //TODO IN XAWT we just return true.. @Override public final boolean isFocusable() { return getTarget().isFocusable(); diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java --- a/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWTextFieldPeer.java Mon Sep 24 21:33:41 2012 +0400 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -37,16 +37,10 @@ import javax.swing.JPasswordField; import javax.swing.text.JTextComponent; -import javax.tools.annotation.GenerateNativeHeader; - -/* No native methods here, but the constants are needed in the supporting JNI code */ -@GenerateNativeHeader final class LWTextFieldPeer extends LWTextComponentPeer implements TextFieldPeer, ActionListener { - private static final int DEFAULT_COLUMNS = 1; - LWTextFieldPeer(final TextField target, final PlatformComponent platformComponent) { super(target, platformComponent); @@ -83,17 +77,12 @@ @Override public Dimension getPreferredSize(final int columns) { - return getPreferredSize(1, columns); + return getMinimumSize(columns); } @Override public Dimension getMinimumSize(final int columns) { - return getPreferredSize(columns); - } - - @Override - public Dimension getMinimumSize() { - return getMinimumSize(DEFAULT_COLUMNS); + return getMinimumSize(1, columns); } @Override diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/src/macosx/classes/sun/lwawt/LWToolkit.java --- a/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Mon Sep 24 18:24:30 2012 +0400 +++ b/jdk/src/macosx/classes/sun/lwawt/LWToolkit.java Mon Sep 24 21:33:41 2012 +0400 @@ -310,7 +310,7 @@ @Override public CanvasPeer createCanvas(Canvas target) { PlatformComponent platformComponent = createPlatformComponent(); - LWCanvasPeer peer = new LWCanvasPeer(target, platformComponent); + LWCanvasPeer peer = new LWCanvasPeer<>(target, platformComponent); targetCreatedPeer(target, peer); peer.initialize(); return peer; diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java Mon Sep 24 21:33:41 2012 +0400 @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.ScrollPane; +import java.awt.Toolkit; + +import sun.awt.SunToolkit; + +/** + * @test + * @bug 7124213 + * @author Sergey Bylokhov + */ +public final class ScrollPanePreferredSize { + + public static void main(final String[] args) { + final Dimension expected = new Dimension(300, 300); + final Frame frame = new Frame(); + final ScrollPane sp = new ScrollPane(); + sp.setSize(expected); + frame.add(sp); + frame.pack(); + frame.setLocationRelativeTo(null); + frame.setVisible(true); + sleep(); + final Dimension size = frame.getSize(); + if (size.width < expected.width || size.height < expected.height) { + throw new RuntimeException( + "Expected size: >= " + expected + ", actual size: " + size); + } + frame.dispose(); + } + + private static void sleep() { + ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + try { + Thread.sleep(500L); + } catch (InterruptedException ignored) { + } + } +} diff -r d1b65c4e924c -r 8b3fe3d8badb jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java Mon Sep 24 21:33:41 2012 +0400 @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.TextArea; +import java.awt.Toolkit; + +import sun.awt.SunToolkit; + +/** + * @test + * @bug 7160627 + * @summary We shouldn't get different frame size when we call Frame.pack() + * twice. + * @author Sergey Bylokhov + */ +public final class TextAreaTwicePack { + + public static void main(final String[] args) { + final Frame frame = new Frame(); + final TextArea ta = new TextArea(); + frame.add(ta); + frame.pack(); + frame.setVisible(true); + sleep(); + final Dimension before = frame.getSize(); + frame.pack(); + final Dimension after = frame.getSize(); + if (!after.equals(before)) { + throw new RuntimeException( + "Expected size: " + before + ", actual size: " + after); + } + frame.dispose(); + } + + private static void sleep() { + ((SunToolkit) Toolkit.getDefaultToolkit()).realSync(); + try { + Thread.sleep(500L); + } catch (InterruptedException ignored) { + } + } +}