This minor version includes a bunch of kindly submitted PRs and some minor refactor.
Also, Gradle has been updated to version 7.6
Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
Controls Package
🐛 MFXTextField: fixed TextFormatter not working. It must be added on the BoundTextField, for this reason, added a delegate property (Fix for #174)
CSS Package
♻️ MFXCSSBridge: do not take into account the Region's user agent stylesheet. If it's needed to specify the user agent the popup's getUserAgentStylesheet() method should be overridden inline, as well as for any other component that mey require it (see MFXComboBoxSkin as an example) (Fix for #173)
Selection Package
♻️ Adds a method to retrieve the selection values as a List (rather than getSelection().values() which returns a generic Collection). Also make MultipleSelectionManager use LinkedHashSet and LinkedHashMap (TreeMap was used, oversight sorry) to keep insertion order for selection, this also ensures that building the values List returns the selected values in the same exact order as in the selection Map (Enhancement for #161)
Skins Package
🐛 MFXComboBoxSkin, MFXFilterComboBoxSkin: fixed an issue that prevented the combo box's popup from being fully customizable with CSS (Fix for #173)
🐛 MFXDatePickerSkin: initialize the picker's text if the initial date is not null (Fix for #172)
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
🐛 Fixed Maven POM once and for all
🐛 MFXTextFieldSkin: fixed bug which caused improper text fill in specific occasions
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
⬆️ Update Gradle plugins
⬆️ Update VirtualizedFX to 11.2.5
📝 Improve ROADMAP
📝 Update Text Fields wiki
✨ MFXTextField added a label to specify the unit of measure (optional, leave blank string to remove)
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
⏪ Partially revert commit e5d8e31058564b44a367d182077bab3f55a1c490 as it breaks the Demo
Skins Package
🐛 MFXComboBoxSkin: ensure the caret position is at 0 if the combo box is not selectable
♻️ MFXFilterPaneSkin: properly compute the minimum width
♻️ MFXTableViewSkin: allow to drag the filter dialog
🐛 MFXTableViewSkin: ensure the dialog is on foreground
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Project
⬆️ Upgraded JavaFX to 17.0.1
⬆️ Upgraded VirtualizedFX to 11.2.3
♻️ Make JavaFX dependencies transitive as a consequence/request of PR #116
Controls Package
💥 AbstractMFXToggleNode, MFXCircleToggleNode, MFXRectangleToggleNode have been reworked
♻️ MFXTextField whoops
♻️ MFXPopup, adapt to new changes of MFXCSSBridge
CSS Package
🚚 Renamed and moved CSSBridge to separate class
Skins Package
💥 MFXCircleToggleNodeSkin and MFXRectangleToggleNodeSkin have been slightly changed too
Resources
💥 MFXCircleToggleNode.css, MFXRectangleToggleNode.css have been reviewed too
🔥 Completed the removal of MFXLabel
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Disclaimer: I recently switched to Linux for production because I was tired of Bugdows but because they use different line endings IntelliJ is showing me that all files are changed, also the ones with identical content. I re-normalized the project and added a .gitattributes file. I'm not sure how GitHub will visualize this commit, if it's messed sorry in advance... but don't worry, as always all changes are listed here 😉⬆️ Upgraded VirtualizedFX to version 11.2.1
Demo
🚧 Temporarily "disabled" or non-functional some showcases
✅ Added new tests
MaterialFX
Beans Package
✨ Added convenience properties for Java's functions
✨ Added convenience property to represent a NumberRange
✨ Added many new beans
♻️ NumberRange: implemented hashCode, equals and toString, added two new methods to convert a range on integers to a List or a Set
🚚 Renamed RipplePosition ti PositionBean and moved to this package
Collections Package
✨ TransformableList is a new kind of ObservableList that combines JavaFX's FilteredList and SortedList functionalities into one
✨ TransformableListWrapper is an ObservableList which wraps both the source list and the transformable list in the same class. This makes using TransformableLists less verbose as modifications to the source list can be made directly from this wrapper
Controls Package
🔥 Removed AbstractMFXNotificationPane
🔥 Removed MFXNotification
🔥 Removed SimpleMFXNotificationPane
✨ Added a new cell to contain notifications
✨ FilterPane, a new control that allows to build Predicate filters interactively
✨ MFXNotificationCenter, a new control that allows to display multiple notifications. It is basically an icon that opens a popup which contains not only the list of notifications but also controls to manage them
✨ MFXPopup, extension of PopupControl to easily set the popup's content and position it by using HPos and VPos enumerations. It also introduces a hover functionality
✨ MFXSimpleNotification, a simple implementation of INotification
Effects Package
✨ ConsumerTransition, an implementation of Transition that uses a consumer to perform some action when the interpolate method is called
✨ Interpolators, a new enumerator that offers some new interpolators for JavaFX's animations
Enums Package
♻️ Moved all MaterialFX enumerators to this top level package
✨ ChainMode, a new enumerator mainly used by PredicateUtils to chain two predicates
✨ NotificationCounterStyle, a new enumerator to specify MFXNotificationCenter's counter style
✨ NotificationPos, a new enumerator to specify at which position a notification system should place the notification
✨ NotificationState, a new enumerator to represent the read state of a notification
Factories Package
♻️ Moved all MaterialFX factories to this top level package
✨ InsetsFactory, a new factory tp build JavaFX's Insets objects
Filter Package
💥 The filter API has been completely remade and now it's super flexible, super useful, super amazin haha. I won't describe it here as there are a LOT of new classes and concepts to be described so I recommend you to read AbstractFilter, FilterBean and BiPredicateBean documentations, usage examples can be also found in the demo (not yet at time of writing) and in the documentation of MFXFilterPane
🚧 MFXFilterDialog has been completely commented, will be reworked for the new API
Font Package
✨ Added new resources
Notifications Package
💥 The notification API has been completely remade. Now there are to notification systems, one is very similar to the old one but it is limited to one notification at a time at a given position. This restriction helper to keep the system simple and efficient. To show multiple notifications at one time I recommend the usage of MFXNotificationCenterSystem which uses a MFXNotificationCenter to show the notifications. Or, you could implement you own notification system since the notification API now offers some base classes to build on top.
AbstractMFXNotificationSystem and INotificationSystem specify the base features all notification systems should have, INotification specifies the base features all notifications should have
Skin Package
No notable change aside from new skins for the new controls and minor changes due to classes renamed/moved
Utils Package
✨ FunctionalStringConverter, a functional alternative to JavaFX's StringConverter
✨ ReusableScheduledExecutor, a wrapper class to make a ScheduledExecutorService reusable. To stop/restart a ScheduledExecutorService it's needed to keep a reference to the ScheduledFuture task but this often result in boilerplate code, this wrapper fixes this
✨ EnumStringConverter, an implementation of JavaFX's StringConverter to work with enumerators
✨ Added a new method to ExecutionUtils
✨ FXCollectors, a class that contains some new collectors for JavaFX's observable collections
✨ PredicateUtils, utils for Predicates
✨ StringUtils, added a new method to convert an elapsed time in seconds to a String
♻️ AnimationUtils, added some new methods to PauseTransitionBuilder and KeyFrames classes
🐛 ExceptionUtils, fixed getStackTraceString method as StringWriters are not reusable
Resources
✨ Added new CSS files for new controls
♻️ MFXColors.css, added a new color
Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
💥 Ditched Flowless and ReactFX in favor of VirtualizedFX
⬆️ Upgraded Gradle to version 7.2
⬆️ Upgraded JavaFX to version 17
⬆️ Upgraded plugins
⬆️ Upgraded to JUnit 5
🔥 Removed jcenter() as it is deprecated
🏗️ Added shadowJar plugin to also build a shadow jar which contains needed dependencies. This jar works only for non-modular projects tough as the plugin removes the module-info.class from the produced jar
Demo
ListViewsDemoController:
♻️ Make the listviews show huge amount of items to also showcase the performance
♻️ Added method to get random FontAwesome icons
✅ Added tests for the new Binding classes
✅ Added tests to check comboboxes selection/text bindings behavior
✅ Added tests for the new properties
✅ Added tests for the new selection models
MaterialFX
Beans Package
✨ Introduced synchronized properties. Synchronized properties are specialized properties that allow you to set a value and wait for another property to change as well before firing a change event, this can be useful for mimicking "atomic" behaviors. You can even chain multiple synchronized property, the only conditions are that a synchronized property can wait for at most one other property, and the other property must not be already waiting for some other property (check testChain() methods in SynchronizedIntegerTests for some examples)
Bindings Package
🚚 Moved BooleanListBinding to this package
✨ Added helper classes for bindings. Unidirectional bindings and Bidirectional bindings are managed by the BindingManager class, it is mostly relevant for synchronized properties because those properties override the default bindings mechanism but since it uses JavaFX base classes (Property and ObservableValue) it should be usable for everything
Controls Package
🔥 Removed flowless package
🔥 Removed all classes related to Flowless, this means that listviews have been remade
🚚 Renamed MFXListView and MFXListCell to MFXLegacyListView and MFXLegacyListCell, resource file are also affected, moved to legacy packages
♻️ Remade the abstract class for all listviews
♻️ Refactored the IListView interface
♻️ Remade the abstract class for all list cells
♻️ Remade both simple cells (MFXListCells) and cells with checkboxes (MFXCheckListCell)
MFXAnimationFactory:
♻️ Make interpolators global constants
MFXContextMenuItem:
📝 Update documentation for more clarity on accelerator property
MFXTextField:
🔥 Removed workaround for MFXContextMenu and selection being cleared
♻️ Improved the event dispatcher to solve the above issue in a better way. Now the right click event will be consumed only if the MFXContextMenu is not null and the selection is not empty. I have a better understanding of the EventDispatchers now :)
Filter Package
MFXFilterDialog:
♻️ Use the new MFXListView instead of the legacy one
♻️ Make evaluation boxes take all the space left in the cell
Selection Package
💥 Huge changes for the selection API
💥 Comboboxes, do not rely on a "mock" selection model anymore but use a SingleSelectionModel. This allows also to bind per index or per item (make sure to read the documentation for the new binding mechanism)
💥 Single selection models now allow to bind the selected index or item, they also offer method to easily bind to other selection models. You can even customize how to compute the updates, be sure to check the documentation
💥 Single selection models now use SynchronizedProperties, this means that when index changes and you have a listener to the index property the selected item will be already updated too (works the other way around too)
Skins Package
🚚 Moved MFXLegacyListViewSkin to legacy package
MFXComboBoxSkin and MFXFilterComboBoxSkin:
♻️ Adapted to the new listviews and cells
♻️ Allow binding selection or text (Fix for issue #84)
♻️ Make the popup autohide instead of manually managing all possible events, this is also better because as far as I know there's no way in JavaFX to easily check if the mouse was pressed on the window frame or the window was moved (can be detected but very inconvenient to do), all cases that must close the popup. Setting is to autohide fixes also this cases (probably internal APIs)
♻️ Specific to MFXFilterComboBoxSkin. Removed the filtered list in favor of a Map, this helps with duplicates too, of course because of this change the FilterListCell must be adapted as well
MFXListViewSkin:
♻️ Pretty much the same to be fair, but there's a difference though. The VirtualFlow is not a member of the skin anymore but it's a field of the control (passed to the skin with the constructor), this allows to easily expose some methods of the VirtualFlow, like manual scrolling or the Features class to customize the VirtualFlow, also allows to set the speed of the scroll bars
Utils Package
✨ Added a helper class, ListChangeProcessor, to easily compute changes in ObservableList, especially useful is combined with ListChangeHelper from VirtualizedFX
✨ Added TriConsumer interface
ExecutionUtils:
✨ Added new method to listen to a generic observable changes
NodeUtils:
✨ Added new inHierarchy method and replace usages where convenient
♻️ waitForScene() allow passing generic Nodes rather than just Controls
ScrollUtils:
🔥 Removed methods for Flowless listviews
Resources
🚚 Moves css files for legacy listviews to legacy package
MFXListView.css and MFXCheckListView.css:
♻️ Keep the -mfx-thumb-hover-color if the mouse is not of the scrollbar's thumb anymore but it is still pressed
MFXCheckListCell.css:
♻️ Hide the ripple of checkboxes
MFXFilterDialog.css:
♻️ Set cells' background on hover to be transparent
Signed-off-by: Alessadro Parisi <alessandro.parisi406@gmail.com>
♻️ Minor changes and improvements to the demo
🐛 Fixed editor regression in MFXLabelSkin and little behavior improvement
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
Demo:
♻️ Updated some controls' demo
✨ Added a splash screen with logo, animations and even sound
MFXSlider:
♻️ Instead of having three new pseudo classes that activate only when a the slider reaches certain values, you can now specify three separate lists of ranges. For example, in the first list you could add ranges from 0 to 25 and from 50 to 75, then in the second list from 26 to 49 and from 76 to 80, then in the third list from 81 to 100. When the value changes the slider checks in which range the value is, in CSS you can customize the slider according to those ranges with the following pseudo classes: ":range1", ":range2", ":range3".
You can also specify the same value for both bounds in the range, this will act as before this change, but still with much more flexibility.
For an example see the SlidersDemoController class.
MFXProgressBar,
MFXProgressSpinner:
✨ Added the same css system described above to these controls
NumberRange:
✨ Added a new method to create a new NumberRange from a single value, min and max bounds are the same.
✨ Added four new static methods to check if a given value is contained in a given NumberRange
✨ Added four new static methods to check if a given value is contained at least in one of the given NumberRanges (in a list of ranges)
✨ New Controls: MFXStepper, MFXStepperToggle, MFXExceptionDialog
Gradle:
⬆️ Updated JavaFX plugin to version 0.0.10
⬆️ Updated JavaFX to version 16
🔥 Workaround for modularity should not be necessary anymore
Demo:
DemoController:
♻️ Make the demo pane request focus on mouse pressed
TextfieldsDemoController:
♻️ Refactor validation properties for the validated field to use the new BindingsUtils class
MaterialFX:
💥 Huge review of the Validation API
IMFXValidator:
♻️ Renamed listeners methods
AbstractMFXValidator:
💥 Implemented the possibility to make a validator depend on other validators. Each validator has its conditions which are evaluated by a BooleanListBinding property
💥 Added a new read only boolean property that represents the state of validator, valid/invalid(true/false). The value of this property is computed by evaluating the conditions of the validator and the conditions of all other validators(dependencies). The value is computed automatically when the validator's or its dependencies' conditions change, but you can also force the it by calling the update() method
♻️ Added a new boolean flag to allow controls to be validated as soon as they are laid out in the scene
MFXPriorityValidator:
✨ New validator class
The priority validator is a validator which changes its message automatically depending on its state/conditions. When its state changes, gets the first invalid condition in its messageMap and sets its message accordingly, more info in the documentation
MFXDialogValidator:
♻️ Refactored to extend MFXPriorityValidator rather than AbstractMFXValidator
♻️ Added listener to the title property to change the dialog's title as well
Validated:
✨ New interface of the Validation API
All controls that need validation should implement this interface
MFXTextField:
♻️ Implement the Validated interface
♻️ Refactored the setupValidator() method, the dialog type is set to ERROR rather than WARNING, added code to update the "invalid" pseudo class state
♻️ lines' stroke width set to 2.0
✨ Added a PseudoClass, "invalid", for the validator state and customize the control accordingly
✨ Added a new styleable property to specify the lines' stroke cap
MFXTextFieldSkin:
♻️ Added validator init flag check to constructor
♻️ Force validator update when focus changes
♻️ Refactored the lines' code, use bindings rather than listeners. Compute their position using the relocate() method rather than using the translateY property
♻️ Switched to MFXLabel, compute its position and location using the resizeRelocate() method. The position strategy has changed too, if the label is bigger than the text field then it is positioned to be centered
♻️ Using the showModal() method rather than show()
🐛 When the cursor is on the validate label its shape should be the DEFAULT
🐛 When the validate label's text changes it's required to recompute the layout
mfx-textfield.css:
♻️ Switched to MFXLabel, set the text fill to "red" by default
✨ Added new section that specifies the control look when "invalid"
MFXLegacyComboBox:
♻️ Implement the Validated interface
♻️ Refactored the setupValidator() method, the dialog type is set to ERROR rather than WARNING, added code to update the "invalid" pseudo class state, removed the selected item condition now it's up to the user's decision
♻️ lines' stroke width set to 2.0
✨ Added a PseudoClass, "invalid", for the validator state and customize the control accordingly
✨ Added a new styleable property to specify the lines' stroke cap
🐛 Fixed line color mismatch between styleable property and css meta data
MFXLegacyComboBoxSkin:
♻️ Added validator init flag check to constructor
♻️ Force validator update when focus changes
♻️ Refactored the lines' code, use bindings rather than listeners. Compute their position using the relocate() method rather than using the translateY property, changed their name accordingly to other similar controls
♻️ Switched to MFXLabel, compute its position and location using the resizeRelocate() method. The position strategy has changed too, if the label is bigger than the text field then it is positioned to be centered
💫 Minor changes to the lines animation
🐛 When the validate label's text changes it's required to recompute the layout
mfx-combobox.css:
♻️ Switched to MFXLabel, set the text fill to "red" by default
✨ Added new section that specifies the control look when "invalid"
MFXDatePicker:
♻️ Reviewed the layout strategy
✨ Added styleable properties for the line's stroke width and stroke cap
🐛 Line and calendar icon colors should not change if the control is disabled
🐛 Fixed calendar icon not being gray if the control was disabled
✨ New Utils:
BindingUtils: utils class to convert JavaFX expressions/bindings to properties
DialogUtils: ported from one of my personal projects. Utils class to quickly get any sort of stage dialog, including more specific dialogs.
ExceptionUtils: ported from one of my personal project. Utils class to convert a throwable/exception to a String using a StringWriter and a PrintWriter.
📝 Added and updated documentation
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
LoaderUtils, MFXHLoader, MFXVLoader, MFXLoaderBean: migrated type from Node to Parent.
Introduced caching mechanism which vastly improves the performance of the views switching.
MFXComboBoxSkin, MFXFilterComboBoxSkin: fixed occasional NullPointerException
MFXFlowlessCheckListCell: the pseudo class should be accessible to sub classes.
MFXFlowlessListView, MFXFlowlessCheckListView (css): fixed scrollbars' thumb not showing properly in case of many cells
TreeCheckModel: fixed scanTree
Signed-off-by: palexdev <alessandro.parisi406@gmail.com>
AbstractMFXDialog, MFXDialogFactory: switch from single close button to a list of generic Nodes, this allows to have much more flexibility.
MFXStageDialog: added more wrapper methods.
AbstractMFXTreeItem: added setItems method (forgot oops).
MFXTableColumnCell, MFXTableColumnCellSkin: added tooltip.
MFXLabel: added text fill property.
MFXLabelSkin: fixed and significantly improved the editor behaviour, now you can open the editor by double clicking on the whole control, the icons are excluded. Now if the editor looses focus the editor is hidden and any changes are confirmed. The width and position are now computed more accurately. Now when the editor is shown it acquires the focus.
MFXIconWrapper: setIcon method fixed once and for all (I hope).
Added new resources.
mfx-dialog.css: fixed dialog title appearing a little blurry.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Added new MFXComboBoxes to Demo.
Added MFXLabel, MFXLegacyTableView and MFXTableView previews to Demo.
MFXTableView: forgot to add setItems method.
MFXTableViewSkin: filter dialog use automatic centering, it's more accurate than using screen coordinates.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Added ScenicView to demo module for debugging purposes.
Corrected names for TreeCheckModel and TreeSelectionModel.
MFXStageDialog: it's now possible to block drag and set the manual position of the Stage.
RippleGenerator: fixed memory leak, the shape used for the background animation must also be removed at the end of the animation.
MFXComboBoxSkin: close the popup when the focus is lost.
Use computed sizes and unbind the properties in case maxPopupHeightProperty and maxPopupWidthProperty are set to -1.
MFXLabelSkin: minWidth should be correctly calculated now.
NodeUtils: added new method to calculate the minWidth of a Label given the Font and the text.
StringUtils: added new method to check if a CharSequence contains another CharSequence ignoring case.
mfx-scrollpane.css: fixed viewport background color.
Added IFilterable, MFXFilterDialog for filtering MFXTableView, note that the interface is optional, in case the Object doesn't implement it, toString will be used instead.
Added selection model for MFXTableView.
Added DragResizer for resizing nodes at runtime using the cursor.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Updated plugins and libraries.
Demo: added previews for tree views and progress spinners.
MFXTreeView and MFXCheckTreeView: added no-arg constructors for usage in SceneBuilder and refactored the control initialization to allow no-arg.
Added bottom padding to root thus fixing selection of bottom items.
SelectionModel: scanTree added condition to check if element is already selected.
mfx-treeview.css: must set viewport background color, otherwise it will appear grey when items are expanded.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Some improvements and bug fixes:
Moved cells to separate package.
MFXAnimationFactory added null check to resetNode().
MFXFontIcon added no-arg constructors for usage in SceneBuilder,
use Paint interface because SceneBuilder is stupid.
MFXTextFieldSkin, mfx-textfield.css fixed strange font size bug when clicking on the validation label.
mfx-dialog.css fixed font.
Added new resources
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Added 2 new controls: MFXDatePicker and MFXTextField.
Added custom implementation of DateCell, MFXDateCell.
Added MaterialFX font, FontHandler, FontResources and MFXFontIcon for better managing SVG resources.
Added new methods to NodeUtils, used for positioning MFXDatePicker's popup.
Added new method to StringUtils.
Added new method to MFXResourcesLoader.
Added new SVG resources to MFXResourcesManager.
Fixed getClassCssMetaDataList() method in many controls, if I'm not wrong it should be static.
MFXButton, moved RippleGenerator initialization in separate protected method for overriding.
Ripples clip, using factory pattern which is more flexible than just an enum.
RippleGenerator, use clip from factory for background animation instead of Rectangle.
MFXListViewSkin, fixed scrollbars not being initially hidden if hideScrollBars is set to true.
AbstractMFXValidator, always initialize properties.
MFXDialogValidator, use mapping for messages rather than relying on list indexes.
Fixed font.css
Fixed MFXScrollpane's bars not being completely hidden.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Added 3 new controls: MFXComboBox, MFXListView and MFXRadioButton.
Demo: added smooth scrolling, re-organized css files.
Added custom binding, BooleanListBinding to observe a list of boolean properties.
Added validation api.
Added new method to StringUtils.
MFXButton, depthLevel changed to Styleable property for usage in CSS.
MFXStageDialog ignore exception for owner and modality.
Refactored some skin classes to make use of getSkinnable().
MFXCheckboxSkin fixed updateColors() not being called in SceneBuilder if selected/indeterminate was checked.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Demo completely redone, turn out that wrapping MFXHLoader and MFXVLoader in a ScrollPane is the way to go if there will be lot of buttons in them.
Cleaned up some CSS files.
AbstractMFXDialog/MFXDialog are now visible by default, this is a workaround for using MFXDialog in SceneBuilder.
Added MFXScrollPaneSkin for MFXScrollPane, for many years there is a known bug that makes the content of a ScrollPane blurry, I didn't notice it, for some reason the bug appeared on my laptop.
MFXVLoader forgot to change thread countdown.
MFXHLoader and MFXVLoader, fixed exception for not being on JavaFX Thread.
MFXNotifications are rounded by default now and have borders to distinguish them in case of white background.
Added new SVG resources.
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Added notifications, scroll pane and tooltips
Added new utils classes, LabelUtils, LoggingUtils, StringUtils
Added custom implementation of a circular fifo queue, CircularQueue
Added missing documentation here and there
Added logging capabilities, using log4j2
MFXHLoader and MFXVLoader, threads timeout decreased, thread names set to "MFXHLoaderThread" and "MFXVLoaderThread"
MFXCheckboxSkin removed unnecessary variables
HexToRGBColor renamed to ColorUtils, fixed rgba method and added a new method to get random colors
Loader renamed to LoaderUtils
NodeUtils, added method to make a region circular
MFXResourcesManager added new SVGPath
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>
Demo completely redone
4 new controls: MFXDialog, MFXStageDialog, MFXHLoader and MFXVLoader
Completely redone MFXToggleNode
Added some animations
Added new effect: MFXScrimEffect, see MaterialDesign guidelines
Added new util class ToggleButtonsUtil
Added new class MFXResourcesManager for storing library resources
Minor changes:
Renamed MFXResources to MFXResourcesLoader
MFXButton, set better ripple radius and color on initialization
RippleGenerator, added flag for background animation, fix cast warning
RippleClipType, implemented circle
NodeUtils, added method to center node in AnchorPanes
Resources:
MFXButton, set focused color to white
MFXToggleNode, set default opacity and selected opacity for a better feedback on user interaction
Added new fonts
Signed-off-by: PAlex404 <alessandro.parisi406@gmail.com>