From f16e5ffb6bec1394f70ee4f144b97f5d2f353873 Mon Sep 17 00:00:00 2001 From: Alessadro Parisi Date: Thu, 16 Mar 2023 12:18:41 +0100 Subject: [PATCH] :boom: Ditch the user agent stylesheet system in favor of Theme API One of the biggest issues MaterialFX has ever had since it's beginning was the difficulty in customizing the controls through CSS. The root cause of this has always been the bad and shitty management of stylesheets priority by JavaFX. While in the past patches were implemented to fix the issue, in more than one occasion they were just mitigations that would work or not depending on...I don't know. Because you see, another problem of using such shitty system is that it was actually quite hard to debug, a theme/stylesheet could work for me but not for the user, a nightmare With this commit, we definitely ditch the garbage user agent system in favor of a theming API that is discussed in more details on the project's README Signed-off-by: Alessadro Parisi --- .run/MaterialFX [run].run.xml | 2 +- demo/build.gradle | 1 + .../github/palexdev/materialfx/demo/Demo.java | 5 + demo/src/test/java/Launcher.java | 2 +- demo/src/test/java/Reproducer.java | 35 ++++++ .../materialfx/controls/MFXButton.java | 7 -- .../materialfx/controls/MFXCheckListView.java | 7 -- .../materialfx/controls/MFXCheckTreeItem.java | 7 -- .../materialfx/controls/MFXCheckbox.java | 7 -- .../controls/MFXCircleToggleNode.java | 7 -- .../materialfx/controls/MFXComboBox.java | 7 -- .../materialfx/controls/MFXContextMenu.java | 7 -- .../controls/MFXContextMenuItem.java | 7 -- .../materialfx/controls/MFXDatePicker.java | 7 -- .../controls/MFXFilterComboBox.java | 11 +- .../materialfx/controls/MFXFilterPane.java | 7 -- .../materialfx/controls/MFXListView.java | 7 -- .../materialfx/controls/MFXMagnifierPane.java | 7 -- .../controls/MFXNotificationCenter.java | 10 +- .../materialfx/controls/MFXPagination.java | 7 -- .../materialfx/controls/MFXPasswordField.java | 7 -- .../materialfx/controls/MFXPopup.java | 7 +- .../materialfx/controls/MFXProgressBar.java | 7 -- .../controls/MFXProgressSpinner.java | 7 -- .../materialfx/controls/MFXRadioButton.java | 7 -- .../controls/MFXRectangleToggleNode.java | 7 -- .../materialfx/controls/MFXScrollPane.java | 8 -- .../materialfx/controls/MFXSlider.java | 8 -- .../materialfx/controls/MFXSpinner.java | 7 -- .../materialfx/controls/MFXStepper.java | 7 -- .../materialfx/controls/MFXStepperToggle.java | 7 -- .../materialfx/controls/MFXTableColumn.java | 7 -- .../materialfx/controls/MFXTableRow.java | 7 -- .../materialfx/controls/MFXTableView.java | 14 +-- .../materialfx/controls/MFXTextField.java | 7 -- .../materialfx/controls/MFXToggleButton.java | 7 -- .../materialfx/controls/MFXTooltip.java | 7 -- .../materialfx/controls/MFXTreeItem.java | 7 -- .../materialfx/controls/MFXTreeView.java | 6 -- .../controls/cell/MFXCheckListCell.java | 8 -- .../controls/cell/MFXCheckTreeCell.java | 7 -- .../controls/cell/MFXComboBoxCell.java | 7 -- .../materialfx/controls/cell/MFXDateCell.java | 7 -- .../materialfx/controls/cell/MFXListCell.java | 7 -- .../materialfx/controls/cell/MFXPage.java | 7 -- .../controls/cell/MFXSimpleTreeCell.java | 7 -- .../controls/cell/MFXTableRowCell.java | 7 -- .../controls/legacy/MFXLegacyComboBox.java | 7 -- .../controls/legacy/MFXLegacyListCell.java | 7 -- .../controls/legacy/MFXLegacyListView.java | 7 -- .../controls/legacy/MFXLegacyTableRow.java | 7 -- .../controls/legacy/MFXLegacyTableView.java | 7 -- .../materialfx/css/MFXStyleablePopup.java | 10 -- .../css/themes/MFXThemeManager.java | 33 ++++++ .../materialfx/css/themes/Stylesheets.java | 62 +++++++++++ .../palexdev/materialfx/css/themes/Theme.java | 32 ++++++ .../materialfx/css/themes/Themes.java | 26 +++++ .../materialfx/dialogs/AbstractMFXDialog.java | 3 + .../materialfx/dialogs/MFXGenericDialog.java | 11 -- .../materialfx/skins/MFXCheckboxSkin.java | 2 +- .../skins/MFXCircleToggleNodeSkin.java | 7 +- .../materialfx/skins/MFXComboBoxSkin.java | 14 +-- .../materialfx/skins/MFXContextMenuSkin.java | 7 +- .../materialfx/skins/MFXDatePickerSkin.java | 21 +--- .../skins/MFXFilterComboBoxSkin.java | 7 +- .../materialfx/skins/MFXFilterPaneSkin.java | 90 +++------------- .../materialfx/skins/MFXListViewSkin.java | 1 - .../materialfx/skins/MFXPopupSkin.java | 7 +- .../skins/MFXRectangleToggleNodeSkin.java | 7 +- .../materialfx/skins/MFXSliderSkin.java | 1 - .../materialfx/skins/MFXSpinnerSkin.java | 7 +- .../materialfx/skins/MFXStepperSkin.java | 1 - .../materialfx/skins/MFXTooltipSkin.java | 7 +- .../skins/legacy/MFXLegacyComboBoxSkin.java | 1 - materialfx/src/main/java/module-info.java | 3 + .../palexdev/materialfx/css/DefaultTheme.css | 38 +++++++ .../palexdev/materialfx/css/MFXCheckBox.css | 6 +- .../materialfx/css/MFXCheckListView.css | 8 +- .../palexdev/materialfx/css/MFXComboBox.css | 102 ------------------ .../materialfx/css/MFXFilterDialog.css | 6 +- .../palexdev/materialfx/css/MFXListView.css | 8 +- .../materialfx/css/MFXNotificationCenter.css | 96 +---------------- .../palexdev/materialfx/css/MFXTableView.css | 96 +---------------- .../materialfx/css/legacy/LegacyControls.css | 5 + 84 files changed, 297 insertions(+), 818 deletions(-) create mode 100644 demo/src/test/java/Reproducer.java create mode 100644 materialfx/src/main/java/io/github/palexdev/materialfx/css/themes/MFXThemeManager.java create mode 100644 materialfx/src/main/java/io/github/palexdev/materialfx/css/themes/Stylesheets.java create mode 100644 materialfx/src/main/java/io/github/palexdev/materialfx/css/themes/Theme.java create mode 100644 materialfx/src/main/java/io/github/palexdev/materialfx/css/themes/Themes.java create mode 100644 materialfx/src/main/resources/io/github/palexdev/materialfx/css/DefaultTheme.css create mode 100644 materialfx/src/main/resources/io/github/palexdev/materialfx/css/legacy/LegacyControls.css diff --git a/.run/MaterialFX [run].run.xml b/.run/MaterialFX [run].run.xml index 35d52329..20afa332 100755 --- a/.run/MaterialFX [run].run.xml +++ b/.run/MaterialFX [run].run.xml @@ -13,7 +13,7 @@ -