Skip to content

Commit

Permalink
8261460: Incorrect CSS applied to ContextMenu on DialogPane
Browse files Browse the repository at this point in the history
Reviewed-by: kcr, aghaisas
  • Loading branch information
abhinayagarwal authored and kevinrushforth committed Feb 19, 2021
1 parent 782f22a commit f02019f
Show file tree
Hide file tree
Showing 4 changed files with 107 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3379,7 +3379,7 @@ is being used to size a border should also be in pixels.
-fx-padding: 0.833em; /* 10 */
}

.dialog-pane:no-header .graphic-container {
.dialog-pane:no-header > * > .graphic-container {
-fx-padding: 0.833em 0 0 0.833em; /* 10px 0px 0px 10px */
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@

import com.sun.javafx.scene.control.ContextMenuContent;
import com.sun.javafx.scene.control.ContextMenuContentShim;
import javafx.geometry.Insets;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import test.com.sun.javafx.scene.control.infrastructure.StageLoader;
import javafx.css.PseudoClass;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Bounds;
Expand All @@ -36,9 +40,12 @@
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.CustomMenuItem;
import javafx.scene.control.DialogPane;
import javafx.scene.control.Label;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuItem;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
Expand Down Expand Up @@ -755,4 +762,26 @@ private ContextMenu createContextMenuAndShowSubMenu() {
assertEquals(anchorBounds.getMinX(), cmBounds.getMaxX(), 0.0);
assertEquals(anchorBounds.getMinY(), cmBounds.getMinY(), 0.0);
}

@Test public void test_graphic_padding_onDialogPane() {
DialogPane dialogPane = new DialogPane();
anchorBtn.setGraphic(dialogPane);
// Since DialogPane is not set in a Dialog, PseudoClass is activated manually
dialogPane.pseudoClassStateChanged(PseudoClass.getPseudoClass("no-header"), true);

final ImageView graphic = new ImageView(new Image(ContextMenuTest.class.getResource("icon.png").toExternalForm()));
final MenuItem menuItem = new MenuItem("Menu Item Text", graphic);
final ContextMenu contextMenu = new ContextMenu(menuItem);
contextMenu.show(dialogPane, 0, 0);

final Insets padding = ((StackPane) graphic.getParent()).getPadding();
final double fontSize = Font.getDefault().getSize();

// -fx-padding: 0em 0.333em 0em 0em;
assertEquals(0, padding.getTop(), 0.0);
assertEquals(0.333 * fontSize, padding.getRight(), 0.01);
assertEquals(0, padding.getBottom(), 0.0);
assertEquals(0, padding.getLeft(), 0.0);
anchorBtn.setGraphic(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
/*
* Copyright (c) 2021, 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.
*/

package test.javafx.scene.control;

import javafx.css.PseudoClass;
import javafx.geometry.Insets;
import javafx.scene.control.DialogPane;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Font;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import test.com.sun.javafx.scene.control.infrastructure.StageLoader;

import static org.junit.Assert.assertEquals;

public class DialogPaneTest {

private StageLoader sl;
private DialogPane dialogPane;

@Before
public void setup() {
dialogPane = new DialogPane();
sl = new StageLoader(dialogPane);
}

@After
public void after() {
sl.dispose();
}

@Test
public void test_graphic_padding_noHeader() {
// Since DialogPane is not set in a Dialog, PseudoClass is activated manually
dialogPane.pseudoClassStateChanged(PseudoClass.getPseudoClass("no-header"), true);

final ImageView graphic = new ImageView(new Image(ContextMenuTest.class.getResource("icon.png").toExternalForm()));
dialogPane.setGraphic(graphic);
dialogPane.applyCss();

final StackPane graphicContainer = (StackPane) graphic.getParent();
final Insets padding = graphicContainer.getPadding();
final double fontSize = Font.getDefault().getSize();

// -fx-padding: 0.833em 0 0 0.833em;
assertEquals(0.833 * fontSize, padding.getTop(), 0.01);
assertEquals(0, padding.getRight(), 0.0);
assertEquals(0, padding.getBottom(), 0.0);
assertEquals(0.833 * fontSize, padding.getLeft(), 0.01);
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

1 comment on commit f02019f

@openjdk-notifier
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please sign in to comment.