On Mon, 5 Apr 2021 10:34:21 GMT, Alexey Ushakov <a...@openjdk.org> wrote:
>>> Can you check that it will work in the "new" tabbed mode on big sur as well? >> >> Could you suggest any working test scenario? My simple test (below) just >> hangs even with OGL: >> >> import java.awt.FlowLayout; >> import java.util.Objects; >> import javax.swing.*; >> import javax.swing.border.EmptyBorder; >> >> public class TestWindowInsets >> extends JDialog >> { >> >> public TestWindowInsets() >> { >> JComponent contentPane = (JComponent) getContentPane(); >> contentPane.setBorder(new EmptyBorder(50, 50, 50, 50)); >> JButton b = new JButton("Test"); >> b.addActionListener(e -> toggle()); >> add(b); >> JButton c = new JButton("Win"); >> c.addActionListener(e -> win()); >> add(c); >> >> setLayout(new FlowLayout()); >> setSize(800, 600); >> >> setVisible(true); >> >> } >> >> void toggle() >> { >> SwingUtilities.invokeLater(() -> { >> JRootPane rp = getRootPane(); >> String name = "apple.awt.fullWindowContent"; >> Object value = rp.getClientProperty(name); >> if (Objects.equals(value, "true")) { >> value = "false"; >> } else { >> value = "true"; >> } >> rp.putClientProperty(name, value); >> }); >> } >> >> void win() >> { >> SwingUtilities.invokeLater(TestWindowInsets::new); >> } >> >> public static void main(String[] args) >> { >> SwingUtilities.invokeLater(TestWindowInsets::new); >> } >> } > >> Probably it is possible to swap coordinates during rendering in the layer >> and get rid of this field? > > I don't see a way how we can do it. Because of the inverted y coordinate in > metal, we need to place the origin of the drawing with the appropriate offset > that depends on the title height, even if we invert the y coordinate to match > java2d coordinate system. I am just not sure that this is the only place where the insets might be changed. We need to add a "callback" which will be called every time the insets will be changed. Probably in the MTLLayer.replaceSurfaceData which should be called from the LWWindowsPeer#notifyReshape->replaceSurfaceData(). Currently, we skip that call if insets were changed. and this is why this bug arise. ------------- PR: https://git.openjdk.java.net/jdk/pull/3308