Эх сурвалжийг харах

Addressed some TODOs, added some new

Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
palexdev 3 жил өмнө
parent
commit
043eb0e976
27 өөрчлөгдсөн 78 нэмэгдсэн , 95 устгасан
  1. 1 2
      demo/src/main/java/io/github/palexdev/materialfx/demo/TestDemo.java
  2. 5 10
      demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/DemoController.java
  3. 1 3
      demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/FontResourcesDemoController.java
  4. 2 3
      demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/LabelsDemoController.java
  5. 1 1
      demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/StepperDemoController.java
  6. 0 1
      materialfx/src/main/java/io/github/palexdev/materialfx/beans/TransitionPositionBean.java
  7. 16 2
      materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXIconWrapper.java
  8. 3 3
      materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXSlider.java
  9. 3 3
      materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXTableRow.java
  10. 1 2
      materialfx/src/main/java/io/github/palexdev/materialfx/controls/cell/MFXTableColumn.java
  11. 2 2
      materialfx/src/main/java/io/github/palexdev/materialfx/filter/base/AbstractFilter.java
  12. 0 1
      materialfx/src/main/java/io/github/palexdev/materialfx/notifications/MFXNotificationCenterSystem.java
  13. 0 1
      materialfx/src/main/java/io/github/palexdev/materialfx/notifications/MFXNotificationSystem.java
  14. 0 1
      materialfx/src/main/java/io/github/palexdev/materialfx/notifications/base/AbstractMFXNotificationSystem.java
  15. 3 3
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXCircleToggleNodeSkin.java
  16. 5 10
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXComboBoxSkin.java
  17. 3 3
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXDateCellSkin.java
  18. 5 5
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXDatePickerContent.java
  19. 4 7
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXFilterComboBoxSkin.java
  20. 9 8
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXFilterPaneSkin.java
  21. 6 8
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXNotificationCenterSkin.java
  22. 2 2
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXRectangleToggleNodeSkin.java
  23. 1 4
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXStepperToggleSkin.java
  24. 1 1
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXTableViewSkin.java
  25. 1 3
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXTextFieldSkin.java
  26. 2 4
      materialfx/src/main/java/io/github/palexdev/materialfx/skins/legacy/MFXLegacyComboBoxSkin.java
  27. 1 2
      materialfx/src/main/java/io/github/palexdev/materialfx/utils/NodeUtils.java

+ 1 - 2
demo/src/main/java/io/github/palexdev/materialfx/demo/TestDemo.java

@@ -25,7 +25,6 @@ import io.github.palexdev.materialfx.controls.cell.MFXTableColumn;
 import io.github.palexdev.materialfx.controls.cell.MFXTableRowCell;
 import io.github.palexdev.materialfx.controls.cell.MFXTableRowCell;
 import io.github.palexdev.materialfx.demo.model.FilterablePerson;
 import io.github.palexdev.materialfx.demo.model.FilterablePerson;
 import io.github.palexdev.materialfx.font.FontResources;
 import io.github.palexdev.materialfx.font.FontResources;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.selection.SingleSelectionModel;
 import io.github.palexdev.materialfx.selection.SingleSelectionModel;
 import io.github.palexdev.materialfx.utils.ColorUtils;
 import io.github.palexdev.materialfx.utils.ColorUtils;
 import javafx.application.Application;
 import javafx.application.Application;
@@ -133,7 +132,7 @@ public class TestDemo extends Application {
     public MFXIconWrapper getRandomIcon(double size) {
     public MFXIconWrapper getRandomIcon(double size) {
         FontResources[] resources = FontResources.values();
         FontResources[] resources = FontResources.values();
         String desc = resources[random.nextInt(resources.length)].getDescription();
         String desc = resources[random.nextInt(resources.length)].getDescription();
-        return new MFXIconWrapper(new MFXFontIcon(desc, size, ColorUtils.getRandomColor()), size * 1.5);
+        return new MFXIconWrapper(desc, size, ColorUtils.getRandomColor(), size * 1.5);
     }
     }
 
 
     private void setupTable(MFXTableView<FilterablePerson> tableView) {
     private void setupTable(MFXTableView<FilterablePerson> tableView) {

+ 5 - 10
demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/DemoController.java

@@ -119,26 +119,22 @@ public class DemoController implements Initializable {
     @Override
     @Override
     public void initialize(URL location, ResourceBundle resources) {
     public void initialize(URL location, ResourceBundle resources) {
         // Icons
         // Icons
-        MFXFontIcon xIcon = new MFXFontIcon("mfx-x-circle", 16);
-        MFXFontIcon minusIcon = new MFXFontIcon("mfx-minus-circle", 16);
-        MFXFontIcon expandIcon = new MFXFontIcon("mfx-expand", 12.5);
-        MFXFontIcon infoIcon = new MFXFontIcon("mfx-info-circle", 30, Color.rgb(75, 181, 255));
         MFXFontIcon angleIcon = new MFXFontIcon("mfx-angle-right", 20);
         MFXFontIcon angleIcon = new MFXFontIcon("mfx-angle-right", 20);
 
 
         // Buttons
         // Buttons
-        MFXIconWrapper closeButton = new MFXIconWrapper(xIcon, 22);
+        MFXIconWrapper closeButton = new MFXIconWrapper("mfx-x-circle", 16, 22);
         closeButton.setId("closeButton");
         closeButton.setId("closeButton");
         closeButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.close());
         closeButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.close());
 
 
-        MFXIconWrapper minimizeButton = new MFXIconWrapper(minusIcon, 22);
+        MFXIconWrapper minimizeButton = new MFXIconWrapper("mfx-minus-circle", 16, 22);
         minimizeButton.setId("minimizeButton");
         minimizeButton.setId("minimizeButton");
         minimizeButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.setIconified(true));
         minimizeButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.setIconified(true));
 
 
-        MFXIconWrapper expandButton = new MFXIconWrapper(expandIcon, 22);
+        MFXIconWrapper expandButton = new MFXIconWrapper("mfx-expand", 12.5, 22);
         expandButton.setId("expandButton");
         expandButton.setId("expandButton");
         expandButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.setFullScreen(!primaryStage.isFullScreen()));
         expandButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> primaryStage.setFullScreen(!primaryStage.isFullScreen()));
 
 
-        MFXIconWrapper infoButton = new MFXIconWrapper(infoIcon, 30).defaultRippleGeneratorBehavior();
+        MFXIconWrapper infoButton = new MFXIconWrapper("mfx-info-circle", 30, Color.rgb(75, 181, 255), 30).defaultRippleGeneratorBehavior();
         infoButton.setId("infoButton");
         infoButton.setId("infoButton");
         infoButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> showInfo());
         infoButton.addEventHandler(MouseEvent.MOUSE_PRESSED, event -> showInfo());
 
 
@@ -276,8 +272,7 @@ public class DemoController implements Initializable {
         // Close Button
         // Close Button
         StackPane header = (StackPane) infoDialog.lookup("#headerNode");
         StackPane header = (StackPane) infoDialog.lookup("#headerNode");
 
 
-        MFXFontIcon xIcon = new MFXFontIcon("mfx-x", 8);
-        MFXIconWrapper closeButton = new MFXIconWrapper(xIcon, 22).defaultRippleGeneratorBehavior();
+        MFXIconWrapper closeButton = new MFXIconWrapper("mfx-x", 8, 22).defaultRippleGeneratorBehavior();
         closeButton.setId("closeButton");
         closeButton.setId("closeButton");
         StackPane.setAlignment(closeButton, Pos.TOP_RIGHT);
         StackPane.setAlignment(closeButton, Pos.TOP_RIGHT);
         StackPane.setMargin(closeButton, new Insets(4, 4, 0, 0));
         StackPane.setMargin(closeButton, new Insets(4, 4, 0, 0));

+ 1 - 3
demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/FontResourcesDemoController.java

@@ -23,7 +23,6 @@ import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXListView;
 import io.github.palexdev.materialfx.controls.MFXListView;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
 import io.github.palexdev.materialfx.font.FontResources;
 import io.github.palexdev.materialfx.font.FontResources;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import javafx.collections.FXCollections;
 import javafx.collections.FXCollections;
 import javafx.collections.ObservableList;
 import javafx.collections.ObservableList;
 import javafx.fxml.FXML;
 import javafx.fxml.FXML;
@@ -75,7 +74,6 @@ public class FontResourcesDemoController implements Initializable {
     }
     }
 
 
     private HBox buildNode(FontResources fontResource) {
     private HBox buildNode(FontResources fontResource) {
-        MFXFontIcon icon = new MFXFontIcon(fontResource.getDescription(), 20);
         MFXLabel l1 = new MFXLabel();
         MFXLabel l1 = new MFXLabel();
         l1.setLineColor(Color.TRANSPARENT);
         l1.setLineColor(Color.TRANSPARENT);
         l1.setUnfocusedLineColor(Color.TRANSPARENT);
         l1.setUnfocusedLineColor(Color.TRANSPARENT);
@@ -98,7 +96,7 @@ public class FontResourcesDemoController implements Initializable {
         s2.setStyle("-fx-fill: white");
         s2.setStyle("-fx-fill: white");
 
 
 
 
-        HBox box = new HBox(10, new MFXIconWrapper(icon, 24), s1, l1, s2, l2);
+        HBox box = new HBox(10, new MFXIconWrapper(fontResource.getDescription(), 20, 24), s1, l1, s2, l2);
         box.setPadding(new Insets(5));
         box.setPadding(new Insets(5));
         box.setAlignment(Pos.CENTER_LEFT);
         box.setAlignment(Pos.CENTER_LEFT);
         return box;
         return box;

+ 2 - 3
demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/LabelsDemoController.java

@@ -21,7 +21,6 @@ package io.github.palexdev.materialfx.demo.controllers;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import javafx.fxml.FXML;
 import javafx.fxml.FXML;
 import javafx.fxml.Initializable;
 import javafx.fxml.Initializable;
@@ -37,8 +36,8 @@ public class LabelsDemoController implements Initializable {
 
 
     @Override
     @Override
     public void initialize(URL location, ResourceBundle resources) {
     public void initialize(URL location, ResourceBundle resources) {
-        MFXIconWrapper leading = new MFXIconWrapper(new MFXFontIcon("mfx-filter", 15), 22).defaultRippleGeneratorBehavior();
-        MFXIconWrapper trailing = new MFXIconWrapper(new MFXFontIcon("mfx-info-circle", 15), 22).defaultRippleGeneratorBehavior();
+        MFXIconWrapper leading = new MFXIconWrapper("mfx-filter", 15, 22).defaultRippleGeneratorBehavior();
+        MFXIconWrapper trailing = new MFXIconWrapper("mfx-info-circle", 15, 22).defaultRippleGeneratorBehavior();
 
 
         NodeUtils.makeRegionCircular(leading);
         NodeUtils.makeRegionCircular(leading);
         NodeUtils.makeRegionCircular(trailing);
         NodeUtils.makeRegionCircular(trailing);

+ 1 - 1
demo/src/main/java/io/github/palexdev/materialfx/demo/controllers/StepperDemoController.java

@@ -68,7 +68,7 @@ public class StepperDemoController implements Initializable {
         loginField.setPromptText("Username...");
         loginField.setPromptText("Username...");
         loginField.getValidator().add(BindingUtils.toProperty(loginField.textProperty().length().greaterThanOrEqualTo(6)), "The username must be at least 6 characters long");
         loginField.getValidator().add(BindingUtils.toProperty(loginField.textProperty().length().greaterThanOrEqualTo(6)), "The username must be at least 6 characters long");
         loginField.setValidated(true);
         loginField.setValidated(true);
-        loginField.setIcon(new MFXIconWrapper(new MFXFontIcon("mfx-user", 16, Color.web("#4D4D4D")), 24));
+        loginField.setIcon(new MFXIconWrapper("mfx-user", 16, Color.web("#4D4D4D"), 24));
         passwordField.setPromptText("Password...");
         passwordField.setPromptText("Password...");
         passwordField.getValidator().add(BindingUtils.toProperty(passwordField.passwordProperty().length().greaterThanOrEqualTo(8)), "The password must be at least 8 characters long");
         passwordField.getValidator().add(BindingUtils.toProperty(passwordField.passwordProperty().length().greaterThanOrEqualTo(8)), "The password must be at least 8 characters long");
         passwordField.setValidated(true);
         passwordField.setValidated(true);

+ 0 - 1
materialfx/src/main/java/io/github/palexdev/materialfx/beans/TransitionPositionBean.java

@@ -2,7 +2,6 @@ package io.github.palexdev.materialfx.beans;
 
 
 import javafx.animation.Transition;
 import javafx.animation.Transition;
 
 
-// TODO documentation
 /**
 /**
  * This is an extension of {@link PositionBean} to be used
  * This is an extension of {@link PositionBean} to be used
  * with {@link Transition}s that start from a point P(x, y) and
  * with {@link Transition}s that start from a point P(x, y) and

+ 16 - 2
materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXIconWrapper.java

@@ -18,9 +18,10 @@
 
 
 package io.github.palexdev.materialfx.controls;
 package io.github.palexdev.materialfx.controls;
 
 
-import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.base.IRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.base.IRippleGenerator;
+import io.github.palexdev.materialfx.font.MFXFontIcon;
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.DoubleProperty;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.ObjectProperty;
 import javafx.beans.property.SimpleDoubleProperty;
 import javafx.beans.property.SimpleDoubleProperty;
@@ -31,6 +32,7 @@ import javafx.scene.Node;
 import javafx.scene.input.MouseButton;
 import javafx.scene.input.MouseButton;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.layout.StackPane;
 import javafx.scene.layout.StackPane;
+import javafx.scene.paint.Color;
 
 
 import java.util.function.Function;
 import java.util.function.Function;
 
 
@@ -63,7 +65,19 @@ public class MFXIconWrapper extends StackPane {
         setSize(size);
         setSize(size);
     }
     }
 
 
-    // TODO add constructor with MFXFontIcon description and replace everywhere
+    public MFXIconWrapper(String description, double iconSize, double wrapperSize) {
+        initialize();
+
+        setIcon(new MFXFontIcon(description, iconSize));
+        setSize(wrapperSize);
+    }
+
+    public MFXIconWrapper(String description, double iconSize, Color iconColor, double wrapperSize) {
+        initialize();
+
+        setIcon(new MFXFontIcon(description, iconSize, iconColor));
+        setSize(wrapperSize);
+    }
 
 
     //================================================================================
     //================================================================================
     // Methods
     // Methods

+ 3 - 3
materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXSlider.java

@@ -20,10 +20,10 @@ package io.github.palexdev.materialfx.controls;
 
 
 import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.beans.NumberRange;
 import io.github.palexdev.materialfx.beans.NumberRange;
+import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.enums.SliderEnums.SliderMode;
 import io.github.palexdev.materialfx.enums.SliderEnums.SliderMode;
 import io.github.palexdev.materialfx.enums.SliderEnums.SliderPopupSide;
 import io.github.palexdev.materialfx.enums.SliderEnums.SliderPopupSide;
-import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.skins.MFXSliderSkin;
 import io.github.palexdev.materialfx.skins.MFXSliderSkin;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
@@ -264,7 +264,7 @@ public class MFXSlider extends Control {
             rippleGenerator.setMouseTransparent(true);
             rippleGenerator.setMouseTransparent(true);
             rippleGenerator.setRadiusMultiplier(2.5);
             rippleGenerator.setRadiusMultiplier(2.5);
             rippleGenerator.setRippleRadius(6);
             rippleGenerator.setRippleRadius(6);
-            rippleGenerator.setRipplePositionFunction(mouseEvent -> new PositionBean(stackPane.getWidth() / 2, stackPane.getHeight() / 2));
+            rippleGenerator.setRipplePositionFunction(mouseEvent -> PositionBean.of(stackPane.getWidth() / 2, stackPane.getHeight() / 2));
             stackPane.addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);
             stackPane.addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);
             stackPane.getChildren().add(rippleGenerator);
             stackPane.getChildren().add(rippleGenerator);
 
 

+ 3 - 3
materialfx/src/main/java/io/github/palexdev/materialfx/controls/MFXTableRow.java

@@ -19,10 +19,10 @@
 package io.github.palexdev.materialfx.controls;
 package io.github.palexdev.materialfx.controls;
 
 
 import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.MFXResourcesLoader;
-import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
 import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
-import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.BooleanProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.beans.property.SimpleBooleanProperty;
 import javafx.css.PseudoClass;
 import javafx.css.PseudoClass;
@@ -89,7 +89,7 @@ public class MFXTableRow<T> extends HBox {
         rippleGenerator.setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.RECTANGLE).setOffsetW(10).build(this));
         rippleGenerator.setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.RECTANGLE).setOffsetW(10).build(this));
         rippleGenerator.setComputeRadiusMultiplier(true);
         rippleGenerator.setComputeRadiusMultiplier(true);
         rippleGenerator.setManaged(false);
         rippleGenerator.setManaged(false);
-        rippleGenerator.setRipplePositionFunction(event -> new PositionBean(event.getX(), event.getY()));
+        rippleGenerator.setRipplePositionFunction(event -> PositionBean.of(event.getX(), event.getY()));
         rippleGenerator.setTranslateX(-5);
         rippleGenerator.setTranslateX(-5);
         rippleGenerator.rippleRadiusProperty().bind(widthProperty().divide(2.0));
         rippleGenerator.rippleRadiusProperty().bind(widthProperty().divide(2.0));
         addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);
         addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);

+ 1 - 2
materialfx/src/main/java/io/github/palexdev/materialfx/controls/cell/MFXTableColumn.java

@@ -22,7 +22,6 @@ import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXTableView;
 import io.github.palexdev.materialfx.controls.MFXTableView;
 import io.github.palexdev.materialfx.enums.SortState;
 import io.github.palexdev.materialfx.enums.SortState;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.skins.MFXTableColumnSkin;
 import io.github.palexdev.materialfx.skins.MFXTableColumnSkin;
 import io.github.palexdev.materialfx.skins.MFXTableViewSkin;
 import io.github.palexdev.materialfx.skins.MFXTableViewSkin;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
@@ -118,7 +117,7 @@ public class MFXTableColumn<T> extends Control {
         addEventFilter(MouseEvent.MOUSE_DRAGGED, event -> dragged.set(true));
         addEventFilter(MouseEvent.MOUSE_DRAGGED, event -> dragged.set(true));
         addEventFilter(MouseEvent.MOUSE_RELEASED, event -> dragged.set(false));
         addEventFilter(MouseEvent.MOUSE_RELEASED, event -> dragged.set(false));
 
 
-        sortIcon = new MFXIconWrapper(new MFXFontIcon("mfx-caret-up", 14), 18);
+        sortIcon = new MFXIconWrapper("mfx-caret-up", 14, 18);
         sortIcon.setManaged(false);
         sortIcon.setManaged(false);
         sortIcon.setVisible(false);
         sortIcon.setVisible(false);
         NodeUtils.makeRegionCircular(sortIcon);
         NodeUtils.makeRegionCircular(sortIcon);

+ 2 - 2
materialfx/src/main/java/io/github/palexdev/materialfx/filter/base/AbstractFilter.java

@@ -1,9 +1,9 @@
 package io.github.palexdev.materialfx.filter.base;
 package io.github.palexdev.materialfx.filter.base;
 
 
 import io.github.palexdev.materialfx.beans.BiPredicateBean;
 import io.github.palexdev.materialfx.beans.BiPredicateBean;
+import io.github.palexdev.materialfx.beans.FilterBean;
 import io.github.palexdev.materialfx.controls.MFXFilterPane;
 import io.github.palexdev.materialfx.controls.MFXFilterPane;
 import io.github.palexdev.materialfx.enums.ChainMode;
 import io.github.palexdev.materialfx.enums.ChainMode;
-import io.github.palexdev.materialfx.beans.FilterBean;
 import javafx.beans.property.IntegerProperty;
 import javafx.beans.property.IntegerProperty;
 import javafx.beans.property.SimpleIntegerProperty;
 import javafx.beans.property.SimpleIntegerProperty;
 import javafx.collections.ObservableList;
 import javafx.collections.ObservableList;
@@ -82,6 +82,7 @@ public abstract class AbstractFilter<T, U> {
     /**
     /**
      * Allows to add some extra {@link BiPredicateBean}s alongside the default ones.
      * Allows to add some extra {@link BiPredicateBean}s alongside the default ones.
      */
      */
+    @SuppressWarnings("unchecked")
     protected abstract AbstractFilter<T, U> extend(BiPredicateBean<U, U>... predicateBeans);
     protected abstract AbstractFilter<T, U> extend(BiPredicateBean<U, U>... predicateBeans);
 
 
     //================================================================================
     //================================================================================
@@ -120,7 +121,6 @@ public abstract class AbstractFilter<T, U> {
         return t -> predicates.get(index).predicate().test(extractor.apply(t), convertedInput);
         return t -> predicates.get(index).predicate().test(extractor.apply(t), convertedInput);
     }
     }
 
 
-    // TODO can be used but warn
     /**
     /**
      * Produces a {@link Predicate} from the given input and {@link BiPredicate}.
      * Produces a {@link Predicate} from the given input and {@link BiPredicate}.
      * <p></p>
      * <p></p>

+ 0 - 1
materialfx/src/main/java/io/github/palexdev/materialfx/notifications/MFXNotificationCenterSystem.java

@@ -100,7 +100,6 @@ public class MFXNotificationCenterSystem extends AbstractMFXNotificationSystem {
         PositionBean positionBean = computePosition();
         PositionBean positionBean = computePosition();
         popup.setX(positionBean.getX());
         popup.setX(positionBean.getX());
         popup.setY(positionBean.getY());
         popup.setY(positionBean.getY());
-        init = true; // TODO remove?
     }
     }
 
 
     /**
     /**

+ 0 - 1
materialfx/src/main/java/io/github/palexdev/materialfx/notifications/MFXNotificationSystem.java

@@ -87,7 +87,6 @@ public class MFXNotificationSystem extends AbstractMFXNotificationSystem {
     protected void init() {
     protected void init() {
         PositionBean position = computePosition();
         PositionBean position = computePosition();
         popup.show(dummyStage, position.getX(), position.getY());
         popup.show(dummyStage, position.getX(), position.getY());
-        init = true; // TODO remove?
     }
     }
 
 
     /**
     /**

+ 0 - 1
materialfx/src/main/java/io/github/palexdev/materialfx/notifications/base/AbstractMFXNotificationSystem.java

@@ -72,7 +72,6 @@ public abstract class AbstractMFXNotificationSystem implements INotificationSyst
 
 
     protected final ResettableBooleanProperty showing = new ResettableBooleanProperty(false, false);
     protected final ResettableBooleanProperty showing = new ResettableBooleanProperty(false, false);
     protected final ResettableBooleanProperty closing = new ResettableBooleanProperty(false, false);
     protected final ResettableBooleanProperty closing = new ResettableBooleanProperty(false, false);
-    protected boolean init = false;
 
 
     //================================================================================
     //================================================================================
     // Constructors
     // Constructors

+ 3 - 3
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXCircleToggleNodeSkin.java

@@ -18,11 +18,11 @@
 
 
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.MFXCircleToggleNode;
 import io.github.palexdev.materialfx.controls.MFXCircleToggleNode;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXLabel;
-import io.github.palexdev.materialfx.enums.TextPosition;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.enums.TextPosition;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import javafx.beans.binding.Bindings;
 import javafx.beans.binding.Bindings;
@@ -112,7 +112,7 @@ public class MFXCircleToggleNodeSkin extends SkinBase<MFXCircleToggleNode> {
             ));
             ));
             return clip;
             return clip;
         });
         });
-        rippleGenerator.setRipplePositionFunction(event -> new PositionBean(event.getX(), event.getY()));
+        rippleGenerator.setRipplePositionFunction(event -> PositionBean.of(event.getX(), event.getY()));
         rippleGenerator.rippleRadiusProperty().bind(circle.radiusProperty().add(5));
         rippleGenerator.rippleRadiusProperty().bind(circle.radiusProperty().add(5));
     }
     }
 
 

+ 5 - 10
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXComboBoxSkin.java

@@ -19,16 +19,15 @@
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.MFXComboBox;
 import io.github.palexdev.materialfx.controls.MFXComboBox;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXListView;
 import io.github.palexdev.materialfx.controls.MFXListView;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
+import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.enums.Styles;
 import io.github.palexdev.materialfx.enums.Styles;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
-import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.selection.ComboBoxSelectionModel;
 import io.github.palexdev.materialfx.selection.ComboBoxSelectionModel;
 import io.github.palexdev.materialfx.utils.AnimationUtils;
 import io.github.palexdev.materialfx.utils.AnimationUtils;
 import io.github.palexdev.materialfx.utils.AnimationUtils.KeyFrames;
 import io.github.palexdev.materialfx.utils.AnimationUtils.KeyFrames;
@@ -95,8 +94,7 @@ public class MFXComboBoxSkin<T> extends SkinBase<MFXComboBox<T>> {
         focusedLine.setScaleX(0.0);
         focusedLine.setScaleX(0.0);
         focusedLine.setSmooth(true);
         focusedLine.setSmooth(true);
 
 
-        MFXFontIcon warnIcon = new MFXFontIcon("mfx-exclamation-triangle", Color.RED);
-        MFXIconWrapper warnWrapper = new MFXIconWrapper(warnIcon, 10);
+        MFXIconWrapper warnWrapper = new MFXIconWrapper("mfx-exclamation-triangle", 10, Color.RED, 10);
 
 
         validate = new Label();
         validate = new Label();
         validate.setGraphic(warnWrapper);
         validate.setGraphic(warnWrapper);
@@ -112,8 +110,7 @@ public class MFXComboBoxSkin<T> extends SkinBase<MFXComboBox<T>> {
 
 
         valueLabel = buildLabel();
         valueLabel = buildLabel();
 
 
-        MFXFontIcon fontIcon = new MFXFontIcon("mfx-caret-down", 12);
-        icon = new MFXIconWrapper(fontIcon, 24);
+        icon = new MFXIconWrapper("mfx-caret-down", 12, 24);
         icon.setManaged(false);
         icon.setManaged(false);
         icon.getStylesheets().addAll(comboBox.getUserAgentStylesheet());
         icon.getStylesheets().addAll(comboBox.getUserAgentStylesheet());
         NodeUtils.makeRegionCircular(icon, 10);
         NodeUtils.makeRegionCircular(icon, 10);
@@ -363,9 +360,7 @@ public class MFXComboBoxSkin<T> extends SkinBase<MFXComboBox<T>> {
      * the popup handling when the mouse is pressed.
      * the popup handling when the mouse is pressed.
      */
      */
     private void iconBehavior() {
     private void iconBehavior() {
-        icon.rippleGeneratorBehavior(event ->
-                new PositionBean(icon.getWidth() / 2, icon.getHeight() / 2)
-        );
+        icon.rippleGeneratorBehavior(event -> PositionBean.of(icon.getWidth() / 2, icon.getHeight() / 2));
 
 
         MFXCircleRippleGenerator rg = icon.getRippleGenerator();
         MFXCircleRippleGenerator rg = icon.getRippleGenerator();
         rg.setAnimationSpeed(1.3);
         rg.setAnimationSpeed(1.3);

+ 3 - 3
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXDateCellSkin.java

@@ -18,11 +18,11 @@
 
 
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.cell.MFXDateCell;
 import io.github.palexdev.materialfx.controls.cell.MFXDateCell;
-import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
 import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
-import io.github.palexdev.materialfx.beans.PositionBean;
+import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
 import javafx.scene.control.skin.DateCellSkin;
 import javafx.scene.control.skin.DateCellSkin;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.input.MouseEvent;
 import javafx.scene.paint.Color;
 import javafx.scene.paint.Color;
@@ -47,7 +47,7 @@ public class MFXDateCellSkin extends DateCellSkin {
         rippleGenerator = new MFXCircleRippleGenerator(dateCell);
         rippleGenerator = new MFXCircleRippleGenerator(dateCell);
         rippleGenerator.setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.ROUNDED_RECTANGLE).setArcs(15).build(dateCell));
         rippleGenerator.setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.ROUNDED_RECTANGLE).setArcs(15).build(dateCell));
         rippleGenerator.setRippleColor(Color.rgb(220, 220, 220, 0.6));
         rippleGenerator.setRippleColor(Color.rgb(220, 220, 220, 0.6));
-        rippleGenerator.setRipplePositionFunction(event -> new PositionBean(event.getX(), event.getY()));
+        rippleGenerator.setRipplePositionFunction(event -> PositionBean.of(event.getX(), event.getY()));
         dateCell.addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);
         dateCell.addEventFilter(MouseEvent.MOUSE_PRESSED, rippleGenerator::generateRipple);
 
 
         updateChildren();
         updateChildren();

+ 5 - 5
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXDatePickerContent.java

@@ -20,13 +20,13 @@ package io.github.palexdev.materialfx.skins;
 
 
 import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.MFXResourcesLoader;
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.MFXDatePicker;
 import io.github.palexdev.materialfx.controls.MFXDatePicker;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXScrollPane;
 import io.github.palexdev.materialfx.controls.MFXScrollPane;
 import io.github.palexdev.materialfx.controls.MFXTextField;
 import io.github.palexdev.materialfx.controls.MFXTextField;
 import io.github.palexdev.materialfx.controls.cell.MFXDateCell;
 import io.github.palexdev.materialfx.controls.cell.MFXDateCell;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.utils.*;
 import io.github.palexdev.materialfx.utils.*;
 import io.github.palexdev.materialfx.utils.AnimationUtils.KeyFrames;
 import io.github.palexdev.materialfx.utils.AnimationUtils.KeyFrames;
@@ -489,7 +489,7 @@ public class MFXDatePickerContent extends VBox {
     private void buildButtons() {
     private void buildButtons() {
         MFXFontIcon chevronDown = new MFXFontIcon("mfx-chevron-down", 13);
         MFXFontIcon chevronDown = new MFXFontIcon("mfx-chevron-down", 13);
         yearsButton = new MFXIconWrapper(chevronDown, 20).rippleGeneratorBehavior(event ->
         yearsButton = new MFXIconWrapper(chevronDown, 20).rippleGeneratorBehavior(event ->
-                new PositionBean(yearsButton.getWidth() / 2, yearsButton.getHeight() / 2)
+                PositionBean.of(yearsButton.getWidth() / 2, yearsButton.getHeight() / 2)
         );
         );
         yearsButton.getStyleClass().add("years-button");
         yearsButton.getStyleClass().add("years-button");
         NodeUtils.makeRegionCircular(yearsButton);
         NodeUtils.makeRegionCircular(yearsButton);
@@ -501,7 +501,7 @@ public class MFXDatePickerContent extends VBox {
 
 
         MFXFontIcon chevronLeft = new MFXFontIcon("mfx-chevron-left", 13);
         MFXFontIcon chevronLeft = new MFXFontIcon("mfx-chevron-left", 13);
         monthBackButton = new MFXIconWrapper(chevronLeft, 20).rippleGeneratorBehavior(event ->
         monthBackButton = new MFXIconWrapper(chevronLeft, 20).rippleGeneratorBehavior(event ->
-                new PositionBean(monthBackButton.getWidth() / 2, monthBackButton.getHeight() / 2)
+                PositionBean.of(monthBackButton.getWidth() / 2, monthBackButton.getHeight() / 2)
         );
         );
         monthBackButton.getStyleClass().add("month-back-button");
         monthBackButton.getStyleClass().add("month-back-button");
         NodeUtils.makeRegionCircular(monthBackButton);
         NodeUtils.makeRegionCircular(monthBackButton);
@@ -509,7 +509,7 @@ public class MFXDatePickerContent extends VBox {
 
 
         MFXFontIcon chevronRight = new MFXFontIcon("mfx-chevron-right", 13);
         MFXFontIcon chevronRight = new MFXFontIcon("mfx-chevron-right", 13);
         monthForwardButton = new MFXIconWrapper(chevronRight, 20).rippleGeneratorBehavior(event ->
         monthForwardButton = new MFXIconWrapper(chevronRight, 20).rippleGeneratorBehavior(event ->
-                new PositionBean(monthForwardButton.getWidth() / 2, monthForwardButton.getHeight() / 2)
+                PositionBean.of(monthForwardButton.getWidth() / 2, monthForwardButton.getHeight() / 2)
         );
         );
         monthForwardButton.getStyleClass().add("month-forward-button");
         monthForwardButton.getStyleClass().add("month-forward-button");
         NodeUtils.makeRegionCircular(monthForwardButton);
         NodeUtils.makeRegionCircular(monthForwardButton);
@@ -517,7 +517,7 @@ public class MFXDatePickerContent extends VBox {
 
 
         MFXFontIcon calendar = new MFXFontIcon("mfx-calendar-semi-black", 17);
         MFXFontIcon calendar = new MFXFontIcon("mfx-calendar-semi-black", 17);
         inputButton = new MFXIconWrapper(calendar, 35).rippleGeneratorBehavior(event ->
         inputButton = new MFXIconWrapper(calendar, 35).rippleGeneratorBehavior(event ->
-                new PositionBean(inputButton.getWidth() / 2, inputButton.getHeight() / 2)
+                PositionBean.of(inputButton.getWidth() / 2, inputButton.getHeight() / 2)
         );
         );
         inputButton.getStyleClass().add("change-input-button");
         inputButton.getStyleClass().add("change-input-button");
         Tooltip tooltip = new Tooltip("Switches between mouse input and keyboard input");
         Tooltip tooltip = new Tooltip("Switches between mouse input and keyboard input");

+ 4 - 7
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXFilterComboBoxSkin.java

@@ -19,12 +19,12 @@
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
 import io.github.palexdev.materialfx.beans.MFXSnapshotWrapper;
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.*;
 import io.github.palexdev.materialfx.controls.*;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
 import io.github.palexdev.materialfx.controls.cell.MFXListCell;
+import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.enums.Styles;
 import io.github.palexdev.materialfx.enums.Styles;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
-import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.selection.ComboBoxSelectionModel;
 import io.github.palexdev.materialfx.selection.ComboBoxSelectionModel;
 import io.github.palexdev.materialfx.utils.AnimationUtils;
 import io.github.palexdev.materialfx.utils.AnimationUtils;
@@ -143,8 +143,7 @@ public class MFXFilterComboBoxSkin<T> extends SkinBase<MFXFilterComboBox<T>> {
 
 
         valueLabel = buildLabel();
         valueLabel = buildLabel();
 
 
-        MFXFontIcon fontIcon = new MFXFontIcon("mfx-caret-down", 12);
-        icon = new MFXIconWrapper(fontIcon, 24);
+        icon = new MFXIconWrapper("mfx-caret-down", 12, 24);
         icon.setManaged(false);
         icon.setManaged(false);
         icon.getStylesheets().addAll(comboBox.getUserAgentStylesheet());
         icon.getStylesheets().addAll(comboBox.getUserAgentStylesheet());
         NodeUtils.makeRegionCircular(icon, 10);
         NodeUtils.makeRegionCircular(icon, 10);
@@ -378,9 +377,7 @@ public class MFXFilterComboBoxSkin<T> extends SkinBase<MFXFilterComboBox<T>> {
      * the popup handling when the mouse is pressed.
      * the popup handling when the mouse is pressed.
      */
      */
     private void iconBehavior() {
     private void iconBehavior() {
-        icon.rippleGeneratorBehavior(event ->
-                new PositionBean(icon.getWidth() / 2, icon.getHeight() / 2)
-        );
+        icon.rippleGeneratorBehavior(event -> PositionBean.of(icon.getWidth() / 2, icon.getHeight() / 2));
 
 
         MFXCircleRippleGenerator rg = icon.getRippleGenerator();
         MFXCircleRippleGenerator rg = icon.getRippleGenerator();
         rg.setAnimationSpeed(1.3);
         rg.setAnimationSpeed(1.3);

+ 9 - 8
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXFilterPaneSkin.java

@@ -1,16 +1,16 @@
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
+import io.github.palexdev.materialfx.beans.BiPredicateBean;
+import io.github.palexdev.materialfx.beans.FilterBean;
 import io.github.palexdev.materialfx.controls.*;
 import io.github.palexdev.materialfx.controls.*;
+import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
+import io.github.palexdev.materialfx.enums.ChainMode;
 import io.github.palexdev.materialfx.factories.InsetsFactory;
 import io.github.palexdev.materialfx.factories.InsetsFactory;
 import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
 import io.github.palexdev.materialfx.factories.RippleClipTypeFactory;
-import io.github.palexdev.materialfx.effects.ripple.RippleClipType;
 import io.github.palexdev.materialfx.filter.BooleanFilter;
 import io.github.palexdev.materialfx.filter.BooleanFilter;
-import io.github.palexdev.materialfx.enums.ChainMode;
 import io.github.palexdev.materialfx.filter.EnumFilter;
 import io.github.palexdev.materialfx.filter.EnumFilter;
 import io.github.palexdev.materialfx.filter.base.AbstractFilter;
 import io.github.palexdev.materialfx.filter.base.AbstractFilter;
 import io.github.palexdev.materialfx.filter.base.NumberFilter;
 import io.github.palexdev.materialfx.filter.base.NumberFilter;
-import io.github.palexdev.materialfx.beans.BiPredicateBean;
-import io.github.palexdev.materialfx.beans.FilterBean;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import javafx.beans.InvalidationListener;
 import javafx.beans.InvalidationListener;
@@ -39,6 +39,7 @@ import javafx.stage.Modality;
  * <p> - A label which acts as a separator
  * <p> - A label which acts as a separator
  * <p> - A {@link FlowPane} to show the currently built active filters
  * <p> - A {@link FlowPane} to show the currently built active filters
  */
  */
+@SuppressWarnings({"unchecked", "rawtypes"})
 public class MFXFilterPaneSkin<T> extends SkinBase<MFXFilterPane<T>> {
 public class MFXFilterPaneSkin<T> extends SkinBase<MFXFilterPane<T>> {
     //================================================================================
     //================================================================================
     // Properties
     // Properties
@@ -167,8 +168,8 @@ public class MFXFilterPaneSkin<T> extends SkinBase<MFXFilterPane<T>> {
         headerLabel.setMaxWidth(Double.MAX_VALUE);
         headerLabel.setMaxWidth(Double.MAX_VALUE);
         HBox.setHgrow(headerLabel, Priority.ALWAYS);
         HBox.setHgrow(headerLabel, Priority.ALWAYS);
 
 
-        MFXIconWrapper filter = new MFXIconWrapper(new MFXFontIcon("mfx-variant7-mark", 16), 28).defaultRippleGeneratorBehavior();
-        MFXIconWrapper reset = new MFXIconWrapper(new MFXFontIcon("mfx-undo", 16), 28).defaultRippleGeneratorBehavior();
+        MFXIconWrapper filter = new MFXIconWrapper("mfx-variant7-mark", 16, 28).defaultRippleGeneratorBehavior();
+        MFXIconWrapper reset = new MFXIconWrapper("mfx-undo", 16, 28).defaultRippleGeneratorBehavior();
 
 
         filter.setId("filterIcon");
         filter.setId("filterIcon");
         reset.setId("resetIcon");
         reset.setId("resetIcon");
@@ -176,7 +177,7 @@ public class MFXFilterPaneSkin<T> extends SkinBase<MFXFilterPane<T>> {
         NodeUtils.makeRegionCircular(filter);
         NodeUtils.makeRegionCircular(filter);
         NodeUtils.makeRegionCircular(reset);
         NodeUtils.makeRegionCircular(reset);
 
 
-        filter.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> filterPane.getOnFilter().handle(event)); // TODO action
+        filter.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> filterPane.getOnFilter().handle(event));
         reset.addEventHandler(MouseEvent.MOUSE_CLICKED, this::reset);
         reset.addEventHandler(MouseEvent.MOUSE_CLICKED, this::reset);
 
 
         HBox box = new HBox(5, headerLabel, filter, reset);
         HBox box = new HBox(5, headerLabel, filter, reset);
@@ -248,7 +249,7 @@ public class MFXFilterPaneSkin<T> extends SkinBase<MFXFilterPane<T>> {
 
 
                 if (queryValidation(selected)) {
                 if (queryValidation(selected)) {
                     filterPane.getActiveFilters().add(predicate);
                     filterPane.getActiveFilters().add(predicate);
-                };
+                }
             }
             }
         });
         });
         addButton.getRippleGenerator().setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.ROUNDED_RECTANGLE).setArcs(30).build(addButton));
         addButton.getRippleGenerator().setClipSupplier(() -> new RippleClipTypeFactory(RippleClipType.ROUNDED_RECTANGLE).setArcs(30).build(addButton));

+ 6 - 8
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXNotificationCenterSkin.java

@@ -3,10 +3,9 @@ package io.github.palexdev.materialfx.skins;
 import io.github.palexdev.materialfx.controls.*;
 import io.github.palexdev.materialfx.controls.*;
 import io.github.palexdev.materialfx.controls.MFXPopup.MFXPopupEvent;
 import io.github.palexdev.materialfx.controls.MFXPopup.MFXPopupEvent;
 import io.github.palexdev.materialfx.controls.cell.MFXNotificationCell;
 import io.github.palexdev.materialfx.controls.cell.MFXNotificationCell;
-import io.github.palexdev.materialfx.factories.InsetsFactory;
 import io.github.palexdev.materialfx.enums.NotificationCounterStyle;
 import io.github.palexdev.materialfx.enums.NotificationCounterStyle;
 import io.github.palexdev.materialfx.enums.NotificationState;
 import io.github.palexdev.materialfx.enums.NotificationState;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
+import io.github.palexdev.materialfx.factories.InsetsFactory;
 import io.github.palexdev.materialfx.notifications.base.INotification;
 import io.github.palexdev.materialfx.notifications.base.INotification;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.virtualizedfx.flow.simple.SimpleVirtualFlow;
 import io.github.palexdev.virtualizedfx.flow.simple.SimpleVirtualFlow;
@@ -43,8 +42,7 @@ public class MFXNotificationCenterSkin extends SkinBase<MFXNotificationCenter> {
     public MFXNotificationCenterSkin(MFXNotificationCenter notificationCenter, SimpleVirtualFlow<INotification, MFXNotificationCell> virtualFlow) {
     public MFXNotificationCenterSkin(MFXNotificationCenter notificationCenter, SimpleVirtualFlow<INotification, MFXNotificationCell> virtualFlow) {
         super(notificationCenter);
         super(notificationCenter);
 
 
-        MFXFontIcon bell = new MFXFontIcon("mfx-bell-alt", 36);
-        bellWrapped = new MFXIconWrapper(bell, 56);
+        bellWrapped = new MFXIconWrapper("mfx-bell-alt", 36, 56);
         bellWrapped.getStyleClass().add("notifications-icon");
         bellWrapped.getStyleClass().add("notifications-icon");
 
 
         counter = new NotificationsCounter();
         counter = new NotificationsCounter();
@@ -65,10 +63,10 @@ public class MFXNotificationCenterSkin extends SkinBase<MFXNotificationCenter> {
         header.getStyleClass().add("header");
         header.getStyleClass().add("header");
         header.setAlignment(Pos.CENTER_LEFT);
         header.setAlignment(Pos.CENTER_LEFT);
 
 
-        MFXIconWrapper select = new MFXIconWrapper(new MFXFontIcon("mfx-variant13-mark", 24), 36).defaultRippleGeneratorBehavior();
-        MFXIconWrapper markAsRead = new MFXIconWrapper(new MFXFontIcon("mfx-eye", 20), 36).defaultRippleGeneratorBehavior();
-        MFXIconWrapper markAsUnread = new MFXIconWrapper(new MFXFontIcon("mfx-eye-slash", 20), 36).defaultRippleGeneratorBehavior();
-        MFXIconWrapper dismiss = new MFXIconWrapper(new MFXFontIcon("mfx-delete", 20), 36).defaultRippleGeneratorBehavior();
+        MFXIconWrapper select = new MFXIconWrapper("mfx-variant13-mark", 24, 36).defaultRippleGeneratorBehavior();
+        MFXIconWrapper markAsRead = new MFXIconWrapper("mfx-eye", 20, 36).defaultRippleGeneratorBehavior();
+        MFXIconWrapper markAsUnread = new MFXIconWrapper("mfx-eye-slash", 20, 36).defaultRippleGeneratorBehavior();
+        MFXIconWrapper dismiss = new MFXIconWrapper("mfx-delete", 20, 36).defaultRippleGeneratorBehavior();
 
 
         select.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> notificationCenter.setSelectionMode(!notificationCenter.isSelectionMode()));
         select.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> notificationCenter.setSelectionMode(!notificationCenter.isSelectionMode()));
         markAsRead.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> notificationCenter.markSelectedNotificationsAs(NotificationState.READ));
         markAsRead.addEventHandler(MouseEvent.MOUSE_CLICKED, event -> notificationCenter.markSelectedNotificationsAs(NotificationState.READ));

+ 2 - 2
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXRectangleToggleNodeSkin.java

@@ -18,10 +18,10 @@
 
 
 package io.github.palexdev.materialfx.skins;
 package io.github.palexdev.materialfx.skins;
 
 
+import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXLabel;
 import io.github.palexdev.materialfx.controls.MFXRectangleToggleNode;
 import io.github.palexdev.materialfx.controls.MFXRectangleToggleNode;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
 import io.github.palexdev.materialfx.effects.ripple.MFXCircleRippleGenerator;
-import io.github.palexdev.materialfx.beans.PositionBean;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import io.github.palexdev.materialfx.utils.NodeUtils;
 import javafx.event.Event;
 import javafx.event.Event;
@@ -90,7 +90,7 @@ public class MFXRectangleToggleNodeSkin extends SkinBase<MFXRectangleToggleNode>
 
 
         rippleGenerator.setAnimateBackground(false);
         rippleGenerator.setAnimateBackground(false);
         rippleGenerator.setClipSupplier(() -> toggleNode.getRippleClipTypeFactory().build(container));
         rippleGenerator.setClipSupplier(() -> toggleNode.getRippleClipTypeFactory().build(container));
-        rippleGenerator.setRipplePositionFunction(event -> new PositionBean(event.getX(), event.getY()));
+        rippleGenerator.setRipplePositionFunction(event -> PositionBean.of(event.getX(), event.getY()));
         rippleGenerator.rippleRadiusProperty().bind(toggleNode.widthProperty().divide(2.0));
         rippleGenerator.rippleRadiusProperty().bind(toggleNode.widthProperty().divide(2.0));
     }
     }
 
 

+ 1 - 4
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXStepperToggleSkin.java

@@ -25,7 +25,6 @@ import io.github.palexdev.materialfx.controls.MFXStepperToggle;
 import io.github.palexdev.materialfx.enums.DialogType;
 import io.github.palexdev.materialfx.enums.DialogType;
 import io.github.palexdev.materialfx.enums.StepperToggleState;
 import io.github.palexdev.materialfx.enums.StepperToggleState;
 import io.github.palexdev.materialfx.enums.TextPosition;
 import io.github.palexdev.materialfx.enums.TextPosition;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.utils.DialogUtils;
 import io.github.palexdev.materialfx.utils.DialogUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
@@ -69,9 +68,7 @@ public class MFXStepperToggleSkin extends SkinBase<MFXStepperToggle> {
         label.setUnfocusedLineColor(Color.TRANSPARENT);
         label.setUnfocusedLineColor(Color.TRANSPARENT);
         label.setManaged(false);
         label.setManaged(false);
 
 
-        errorIcon = new MFXIconWrapper(
-                new MFXFontIcon("mfx-exclamation-triangle", Color.web("#EF6E6B")), 16
-        );
+        errorIcon = new MFXIconWrapper("mfx-exclamation-triangle", 10, Color.web("#EF6E6B"), 16);
         errorIcon.setId("errorIcon");
         errorIcon.setId("errorIcon");
         errorIcon.setVisible(false);
         errorIcon.setVisible(false);
         errorIcon.setManaged(false);
         errorIcon.setManaged(false);

+ 1 - 1
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXTableViewSkin.java

@@ -736,7 +736,7 @@ public class MFXTableViewSkin<T> extends SkinBase<MFXTableView<T>> {
      * using the specified description and size.
      * using the specified description and size.
      */
      */
     private MFXIconWrapper buildIcon(String description, double size) {
     private MFXIconWrapper buildIcon(String description, double size) {
-        return new MFXIconWrapper(new MFXFontIcon(description, size), 24).defaultRippleGeneratorBehavior();
+        return new MFXIconWrapper(description, size, 24).defaultRippleGeneratorBehavior();
     }
     }
 
 
     @Override
     @Override

+ 1 - 3
materialfx/src/main/java/io/github/palexdev/materialfx/skins/MFXTextFieldSkin.java

@@ -21,7 +21,6 @@ package io.github.palexdev.materialfx.skins;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXTextField;
 import io.github.palexdev.materialfx.controls.MFXTextField;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
 import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
 import javafx.animation.ScaleTransition;
 import javafx.animation.ScaleTransition;
@@ -97,8 +96,7 @@ public class MFXTextFieldSkin extends TextFieldSkin {
         focusedLine.setScaleX(0.0);
         focusedLine.setScaleX(0.0);
         focusedLine.setSmooth(true);
         focusedLine.setSmooth(true);
 
 
-        MFXFontIcon warnIcon = new MFXFontIcon("mfx-exclamation-triangle", Color.RED);
-        MFXIconWrapper warnWrapper = new MFXIconWrapper(warnIcon, 10);
+        MFXIconWrapper warnWrapper = new MFXIconWrapper("mfx-exclamation-triangle", 10, Color.RED, 10);
 
 
         validate = new Label();
         validate = new Label();
         validate.setGraphic(warnWrapper);
         validate.setGraphic(warnWrapper);

+ 2 - 4
materialfx/src/main/java/io/github/palexdev/materialfx/skins/legacy/MFXLegacyComboBoxSkin.java

@@ -19,9 +19,8 @@
 package io.github.palexdev.materialfx.skins.legacy;
 package io.github.palexdev.materialfx.skins.legacy;
 
 
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
 import io.github.palexdev.materialfx.controls.MFXIconWrapper;
-import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
 import io.github.palexdev.materialfx.controls.legacy.MFXLegacyComboBox;
 import io.github.palexdev.materialfx.controls.legacy.MFXLegacyComboBox;
-import io.github.palexdev.materialfx.font.MFXFontIcon;
+import io.github.palexdev.materialfx.factories.MFXAnimationFactory;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.utils.LabelUtils;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
 import io.github.palexdev.materialfx.validation.MFXDialogValidator;
 import javafx.animation.ScaleTransition;
 import javafx.animation.ScaleTransition;
@@ -88,8 +87,7 @@ public class MFXLegacyComboBoxSkin<T> extends ComboBoxListViewSkin<T> {
         focusedLine.setScaleX(0.0);
         focusedLine.setScaleX(0.0);
         focusedLine.setManaged(false);
         focusedLine.setManaged(false);
 
 
-        MFXFontIcon warnIcon = new MFXFontIcon("mfx-exclamation-triangle", Color.RED);
-        MFXIconWrapper warnWrapper = new MFXIconWrapper(warnIcon, 10);
+        MFXIconWrapper warnWrapper = new MFXIconWrapper("mfx-exclamation-triangle", 10, Color.RED, 10);
 
 
         validate = new Label();
         validate = new Label();
         validate.setGraphic(warnWrapper);
         validate.setGraphic(warnWrapper);

+ 1 - 2
materialfx/src/main/java/io/github/palexdev/materialfx/utils/NodeUtils.java

@@ -142,8 +142,6 @@ public class NodeUtils {
         return false;
         return false;
     }
     }
 
 
-    // TODO to replace ALL!
-
     /**
     /**
      * Checks if the pressed node is in the hierarchy of the specified node, {@link PickResult#getIntersectedNode()}.
      * Checks if the pressed node is in the hierarchy of the specified node, {@link PickResult#getIntersectedNode()}.
      */
      */
@@ -416,6 +414,7 @@ public class NodeUtils {
         }
         }
     }
     }
 
 
+    // TODO replace all popups with MFXPopup
     public static Point2D pointRelativeTo(Node parent, Node node, HPos hpos,
     public static Point2D pointRelativeTo(Node parent, Node node, HPos hpos,
                                           VPos vpos, double dx, double dy, boolean reposition) {
                                           VPos vpos, double dx, double dy, boolean reposition) {
         final double nodeWidth = node.getLayoutBounds().getWidth();
         final double nodeWidth = node.getLayoutBounds().getWidth();