From 6aaafbe975a27610ff785dd7cab1e452269c0266 Mon Sep 17 00:00:00 2001 From: weisj Date: Sun, 20 Oct 2019 23:59:05 +0200 Subject: [PATCH] Renamed to conform new group id. Prepared for maven publishing. --- .gitignore | 1 + build.gradle | 121 ++++++- darklaf.iml | 2 +- gradle.properties | 5 - src/jniplatform/cpp/JNIDecorations.cpp | 18 +- ..._darklaf_platform_windows_JNIDecorations.h | 77 +++++ ..._darklaf_platform_windows_JNIDecorations.h | 77 ----- .../weisj}/darklaf/DarkLaf.java | 220 ++++++------ .../weisj}/darklaf/DarkLafInfo.java | 2 +- .../github/weisj/darklaf/DarkMetalTheme.java | 36 ++ .../weisj}/darklaf/LafManager.java | 10 +- .../weisj}/darklaf/color/DarkColorModel.java | 2 +- .../darklaf/color/DarkColorModelCMYK.java | 2 +- .../darklaf/color/DarkColorModelHSB.java | 2 +- .../darklaf/color/DarkColorModelHSL.java | 2 +- .../darklaf/components/ArrowButton.java | 4 +- .../components/ClosableTabComponent.java | 27 +- .../components/ClosableTabbedPane.java | 41 ++- .../darklaf/components/ColorPipetteBase.java | 10 +- .../components/DefaultColorPipette.java | 34 +- .../weisj}/darklaf/components/Disposable.java | 2 +- .../darklaf/components/JXPopupMenu.java | 4 +- .../components/SelectableTreeNode.java | 2 +- .../darklaf/components/ShadowButton.java | 2 +- .../weisj/darklaf/components/TabEvent.java | 45 +++ .../weisj/darklaf/components/TabListener.java | 36 ++ .../components/TabPropertyChangeEvent.java | 44 +++ .../components/alignment/Alignment.java | 27 +- .../components/alignment/AlignmentHelper.java | 2 +- .../alignment/AlignmentStrategy.java | 2 +- .../components/border/BubbleBorder.java | 29 +- .../components/border/DropShadowBorder.java | 27 +- .../components/border/MutableLineBorder.java | 25 +- .../components/tabframe/JTabFrame.java | 24 +- .../components/tabframe/PanelPopup.java | 28 +- .../components/tabframe/PopupContainer.java | 2 +- .../darklaf/components/tabframe/TabArea.java | 2 +- .../components/tabframe/TabFrameContent.java | 4 +- .../tabframe/TabFrameContentPane.java | 28 +- .../components/tabframe/TabFramePopup.java | 4 +- .../components/tabframe/TabFrameTab.java | 4 +- .../tabframe/TabFrameTabContainer.java | 4 +- .../components/tabframe/TabFrameTabLabel.java | 8 +- .../components/tabframe/TabFrameUI.java | 4 +- .../components/tabframe/TabbedPopup.java | 12 +- .../components/tabframe/ToggleSplitPane.java | 10 +- .../darklaf/components/text/SearchEvent.java | 2 +- .../components/text/SearchListener.java | 2 +- .../components/text/SearchTextField.java | 2 +- .../text/SearchTextFieldWithHistory.java | 2 +- .../components/tooltip/DarkToolTip.java | 49 +-- .../components/tooltip/ToolTipContext.java | 258 +++++++-------- .../components/tooltip/ToolTipListener.java | 2 +- .../components/tooltip/ToolTipStyle.java | 2 +- .../tooltip/TooltipAwareButton.java | 4 +- .../tooltip/TooltipAwareToggleButton.java | 4 +- .../tristate/TristateButtonModel.java | 25 +- .../components/tristate/TristateCheckBox.java | 29 +- .../components/tristate/TristateState.java | 44 +++ .../components/uiresource/Insets2D.java | 2 +- .../uiresource/JLabelUIResource.java | 2 +- .../uiresource/JPanelUIResource.java | 2 +- .../uiresource/UIResourceWrapper.java | 2 +- .../darklaf/decorators/AncestorAdapter.java | 41 +++ .../darklaf/decorators/CellRenderer.java | 27 ++ .../darklaf/decorators/HoverListener.java | 2 +- .../darklaf/decorators/MouseResponder.java | 2 +- .../darklaf/decorators/PlainAction.java | 2 +- .../darklaf/decorators/PopupMenuAdapter.java | 2 +- .../weisj}/darklaf/icons/DarkSVGIcon.java | 2 +- .../weisj}/darklaf/icons/EmptyIcon.java | 2 +- .../weisj}/darklaf/icons/IconColorMapper.java | 25 +- .../weisj}/darklaf/icons/IconLoader.java | 2 +- .../weisj}/darklaf/icons/LazyIcon.java | 2 +- .../weisj}/darklaf/icons/LazyImageIcon.java | 2 +- .../weisj}/darklaf/icons/RotatableIcon.java | 4 +- .../weisj/darklaf/icons/ThemedSVGIcon.java | 57 ++++ .../weisj/darklaf/icons/UIAwareIcon.java | 34 ++ .../weisj}/darklaf/log/LogFormatter.java | 2 +- .../weisj}/darklaf/platform/NativeUtil.java | 25 +- .../platform/windows/JNIDecorations.java | 31 +- .../weisj/darklaf/theme/DarculaTheme.java} | 22 +- .../weisj/darklaf/theme/IntelliJTheme.java | 67 ++++ .../darklaf/theme/SolarizedDarkTheme.java | 4 +- .../darklaf/theme/SolarizedLightTheme.java | 4 +- .../weisj}/darklaf/theme/Theme.java | 33 +- .../theme/UnsupportedThemeException.java | 2 +- .../darklaf/ui/button/DarkButtonBorder.java | 6 +- .../darklaf/ui/button/DarkButtonUI.java | 108 +++--- .../darklaf/ui/button/DarkToggleButtonUI.java | 34 +- .../ui/cell/CellEditorToggleButton.java | 2 +- .../weisj/darklaf/ui/cell/DarkCellBorder.java | 37 +++ .../ui/cell/DarkCellRendererToggleButton.java | 10 +- .../ui/checkbox/DarkCheckBoxBorder.java | 73 ++++ .../ui/checkbox/DarkCheckBoxMenuItemUI.java | 33 +- .../darklaf/ui/checkbox/DarkCheckBoxUI.java | 10 +- .../darklaf/ui/colorchooser/ColorPipette.java | 6 +- .../colorchooser/ColorPreviewComponent.java | 25 +- .../ui/colorchooser/ColorValueFormatter.java | 4 +- .../darklaf/ui/colorchooser/ColorWheel.java | 8 +- .../colorchooser/ColorWheelImageProducer.java | 26 +- .../ui/colorchooser/ColorWheelPanel.java | 4 +- .../colorchooser/DarkColorChooserPanel.java | 56 ++-- .../ui/colorchooser/DarkColorChooserUI.java | 10 +- .../ui/colorchooser/DarkPreviewPanel.java | 2 +- .../DarkSwatchesChooserPanel.java | 2 +- .../ui/colorchooser/MainSwatchPanel.java | 25 +- .../ui/colorchooser/RecentSwatchPanel.java | 25 +- .../ui/colorchooser/SlideComponent.java | 12 +- .../darklaf/ui/colorchooser/SwatchPanel.java | 33 +- .../darklaf/ui/combobox/DarkComboBoxUI.java | 126 +++---- .../darklaf/ui/combobox/DarkComboPopup.java | 4 +- .../DarkFileChooserListViewBorder.java | 4 +- .../ui/filechooser/DarkFileChooserUI.java | 6 +- .../filechooser/DarkFileChooserUIBridge.java | 10 +- .../darklaf/ui/filechooser/DarkFilePane.java | 8 +- .../ui/filechooser/DarkFilePaneUIBridge.java | 10 +- .../darklaf/ui/filechooser/FileTextField.java | 2 +- .../weisj}/darklaf/ui/html/DarkHTML.java | 2 +- .../internalframe/DarkDesktopIconBorder.java | 40 +++ .../ui/internalframe/DarkDesktopIconUI.java | 25 +- .../DarkInternalFrameBorder.java | 4 +- .../DarkInternalFrameTitlePane.java | 71 ++-- .../ui/internalframe/DarkInternalFrameUI.java | 2 +- .../weisj/darklaf/ui/label/DarkLabelUI.java | 43 +++ .../darklaf/ui/list/DarkListCellBorder.java | 32 ++ .../ui/list/DarkListCellFocusBorder.java | 6 +- .../darklaf/ui/list/DarkListCellRenderer.java | 4 +- .../weisj}/darklaf/ui/list/DarkListUI.java | 27 +- .../darklaf/ui/list/DarkListUIBridge.java | 211 ++++++------ .../darklaf/ui/menu/DarkMenuBarBorder.java | 2 +- .../weisj}/darklaf/ui/menu/DarkMenuBarUI.java | 2 +- .../darklaf/ui/menu/DarkMenuItemBorder.java | 2 +- .../darklaf/ui/menu/DarkMenuItemUIBase.java | 6 +- .../weisj}/darklaf/ui/menu/DarkMenuUI.java | 4 +- .../darklaf/ui/menu/DarkPopupMenuBorder.java | 4 +- .../ui/menu/DarkPopupMenuSeparatorUI.java | 4 +- .../darklaf/ui/menu/DarkPopupMenuUI.java | 2 +- .../ui/optionpane/DarkOptionPaneUI.java | 2 +- .../weisj}/darklaf/ui/panel/DarkPanelUI.java | 2 +- .../ui/progressbar/DarkProgressBarBorder.java | 36 ++ .../ui/progressbar/DarkProgressBarUI.java | 139 ++++---- .../ui/radiobutton/DarkRadioButtonBorder.java | 74 +++++ .../DarkRadioButtonMenuItemUI.java | 6 +- .../ui/radiobutton/DarkRadioButtonUI.java | 12 +- .../darklaf/ui/rootpane/CloseButtonUI.java | 51 +++ .../darklaf/ui/rootpane/DarkRootPaneUI.java | 6 +- .../darklaf/ui/rootpane/DarkTitlePane.java | 40 +-- .../ui/rootpane/SubstanceRootLayout.java | 26 +- .../darklaf/ui/rootpane/TitlePaneIcon.java | 69 ++++ .../ui/scrollpane/DarkScrollBarUI.java | 8 +- .../ui/scrollpane/DarkScrollPaneUI.java | 25 +- .../ScrollLayoutManagerDelegate.java | 25 +- .../darklaf/ui/separator/DarkSeparatorUI.java | 2 +- .../darklaf/ui/slider/DarkSliderUI.java | 33 +- .../darklaf/ui/spinner/DarkSpinnerBorder.java | 29 +- .../darklaf/ui/spinner/DarkSpinnerUI.java | 8 +- .../ui/splitpane/DarkSplitPaneBorder.java | 2 +- .../ui/splitpane/DarkSplitPaneDivider.java | 4 +- .../splitpane/DarkSplitPaneDividerBorder.java | 2 +- .../darklaf/ui/splitpane/DarkSplitPaneUI.java | 4 +- .../darklaf/ui/statusbar/DarkStatusBarUI.java | 2 +- .../darklaf/ui/tabbedpane/DarkHandler.java | 40 +-- .../ui/tabbedpane/DarkScrollHandler.java | 2 +- .../ui/tabbedpane/DarkScrollableTabPanel.java | 2 +- .../tabbedpane/DarkScrollableTabSupport.java | 6 +- .../tabbedpane/DarkScrollableTabViewport.java | 2 +- .../ui/tabbedpane/DarkTabAreaButton.java | 2 +- .../ui/tabbedpane/DarkTabbedPaneLayout.java | 2 +- .../DarkTabbedPaneScrollLayout.java | 2 +- .../ui/tabbedpane/DarkTabbedPaneUI.java | 265 ++++++++------- .../ui/tabbedpane/DarkTabbedPaneUIBridge.java | 212 ++++++------ .../darklaf/ui/tabbedpane/MoreTabsButton.java | 6 +- .../darklaf/ui/tabbedpane/NewTabButton.java | 2 +- .../ui/tabbedpane/ScrollableTabPanel.java | 2 +- .../ui/tabbedpane/ScrollableTabSupport.java | 2 +- .../ui/tabbedpane/ScrollableTabViewport.java | 2 +- .../ui/tabbedpane/TabbedPaneHandler.java | 2 +- .../ui/tabbedpane/TabbedPaneLayout.java | 2 +- .../ui/tabbedpane/TabbedPaneScrollLayout.java | 2 +- .../tabbedpane/TabbedPaneTransferHandler.java | 4 +- .../darklaf/ui/tabbedpane/TabbedPaneUtil.java | 25 +- .../darklaf/ui/tabframe/DarkPanelPopupUI.java | 20 +- .../DarkTabFrameComponentPopupMenu.java | 10 +- .../DarkTabFramePopupHeaderBorder.java | 2 +- .../ui/tabframe/DarkTabFrameTabBorder.java | 2 +- .../tabframe/DarkTabFrameTabContainerUI.java | 12 +- .../ui/tabframe/DarkTabFrameTabLabelUI.java | 16 +- .../darklaf/ui/tabframe/DarkTabFrameUI.java | 86 ++--- .../ui/tabframe/DarkTabbedPopupUI.java | 34 +- .../darklaf/ui/tabframe/TabDragListener.java | 11 +- .../darklaf/ui/tabframe/TabFrameLayout.java | 6 +- .../ui/tabframe/TabFrameTransferHandler.java | 19 +- .../DarkColorTableCellRendererEditor.java | 25 +- .../darklaf/ui/table/DarkTableBorder.java | 4 +- .../darklaf/ui/table/DarkTableCellBorder.java | 4 +- .../darklaf/ui/table/DarkTableCellEditor.java | 27 +- .../DarkTableCellEditorToggleButton.java | 29 +- .../ui/table/DarkTableCellFocusBorder.java | 29 +- .../ui/table/DarkTableCellRenderer.java | 29 +- .../ui/table/DarkTableHeaderBorder.java | 4 +- .../ui/table/DarkTableHeaderCorner.java | 2 +- .../darklaf/ui/table/DarkTableHeaderUI.java | 4 +- .../ui/table/DarkTableHeaderUIBridge.java | 132 ++++---- .../weisj}/darklaf/ui/table/DarkTableUI.java | 27 +- .../darklaf/ui/table/DarkTableUIBridge.java | 2 +- .../darklaf/ui/table/TableUIBridge.java | 6 +- .../table/TextFieldTableCellEditorBorder.java | 27 +- .../ui/taskpane/DarkTaskPaneContainerUI.java | 2 +- .../darklaf/ui/taskpane/DarkTaskPaneUI.java | 4 +- .../weisj}/darklaf/ui/text/DarkCaret.java | 53 ++- .../darklaf/ui/text/DarkEditorPaneUI.java | 2 +- .../ui/text/DarkFormattedTextFieldUI.java | 2 +- .../darklaf/ui/text/DarkPasswordFieldUI.java | 30 +- .../ui/text/DarkPasswordFieldUIBridge.java | 25 +- .../darklaf/ui/text/DarkTextAreaUI.java | 27 +- .../darklaf/ui/text/DarkTextBorder.java | 10 +- .../darklaf/ui/text/DarkTextFieldUI.java | 49 ++- .../ui/text/DarkTextFieldUIBridge.java | 27 +- .../weisj/darklaf/ui/text/DarkTextPaneUI.java | 70 ++++ .../weisj}/darklaf/ui/text/DarkTextUI.java | 41 ++- .../darklaf/ui/text/SelectLineAction.java | 25 +- .../darklaf/ui/text/SelectWordAction.java | 2 +- .../ui/titledborder/DarkTitledBorder.java | 4 +- .../darklaf/ui/toolbar/DarkToolBarBorder.java | 25 +- .../darklaf/ui/toolbar/DarkToolBarUI.java | 27 +- .../ui/toolbar/DarkToolBarUIBridge.java | 29 +- .../darklaf/ui/toolbar/DropPreviewPanel.java | 2 +- .../ui/tooltip/DarkDefaultToolTipBorder.java | 4 +- .../darklaf/ui/tooltip/DarkTooltipBorder.java | 35 +- .../darklaf/ui/tooltip/DarkTooltipUI.java | 29 +- .../ui/tree/DarkDefaultTreeEditor.java | 2 +- .../darklaf/ui/tree/DarkTreeCellBorder.java | 4 +- .../darklaf/ui/tree/DarkTreeCellEditor.java | 6 +- .../darklaf/ui/tree/DarkTreeCellRenderer.java | 6 +- .../weisj}/darklaf/ui/tree/DarkTreeUI.java | 4 +- .../ui/tree/TreeCellEditorDelegate.java | 2 +- .../ui/tree/TreeRendererComponent.java | 2 +- .../darklaf/ui/tree/TreeRendererSupport.java | 2 +- .../ui/tristate/DarkTristateCheckBoxUI.java | 31 +- .../weisj}/darklaf/util/Animator.java | 25 +- .../weisj}/darklaf/util/ColorUtil.java | 2 +- .../weisj}/darklaf/util/DarkUIUtil.java | 6 +- .../weisj}/darklaf/util/GraphicsContext.java | 2 +- .../weisj}/darklaf/util/GraphicsUtil.java | 4 +- .../weisj}/darklaf/util/ImageUtil.java | 11 +- .../weisj}/darklaf/util/LazyActionMap.java | 25 +- .../weisj}/darklaf/util/Pair.java | 2 +- .../weisj}/darklaf/util/PropertyLoader.java | 8 +- .../weisj}/darklaf/util/StringUtil.java | 2 +- .../weisj}/darklaf/util/SwingXUtilities.java | 2 +- .../weisj}/darklaf/util/SystemInfo.java | 25 +- .../github/weisj/darklaf/util/TimerUtil.java | 58 ++++ .../java/com/weis/darklaf/DarkMetalTheme.java | 13 - .../darklaf/components/OverlayScrollPane.java | 313 ------------------ .../darklaf/components/ScrollPopupMenu.java | 220 ------------ .../com/weis/darklaf/components/TabEvent.java | 22 -- .../weis/darklaf/components/TabListener.java | 13 - .../components/TabPropertyChangeEvent.java | 21 -- .../text/TextFieldHistoryPopup.java | 157 --------- .../components/tristate/TristateState.java | 21 -- .../darklaf/decorators/AncestorAdapter.java | 18 - .../weis/darklaf/decorators/CellRenderer.java | 4 - .../decorators/ComponentResizeListener.java | 50 --- .../decorators/LayoutManagerDelegate.java | 65 ---- .../decorators/MouseClickListener.java | 49 --- .../weis/darklaf/icons/DarkUIAwareIcon.java | 137 -------- .../com/weis/darklaf/icons/ThemedSVGIcon.java | 34 -- .../com/weis/darklaf/icons/UIAwareIcon.java | 11 - .../com/weis/darklaf/theme/DarculaTheme.java | 24 -- .../com/weis/darklaf/theme/IntelliJTheme.java | 44 --- .../weis/darklaf/ui/cell/DarkCellBorder.java | 14 - .../ui/checkbox/DarkCheckBoxBorder.java | 50 --- .../ui/colorchooser/ColorListener.java | 32 -- .../internalframe/DarkDesktopIconBorder.java | 17 - .../weis/darklaf/ui/label/DarkLabelUI.java | 20 -- .../darklaf/ui/list/DarkListCellBorder.java | 9 - .../ui/progressbar/DarkProgressBarBorder.java | 13 - .../ui/radiobutton/DarkRadioButtonBorder.java | 51 --- .../darklaf/ui/rootpane/CloseButtonUI.java | 28 -- .../darklaf/ui/rootpane/TitlePaneIcon.java | 46 --- .../weis/darklaf/ui/text/DarkTextPaneUI.java | 47 --- .../java/com/weis/darklaf/util/TimerUtil.java | 35 -- .../DarkHighlightPainter.java | 4 +- .../pbjar/jxlayer/plaf/ext/TransformUI.java | 2 +- .../plaf/ext/transform/TransformRPMImpl.java | 2 +- .../jxlayer/repaint/RepaintManagerUtils.java | 2 +- .../weisj}/darklaf/icons/control/checkBox.svg | 0 .../icons/control/checkBoxDisabled.svg | 0 .../darklaf/icons/control/checkBoxFocused.svg | 0 .../control/checkBoxIndeterminateSelected.svg | 0 .../checkBoxIndeterminateSelectedDisabled.svg | 0 .../checkBoxIndeterminateSelectedFocused.svg | 0 .../icons/control/checkBoxSelected.svg | 0 .../control/checkBoxSelectedDisabled.svg | 0 .../icons/control/checkBoxSelectedFocused.svg | 0 .../weisj}/darklaf/icons/control/radio.svg | 0 .../darklaf/icons/control/radioDisabled.svg | 0 .../darklaf/icons/control/radioFocused.svg | 0 .../darklaf/icons/control/radioSelected.svg | 0 .../icons/control/radioSelectedDisabled.svg | 0 .../icons/control/radioSelectedFocused.svg | 0 .../darklaf/icons/dark/dialog/errorDialog.svg | 0 .../icons/dark/dialog/informationDialog.svg | 0 .../icons/dark/dialog/questionDialog.svg | 0 .../icons/dark/dialog/warningDialog.svg | 0 .../darklaf/icons/dark/files/desktop.svg | 0 .../weisj}/darklaf/icons/dark/files/drive.svg | 0 .../darklaf/icons/dark/files/folder.svg | 0 .../darklaf/icons/dark/files/general.svg | 0 .../darklaf/icons/dark/files/homeFolder.svg | 0 .../darklaf/icons/dark/files/newFolder.svg | 0 .../weisj}/darklaf/icons/dark/files/text.svg | 0 .../darklaf/icons/dark/files/unknown.svg | 0 .../darklaf/icons/dark/files/upFolder.svg | 0 .../weisj}/darklaf/icons/dark/frame/frame.svg | 0 .../icons/dark/indicator/speaker_0.svg | 0 .../icons/dark/indicator/speaker_1.svg | 0 .../icons/dark/indicator/speaker_2.svg | 0 .../icons/dark/indicator/speaker_3.svg | 0 .../icons/dark/indicator/speaker_4.svg | 0 .../weisj}/darklaf/icons/dark/menu/copy.svg | 0 .../weisj}/darklaf/icons/dark/menu/cut.svg | 0 .../weisj}/darklaf/icons/dark/menu/delete.svg | 0 .../weisj}/darklaf/icons/dark/menu/down.svg | 0 .../darklaf/icons/dark/menu/groupBy.svg | 0 .../darklaf/icons/dark/menu/listFiles.svg | 0 .../weisj}/darklaf/icons/dark/menu/paste.svg | 0 .../weisj}/darklaf/icons/dark/menu/save.svg | 0 .../weisj}/darklaf/icons/dark/menu/up.svg | 0 .../weisj}/darklaf/icons/dark/menu/upDown.svg | 0 .../weisj}/darklaf/icons/dark/misc/minus.svg | 0 .../darklaf/icons/dark/misc/minusSelected.svg | 0 .../darklaf/icons/dark/misc/pipette.svg | 0 .../icons/dark/misc/pipette_rollover.svg | 0 .../weisj}/darklaf/icons/dark/misc/plus.svg | 0 .../darklaf/icons/dark/misc/plusSelected.svg | 0 .../darklaf/icons/dark/navigation/add.svg | 0 .../icons/dark/navigation/arrowDivider.svg | 0 .../icons/dark/navigation/arrowDown.svg | 0 .../icons/dark/navigation/arrowDownHover.svg | 0 .../dark/navigation/arrowDownSelected.svg | 0 .../icons/dark/navigation/arrowLeft.svg | 0 .../icons/dark/navigation/arrowLeftHover.svg | 0 .../dark/navigation/arrowLeftSelected.svg | 0 .../icons/dark/navigation/arrowRight.svg | 0 .../icons/dark/navigation/arrowRightHover.svg | 0 .../dark/navigation/arrowRightSelected.svg | 0 .../dark/navigation/arrowSplitCenterH.svg | 0 .../dark/navigation/arrowSplitCenterV.svg | 0 .../darklaf/icons/dark/navigation/arrowUp.svg | 0 .../icons/dark/navigation/arrowUpHover.svg | 0 .../icons/dark/navigation/arrowUpSelected.svg | 0 .../icons/dark/navigation/checkmark.svg | 0 .../dark/navigation/checkmarkDisabled.svg | 0 .../dark/navigation/checkmarkSelected.svg | 0 .../darklaf/icons/dark/navigation/clear.svg | 0 .../darklaf/icons/dark/navigation/close.svg | 0 .../icons/dark/navigation/closeHovered.svg | 0 .../icons/dark/navigation/collapse.svg | 0 .../darklaf/icons/dark/navigation/divider.svg | 0 .../darklaf/icons/dark/navigation/eye.svg | 0 .../icons/dark/navigation/horizontalGlue.svg | 0 .../icons/dark/navigation/horizontalGrip.svg | 0 .../icons/dark/navigation/moreTabs.svg | 0 .../dark/navigation/moveToBottomLeft.svg | 0 .../dark/navigation/moveToBottomRight.svg | 0 .../dark/navigation/moveToLeftBottom.svg | 0 .../icons/dark/navigation/moveToLeftTop.svg | 0 .../dark/navigation/moveToRightBottom.svg | 0 .../icons/dark/navigation/moveToRightTop.svg | 0 .../icons/dark/navigation/moveToTopLeft.svg | 0 .../icons/dark/navigation/moveToTopRight.svg | 0 .../darklaf/icons/dark/navigation/search.svg | 0 .../dark/navigation/searchWithHistory.svg | 0 .../icons/dark/navigation/separatorH.svg | 0 .../icons/dark/navigation/separatorV.svg | 0 .../icons/dark/navigation/verticalGlue.svg | 0 .../icons/dark/navigation/verticalGrip.svg | 0 .../darklaf/icons/dark/window/closeActive.svg | 0 .../darklaf/icons/dark/window/closeHover.svg | 0 .../icons/dark/window/closeInactive.svg | 0 .../weisj}/darklaf/icons/dark/window/help.svg | 0 .../icons/dark/window/helpInactive.svg | 0 .../darklaf/icons/dark/window/maximize.svg | 0 .../icons/dark/window/maximizeInactive.svg | 0 .../darklaf/icons/dark/window/minimize.svg | 0 .../icons/dark/window/minimizeInactive.svg | 0 .../darklaf/icons/dark/window/restore.svg | 0 .../icons/dark/window/restoreInactive.svg | 0 .../weisj}/darklaf/icons/duke.svg | 0 .../icons/light/dialog/errorDialog.svg | 0 .../icons/light/dialog/informationDialog.svg | 0 .../icons/light/dialog/questionDialog.svg | 0 .../icons/light/dialog/warningDialog.svg | 0 .../darklaf/icons/light/files/desktop.svg | 0 .../darklaf/icons/light/files/drive.svg | 0 .../darklaf/icons/light/files/folder.svg | 0 .../darklaf/icons/light/files/general.svg | 0 .../darklaf/icons/light/files/homeFolder.svg | 0 .../darklaf/icons/light/files/newFolder.svg | 0 .../weisj}/darklaf/icons/light/files/text.svg | 0 .../darklaf/icons/light/files/unknown.svg | 0 .../darklaf/icons/light/files/upFolder.svg | 0 .../darklaf/icons/light/frame/frame.svg | 0 .../icons/light/indicator/speaker_0.svg | 0 .../icons/light/indicator/speaker_1.svg | 0 .../icons/light/indicator/speaker_2.svg | 0 .../icons/light/indicator/speaker_3.svg | 0 .../icons/light/indicator/speaker_4.svg | 0 .../weisj}/darklaf/icons/light/menu/copy.svg | 0 .../weisj}/darklaf/icons/light/menu/cut.svg | 0 .../darklaf/icons/light/menu/delete.svg | 0 .../weisj}/darklaf/icons/light/menu/down.svg | 0 .../darklaf/icons/light/menu/groupBy.svg | 0 .../darklaf/icons/light/menu/listFiles.svg | 0 .../weisj}/darklaf/icons/light/menu/paste.svg | 0 .../weisj}/darklaf/icons/light/menu/save.svg | 0 .../weisj}/darklaf/icons/light/menu/up.svg | 0 .../darklaf/icons/light/menu/upDown.svg | 0 .../weisj}/darklaf/icons/light/misc/minus.svg | 0 .../icons/light/misc/minusSelected.svg | 0 .../darklaf/icons/light/misc/pipette.svg | 0 .../icons/light/misc/pipette_rollover.svg | 0 .../weisj}/darklaf/icons/light/misc/plus.svg | 0 .../darklaf/icons/light/misc/plusSelected.svg | 0 .../darklaf/icons/light/navigation/add.svg | 0 .../icons/light/navigation/arrowDivider.svg | 0 .../icons/light/navigation/arrowDown.svg | 0 .../icons/light/navigation/arrowDownHover.svg | 0 .../light/navigation/arrowDownSelected.svg | 0 .../icons/light/navigation/arrowLeft.svg | 0 .../icons/light/navigation/arrowLeftHover.svg | 0 .../light/navigation/arrowLeftSelected.svg | 0 .../icons/light/navigation/arrowRight.svg | 0 .../light/navigation/arrowRightHover.svg | 0 .../light/navigation/arrowRightSelected.svg | 0 .../light/navigation/arrowSplitCenterH.svg | 0 .../light/navigation/arrowSplitCenterV.svg | 0 .../icons/light/navigation/arrowUp.svg | 0 .../icons/light/navigation/arrowUpHover.svg | 0 .../light/navigation/arrowUpSelected.svg | 0 .../icons/light/navigation/checkmark.svg | 0 .../light/navigation/checkmarkDisabled.svg | 0 .../light/navigation/checkmarkSelected.svg | 0 .../darklaf/icons/light/navigation/clear.svg | 0 .../darklaf/icons/light/navigation/close.svg | 0 .../icons/light/navigation/closeHovered.svg | 0 .../icons/light/navigation/collapse.svg | 0 .../icons/light/navigation/divider.svg | 0 .../darklaf/icons/light/navigation/eye.svg | 0 .../icons/light/navigation/horizontalGlue.svg | 0 .../icons/light/navigation/horizontalGrip.svg | 0 .../icons/light/navigation/moreTabs.svg | 0 .../light/navigation/moveToBottomLeft.svg | 0 .../light/navigation/moveToBottomRight.svg | 0 .../light/navigation/moveToLeftBottom.svg | 0 .../icons/light/navigation/moveToLeftTop.svg | 0 .../light/navigation/moveToRightBottom.svg | 0 .../icons/light/navigation/moveToRightTop.svg | 0 .../icons/light/navigation/moveToTopLeft.svg | 0 .../icons/light/navigation/moveToTopRight.svg | 0 .../darklaf/icons/light/navigation/search.svg | 0 .../light/navigation/searchWithHistory.svg | 0 .../icons/light/navigation/separatorH.svg | 0 .../icons/light/navigation/separatorV.svg | 0 .../darklaf/icons/light/navigation/undo.svg | 0 .../icons/light/navigation/undo_inactive.svg | 0 .../icons/light/navigation/verticalGlue.svg | 0 .../icons/light/navigation/verticalGrip.svg | 0 .../icons/light/window/closeActive.svg | 0 .../darklaf/icons/light/window/closeHover.svg | 0 .../icons/light/window/closeInactive.svg | 0 .../darklaf/icons/light/window/help.svg | 0 .../icons/light/window/helpInactive.svg | 0 .../darklaf/icons/light/window/maximize.svg | 0 .../icons/light/window/maximizeInactive.svg | 0 .../darklaf/icons/light/window/minimize.svg | 0 .../icons/light/window/minimizeInactive.svg | 0 .../darklaf/icons/light/window/restore.svg | 0 .../icons/light/window/restoreInactive.svg | 0 .../weisj}/darklaf/icons/shadow/bottom.svg | 0 .../darklaf/icons/shadow/bottomLeft.svg | 0 .../darklaf/icons/shadow/bottomRight.svg | 0 .../weisj}/darklaf/icons/shadow/left.svg | 0 .../weisj}/darklaf/icons/shadow/right.svg | 0 .../weisj}/darklaf/icons/shadow/top.svg | 0 .../weisj}/darklaf/icons/shadow/topLeft.svg | 0 .../weisj}/darklaf/icons/shadow/topRight.svg | 0 .../weisj/darklaf/log/logging.properties | 30 ++ .../darklaf/properties/globals.properties | 0 .../properties/platform/linux.properties | 0 .../properties/platform/mac.properties | 0 .../properties/platform/windows.properties | 0 .../darklaf/properties/ui/borders.properties | 26 ++ .../darklaf/properties/ui/button.properties | 50 +++ .../darklaf/properties/ui/checkBox.properties | 40 +-- .../properties/ui/colorChooser.properties | 43 +++ .../darklaf/properties/ui/comboBox.properties | 43 +++ .../properties/ui/fileChooser.properties | 51 +++ .../properties/ui/internalFrame.properties | 58 ++++ .../darklaf/properties/ui/label.properties | 24 ++ .../darklaf/properties/ui/list.properties | 34 ++ .../darklaf/properties/ui/menu.properties | 35 ++ .../darklaf/properties/ui/menuBar.properties | 29 ++ .../darklaf/properties/ui/menuItem.properties | 51 +++ .../properties/ui/optionPane.properties | 35 ++ .../darklaf/properties/ui/panel.properties | 26 ++ .../properties/ui/popupMenu.properties | 27 ++ .../properties/ui/progressBar.properties | 39 +++ .../properties/ui/radioButton.properties | 45 +++ .../darklaf/properties/ui/rootPane.properties | 29 ++ .../properties/ui/scrollBar.properties | 31 ++ .../properties/ui/scrollPane.properties | 26 ++ .../properties/ui/separator.properties | 27 ++ .../darklaf/properties/ui/slider.properties | 38 +-- .../darklaf/properties/ui/spinner.properties | 47 +++ .../properties/ui/splitPane.properties | 38 +++ .../properties/ui/statusBar.properties | 26 ++ .../darklaf/properties/ui/tabFrame.properties | 15 +- .../properties/ui/tabbedPane.properties | 38 +-- .../darklaf/properties/ui/table.properties | 62 ++++ .../darklaf/properties/ui/taskPane.properties | 6 +- .../darklaf/properties/ui/text.properties | 54 +-- .../properties/ui/toggleButton.properties | 37 +++ .../darklaf/properties/ui/toolBar.properties | 36 ++ .../darklaf/properties/ui/toolTip.properties | 28 ++ .../darklaf/properties/ui/tree.properties | 40 +-- .../darklaf/properties/ui/tristate.properties | 24 ++ .../theme/darcula/darcula_defaults.properties | 0 .../theme/darcula/darcula_styleSheet.css | 0 .../intellij/intellij_defaults.properties | 0 .../theme/intellij/intellij_mac.properties | 0 .../theme/intellij/intellij_styleSheet.css | 0 .../theme/intellij/intellij_ui.properties | 0 .../solarized_dark_defaults.properties | 0 .../solarized_dark_styleSheet.css | 0 .../solarized_dark_ui.properties | 0 .../solarized_light_defaults.properties | 0 .../solarized_light_styleSheet.css | 0 .../solarized_light_ui.properties | 0 .../com/weis/darklaf/log/logging.properties | 7 - .../darklaf/properties/ui/borders.properties | 26 -- .../darklaf/properties/ui/button.properties | 50 --- .../properties/ui/colorChooser.properties | 43 --- .../darklaf/properties/ui/comboBox.properties | 43 --- .../properties/ui/fileChooser.properties | 51 --- .../properties/ui/internalFrame.properties | 58 ---- .../darklaf/properties/ui/label.properties | 24 -- .../darklaf/properties/ui/list.properties | 34 -- .../darklaf/properties/ui/menu.properties | 35 -- .../darklaf/properties/ui/menuBar.properties | 29 -- .../darklaf/properties/ui/menuItem.properties | 51 --- .../properties/ui/optionPane.properties | 35 -- .../darklaf/properties/ui/panel.properties | 26 -- .../properties/ui/popupMenu.properties | 27 -- .../properties/ui/progressBar.properties | 39 --- .../properties/ui/radioButton.properties | 45 --- .../darklaf/properties/ui/rootPane.properties | 29 -- .../properties/ui/scrollBar.properties | 31 -- .../properties/ui/scrollPane.properties | 26 -- .../properties/ui/separator.properties | 27 -- .../darklaf/properties/ui/spinner.properties | 47 --- .../properties/ui/splitPane.properties | 38 --- .../properties/ui/statusBar.properties | 26 -- .../darklaf/properties/ui/table.properties | 62 ---- .../properties/ui/toggleButton.properties | 37 --- .../darklaf/properties/ui/toolBar.properties | 36 -- .../darklaf/properties/ui/toolTip.properties | 28 -- .../darklaf/properties/ui/tristate.properties | 24 -- .../resources/library/x64/jniplatform.dll | Bin 2691861 -> 2691958 bytes .../resources/library/x86/jniplatform.dll | Bin 1683526 -> 1683623 bytes src/test/java/ColorChooserDemo.java | 2 +- src/test/java/ComboDemo.java | 2 +- src/test/java/DarklafDemo.java | 2 +- src/test/java/DnDTest.java | 2 +- src/test/java/FileChooserDemo.java | 2 +- src/test/java/GenerateColors.java | 2 +- src/test/java/InternalFrameDemo.java | 2 +- src/test/java/ListDemo.java | 2 +- src/test/java/SVGTest.java | 4 +- src/test/java/ScrollPaneDemo.java | 2 +- src/test/java/SplitPaneDemo.java | 2 +- src/test/java/TabFrameDemo.java | 14 +- src/test/java/TabbedPaneDemo.java | 4 +- src/test/java/TabbedPaneKeyboardShortcut.java | 2 +- src/test/java/TextDemo.java | 2 +- src/test/java/ToolBarDemo.java | 2 +- src/test/java/ToolTipDemo.java | 6 +- src/test/java/TreeDemo.java | 4 +- src/test/java/UIDemo.java | 10 +- src/test/java/UIManagerDefaults.java | 8 +- src/test/java/dialog/DialogDemo.java | 2 +- .../FormattedTextFieldDemo.java | 2 +- 594 files changed, 5205 insertions(+), 4417 deletions(-) delete mode 100644 gradle.properties create mode 100644 src/jniplatform/cpp/com_github_weisj_darklaf_platform_windows_JNIDecorations.h delete mode 100644 src/jniplatform/cpp/com_weis_darklaf_platform_windows_JNIDecorations.h rename src/main/java/com/{weis => github/weisj}/darklaf/DarkLaf.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/DarkLafInfo.java (97%) create mode 100644 src/main/java/com/github/weisj/darklaf/DarkMetalTheme.java rename src/main/java/com/{weis => github/weisj}/darklaf/LafManager.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/color/DarkColorModel.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/color/DarkColorModelCMYK.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/color/DarkColorModelHSB.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/color/DarkColorModelHSL.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/ArrowButton.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/ClosableTabComponent.java (69%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/ClosableTabbedPane.java (71%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/ColorPipetteBase.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/DefaultColorPipette.java (84%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/Disposable.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/JXPopupMenu.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/SelectableTreeNode.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/ShadowButton.java (97%) create mode 100644 src/main/java/com/github/weisj/darklaf/components/TabEvent.java create mode 100644 src/main/java/com/github/weisj/darklaf/components/TabListener.java create mode 100644 src/main/java/com/github/weisj/darklaf/components/TabPropertyChangeEvent.java rename src/main/java/com/{weis => github/weisj}/darklaf/components/alignment/Alignment.java (87%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/alignment/AlignmentHelper.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/alignment/AlignmentStrategy.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/border/BubbleBorder.java (88%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/border/DropShadowBorder.java (93%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/border/MutableLineBorder.java (61%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/JTabFrame.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/PanelPopup.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/PopupContainer.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabArea.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameContent.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameContentPane.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFramePopup.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameTab.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameTabContainer.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameTabLabel.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabFrameUI.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/TabbedPopup.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tabframe/ToggleSplitPane.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/text/SearchEvent.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/text/SearchListener.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/text/SearchTextField.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/text/SearchTextFieldWithHistory.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/DarkToolTip.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/ToolTipContext.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/ToolTipListener.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/ToolTipStyle.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/TooltipAwareButton.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tooltip/TooltipAwareToggleButton.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tristate/TristateButtonModel.java (57%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/tristate/TristateCheckBox.java (69%) create mode 100644 src/main/java/com/github/weisj/darklaf/components/tristate/TristateState.java rename src/main/java/com/{weis => github/weisj}/darklaf/components/uiresource/Insets2D.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/uiresource/JLabelUIResource.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/uiresource/JPanelUIResource.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/components/uiresource/UIResourceWrapper.java (96%) create mode 100644 src/main/java/com/github/weisj/darklaf/decorators/AncestorAdapter.java create mode 100644 src/main/java/com/github/weisj/darklaf/decorators/CellRenderer.java rename src/main/java/com/{weis => github/weisj}/darklaf/decorators/HoverListener.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/decorators/MouseResponder.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/decorators/PlainAction.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/decorators/PopupMenuAdapter.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/DarkSVGIcon.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/EmptyIcon.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/IconColorMapper.java (65%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/IconLoader.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/LazyIcon.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/LazyImageIcon.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/icons/RotatableIcon.java (97%) create mode 100644 src/main/java/com/github/weisj/darklaf/icons/ThemedSVGIcon.java create mode 100644 src/main/java/com/github/weisj/darklaf/icons/UIAwareIcon.java rename src/main/java/com/{weis => github/weisj}/darklaf/log/LogFormatter.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/platform/NativeUtil.java (80%) rename src/main/java/com/{weis => github/weisj}/darklaf/platform/windows/JNIDecorations.java (67%) rename src/main/java/com/{weis/darklaf/decorators/MouseMovementListener.java => github/weisj/darklaf/theme/DarculaTheme.java} (78%) create mode 100644 src/main/java/com/github/weisj/darklaf/theme/IntelliJTheme.java rename src/main/java/com/{weis => github/weisj}/darklaf/theme/SolarizedDarkTheme.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/theme/SolarizedLightTheme.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/theme/Theme.java (77%) rename src/main/java/com/{weis => github/weisj}/darklaf/theme/UnsupportedThemeException.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/button/DarkButtonBorder.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/button/DarkButtonUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/button/DarkToggleButtonUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/cell/CellEditorToggleButton.java (96%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/cell/DarkCellRendererToggleButton.java (95%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java (69%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/checkbox/DarkCheckBoxUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorPipette.java (89%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorPreviewComponent.java (54%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorValueFormatter.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorWheel.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorWheelImageProducer.java (70%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/ColorWheelPanel.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/DarkColorChooserPanel.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/DarkColorChooserUI.java (93%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/DarkPreviewPanel.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/MainSwatchPanel.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/RecentSwatchPanel.java (53%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/SlideComponent.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/colorchooser/SwatchPanel.java (84%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/combobox/DarkComboBoxUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/combobox/DarkComboPopup.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/DarkFileChooserUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/DarkFileChooserUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/DarkFilePane.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/DarkFilePaneUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/filechooser/FileTextField.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/html/DarkHTML.java (98%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/internalframe/DarkDesktopIconUI.java (74%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/internalframe/DarkInternalFrameBorder.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java (90%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/internalframe/DarkInternalFrameUI.java (97%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java create mode 100644 src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/list/DarkListCellFocusBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/list/DarkListCellRenderer.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/list/DarkListUI.java (87%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/list/DarkListUIBridge.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkMenuBarBorder.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkMenuBarUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkMenuItemBorder.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkMenuItemUIBase.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkMenuUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkPopupMenuBorder.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/menu/DarkPopupMenuUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/optionpane/DarkOptionPaneUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/panel/DarkPanelUI.java (97%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/progressbar/DarkProgressBarUI.java (90%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonBorder.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/radiobutton/DarkRadioButtonUI.java (96%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/rootpane/CloseButtonUI.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/rootpane/DarkRootPaneUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/rootpane/DarkTitlePane.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/rootpane/SubstanceRootLayout.java (85%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/rootpane/TitlePaneIcon.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/scrollpane/DarkScrollBarUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/scrollpane/DarkScrollPaneUI.java (84%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java (68%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/separator/DarkSeparatorUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/slider/DarkSliderUI.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/spinner/DarkSpinnerBorder.java (73%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/spinner/DarkSpinnerUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/splitpane/DarkSplitPaneBorder.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/splitpane/DarkSplitPaneDivider.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/splitpane/DarkSplitPaneUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/statusbar/DarkStatusBarUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkHandler.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkScrollHandler.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkTabAreaButton.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/MoreTabsButton.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/NewTabButton.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/ScrollableTabPanel.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/ScrollableTabSupport.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/ScrollableTabViewport.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/TabbedPaneHandler.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/TabbedPaneLayout.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabbedpane/TabbedPaneUtil.java (90%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkPanelPopupUI.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFrameTabBorder.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabFrameUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/DarkTabbedPopupUI.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/TabDragListener.java (93%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/TabFrameLayout.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tabframe/TabFrameTransferHandler.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkColorTableCellRendererEditor.java (65%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableBorder.java (93%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableCellBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableCellEditor.java (90%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableCellEditorToggleButton.java (69%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableCellFocusBorder.java (57%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableCellRenderer.java (76%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableHeaderBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableHeaderCorner.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableHeaderUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableHeaderUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableUI.java (94%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/DarkTableUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/TableUIBridge.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/table/TextFieldTableCellEditorBorder.java (69%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/taskpane/DarkTaskPaneUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkCaret.java (90%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkEditorPaneUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkFormattedTextFieldUI.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkPasswordFieldUI.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkPasswordFieldUIBridge.java (65%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkTextAreaUI.java (90%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkTextBorder.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkTextFieldUI.java (88%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkTextFieldUIBridge.java (92%) create mode 100644 src/main/java/com/github/weisj/darklaf/ui/text/DarkTextPaneUI.java rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/DarkTextUI.java (88%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/SelectLineAction.java (78%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/text/SelectWordAction.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/titledborder/DarkTitledBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/toolbar/DarkToolBarBorder.java (69%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/toolbar/DarkToolBarUI.java (89%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/toolbar/DarkToolBarUIBridge.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/toolbar/DropPreviewPanel.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java (92%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tooltip/DarkTooltipBorder.java (78%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tooltip/DarkTooltipUI.java (87%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/DarkDefaultTreeEditor.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/DarkTreeCellBorder.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/DarkTreeCellEditor.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/DarkTreeCellRenderer.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/DarkTreeUI.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/TreeCellEditorDelegate.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/TreeRendererComponent.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tree/TreeRendererSupport.java (96%) rename src/main/java/com/{weis => github/weisj}/darklaf/ui/tristate/DarkTristateCheckBoxUI.java (52%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/Animator.java (81%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/ColorUtil.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/DarkUIUtil.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/GraphicsContext.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/GraphicsUtil.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/ImageUtil.java (95%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/LazyActionMap.java (78%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/Pair.java (97%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/PropertyLoader.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/StringUtil.java (99%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/SwingXUtilities.java (98%) rename src/main/java/com/{weis => github/weisj}/darklaf/util/SystemInfo.java (76%) create mode 100644 src/main/java/com/github/weisj/darklaf/util/TimerUtil.java delete mode 100644 src/main/java/com/weis/darklaf/DarkMetalTheme.java delete mode 100644 src/main/java/com/weis/darklaf/components/OverlayScrollPane.java delete mode 100644 src/main/java/com/weis/darklaf/components/ScrollPopupMenu.java delete mode 100644 src/main/java/com/weis/darklaf/components/TabEvent.java delete mode 100644 src/main/java/com/weis/darklaf/components/TabListener.java delete mode 100644 src/main/java/com/weis/darklaf/components/TabPropertyChangeEvent.java delete mode 100644 src/main/java/com/weis/darklaf/components/text/TextFieldHistoryPopup.java delete mode 100644 src/main/java/com/weis/darklaf/components/tristate/TristateState.java delete mode 100644 src/main/java/com/weis/darklaf/decorators/AncestorAdapter.java delete mode 100644 src/main/java/com/weis/darklaf/decorators/CellRenderer.java delete mode 100644 src/main/java/com/weis/darklaf/decorators/ComponentResizeListener.java delete mode 100644 src/main/java/com/weis/darklaf/decorators/LayoutManagerDelegate.java delete mode 100644 src/main/java/com/weis/darklaf/decorators/MouseClickListener.java delete mode 100644 src/main/java/com/weis/darklaf/icons/DarkUIAwareIcon.java delete mode 100644 src/main/java/com/weis/darklaf/icons/ThemedSVGIcon.java delete mode 100644 src/main/java/com/weis/darklaf/icons/UIAwareIcon.java delete mode 100644 src/main/java/com/weis/darklaf/theme/DarculaTheme.java delete mode 100644 src/main/java/com/weis/darklaf/theme/IntelliJTheme.java delete mode 100644 src/main/java/com/weis/darklaf/ui/cell/DarkCellBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/colorchooser/ColorListener.java delete mode 100644 src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/label/DarkLabelUI.java delete mode 100644 src/main/java/com/weis/darklaf/ui/list/DarkListCellBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonBorder.java delete mode 100644 src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java delete mode 100644 src/main/java/com/weis/darklaf/ui/rootpane/TitlePaneIcon.java delete mode 100644 src/main/java/com/weis/darklaf/ui/text/DarkTextPaneUI.java delete mode 100644 src/main/java/com/weis/darklaf/util/TimerUtil.java rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBox.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxFocused.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxIndeterminateSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxIndeterminateSelectedDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxIndeterminateSelectedFocused.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxSelectedDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/checkBoxSelectedFocused.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radio.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radioDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radioFocused.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radioSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radioSelectedDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/control/radioSelectedFocused.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/dialog/errorDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/dialog/informationDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/dialog/questionDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/dialog/warningDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/desktop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/drive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/folder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/general.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/homeFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/newFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/text.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/unknown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/files/upFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/frame/frame.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/indicator/speaker_0.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/indicator/speaker_1.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/indicator/speaker_2.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/indicator/speaker_3.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/indicator/speaker_4.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/copy.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/cut.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/delete.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/down.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/groupBy.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/listFiles.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/paste.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/save.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/up.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/menu/upDown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/minus.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/minusSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/pipette.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/pipette_rollover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/plus.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/misc/plusSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/add.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowDivider.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowDown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowDownHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowDownSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowLeftHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowLeftSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowRightHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowRightSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowSplitCenterH.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowSplitCenterV.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowUp.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowUpHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/arrowUpSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/checkmark.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/checkmarkDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/checkmarkSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/clear.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/close.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/closeHovered.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/collapse.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/divider.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/eye.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/horizontalGlue.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/horizontalGrip.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moreTabs.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToBottomLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToBottomRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToLeftBottom.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToLeftTop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToRightBottom.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToRightTop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToTopLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/moveToTopRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/search.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/searchWithHistory.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/separatorH.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/separatorV.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/verticalGlue.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/navigation/verticalGrip.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/closeActive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/closeHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/closeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/help.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/helpInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/maximize.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/maximizeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/minimize.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/minimizeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/restore.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/dark/window/restoreInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/duke.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/dialog/errorDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/dialog/informationDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/dialog/questionDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/dialog/warningDialog.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/desktop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/drive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/folder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/general.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/homeFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/newFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/text.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/unknown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/files/upFolder.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/frame/frame.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/indicator/speaker_0.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/indicator/speaker_1.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/indicator/speaker_2.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/indicator/speaker_3.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/indicator/speaker_4.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/copy.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/cut.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/delete.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/down.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/groupBy.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/listFiles.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/paste.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/save.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/up.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/menu/upDown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/minus.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/minusSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/pipette.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/pipette_rollover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/plus.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/misc/plusSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/add.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowDivider.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowDown.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowDownHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowDownSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowLeftHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowLeftSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowRightHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowRightSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowSplitCenterH.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowSplitCenterV.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowUp.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowUpHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/arrowUpSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/checkmark.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/checkmarkDisabled.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/checkmarkSelected.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/clear.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/close.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/closeHovered.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/collapse.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/divider.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/eye.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/horizontalGlue.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/horizontalGrip.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moreTabs.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToBottomLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToBottomRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToLeftBottom.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToLeftTop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToRightBottom.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToRightTop.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToTopLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/moveToTopRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/search.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/searchWithHistory.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/separatorH.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/separatorV.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/undo.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/undo_inactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/verticalGlue.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/navigation/verticalGrip.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/closeActive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/closeHover.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/closeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/help.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/helpInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/maximize.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/maximizeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/minimize.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/minimizeInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/restore.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/light/window/restoreInactive.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/bottom.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/bottomLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/bottomRight.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/left.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/right.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/top.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/topLeft.svg (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/icons/shadow/topRight.svg (100%) create mode 100644 src/main/resources/com/github/weisj/darklaf/log/logging.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/globals.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/platform/linux.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/platform/mac.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/platform/windows.properties (100%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/borders.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/button.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/checkBox.properties (53%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/colorChooser.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/comboBox.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/fileChooser.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/internalFrame.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/label.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/list.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/menu.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/menuBar.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/menuItem.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/optionPane.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/panel.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/popupMenu.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/progressBar.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/radioButton.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/rootPane.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/scrollBar.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/scrollPane.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/separator.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/slider.properties (60%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/spinner.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/splitPane.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/statusBar.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/tabFrame.properties (85%) rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/tabbedPane.properties (51%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/table.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/taskPane.properties (85%) rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/text.properties (60%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/toggleButton.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/toolBar.properties create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/toolTip.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/properties/ui/tree.properties (61%) create mode 100644 src/main/resources/com/github/weisj/darklaf/properties/ui/tristate.properties rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/darcula/darcula_defaults.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/darcula/darcula_styleSheet.css (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/intellij/intellij_defaults.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/intellij/intellij_mac.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/intellij/intellij_styleSheet.css (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/intellij/intellij_ui.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_dark/solarized_dark_defaults.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_dark/solarized_dark_styleSheet.css (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_dark/solarized_dark_ui.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_light/solarized_light_defaults.properties (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_light/solarized_light_styleSheet.css (100%) rename src/main/resources/com/{weis => github/weisj}/darklaf/theme/solarized_light/solarized_light_ui.properties (100%) delete mode 100644 src/main/resources/com/weis/darklaf/log/logging.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/borders.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/button.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/comboBox.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/fileChooser.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/internalFrame.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/label.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/list.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/menu.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/menuItem.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/optionPane.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/panel.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/popupMenu.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/progressBar.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/radioButton.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/rootPane.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/scrollBar.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/scrollPane.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/separator.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/spinner.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/splitPane.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/statusBar.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/table.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/toggleButton.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/toolBar.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/toolTip.properties delete mode 100644 src/main/resources/com/weis/darklaf/properties/ui/tristate.properties diff --git a/.gitignore b/.gitignore index 8f468ec3..ea767709 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ venv/ # Windows Thumbs.db /.recommenders/ +/key.gpg diff --git a/build.gradle b/build.gradle index 1d449bfe..3953f81d 100644 --- a/build.gradle +++ b/build.gradle @@ -4,6 +4,7 @@ plugins { id 'com.github.johnrengelman.shadow' version '5.1.0' id 'java' id 'maven-publish' + id 'signing' id 'idea' id 'cpp' } @@ -25,26 +26,61 @@ dependencies { testCompile 'org.swinglabs:swingx:1.6.1' } - -group = 'com.weis' -version = '1.3' - task sourceJar(type: Jar, dependsOn: classes) { classifier 'sources' from sourceSets.main.allSource } +artifacts { + archives jar + archives sourceJar +} + +signing { + sign configurations.archives +} publishing { publications { - maven(MavenPublication) { + mavenJava(MavenPublication) { + customizePom(pom) + groupId = 'com.github.weisj' + artifactId 'darklaf' + version = '1.3' + from components.java - artifact tasks.sourceJar + + // create the sign pom artifact + pom.withXml { + def pomFile = file("${project.buildDir}/generated-pom.xml") + writeTo(pomFile) + def pomAscFile = signing.sign(pomFile).signatureFiles[0] + artifact(pomAscFile) { + classifier = null + extension = 'pom.asc' + } + } + + artifact(sourceJar) { + classifier = 'sources' + } + + // create the signed artifacts + project.tasks.signArchives.signatureFiles.each { + artifact(it) { + def matcher = it.file =~ /-(sources|javadoc)\.jar\.asc$/ + if (matcher.find()) { + classifier = matcher.group(1) + } else { + classifier = null + } + extension = 'jar.asc' + } + } } } repositories { maven { - name 'deploy' url deployRepoUrl credentials { username = deployRepoUsername @@ -54,26 +90,81 @@ publishing { } } -println "Building on OS: " + System.properties['os.name'] -println "Using JDK: " + System.properties['java.home'] +def customizePom(pom) { + pom.withXml { + def root = asNode() -model { - platforms { - x86 { - architecture 'x86' + // eliminate test-scoped dependencies (no need in maven central POMs) + root.dependencies.removeAll { dep -> + dep.scope == "test" } - x64 { - architecture 'x86_64' + + // add all items necessary for maven central publication + root.children().last() + { + resolveStrategy = DELEGATE_FIRST + + description 'A themeable Look and Feel for java swing.' + name 'Darklaf' + url 'https://github.com/mautini/schemaorg-java' + organization { + name 'com.github.weisj' + url 'https://github.com/weisj' + } + issueManagement { + system 'GitHub' + url 'https://github.com/weisJ/darklaf/issues' + } + licenses { + license { + name 'MIT' + url 'https://github.com/weisJ/darklaf/blob/master/licence/LICENSE' + distribution 'repo' + } + } + scm { + url 'https://github.com/weisJ/darklaf' + connection 'scm:git:git://github.com/weisJ/darklaf.git' + developerConnection 'scm:git:ssh://git@github.com:weisj/darklaf.git' + } + developers { + developer { + name 'Jannis Weis' + } + } } } } +model { + tasks.generatePomFileForMavenJavaPublication { + destination = file("$buildDir/generated-pom.xml") + } + tasks.publishMavenJavaPublicationToMavenLocal { + dependsOn project.tasks.signArchives + } + tasks.publishMavenJavaPublicationToMavenRepository { + dependsOn project.tasks.signArchives + } +} + +println "Building on OS: " + System.properties['os.name'] +println "Using JDK: " + System.properties['java.home'] + + compileJava { sourceCompatibility = 11 targetCompatibility = 11 } model { + platforms { + x86 { + architecture 'x86' + } + x64 { + architecture 'x86_64' + } + } components { jniplatform(NativeLibrarySpec) { targetPlatform "x86" diff --git a/darklaf.iml b/darklaf.iml index 036d1459..262850f0 100644 --- a/darklaf.iml +++ b/darklaf.iml @@ -1,5 +1,5 @@ - + diff --git a/gradle.properties b/gradle.properties deleted file mode 100644 index f435f9f0..00000000 --- a/gradle.properties +++ /dev/null @@ -1,5 +0,0 @@ -org.gradle.warning.mode = all -externalVersion = 1.0-SNAPSHOT -deployRepoUrl = https://my-repo.com/maven-snapshots -deployRepoUsername = your-username -deployRepoPassword = your-password \ No newline at end of file diff --git a/src/jniplatform/cpp/JNIDecorations.cpp b/src/jniplatform/cpp/JNIDecorations.cpp index 7dd05e57..aaa4526e 100644 --- a/src/jniplatform/cpp/JNIDecorations.cpp +++ b/src/jniplatform/cpp/JNIDecorations.cpp @@ -22,7 +22,7 @@ * SOFTWARE. */ #include "JNIDecorations.h"; -#include "com_weis_darklaf_platform_windows_JNIDecorations.h" +#include "com_github_weisj_darklaf_platform_windows_JNIDecorations.h" #include #include #include @@ -120,7 +120,7 @@ LRESULT CALLBACK WindowWrapper::WindowProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_setResizable(JNIEnv *env, jclass obj, jlong hwnd, jboolean res) +JJava_com_github_weisj_darklaf_platform_windows_JNIDecorations_setResizable(JNIEnv *env, jclass obj, jlong hwnd, jboolean res) { HWND handle = reinterpret_cast(hwnd); auto wrap = wrapper_map[handle]; @@ -131,7 +131,7 @@ Java_com_weis_darklaf_platform_windows_JNIDecorations_setResizable(JNIEnv *env, } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_updateValues(JNIEnv *env, jclass obj, jlong hwnd, +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_updateValues(JNIEnv *env, jclass obj, jlong hwnd, jint l, jint r, jint h) { HWND handle = reinterpret_cast(hwnd); @@ -145,7 +145,7 @@ Java_com_weis_darklaf_platform_windows_JNIDecorations_updateValues(JNIEnv *env, } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_setBackground(JNIEnv *env, jclass obj, jlong hwnd, jint r, jint g, jint b) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_setBackground(JNIEnv *env, jclass obj, jlong hwnd, jint r, jint g, jint b) { HWND handle = reinterpret_cast(hwnd); auto wrap = wrapper_map[handle]; @@ -156,7 +156,7 @@ Java_com_weis_darklaf_platform_windows_JNIDecorations_setBackground(JNIEnv *env, } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_installDecorations(JNIEnv *env, jclass obj, jlong hwnd) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_installDecorations(JNIEnv *env, jclass obj, jlong hwnd) { HWND handle = reinterpret_cast(hwnd); @@ -184,7 +184,7 @@ Java_com_weis_darklaf_platform_windows_JNIDecorations_installDecorations(JNIEnv } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_uninstallDecorations(JNIEnv *env, jclass obj, jlong hwnd) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_uninstallDecorations(JNIEnv *env, jclass obj, jlong hwnd) { HWND handle = reinterpret_cast(hwnd); auto wrap = wrapper_map[handle]; @@ -199,21 +199,21 @@ Java_com_weis_darklaf_platform_windows_JNIDecorations_uninstallDecorations(JNIEn //Window functions. JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_minimize(JNIEnv *env, jclass obj, jlong hwnd) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_minimize(JNIEnv *env, jclass obj, jlong hwnd) { HWND handle = reinterpret_cast(hwnd); ShowWindow(handle, SW_MINIMIZE); } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_maximize(JNIEnv *env, jclass obj, jlong hwnd) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_maximize(JNIEnv *env, jclass obj, jlong hwnd) { HWND handle = reinterpret_cast(hwnd); ShowWindow(handle, SW_MAXIMIZE); } JNIEXPORT void JNICALL -Java_com_weis_darklaf_platform_windows_JNIDecorations_restore(JNIEnv *env, jclass obj, jlong hwnd) +Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_restore(JNIEnv *env, jclass obj, jlong hwnd) { HWND handle = reinterpret_cast(hwnd); ShowWindow(handle, SW_RESTORE); diff --git a/src/jniplatform/cpp/com_github_weisj_darklaf_platform_windows_JNIDecorations.h b/src/jniplatform/cpp/com_github_weisj_darklaf_platform_windows_JNIDecorations.h new file mode 100644 index 00000000..9c64201f --- /dev/null +++ b/src/jniplatform/cpp/com_github_weisj_darklaf_platform_windows_JNIDecorations.h @@ -0,0 +1,77 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class com_github_weisj_darklaf_platform_windows_JNIDecorations */ + +#ifndef _Included_com_github_weisj_darklaf_platform_windows_JNIDecorations +#define _Included_com_github_weisj_darklaf_platform_windows_JNIDecorations +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: updateValues + * Signature: (JIII)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_updateValues + (JNIEnv *, jclass, jlong, jint, jint, jint); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: setResizable + * Signature: (JZ)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_setResizable + (JNIEnv *, jclass, jlong, jboolean); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: setBackground + * Signature: (JIII)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_setBackground + (JNIEnv *, jclass, jlong, jint, jint, jint); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: minimize + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_minimize + (JNIEnv *, jclass, jlong); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: maximize + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_maximize + (JNIEnv *, jclass, jlong); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: restore + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_restore + (JNIEnv *, jclass, jlong); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: installDecorations + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_installDecorations + (JNIEnv *, jclass, jlong); + +/* + * Class: com_github_weisj_darklaf_platform_windows_JNIDecorations + * Method: uninstallDecorations + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_com_github_weisj_darklaf_platform_windows_JNIDecorations_uninstallDecorations + (JNIEnv *, jclass, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/jniplatform/cpp/com_weis_darklaf_platform_windows_JNIDecorations.h b/src/jniplatform/cpp/com_weis_darklaf_platform_windows_JNIDecorations.h deleted file mode 100644 index 5ec6dc86..00000000 --- a/src/jniplatform/cpp/com_weis_darklaf_platform_windows_JNIDecorations.h +++ /dev/null @@ -1,77 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include -/* Header for class com_weis_darklaf_platform_windows_JNIDecorations */ - -#ifndef _Included_com_weis_darklaf_platform_windows_JNIDecorations -#define _Included_com_weis_darklaf_platform_windows_JNIDecorations -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: updateValues - * Signature: (JIII)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_updateValues - (JNIEnv *, jclass, jlong, jint, jint, jint); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: setResizable - * Signature: (JZ)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_setResizable - (JNIEnv *, jclass, jlong, jboolean); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: setBackground - * Signature: (JIII)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_setBackground - (JNIEnv *, jclass, jlong, jint, jint, jint); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: minimize - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_minimize - (JNIEnv *, jclass, jlong); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: maximize - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_maximize - (JNIEnv *, jclass, jlong); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: restore - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_restore - (JNIEnv *, jclass, jlong); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: installDecorations - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_installDecorations - (JNIEnv *, jclass, jlong); - -/* - * Class: com_weis_darklaf_platform_windows_JNIDecorations - * Method: uninstallDecorations - * Signature: (J)V - */ -JNIEXPORT void JNICALL Java_com_weis_darklaf_platform_windows_JNIDecorations_uninstallDecorations - (JNIEnv *, jclass, jlong); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/main/java/com/weis/darklaf/DarkLaf.java b/src/main/java/com/github/weisj/darklaf/DarkLaf.java similarity index 97% rename from src/main/java/com/weis/darklaf/DarkLaf.java rename to src/main/java/com/github/weisj/darklaf/DarkLaf.java index 4ebdd6f2..165a6b6c 100644 --- a/src/main/java/com/weis/darklaf/DarkLaf.java +++ b/src/main/java/com/github/weisj/darklaf/DarkLaf.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf; +package com.github.weisj.darklaf; -import com.weis.darklaf.platform.windows.JNIDecorations; -import com.weis.darklaf.theme.Theme; -import com.weis.darklaf.ui.menu.DarkPopupMenuUI; -import com.weis.darklaf.util.PropertyLoader; -import com.weis.darklaf.util.SystemInfo; +import com.github.weisj.darklaf.platform.windows.JNIDecorations; +import com.github.weisj.darklaf.theme.Theme; +import com.github.weisj.darklaf.ui.menu.DarkPopupMenuUI; +import com.github.weisj.darklaf.util.PropertyLoader; +import com.github.weisj.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.awt.AppContext; @@ -94,12 +94,6 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener } } - @NotNull - @Override - public String getName() { - return NAME; - } - @Override public UIDefaults getDefaults() { try { @@ -129,6 +123,12 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener return super.getDefaults(); } + @NotNull + @Override + public String getName() { + return NAME; + } + @SuppressWarnings({"HardCodedStringLiteral"}) private static void initInputMapDefaults(@NotNull final UIDefaults defaults) { // Make ENTER work in JTrees @@ -167,12 +167,6 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener } } - @NotNull - @Override - public String getID() { - return getName(); - } - private void loadThemeDefaults(@NotNull final UIDefaults defaults) { var uiProps = new Properties(); final Theme currentTheme = LafManager.getTheme(); @@ -188,82 +182,6 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener setDecorationsEnabled(currentTheme.useCustomDecorations()); } - private static void patchComboBox(@NotNull final UIDefaults metalDefaults, @NotNull final UIDefaults defaults) { - defaults.remove("ComboBox.ancestorInputMap"); - defaults.remove("ComboBox.actionMap"); - defaults.put("ComboBox.ancestorInputMap", metalDefaults.get("ComboBox.ancestorInputMap")); - defaults.put("ComboBox.actionMap", metalDefaults.get("ComboBox.actionMap")); - } - - @NotNull - @Override - public String getDescription() { - return "Dark Look and feel based on Darcula-LAF"; - } - - private static void installCutCopyPasteShortcuts(@NotNull final InputMap inputMap, - final boolean useSimpleActionKeys) { - final String copyActionKey = useSimpleActionKeys ? "copy" : DefaultEditorKit.copyAction; - final String pasteActionKey = useSimpleActionKeys ? "paste" : DefaultEditorKit.pasteAction; - final String cutActionKey = useSimpleActionKeys ? "cut" : DefaultEditorKit.cutAction; - // Ctrl+Ins, Shift+Ins, Shift+Del - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.CTRL_DOWN_MASK), copyActionKey); - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.SHIFT_DOWN_MASK), pasteActionKey); - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.SHIFT_DOWN_MASK), cutActionKey); - // Ctrl+C, Ctrl+V, Ctrl+X - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK), copyActionKey); - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK), pasteActionKey); - inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK), DefaultEditorKit.cutAction); - } - - private void installGlobals(@NotNull final Properties uiProps, final UIDefaults defaults) { - final HashMap globalSettings = new HashMap<>(); - final String prefix = "global."; - for (final Object key : uiProps.keySet()) { - if (key instanceof String && ((String) key).startsWith(prefix)) { - globalSettings.put(((String) key).substring(prefix.length()), uiProps.get(key)); - } - } - - for (final Object key : defaults.keySet()) { - if (key instanceof String && ((String) key).contains(".")) { - final String s = (String) key; - final String globalKey = s.substring(s.lastIndexOf('.') + 1); - if (globalSettings.containsKey(globalKey)) { - defaults.put(key, globalSettings.get(globalKey)); - } - } - } - } - - @Override - public boolean isNativeLookAndFeel() { - return true; - } - - @Override - public void initialize() { - call("initialize"); - PropertyLoader.reset(); - UIManager.addPropertyChangeListener(this); - } - @Override - public void uninitialize() { - call("uninitialize"); - AppContext context = AppContext.getAppContext(); - synchronized (DarkPopupMenuUI.MOUSE_GRABBER_KEY) { - Object grabber = context.get(DarkPopupMenuUI.MOUSE_GRABBER_KEY); - if (grabber != null) { - ((DarkPopupMenuUI.MouseGrabber) grabber).uninstall(); - } - } - } - - @Override - public boolean isSupportedLookAndFeel() { - return true; - } - @SuppressWarnings({"HardCodedStringLiteral"}) private void initIdeaDefaults(@NotNull final UIDefaults defaults) { defaults.put("Table.ancestorInputMap", new UIDefaults.LazyInputMap( @@ -320,43 +238,93 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener })); } + @NotNull @Override - protected void initClassDefaults(final UIDefaults defaults) { - callInit("initClassDefaults", defaults); + public String getID() { + return getName(); } - @Override - protected void initSystemColorDefaults(final UIDefaults defaults) { - callInit("initSystemColorDefaults", defaults); + private static void patchComboBox(@NotNull final UIDefaults metalDefaults, @NotNull final UIDefaults defaults) { + defaults.remove("ComboBox.ancestorInputMap"); + defaults.remove("ComboBox.actionMap"); + defaults.put("ComboBox.ancestorInputMap", metalDefaults.get("ComboBox.ancestorInputMap")); + defaults.put("ComboBox.actionMap", metalDefaults.get("ComboBox.actionMap")); } - public void initComponentDefaults(final UIDefaults defaults) { - callInit("initComponentDefaults", defaults); + private static void installCutCopyPasteShortcuts(@NotNull final InputMap inputMap, + final boolean useSimpleActionKeys) { + final String copyActionKey = useSimpleActionKeys ? "copy" : DefaultEditorKit.copyAction; + final String pasteActionKey = useSimpleActionKeys ? "paste" : DefaultEditorKit.pasteAction; + final String cutActionKey = useSimpleActionKeys ? "cut" : DefaultEditorKit.cutAction; + // Ctrl+Ins, Shift+Ins, Shift+Del + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.CTRL_DOWN_MASK), copyActionKey); + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.SHIFT_DOWN_MASK), pasteActionKey); + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, InputEvent.SHIFT_DOWN_MASK), cutActionKey); + // Ctrl+C, Ctrl+V, Ctrl+X + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_DOWN_MASK), copyActionKey); + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_DOWN_MASK), pasteActionKey); + inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_DOWN_MASK), DefaultEditorKit.cutAction); } - @Override - public boolean getSupportsWindowDecorations() { - return LafManager.getTheme().useCustomDecorations() - && JNIDecorations.isCustomDecorationSupported(); - } + private void installGlobals(@NotNull final Properties uiProps, final UIDefaults defaults) { + final HashMap globalSettings = new HashMap<>(); + final String prefix = "global."; + for (final Object key : uiProps.keySet()) { + if (key instanceof String && ((String) key).startsWith(prefix)) { + globalSettings.put(((String) key).substring(prefix.length()), uiProps.get(key)); + } + } - @Override - public void propertyChange(@NotNull final PropertyChangeEvent evt) { - if ("lookAndFeel".equals(evt.getPropertyName())) { - if (UIManager.getLookAndFeel() == this) { - PropertyLoader.finish(); + for (final Object key : defaults.keySet()) { + if (key instanceof String && ((String) key).contains(".")) { + final String s = (String) key; + final String globalKey = s.substring(s.lastIndexOf('.') + 1); + if (globalSettings.containsKey(globalKey)) { + defaults.put(key, globalSettings.get(globalKey)); + } } - UIManager.removePropertyChangeListener(this); } } + @NotNull + @Override + public String getDescription() { + return "Dark Look and feel based on Darcula-LAF"; + } + @Override + public void initialize() { + call("initialize"); + PropertyLoader.reset(); + UIManager.addPropertyChangeListener(this); + } + @Override + public void uninitialize() { + call("uninitialize"); + AppContext context = AppContext.getAppContext(); + synchronized (DarkPopupMenuUI.MOUSE_GRABBER_KEY) { + Object grabber = context.get(DarkPopupMenuUI.MOUSE_GRABBER_KEY); + if (grabber != null) { + ((DarkPopupMenuUI.MouseGrabber) grabber).uninstall(); + } + } + } + @Override + protected void initClassDefaults(final UIDefaults defaults) { + callInit("initClassDefaults", defaults); + } + @Override + public boolean isNativeLookAndFeel() { + return true; + } - - + @Override + protected void initSystemColorDefaults(final UIDefaults defaults) { + callInit("initSystemColorDefaults", defaults); + } @Override protected void loadSystemColors(final UIDefaults defaults, final String[] systemColors, @@ -371,7 +339,14 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener } } + public void initComponentDefaults(final UIDefaults defaults) { + callInit("initComponentDefaults", defaults); + } + @Override + public boolean isSupportedLookAndFeel() { + return true; + } private void callInit(@NotNull final String method, final UIDefaults defaults) { try { @@ -393,5 +368,22 @@ public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener } } + @Override + public void propertyChange(@NotNull final PropertyChangeEvent evt) { + if ("lookAndFeel".equals(evt.getPropertyName())) { + if (UIManager.getLookAndFeel() == this) { + PropertyLoader.finish(); + } + UIManager.removePropertyChangeListener(this); + } + } + + + @Override + public boolean getSupportsWindowDecorations() { + return LafManager.getTheme().useCustomDecorations() + && JNIDecorations.isCustomDecorationSupported(); + } + } diff --git a/src/main/java/com/weis/darklaf/DarkLafInfo.java b/src/main/java/com/github/weisj/darklaf/DarkLafInfo.java similarity index 97% rename from src/main/java/com/weis/darklaf/DarkLafInfo.java rename to src/main/java/com/github/weisj/darklaf/DarkLafInfo.java index 0c9ba865..ce06a20b 100644 --- a/src/main/java/com/weis/darklaf/DarkLafInfo.java +++ b/src/main/java/com/github/weisj/darklaf/DarkLafInfo.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf; +package com.github.weisj.darklaf; import javax.swing.*; diff --git a/src/main/java/com/github/weisj/darklaf/DarkMetalTheme.java b/src/main/java/com/github/weisj/darklaf/DarkMetalTheme.java new file mode 100644 index 00000000..296c4818 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/DarkMetalTheme.java @@ -0,0 +1,36 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf; + +import javax.swing.plaf.metal.DefaultMetalTheme; + +/** + * @author Jannis Weis + */ +public class DarkMetalTheme extends DefaultMetalTheme { + public String getName() { + return "Darcula theme"; + } +} + diff --git a/src/main/java/com/weis/darklaf/LafManager.java b/src/main/java/com/github/weisj/darklaf/LafManager.java similarity index 94% rename from src/main/java/com/weis/darklaf/LafManager.java rename to src/main/java/com/github/weisj/darklaf/LafManager.java index e7a45f72..2bf06a60 100644 --- a/src/main/java/com/weis/darklaf/LafManager.java +++ b/src/main/java/com/github/weisj/darklaf/LafManager.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf; +package com.github.weisj.darklaf; -import com.weis.darklaf.theme.DarculaTheme; -import com.weis.darklaf.theme.IntelliJTheme; -import com.weis.darklaf.theme.Theme; +import com.github.weisj.darklaf.theme.DarculaTheme; +import com.github.weisj.darklaf.theme.IntelliJTheme; +import com.github.weisj.darklaf.theme.Theme; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -62,7 +62,7 @@ public final class LafManager { LogManager.getLogManager().reset(); } else { try (InputStream inputStream = DarkLaf.class.getClassLoader() - .getResourceAsStream("com/weis/darklaf/log/logging.properties")) { + .getResourceAsStream("com/github/weisj/darklaf/log/logging.properties")) { if (inputStream != null) { LogManager.getLogManager().readConfiguration(inputStream); } diff --git a/src/main/java/com/weis/darklaf/color/DarkColorModel.java b/src/main/java/com/github/weisj/darklaf/color/DarkColorModel.java similarity index 98% rename from src/main/java/com/weis/darklaf/color/DarkColorModel.java rename to src/main/java/com/github/weisj/darklaf/color/DarkColorModel.java index 31d91d62..4fd7dc23 100644 --- a/src/main/java/com/weis/darklaf/color/DarkColorModel.java +++ b/src/main/java/com/github/weisj/darklaf/color/DarkColorModel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.color; +package com.github.weisj.darklaf.color; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/color/DarkColorModelCMYK.java b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelCMYK.java similarity index 98% rename from src/main/java/com/weis/darklaf/color/DarkColorModelCMYK.java rename to src/main/java/com/github/weisj/darklaf/color/DarkColorModelCMYK.java index 8f7d7ace..0b73243b 100644 --- a/src/main/java/com/weis/darklaf/color/DarkColorModelCMYK.java +++ b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelCMYK.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.color; +package com.github.weisj.darklaf.color; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/color/DarkColorModelHSB.java b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSB.java similarity index 99% rename from src/main/java/com/weis/darklaf/color/DarkColorModelHSB.java rename to src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSB.java index c5165d14..fed83cb1 100644 --- a/src/main/java/com/weis/darklaf/color/DarkColorModelHSB.java +++ b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSB.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.color; +package com.github.weisj.darklaf.color; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/color/DarkColorModelHSL.java b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSL.java similarity index 99% rename from src/main/java/com/weis/darklaf/color/DarkColorModelHSL.java rename to src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSL.java index 043e1bd3..39ecef3a 100644 --- a/src/main/java/com/weis/darklaf/color/DarkColorModelHSL.java +++ b/src/main/java/com/github/weisj/darklaf/color/DarkColorModelHSL.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.color; +package com.github.weisj.darklaf.color; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/ArrowButton.java b/src/main/java/com/github/weisj/darklaf/components/ArrowButton.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/ArrowButton.java rename to src/main/java/com/github/weisj/darklaf/components/ArrowButton.java index f4ee8f53..4444f995 100644 --- a/src/main/java/com/weis/darklaf/components/ArrowButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/ArrowButton.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; -import com.weis.darklaf.icons.UIAwareIcon; +import com.github.weisj.darklaf.icons.UIAwareIcon; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/ClosableTabComponent.java b/src/main/java/com/github/weisj/darklaf/components/ClosableTabComponent.java similarity index 69% rename from src/main/java/com/weis/darklaf/components/ClosableTabComponent.java rename to src/main/java/com/github/weisj/darklaf/components/ClosableTabComponent.java index daee8f2d..8638762b 100644 --- a/src/main/java/com/weis/darklaf/components/ClosableTabComponent.java +++ b/src/main/java/com/github/weisj/darklaf/components/ClosableTabComponent.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.components; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; -import com.weis.darklaf.ui.tabbedpane.DarkTabbedPaneUI; +import com.github.weisj.darklaf.ui.tabbedpane.DarkTabbedPaneUI; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/ClosableTabbedPane.java b/src/main/java/com/github/weisj/darklaf/components/ClosableTabbedPane.java similarity index 71% rename from src/main/java/com/weis/darklaf/components/ClosableTabbedPane.java rename to src/main/java/com/github/weisj/darklaf/components/ClosableTabbedPane.java index 73aa5b11..30942cbb 100644 --- a/src/main/java/com/weis/darklaf/components/ClosableTabbedPane.java +++ b/src/main/java/com/github/weisj/darklaf/components/ClosableTabbedPane.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.components; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; import org.jetbrains.annotations.NotNull; @@ -23,14 +46,6 @@ public class ClosableTabbedPane extends JTabbedPane { notifyTabListeners(new TabEvent(this, TabEvent.TAB_OPENED, "tabOpened", index)); } - @Override - public void setTabComponentAt(final int index, final Component component) { - if (component instanceof ClosableTabComponent) { - ((ClosableTabComponent) component).setTabbedPane(this); - } - super.setTabComponentAt(index, component); - } - @Override public void removeTabAt(final int index) { checkIndex(index); @@ -42,6 +57,14 @@ public class ClosableTabbedPane extends JTabbedPane { super.removeTabAt(index); } + @Override + public void setTabComponentAt(final int index, final Component component) { + if (component instanceof ClosableTabComponent) { + ((ClosableTabComponent) component).setTabbedPane(this); + } + super.setTabComponentAt(index, component); + } + private void checkIndex(final int index) { int tabCount = getTabCount(); if (index < 0 || index >= tabCount) { diff --git a/src/main/java/com/weis/darklaf/components/ColorPipetteBase.java b/src/main/java/com/github/weisj/darklaf/components/ColorPipetteBase.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/ColorPipetteBase.java rename to src/main/java/com/github/weisj/darklaf/components/ColorPipetteBase.java index 6b81756f..b3afd540 100644 --- a/src/main/java/com/weis/darklaf/components/ColorPipetteBase.java +++ b/src/main/java/com/github/weisj/darklaf/components/ColorPipetteBase.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. /* * MIT License * @@ -22,12 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; -import com.weis.darklaf.ui.colorchooser.ColorListener; -import com.weis.darklaf.ui.colorchooser.ColorPipette; -import com.weis.darklaf.util.DarkUIUtil; + +import com.github.weisj.darklaf.ui.colorchooser.ColorListener; +import com.github.weisj.darklaf.ui.colorchooser.ColorPipette; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java b/src/main/java/com/github/weisj/darklaf/components/DefaultColorPipette.java similarity index 84% rename from src/main/java/com/weis/darklaf/components/DefaultColorPipette.java rename to src/main/java/com/github/weisj/darklaf/components/DefaultColorPipette.java index b11c49a8..4c1974f4 100644 --- a/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java +++ b/src/main/java/com/github/weisj/darklaf/components/DefaultColorPipette.java @@ -1,9 +1,31 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.weis.darklaf.components; - -import com.weis.darklaf.ui.colorchooser.ColorListener; -import com.weis.darklaf.util.GraphicsUtil; -import com.weis.darklaf.util.TimerUtil; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; + +import com.github.weisj.darklaf.ui.colorchooser.ColorListener; +import com.github.weisj.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.util.TimerUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/components/Disposable.java b/src/main/java/com/github/weisj/darklaf/components/Disposable.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/Disposable.java rename to src/main/java/com/github/weisj/darklaf/components/Disposable.java index b850cafd..6cced25a 100644 --- a/src/main/java/com/weis/darklaf/components/Disposable.java +++ b/src/main/java/com/github/weisj/darklaf/components/Disposable.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; public interface Disposable { diff --git a/src/main/java/com/weis/darklaf/components/JXPopupMenu.java b/src/main/java/com/github/weisj/darklaf/components/JXPopupMenu.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/JXPopupMenu.java rename to src/main/java/com/github/weisj/darklaf/components/JXPopupMenu.java index b3c28454..93b1ee60 100644 --- a/src/main/java/com/weis/darklaf/components/JXPopupMenu.java +++ b/src/main/java/com/github/weisj/darklaf/components/JXPopupMenu.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jdesktop.jxlayer.JXLayer; import org.pbjar.jxlayer.plaf.ext.TransformUI; diff --git a/src/main/java/com/weis/darklaf/components/SelectableTreeNode.java b/src/main/java/com/github/weisj/darklaf/components/SelectableTreeNode.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/SelectableTreeNode.java rename to src/main/java/com/github/weisj/darklaf/components/SelectableTreeNode.java index cfe9e746..42d54764 100644 --- a/src/main/java/com/weis/darklaf/components/SelectableTreeNode.java +++ b/src/main/java/com/github/weisj/darklaf/components/SelectableTreeNode.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; import javax.swing.tree.DefaultMutableTreeNode; diff --git a/src/main/java/com/weis/darklaf/components/ShadowButton.java b/src/main/java/com/github/weisj/darklaf/components/ShadowButton.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/ShadowButton.java rename to src/main/java/com/github/weisj/darklaf/components/ShadowButton.java index 2084e249..4835eaef 100644 --- a/src/main/java/com/weis/darklaf/components/ShadowButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/ShadowButton.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components; +package com.github.weisj.darklaf.components; import javax.swing.*; diff --git a/src/main/java/com/github/weisj/darklaf/components/TabEvent.java b/src/main/java/com/github/weisj/darklaf/components/TabEvent.java new file mode 100644 index 00000000..1de29c5b --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/components/TabEvent.java @@ -0,0 +1,45 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; + +import java.awt.event.ActionEvent; + +/** + * @author Jannis Weis + */ +public class TabEvent extends ActionEvent { + + public static final int TAB_OPENED = 0; + public static final int TAB_CLOSED = 1; + private final int tabIndex; + + public TabEvent(final Object source, final int id, final String command, final int tabIndex) { + super(source, id, command); + this.tabIndex = tabIndex; + } + + public int getTabIndex() { + return tabIndex; + } +} diff --git a/src/main/java/com/github/weisj/darklaf/components/TabListener.java b/src/main/java/com/github/weisj/darklaf/components/TabListener.java new file mode 100644 index 00000000..d66ad20f --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/components/TabListener.java @@ -0,0 +1,36 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; + +import java.util.EventListener; + +/** + * @author Jannis Weis + */ +public interface TabListener extends EventListener { + + void tabOpened(TabEvent e); + + void tabClosed(TabEvent e); +} diff --git a/src/main/java/com/github/weisj/darklaf/components/TabPropertyChangeEvent.java b/src/main/java/com/github/weisj/darklaf/components/TabPropertyChangeEvent.java new file mode 100644 index 00000000..849aa14e --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/components/TabPropertyChangeEvent.java @@ -0,0 +1,44 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components; + +import java.beans.PropertyChangeEvent; + +/** + * @author Jannis Weis + */ +public class TabPropertyChangeEvent extends PropertyChangeEvent { + + private final int index; + + public TabPropertyChangeEvent(final Object source, final String propertyName, + final Object oldValue, final Object newValue, final int index) { + super(source, propertyName, oldValue, newValue); + this.index = index; + } + + public int getIndex() { + return index; + } +} diff --git a/src/main/java/com/weis/darklaf/components/alignment/Alignment.java b/src/main/java/com/github/weisj/darklaf/components/alignment/Alignment.java similarity index 87% rename from src/main/java/com/weis/darklaf/components/alignment/Alignment.java rename to src/main/java/com/github/weisj/darklaf/components/alignment/Alignment.java index 5b7be4a1..5a810298 100644 --- a/src/main/java/com/weis/darklaf/components/alignment/Alignment.java +++ b/src/main/java/com/github/weisj/darklaf/components/alignment/Alignment.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.components.alignment; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.alignment; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -6,7 +29,7 @@ import org.jetbrains.annotations.NotNull; import java.awt.*; import java.util.function.BiFunction; -import static com.weis.darklaf.components.alignment.AlignmentHelper.*; +import static com.github.weisj.darklaf.components.alignment.AlignmentHelper.*; /** * @author Jannis Weis diff --git a/src/main/java/com/weis/darklaf/components/alignment/AlignmentHelper.java b/src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentHelper.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/alignment/AlignmentHelper.java rename to src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentHelper.java index 32ae7726..2116f4e9 100644 --- a/src/main/java/com/weis/darklaf/components/alignment/AlignmentHelper.java +++ b/src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentHelper.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.alignment; +package com.github.weisj.darklaf.components.alignment; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/alignment/AlignmentStrategy.java b/src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentStrategy.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/alignment/AlignmentStrategy.java rename to src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentStrategy.java index dcd9617e..7c0dae13 100644 --- a/src/main/java/com/weis/darklaf/components/alignment/AlignmentStrategy.java +++ b/src/main/java/com/github/weisj/darklaf/components/alignment/AlignmentStrategy.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.alignment; +package com.github.weisj.darklaf.components.alignment; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/border/BubbleBorder.java b/src/main/java/com/github/weisj/darklaf/components/border/BubbleBorder.java similarity index 88% rename from src/main/java/com/weis/darklaf/components/border/BubbleBorder.java rename to src/main/java/com/github/weisj/darklaf/components/border/BubbleBorder.java index 2b3417e1..aa01d4ca 100644 --- a/src/main/java/com/weis/darklaf/components/border/BubbleBorder.java +++ b/src/main/java/com/github/weisj/darklaf/components/border/BubbleBorder.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.components.border; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.border; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/border/DropShadowBorder.java b/src/main/java/com/github/weisj/darklaf/components/border/DropShadowBorder.java similarity index 93% rename from src/main/java/com/weis/darklaf/components/border/DropShadowBorder.java rename to src/main/java/com/github/weisj/darklaf/components/border/DropShadowBorder.java index 2b0e5d86..e011e2fe 100644 --- a/src/main/java/com/weis/darklaf/components/border/DropShadowBorder.java +++ b/src/main/java/com/github/weisj/darklaf/components/border/DropShadowBorder.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.components.border; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.border; -import com.weis.darklaf.util.ImageUtil; +import com.github.weisj.darklaf.util.ImageUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java b/src/main/java/com/github/weisj/darklaf/components/border/MutableLineBorder.java similarity index 61% rename from src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java rename to src/main/java/com/github/weisj/darklaf/components/border/MutableLineBorder.java index 48238aef..7e81c20d 100644 --- a/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java +++ b/src/main/java/com/github/weisj/darklaf/components/border/MutableLineBorder.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.components.border; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.border; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/JTabFrame.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/JTabFrame.java similarity index 99% rename from src/main/java/com/weis/darklaf/components/tabframe/JTabFrame.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/JTabFrame.java index ca54de08..41cc75c6 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/JTabFrame.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/JTabFrame.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.ui.tabframe.TabFrameTransferHandler; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.ui.tabframe.TabFrameTransferHandler; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -860,6 +860,15 @@ public class JTabFrame extends JComponent { this.transferIndex = index; } + /** + * Get the content pane. + * + * @return the content pane. + */ + public TabFrameContent getContentPane() { + return content; + } + /** * Returns whether the given tab is selected. * @@ -872,15 +881,6 @@ public class JTabFrame extends JComponent { return selectedIndices[a.ordinal()] == index; } - /** - * Get the content pane. - * - * @return the content pane. - */ - public TabFrameContent getContentPane() { - return content; - } - /** * Notify that a transfer has ended. */ diff --git a/src/main/java/com/weis/darklaf/components/tabframe/PanelPopup.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/PanelPopup.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/tabframe/PanelPopup.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/PanelPopup.java index 6af21d80..44083a45 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/PanelPopup.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/PanelPopup.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import org.jetbrains.annotations.Contract; import javax.swing.*; @@ -165,18 +165,6 @@ public class PanelPopup extends JPanel implements TabFramePopup { firePropertyChange("alignment", old, alignment); } - @Override - public int getIndex() { - return index; - } - - @Override - public void setIndex(final int index) { - int old = this.index; - this.index = index; - firePropertyChange("index", old, index); - } - @Override public void open() { if (parent != null && getAlignment() != null && getIndex() >= 0 @@ -212,4 +200,16 @@ public class PanelPopup extends JPanel implements TabFramePopup { this.icon = icon; firePropertyChange("icon", old, icon); } + + @Override + public int getIndex() { + return index; + } + + @Override + public void setIndex(final int index) { + int old = this.index; + this.index = index; + firePropertyChange("index", old, index); + } } diff --git a/src/main/java/com/weis/darklaf/components/tabframe/PopupContainer.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/PopupContainer.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/tabframe/PopupContainer.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/PopupContainer.java index f732dbc0..a8dec481 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/PopupContainer.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/PopupContainer.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; import javax.swing.*; import javax.swing.border.Border; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabArea.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabArea.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/tabframe/TabArea.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabArea.java index 2b1b425e..b2d170d1 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabArea.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabArea.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContent.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContent.java similarity index 95% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameContent.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContent.java index 070b81ac..ee277d44 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContent.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContent.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContentPane.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContentPane.java index 77c73945..fe718641 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameContentPane.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.decorators.AncestorAdapter; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.decorators.AncestorAdapter; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -375,17 +375,6 @@ public class TabFrameContentPane extends JPanel implements TabFrameContent { return enabled; } - /** - * Get the popup component at the position. - * - * @param a the position. - * @return the popup component at position. - */ - @NotNull - public Component getPopupComponent(@NotNull final Alignment a) { - return getContainer(a).getPopup(); - } - @Override public PopupContainer getContainer(@NotNull final Alignment alignment) { PopupContainer popupComponent; @@ -420,6 +409,17 @@ public class TabFrameContentPane extends JPanel implements TabFrameContent { return popupComponent; } + /** + * Get the popup component at the position. + * + * @param a the position. + * @return the popup component at position. + */ + @NotNull + public Component getPopupComponent(@NotNull final Alignment a) { + return getContainer(a).getPopup(); + } + protected static class LayoutProportions { protected final double splitRestore; protected final double splitterPeerDisable; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFramePopup.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFramePopup.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFramePopup.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFramePopup.java index 89123c48..161e1710 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFramePopup.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFramePopup.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTab.java similarity index 95% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTab.java index f90c9d18..d32fde2e 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTab.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabContainer.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabContainer.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabContainer.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabContainer.java index 55cb921b..708a04b2 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabContainer.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabContainer.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabLabel.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabLabel.java similarity index 95% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabLabel.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabLabel.java index d24e4d34..b422ec79 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTabLabel.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameTabLabel.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.ui.tabframe.DarkTabFrameTabLabelUI; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.ui.tabframe.DarkTabFrameTabLabelUI; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameUI.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameUI.java similarity index 94% rename from src/main/java/com/weis/darklaf/components/tabframe/TabFrameUI.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameUI.java index ae6c06a4..d8b810d8 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameUI.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabFrameUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import javax.swing.plaf.ComponentUI; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabbedPopup.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabbedPopup.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/tabframe/TabbedPopup.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/TabbedPopup.java index 82b3f28b..7ce712b9 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabbedPopup.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/TabbedPopup.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; import javax.swing.*; import java.awt.*; @@ -103,6 +103,11 @@ public class TabbedPopup extends PanelPopup { return tabbedPane; } + @Override + public String getUIClassID() { + return "TabFrameTabbedPopupUI"; + } + /** * Gets the currently selected component from the TabbedPane. {@see {@link #getTabbedPane()}}. * @@ -112,11 +117,6 @@ public class TabbedPopup extends PanelPopup { return tabbedPane.getSelectedComponent(); } - @Override - public String getUIClassID() { - return "TabFrameTabbedPopupUI"; - } - /** * Adds the component to the tabbed pane if it isn't already added. This method exists to conform the interface * methods. It is preferred to directly add to the TabbedPane obtained by {@link #getTabbedPane()}. diff --git a/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java b/src/main/java/com/github/weisj/darklaf/components/tabframe/ToggleSplitPane.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java rename to src/main/java/com/github/weisj/darklaf/components/tabframe/ToggleSplitPane.java index d4a5da07..0e5653e4 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java +++ b/src/main/java/com/github/weisj/darklaf/components/tabframe/ToggleSplitPane.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tabframe; +package com.github.weisj.darklaf.components.tabframe; import javax.swing.*; import javax.swing.plaf.basic.BasicSplitPaneUI; @@ -110,18 +110,18 @@ public class ToggleSplitPane extends JSplitPane { } @Override - public int getDividerLocation() { + public int getLastDividerLocation() { if (resizable) { - return super.getDividerLocation(); + return super.getLastDividerLocation(); } else { return disabledMax == disabledPos ? getMaximumDividerLocation() : disabledPos; } } @Override - public int getLastDividerLocation() { + public int getDividerLocation() { if (resizable) { - return super.getLastDividerLocation(); + return super.getDividerLocation(); } else { return disabledMax == disabledPos ? getMaximumDividerLocation() : disabledPos; } diff --git a/src/main/java/com/weis/darklaf/components/text/SearchEvent.java b/src/main/java/com/github/weisj/darklaf/components/text/SearchEvent.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/text/SearchEvent.java rename to src/main/java/com/github/weisj/darklaf/components/text/SearchEvent.java index 11076cdf..b1f72e14 100644 --- a/src/main/java/com/weis/darklaf/components/text/SearchEvent.java +++ b/src/main/java/com/github/weisj/darklaf/components/text/SearchEvent.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.text; +package com.github.weisj.darklaf.components.text; import java.awt.event.ActionEvent; diff --git a/src/main/java/com/weis/darklaf/components/text/SearchListener.java b/src/main/java/com/github/weisj/darklaf/components/text/SearchListener.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/text/SearchListener.java rename to src/main/java/com/github/weisj/darklaf/components/text/SearchListener.java index 20b5ac46..998a0c2d 100644 --- a/src/main/java/com/weis/darklaf/components/text/SearchListener.java +++ b/src/main/java/com/github/weisj/darklaf/components/text/SearchListener.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.text; +package com.github.weisj.darklaf.components.text; import java.util.EventListener; diff --git a/src/main/java/com/weis/darklaf/components/text/SearchTextField.java b/src/main/java/com/github/weisj/darklaf/components/text/SearchTextField.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/text/SearchTextField.java rename to src/main/java/com/github/weisj/darklaf/components/text/SearchTextField.java index 2aa22b72..046d4b84 100644 --- a/src/main/java/com/weis/darklaf/components/text/SearchTextField.java +++ b/src/main/java/com/github/weisj/darklaf/components/text/SearchTextField.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.text; +package com.github.weisj.darklaf.components.text; import javax.swing.*; import javax.swing.text.Document; diff --git a/src/main/java/com/weis/darklaf/components/text/SearchTextFieldWithHistory.java b/src/main/java/com/github/weisj/darklaf/components/text/SearchTextFieldWithHistory.java similarity index 99% rename from src/main/java/com/weis/darklaf/components/text/SearchTextFieldWithHistory.java rename to src/main/java/com/github/weisj/darklaf/components/text/SearchTextFieldWithHistory.java index 3bbf67d7..9cf24b36 100644 --- a/src/main/java/com/weis/darklaf/components/text/SearchTextFieldWithHistory.java +++ b/src/main/java/com/github/weisj/darklaf/components/text/SearchTextFieldWithHistory.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.text; +package com.github.weisj.darklaf.components.text; import javax.swing.text.Document; import java.util.List; diff --git a/src/main/java/com/weis/darklaf/components/tooltip/DarkToolTip.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/DarkToolTip.java similarity index 94% rename from src/main/java/com/weis/darklaf/components/tooltip/DarkToolTip.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/DarkToolTip.java index 573edc4d..ef3aea96 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/DarkToolTip.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/DarkToolTip.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.decorators.AncestorAdapter; -import com.weis.darklaf.ui.tooltip.DarkTooltipBorder; -import com.weis.darklaf.util.Animator; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.decorators.AncestorAdapter; +import com.github.weisj.darklaf.ui.tooltip.DarkTooltipBorder; +import com.github.weisj.darklaf.util.Animator; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -110,12 +110,20 @@ public class DarkToolTip extends JToolTip implements PropertyChangeListener { super.paint(g); config.restore(); } + @Override public void setBorder(final Border border) { if (!(border instanceof DarkTooltipBorder)) return; super.setBorder(border); } + @Override + public void removeNotify() { + super.removeNotify(); + notifyToolTipListeners(ToolTipEvent.HIDDEN); + lastHidden = System.currentTimeMillis(); + } + @Override public String getTipText() { var text = super.getTipText(); @@ -126,10 +134,17 @@ public class DarkToolTip extends JToolTip implements PropertyChangeListener { } @Override - public void removeNotify() { - super.removeNotify(); - notifyToolTipListeners(ToolTipEvent.HIDDEN); - lastHidden = System.currentTimeMillis(); + public void propertyChange(@NotNull final PropertyChangeEvent evt) { + if ("tiptext".equals(evt.getPropertyName())) { + setPreferredSize(getUI().getPreferredSize(this)); + if (!Objects.equals(evt.getNewValue(), evt.getOldValue())) { + notifyToolTipListeners(ToolTipEvent.TEXT); + } + } + } + + public void setStyle(final ToolTipStyle style) { + putClientProperty("JToolTip.style", style); } private enum ToolTipEvent { @@ -175,19 +190,5 @@ public class DarkToolTip extends JToolTip implements PropertyChangeListener { } } - @Override - public void propertyChange(@NotNull final PropertyChangeEvent evt) { - if ("tiptext".equals(evt.getPropertyName())) { - setPreferredSize(getUI().getPreferredSize(this)); - if (!Objects.equals(evt.getNewValue(), evt.getOldValue())) { - notifyToolTipListeners(ToolTipEvent.TEXT); - } - } - } - - public void setStyle(final ToolTipStyle style) { - putClientProperty("JToolTip.style", style); - } - } diff --git a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipContext.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/tooltip/ToolTipContext.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java index aa7c9d4f..26fe1baf 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipContext.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipContext.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.alignment.AlignmentStrategy; -import com.weis.darklaf.ui.tooltip.DarkTooltipBorder; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.AlignmentStrategy; +import com.github.weisj.darklaf.ui.tooltip.DarkTooltipBorder; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -125,95 +125,6 @@ public class ToolTipContext implements ToolTipListener { setToolTipRectSupplier(toolTipRectSupplier); } - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - */ - @Contract("null, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment) { - this(c, alignment, null, null, true, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param centerAlignment {@link #setCenterAlignment(Alignment)} - */ - @Contract("null, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment) { - this(c, alignment, centerAlignment, null, true, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param alignInside {@link #setAlignInside(boolean)} - */ - @Contract("null, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final boolean alignInside) { - this(c, alignment, null, null, alignInside, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param centerAlignment {@link #setCenterAlignment(Alignment)} - * @param alignInside {@link #setAlignInside(boolean)} - */ - @Contract("null, _, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment, - final boolean alignInside) { - this(c, alignment, centerAlignment, null, alignInside, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} - */ - @Contract("null, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final AlignmentStrategy alignmentStrategy) { - this(c, alignment, null, alignmentStrategy, true, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param centerAlignment {@link #setCenterAlignment(Alignment)} - * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} - */ - @Contract("null, _, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment, - final AlignmentStrategy alignmentStrategy) { - this(c, alignment, centerAlignment, alignmentStrategy, true, null); - } - - /** - * Create a new tooltip context to ease the creation of custom tooltips. - * - * @param c the component which the tooltip belongs to. - * @param alignment {@link #setAlignment(Alignment)} - * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} - * @param alignInside {@link #setAlignInside(boolean)} - */ - @Contract("null, _, _, _ -> fail") - public ToolTipContext(final JComponent c, final Alignment alignment, final AlignmentStrategy alignmentStrategy, - final boolean alignInside) { - this(c, alignment, null, alignmentStrategy, alignInside, null); - } - /** * Set the style of the tooltip. * @@ -230,16 +141,6 @@ public class ToolTipContext implements ToolTipListener { return this; } - private void updateToolTip() { - if (toolTip != null) { - toolTip.setAlignment(alignment == Alignment.CENTER - ? centerAlignment.opposite() - : alignInside ? alignment : alignment.opposite()); - toolTip.setInsets(insets); - toolTip.setStyle(style); - } - } - /** * Sets whether the position should be recalculated each time after the popup has been shown. This may be useful if * the tooltip should follow the mouse. @@ -254,6 +155,24 @@ public class ToolTipContext implements ToolTipListener { return this; } + /** + * Sets whether the tooltip should be closed if the mouse has left the area set by {@link #setInsideArea(Area).} + *

+ * Default is false. + * + * @param hideOnExit true if tooltip should hide. + * @return this. + */ + public ToolTipContext setHideOnExit(final boolean hideOnExit) { + this.hideOnExit = hideOnExit; + if (hideOnExit) { + c.addMouseListener(mouseListener); + } else { + c.removeMouseListener(mouseListener); + } + return this; + } + /** * Sets whether the component should be aligned inside or outside the supplied rectangle if the curent alignment is * not {@link Alignment#CENTER}. @@ -338,6 +257,105 @@ public class ToolTipContext implements ToolTipListener { return this; } + private void updateToolTip() { + if (toolTip != null) { + toolTip.setAlignment(alignment == Alignment.CENTER + ? centerAlignment.opposite() + : alignInside ? alignment : alignment.opposite()); + toolTip.setInsets(insets); + toolTip.setStyle(style); + } + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + */ + @Contract("null, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment) { + this(c, alignment, null, null, true, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param centerAlignment {@link #setCenterAlignment(Alignment)} + */ + @Contract("null, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment) { + this(c, alignment, centerAlignment, null, true, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param alignInside {@link #setAlignInside(boolean)} + */ + @Contract("null, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final boolean alignInside) { + this(c, alignment, null, null, alignInside, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param centerAlignment {@link #setCenterAlignment(Alignment)} + * @param alignInside {@link #setAlignInside(boolean)} + */ + @Contract("null, _, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment, + final boolean alignInside) { + this(c, alignment, centerAlignment, null, alignInside, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} + */ + @Contract("null, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final AlignmentStrategy alignmentStrategy) { + this(c, alignment, null, alignmentStrategy, true, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param centerAlignment {@link #setCenterAlignment(Alignment)} + * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} + */ + @Contract("null, _, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final Alignment centerAlignment, + final AlignmentStrategy alignmentStrategy) { + this(c, alignment, centerAlignment, alignmentStrategy, true, null); + } + + /** + * Create a new tooltip context to ease the creation of custom tooltips. + * + * @param c the component which the tooltip belongs to. + * @param alignment {@link #setAlignment(Alignment)} + * @param alignmentStrategy {@link #setAlignmentStrategy(AlignmentStrategy)} + * @param alignInside {@link #setAlignInside(boolean)} + */ + @Contract("null, _, _, _ -> fail") + public ToolTipContext(final JComponent c, final Alignment alignment, final AlignmentStrategy alignmentStrategy, + final boolean alignInside) { + this(c, alignment, null, alignmentStrategy, alignInside, null); + } + /** * Set the area to check if the tooltip should hide. If the mouse is outside of the area the the tooltip hides if * {@link #setHideOnExit(boolean)} is true. @@ -451,11 +469,6 @@ public class ToolTipContext implements ToolTipListener { return dim; } - private Point alignInside(final Dimension dim, final Rectangle rect) { - Point p = alignment.alignInside(dim, rect); - return adjustPoint(p, alignment, dim, false); - } - @Nullable private Point alignCenter(final Dimension dim, @NotNull final Rectangle rect) { rect.x += rect.width / 2; @@ -467,15 +480,16 @@ public class ToolTipContext implements ToolTipListener { return p; } + private Point alignInside(final Dimension dim, final Rectangle rect) { + Point p = alignment.alignInside(dim, rect); + return adjustPoint(p, alignment, dim, false); + } + private Point alignOutside(final Dimension dim, final Rectangle rect) { Point p = alignment.alignOutside(dim, rect); return adjustPoint(p, alignment, dim, true); } - public void removeToolTip() { - setHideOnExit(false); - } - @Contract("_, _, _, _ -> param1") private Point adjustPoint(final Point p, final Alignment align, final Dimension dim, final boolean outside) { int factor = outside ? 1 : -1; @@ -487,22 +501,8 @@ public class ToolTipContext implements ToolTipListener { return p; } - /** - * Sets whether the tooltip should be closed if the mouse has left the area set by {@link #setInsideArea(Area).} - *

- * Default is false. - * - * @param hideOnExit true if tooltip should hide. - * @return this. - */ - public ToolTipContext setHideOnExit(final boolean hideOnExit) { - this.hideOnExit = hideOnExit; - if (hideOnExit) { - c.addMouseListener(mouseListener); - } else { - c.removeMouseListener(mouseListener); - } - return this; + public void removeToolTip() { + setHideOnExit(false); } @Override diff --git a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipListener.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipListener.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/tooltip/ToolTipListener.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipListener.java index a36054b9..b6dc9d6d 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipListener.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipListener.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; import javax.swing.*; import java.util.EventListener; diff --git a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipStyle.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipStyle.java similarity index 95% rename from src/main/java/com/weis/darklaf/components/tooltip/ToolTipStyle.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipStyle.java index d3db4270..5e5a87e1 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/ToolTipStyle.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/ToolTipStyle.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; public enum ToolTipStyle { BALLOON, diff --git a/src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareButton.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java similarity index 94% rename from src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareButton.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java index f57c27e0..8e7c51c1 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareButton.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareToggleButton.java b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java similarity index 94% rename from src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareToggleButton.java rename to src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java index da8ed6af..ea76fd7f 100644 --- a/src/main/java/com/weis/darklaf/components/tooltip/TooltipAwareToggleButton.java +++ b/src/main/java/com/github/weisj/darklaf/components/tooltip/TooltipAwareToggleButton.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.tooltip; +package com.github.weisj.darklaf.components.tooltip; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/components/tristate/TristateButtonModel.java b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateButtonModel.java similarity index 57% rename from src/main/java/com/weis/darklaf/components/tristate/TristateButtonModel.java rename to src/main/java/com/github/weisj/darklaf/components/tristate/TristateButtonModel.java index 7de152f4..2fd4a983 100644 --- a/src/main/java/com/weis/darklaf/components/tristate/TristateButtonModel.java +++ b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateButtonModel.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.components.tristate; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.tristate; import javax.swing.*; import java.awt.event.ItemEvent; diff --git a/src/main/java/com/weis/darklaf/components/tristate/TristateCheckBox.java b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateCheckBox.java similarity index 69% rename from src/main/java/com/weis/darklaf/components/tristate/TristateCheckBox.java rename to src/main/java/com/github/weisj/darklaf/components/tristate/TristateCheckBox.java index 7bbaa116..6dadfe0c 100644 --- a/src/main/java/com/weis/darklaf/components/tristate/TristateCheckBox.java +++ b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateCheckBox.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.components.tristate; - -import com.weis.darklaf.DarkLaf; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.tristate; + +import com.github.weisj.darklaf.DarkLaf; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/github/weisj/darklaf/components/tristate/TristateState.java b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateState.java new file mode 100644 index 00000000..8ddbfcf5 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/components/tristate/TristateState.java @@ -0,0 +1,44 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.components.tristate; + +public enum TristateState { + SELECTED { + public TristateState next() { + return INDETERMINATE; + } + }, + INDETERMINATE { + public TristateState next() { + return DESELECTED; + } + }, + DESELECTED { + public TristateState next() { + return SELECTED; + } + }; + + public abstract TristateState next(); +} diff --git a/src/main/java/com/weis/darklaf/components/uiresource/Insets2D.java b/src/main/java/com/github/weisj/darklaf/components/uiresource/Insets2D.java similarity index 98% rename from src/main/java/com/weis/darklaf/components/uiresource/Insets2D.java rename to src/main/java/com/github/weisj/darklaf/components/uiresource/Insets2D.java index 6f5377ba..0a0f0a29 100644 --- a/src/main/java/com/weis/darklaf/components/uiresource/Insets2D.java +++ b/src/main/java/com/github/weisj/darklaf/components/uiresource/Insets2D.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.uiresource; +package com.github.weisj.darklaf.components.uiresource; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/components/uiresource/JLabelUIResource.java b/src/main/java/com/github/weisj/darklaf/components/uiresource/JLabelUIResource.java similarity index 97% rename from src/main/java/com/weis/darklaf/components/uiresource/JLabelUIResource.java rename to src/main/java/com/github/weisj/darklaf/components/uiresource/JLabelUIResource.java index f433cc87..ef3ba617 100644 --- a/src/main/java/com/weis/darklaf/components/uiresource/JLabelUIResource.java +++ b/src/main/java/com/github/weisj/darklaf/components/uiresource/JLabelUIResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.uiresource; +package com.github.weisj.darklaf.components.uiresource; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/components/uiresource/JPanelUIResource.java b/src/main/java/com/github/weisj/darklaf/components/uiresource/JPanelUIResource.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/uiresource/JPanelUIResource.java rename to src/main/java/com/github/weisj/darklaf/components/uiresource/JPanelUIResource.java index a3e8d4d3..6342732d 100644 --- a/src/main/java/com/weis/darklaf/components/uiresource/JPanelUIResource.java +++ b/src/main/java/com/github/weisj/darklaf/components/uiresource/JPanelUIResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.uiresource; +package com.github.weisj.darklaf.components.uiresource; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/components/uiresource/UIResourceWrapper.java b/src/main/java/com/github/weisj/darklaf/components/uiresource/UIResourceWrapper.java similarity index 96% rename from src/main/java/com/weis/darklaf/components/uiresource/UIResourceWrapper.java rename to src/main/java/com/github/weisj/darklaf/components/uiresource/UIResourceWrapper.java index d5ce62fb..706da450 100644 --- a/src/main/java/com/weis/darklaf/components/uiresource/UIResourceWrapper.java +++ b/src/main/java/com/github/weisj/darklaf/components/uiresource/UIResourceWrapper.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.components.uiresource; +package com.github.weisj.darklaf.components.uiresource; import javax.swing.border.Border; import java.awt.*; diff --git a/src/main/java/com/github/weisj/darklaf/decorators/AncestorAdapter.java b/src/main/java/com/github/weisj/darklaf/decorators/AncestorAdapter.java new file mode 100644 index 00000000..25a6386e --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/decorators/AncestorAdapter.java @@ -0,0 +1,41 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.decorators; + +import javax.swing.event.AncestorEvent; +import javax.swing.event.AncestorListener; + +public class AncestorAdapter implements AncestorListener { + @Override + public void ancestorAdded(final AncestorEvent event) { + } + + @Override + public void ancestorRemoved(final AncestorEvent event) { + } + + @Override + public void ancestorMoved(final AncestorEvent event) { + } +} diff --git a/src/main/java/com/github/weisj/darklaf/decorators/CellRenderer.java b/src/main/java/com/github/weisj/darklaf/decorators/CellRenderer.java new file mode 100644 index 00000000..b04328cb --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/decorators/CellRenderer.java @@ -0,0 +1,27 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.decorators; + +public interface CellRenderer { +} diff --git a/src/main/java/com/weis/darklaf/decorators/HoverListener.java b/src/main/java/com/github/weisj/darklaf/decorators/HoverListener.java similarity index 98% rename from src/main/java/com/weis/darklaf/decorators/HoverListener.java rename to src/main/java/com/github/weisj/darklaf/decorators/HoverListener.java index b34ac9f7..8146e6fb 100644 --- a/src/main/java/com/weis/darklaf/decorators/HoverListener.java +++ b/src/main/java/com/github/weisj/darklaf/decorators/HoverListener.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.decorators; +package com.github.weisj.darklaf.decorators; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/decorators/MouseResponder.java b/src/main/java/com/github/weisj/darklaf/decorators/MouseResponder.java similarity index 98% rename from src/main/java/com/weis/darklaf/decorators/MouseResponder.java rename to src/main/java/com/github/weisj/darklaf/decorators/MouseResponder.java index 38fad6c1..67bd462a 100644 --- a/src/main/java/com/weis/darklaf/decorators/MouseResponder.java +++ b/src/main/java/com/github/weisj/darklaf/decorators/MouseResponder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.decorators; +package com.github.weisj.darklaf.decorators; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/decorators/PlainAction.java b/src/main/java/com/github/weisj/darklaf/decorators/PlainAction.java similarity index 97% rename from src/main/java/com/weis/darklaf/decorators/PlainAction.java rename to src/main/java/com/github/weisj/darklaf/decorators/PlainAction.java index 45bf2f7f..47195482 100644 --- a/src/main/java/com/weis/darklaf/decorators/PlainAction.java +++ b/src/main/java/com/github/weisj/darklaf/decorators/PlainAction.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.decorators; +package com.github.weisj.darklaf.decorators; import javax.swing.*; import java.awt.event.ActionEvent; diff --git a/src/main/java/com/weis/darklaf/decorators/PopupMenuAdapter.java b/src/main/java/com/github/weisj/darklaf/decorators/PopupMenuAdapter.java similarity index 97% rename from src/main/java/com/weis/darklaf/decorators/PopupMenuAdapter.java rename to src/main/java/com/github/weisj/darklaf/decorators/PopupMenuAdapter.java index b0196e49..83d6e07e 100644 --- a/src/main/java/com/weis/darklaf/decorators/PopupMenuAdapter.java +++ b/src/main/java/com/github/weisj/darklaf/decorators/PopupMenuAdapter.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.decorators; +package com.github.weisj.darklaf.decorators; import javax.swing.event.PopupMenuEvent; import javax.swing.event.PopupMenuListener; diff --git a/src/main/java/com/weis/darklaf/icons/DarkSVGIcon.java b/src/main/java/com/github/weisj/darklaf/icons/DarkSVGIcon.java similarity index 99% rename from src/main/java/com/weis/darklaf/icons/DarkSVGIcon.java rename to src/main/java/com/github/weisj/darklaf/icons/DarkSVGIcon.java index cfab37fc..21df8a66 100644 --- a/src/main/java/com/weis/darklaf/icons/DarkSVGIcon.java +++ b/src/main/java/com/github/weisj/darklaf/icons/DarkSVGIcon.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; import com.kitfox.svg.app.beans.SVGIcon; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/icons/EmptyIcon.java b/src/main/java/com/github/weisj/darklaf/icons/EmptyIcon.java similarity index 98% rename from src/main/java/com/weis/darklaf/icons/EmptyIcon.java rename to src/main/java/com/github/weisj/darklaf/icons/EmptyIcon.java index 71d816b9..b5c8fc83 100644 --- a/src/main/java/com/weis/darklaf/icons/EmptyIcon.java +++ b/src/main/java/com/github/weisj/darklaf/icons/EmptyIcon.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/icons/IconColorMapper.java b/src/main/java/com/github/weisj/darklaf/icons/IconColorMapper.java similarity index 65% rename from src/main/java/com/weis/darklaf/icons/IconColorMapper.java rename to src/main/java/com/github/weisj/darklaf/icons/IconColorMapper.java index fb1b3a46..061badd5 100644 --- a/src/main/java/com/weis/darklaf/icons/IconColorMapper.java +++ b/src/main/java/com/github/weisj/darklaf/icons/IconColorMapper.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.icons; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.icons; import com.kitfox.svg.Defs; import com.kitfox.svg.LinearGradient; diff --git a/src/main/java/com/weis/darklaf/icons/IconLoader.java b/src/main/java/com/github/weisj/darklaf/icons/IconLoader.java similarity index 99% rename from src/main/java/com/weis/darklaf/icons/IconLoader.java rename to src/main/java/com/github/weisj/darklaf/icons/IconLoader.java index 3a7c97f0..aad7299c 100644 --- a/src/main/java/com/weis/darklaf/icons/IconLoader.java +++ b/src/main/java/com/github/weisj/darklaf/icons/IconLoader.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/icons/LazyIcon.java b/src/main/java/com/github/weisj/darklaf/icons/LazyIcon.java similarity index 98% rename from src/main/java/com/weis/darklaf/icons/LazyIcon.java rename to src/main/java/com/github/weisj/darklaf/icons/LazyIcon.java index ea5c07eb..e9e256e0 100644 --- a/src/main/java/com/weis/darklaf/icons/LazyIcon.java +++ b/src/main/java/com/github/weisj/darklaf/icons/LazyIcon.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/icons/LazyImageIcon.java b/src/main/java/com/github/weisj/darklaf/icons/LazyImageIcon.java similarity index 97% rename from src/main/java/com/weis/darklaf/icons/LazyImageIcon.java rename to src/main/java/com/github/weisj/darklaf/icons/LazyImageIcon.java index 91d945cc..2c96071b 100644 --- a/src/main/java/com/weis/darklaf/icons/LazyImageIcon.java +++ b/src/main/java/com/github/weisj/darklaf/icons/LazyImageIcon.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/icons/RotatableIcon.java b/src/main/java/com/github/weisj/darklaf/icons/RotatableIcon.java similarity index 97% rename from src/main/java/com/weis/darklaf/icons/RotatableIcon.java rename to src/main/java/com/github/weisj/darklaf/icons/RotatableIcon.java index 9b5ce5b8..01d2c3a7 100644 --- a/src/main/java/com/weis/darklaf/icons/RotatableIcon.java +++ b/src/main/java/com/github/weisj/darklaf/icons/RotatableIcon.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.icons; +package com.github.weisj.darklaf.icons; -import com.weis.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.alignment.Alignment; import org.jetbrains.annotations.Contract; import javax.swing.*; diff --git a/src/main/java/com/github/weisj/darklaf/icons/ThemedSVGIcon.java b/src/main/java/com/github/weisj/darklaf/icons/ThemedSVGIcon.java new file mode 100644 index 00000000..0ea76016 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/icons/ThemedSVGIcon.java @@ -0,0 +1,57 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.icons; + +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.theme.Theme; +import org.jetbrains.annotations.NotNull; + +import java.awt.*; +import java.net.URI; + +/** + * @author Jannis Weis + */ +public class ThemedSVGIcon extends DarkSVGIcon { + + private Theme currentTheme; + + public ThemedSVGIcon(@NotNull final URI uri, final int displayWidth, final int displayHeight) { + super(uri, displayWidth, displayHeight); + } + + @Override + public void paintIcon(final Component c, final Graphics g, final int x, final int y) { + ensureTheme(); + super.paintIcon(c, g, x, y); + } + + private void ensureTheme() { + var theme = LafManager.getTheme(); + if (currentTheme != theme) { + IconColorMapper.patchColors(getSVGIcon()); + currentTheme = theme; + } + } +} diff --git a/src/main/java/com/github/weisj/darklaf/icons/UIAwareIcon.java b/src/main/java/com/github/weisj/darklaf/icons/UIAwareIcon.java new file mode 100644 index 00000000..32a012cd --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/icons/UIAwareIcon.java @@ -0,0 +1,34 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.icons; + +import javax.swing.*; + +/** + * @author Jannis Weis + */ +public interface UIAwareIcon extends Icon { + + UIAwareIcon getDual(); +} diff --git a/src/main/java/com/weis/darklaf/log/LogFormatter.java b/src/main/java/com/github/weisj/darklaf/log/LogFormatter.java similarity index 99% rename from src/main/java/com/weis/darklaf/log/LogFormatter.java rename to src/main/java/com/github/weisj/darklaf/log/LogFormatter.java index c009a4a9..90a0e3f1 100644 --- a/src/main/java/com/weis/darklaf/log/LogFormatter.java +++ b/src/main/java/com/github/weisj/darklaf/log/LogFormatter.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.log; +package com.github.weisj.darklaf.log; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/platform/NativeUtil.java b/src/main/java/com/github/weisj/darklaf/platform/NativeUtil.java similarity index 80% rename from src/main/java/com/weis/darklaf/platform/NativeUtil.java rename to src/main/java/com/github/weisj/darklaf/platform/NativeUtil.java index a026134c..a82eb264 100644 --- a/src/main/java/com/weis/darklaf/platform/NativeUtil.java +++ b/src/main/java/com/github/weisj/darklaf/platform/NativeUtil.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.platform; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.platform; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/platform/windows/JNIDecorations.java b/src/main/java/com/github/weisj/darklaf/platform/windows/JNIDecorations.java similarity index 67% rename from src/main/java/com/weis/darklaf/platform/windows/JNIDecorations.java rename to src/main/java/com/github/weisj/darklaf/platform/windows/JNIDecorations.java index 5aa286b4..996fef8c 100644 --- a/src/main/java/com/weis/darklaf/platform/windows/JNIDecorations.java +++ b/src/main/java/com/github/weisj/darklaf/platform/windows/JNIDecorations.java @@ -1,10 +1,33 @@ -package com.weis.darklaf.platform.windows; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.platform.windows; +import com.github.weisj.darklaf.DarkLaf; +import com.github.weisj.darklaf.platform.NativeUtil; +import com.github.weisj.darklaf.util.SystemInfo; import com.sun.jna.Native; import com.sun.jna.Pointer; -import com.weis.darklaf.DarkLaf; -import com.weis.darklaf.platform.NativeUtil; -import com.weis.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/decorators/MouseMovementListener.java b/src/main/java/com/github/weisj/darklaf/theme/DarculaTheme.java similarity index 78% rename from src/main/java/com/weis/darklaf/decorators/MouseMovementListener.java rename to src/main/java/com/github/weisj/darklaf/theme/DarculaTheme.java index e25a72dd..90b88d87 100644 --- a/src/main/java/com/weis/darklaf/decorators/MouseMovementListener.java +++ b/src/main/java/com/github/weisj/darklaf/theme/DarculaTheme.java @@ -21,17 +21,27 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.decorators; +package com.github.weisj.darklaf.theme; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; +/** + * @author Jannis Weis + */ +public class DarculaTheme extends Theme { -public interface MouseMovementListener extends MouseMotionListener { + @Override + protected String getResourcePath() { + return "darcula/"; + } @Override - default void mouseDragged(final MouseEvent e) { + public String getName() { + return "darcula"; } @Override - void mouseMoved(MouseEvent e); + public boolean isDark() { + return true; + } + + } diff --git a/src/main/java/com/github/weisj/darklaf/theme/IntelliJTheme.java b/src/main/java/com/github/weisj/darklaf/theme/IntelliJTheme.java new file mode 100644 index 00000000..d0367e27 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/theme/IntelliJTheme.java @@ -0,0 +1,67 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.theme; + +import com.github.weisj.darklaf.util.PropertyLoader; +import com.github.weisj.darklaf.util.SystemInfo; + +import javax.swing.*; +import java.util.Properties; + +/** + * @author Jannis Weis + */ +public class IntelliJTheme extends Theme { + + @Override + public void loadPlatformProperties(final Properties properties, final UIDefaults currentDefaults) { + super.loadPlatformProperties(properties, currentDefaults); + if (SystemInfo.isMac) { + var name = getResourcePath() + getName() + "_mac.properties"; + PropertyLoader.putProperties(load(name), properties, currentDefaults); + } + } + + @Override + protected String getResourcePath() { + return "intellij/"; + } + + @Override + public boolean isDark() { + return false; + } + + @Override + public String getName() { + return "intellij"; + } + + @Override + public void loadUIProperties(final Properties properties, final UIDefaults currentDefaults) { + super.loadUIProperties(properties, currentDefaults); + var name = getResourcePath() + getName() + "_ui.properties"; + PropertyLoader.putProperties(load(name), properties, currentDefaults); + } +} diff --git a/src/main/java/com/weis/darklaf/theme/SolarizedDarkTheme.java b/src/main/java/com/github/weisj/darklaf/theme/SolarizedDarkTheme.java similarity index 95% rename from src/main/java/com/weis/darklaf/theme/SolarizedDarkTheme.java rename to src/main/java/com/github/weisj/darklaf/theme/SolarizedDarkTheme.java index 6d10f451..03b9dfe4 100644 --- a/src/main/java/com/weis/darklaf/theme/SolarizedDarkTheme.java +++ b/src/main/java/com/github/weisj/darklaf/theme/SolarizedDarkTheme.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.theme; +package com.github.weisj.darklaf.theme; -import com.weis.darklaf.util.PropertyLoader; +import com.github.weisj.darklaf.util.PropertyLoader; import javax.swing.*; import java.util.Properties; diff --git a/src/main/java/com/weis/darklaf/theme/SolarizedLightTheme.java b/src/main/java/com/github/weisj/darklaf/theme/SolarizedLightTheme.java similarity index 95% rename from src/main/java/com/weis/darklaf/theme/SolarizedLightTheme.java rename to src/main/java/com/github/weisj/darklaf/theme/SolarizedLightTheme.java index b0352e60..290096de 100644 --- a/src/main/java/com/weis/darklaf/theme/SolarizedLightTheme.java +++ b/src/main/java/com/github/weisj/darklaf/theme/SolarizedLightTheme.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.theme; +package com.github.weisj.darklaf.theme; -import com.weis.darklaf.util.PropertyLoader; +import com.github.weisj.darklaf.util.PropertyLoader; import javax.swing.*; import java.util.Properties; diff --git a/src/main/java/com/weis/darklaf/theme/Theme.java b/src/main/java/com/github/weisj/darklaf/theme/Theme.java similarity index 77% rename from src/main/java/com/weis/darklaf/theme/Theme.java rename to src/main/java/com/github/weisj/darklaf/theme/Theme.java index ccaffb56..fcd1fa79 100644 --- a/src/main/java/com/weis/darklaf/theme/Theme.java +++ b/src/main/java/com/github/weisj/darklaf/theme/Theme.java @@ -1,9 +1,32 @@ -package com.weis.darklaf.theme; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.theme; -import com.weis.darklaf.DarkLaf; -import com.weis.darklaf.DarkMetalTheme; -import com.weis.darklaf.util.PropertyLoader; -import com.weis.darklaf.util.SystemInfo; +import com.github.weisj.darklaf.DarkLaf; +import com.github.weisj.darklaf.DarkMetalTheme; +import com.github.weisj.darklaf.util.PropertyLoader; +import com.github.weisj.darklaf.util.SystemInfo; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/theme/UnsupportedThemeException.java b/src/main/java/com/github/weisj/darklaf/theme/UnsupportedThemeException.java similarity index 97% rename from src/main/java/com/weis/darklaf/theme/UnsupportedThemeException.java rename to src/main/java/com/github/weisj/darklaf/theme/UnsupportedThemeException.java index 16bc46bc..102fcb51 100644 --- a/src/main/java/com/weis/darklaf/theme/UnsupportedThemeException.java +++ b/src/main/java/com/github/weisj/darklaf/theme/UnsupportedThemeException.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.theme; +package com.github.weisj.darklaf.theme; public class UnsupportedThemeException extends RuntimeException { diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java b/src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonBorder.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonBorder.java index 4ca13a20..0cfb3d20 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonBorder.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.button; +package com.github.weisj.darklaf.ui.button; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java b/src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java rename to src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonUI.java index e8922787..c4eb61df 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/button/DarkButtonUI.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.button; +package com.github.weisj.darklaf.ui.button; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; -import com.weis.darklaf.util.SystemInfo; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; @@ -100,10 +100,18 @@ public class DarkButtonUI extends BasicButtonUI { squareArc = UIManager.getInt("Button.squareArc"); } - @Contract("null -> false") - public static boolean isNoArc(final Component c) { - return c instanceof JButton - && Boolean.TRUE.equals(((JButton) c).getClientProperty("JButton.noArc")); + @Override + public void paint(final Graphics g, final JComponent c) { + GraphicsContext config = new GraphicsContext(g); + AbstractButton b = (AbstractButton) c; + paintButton(g, c); + + String text = layout(b, c, SwingUtilities2.getFontMetrics(b, g), + b.getWidth(), b.getHeight()); + + paintIcon(g, b, c); + paintText(g, b, c, text); + config.restore(); } @Override @@ -195,18 +203,20 @@ public class DarkButtonUI extends BasicButtonUI { } } - @Override - public void paint(final Graphics g, final JComponent c) { - GraphicsContext config = new GraphicsContext(g); - AbstractButton b = (AbstractButton) c; - paintButton(g, c); - - String text = layout(b, c, SwingUtilities2.getFontMetrics(b, g), - b.getWidth(), b.getHeight()); - - paintIcon(g, b, c); - paintText(g, b, c, text); - config.restore(); + protected void paintText(final Graphics g, final AbstractButton b, final JComponent c, final String text) { + var context = GraphicsUtil.setupAntialiasing(g); + if (isDefaultButton(b)) { + g.setFont(g.getFont().deriveFont(Font.BOLD)); + } + if (text != null && !text.equals("")) { + View v = (View) c.getClientProperty(BasicHTML.propertyKey); + if (v != null) { + v.paint(g, textRect); + } else { + paintText(g, b, textRect, text); + } + } + context.restore(); } private boolean shouldDrawBackground(@NotNull final JComponent c) { @@ -243,39 +253,6 @@ public class DarkButtonUI extends BasicButtonUI { && "fullShadow".equals(((JButton) c).getClientProperty("JButton.variant")); } - protected void paintText(final Graphics g, final AbstractButton b, final JComponent c, final String text) { - var context = GraphicsUtil.setupAntialiasing(g); - if (isDefaultButton(b)) { - g.setFont(g.getFont().deriveFont(Font.BOLD)); - } - if (text != null && !text.equals("")) { - View v = (View) c.getClientProperty(BasicHTML.propertyKey); - if (v != null) { - v.paint(g, textRect); - } else { - paintText(g, b, textRect, text); - } - } - context.restore(); - } - - @Contract("null -> false") - public static boolean isSquare(final Component c) { - return c instanceof JButton && "square".equals(((JButton) c).getClientProperty("JButton.buttonType")); - } - - @Contract("null -> false") - public static boolean chooseAlternativeArc(final Component c) { - return c instanceof JButton - && Boolean.TRUE.equals(((JButton) c).getClientProperty("JButton.alternativeArc")); - } - - @Contract("null -> false") - public static boolean isLabelButton(final Component c) { - return c instanceof JButton - && "onlyLabel".equals(((JButton) c).getClientProperty("JButton.variant")); - } - protected Color getBackgroundColor(@NotNull final JComponent c) { var defaultButton = isDefaultButton(c); var rollOver = (c instanceof JButton && (((JButton) c).isRolloverEnabled() @@ -304,6 +281,29 @@ public class DarkButtonUI extends BasicButtonUI { } } + @Contract("null -> false") + public static boolean isSquare(final Component c) { + return c instanceof JButton && "square".equals(((JButton) c).getClientProperty("JButton.buttonType")); + } + + @Contract("null -> false") + public static boolean chooseAlternativeArc(final Component c) { + return c instanceof JButton + && Boolean.TRUE.equals(((JButton) c).getClientProperty("JButton.alternativeArc")); + } + + @Contract("null -> false") + public static boolean isLabelButton(final Component c) { + return c instanceof JButton + && "onlyLabel".equals(((JButton) c).getClientProperty("JButton.variant")); + } + + @Contract("null -> false") + public static boolean isNoArc(final Component c) { + return c instanceof JButton + && Boolean.TRUE.equals(((JButton) c).getClientProperty("JButton.noArc")); + } + @Override public void update(final Graphics g, final JComponent c) { super.update(g, c); diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java b/src/main/java/com/github/weisj/darklaf/ui/button/DarkToggleButtonUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java rename to src/main/java/com/github/weisj/darklaf/ui/button/DarkToggleButtonUI.java index 2f4198e0..cb20b9ef 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/button/DarkToggleButtonUI.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.button; +package com.github.weisj.darklaf.ui.button; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; @@ -152,15 +152,10 @@ public class DarkToggleButtonUI extends DarkButtonUI { bounds.height, bounds.height).contains(x, y); } - @NotNull - private Rectangle getSliderBounds(@NotNull final JComponent c) { - int x = borderSize; - int y = (c.getHeight() - sliderSize.height) / 2; - rect.x = x; - rect.y = y; - rect.width = sliderSize.width; - rect.height = sliderSize.height; - return rect; + @Contract("null -> false") + private static boolean isSlider(final JComponent c) { + return c instanceof JToggleButton + && "slider".equals(c.getClientProperty("ToggleButton.variant")); } private void paintSlider(@NotNull final Graphics2D g, final AbstractButton c) { @@ -196,10 +191,15 @@ public class DarkToggleButtonUI extends DarkButtonUI { config.restore(); } - @Contract("null -> false") - private static boolean isSlider(final JComponent c) { - return c instanceof JToggleButton - && "slider".equals(c.getClientProperty("ToggleButton.variant")); + @NotNull + private Rectangle getSliderBounds(@NotNull final JComponent c) { + int x = borderSize; + int y = (c.getHeight() - sliderSize.height) / 2; + rect.x = x; + rect.y = y; + rect.width = sliderSize.width; + rect.height = sliderSize.height; + return rect; } protected Color getToggleBorderColor(@NotNull final AbstractButton b) { diff --git a/src/main/java/com/weis/darklaf/ui/cell/CellEditorToggleButton.java b/src/main/java/com/github/weisj/darklaf/ui/cell/CellEditorToggleButton.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/cell/CellEditorToggleButton.java rename to src/main/java/com/github/weisj/darklaf/ui/cell/CellEditorToggleButton.java index 2ae10fea..74866962 100644 --- a/src/main/java/com/weis/darklaf/ui/cell/CellEditorToggleButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/cell/CellEditorToggleButton.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.cell; +package com.github.weisj.darklaf.ui.cell; /** * @author Jannis Weis diff --git a/src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellBorder.java b/src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellBorder.java new file mode 100644 index 00000000..dd533249 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellBorder.java @@ -0,0 +1,37 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.cell; + +import javax.swing.border.EmptyBorder; +import javax.swing.plaf.UIResource; + +/** + * @author Jannis Weis + */ +public class DarkCellBorder extends EmptyBorder implements UIResource { + + public DarkCellBorder() { + super(2, 5, 2, 5); + } +} diff --git a/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java b/src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellRendererToggleButton.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java rename to src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellRendererToggleButton.java index 42120836..f26c953b 100644 --- a/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/cell/DarkCellRendererToggleButton.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.cell; +package com.github.weisj.darklaf.ui.cell; -import com.weis.darklaf.components.SelectableTreeNode; -import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.ui.tree.DarkTreeCellRenderer; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.SelectableTreeNode; +import com.github.weisj.darklaf.decorators.CellRenderer; +import com.github.weisj.darklaf.ui.tree.DarkTreeCellRenderer; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxBorder.java b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxBorder.java new file mode 100644 index 00000000..a31dec1e --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxBorder.java @@ -0,0 +1,73 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.checkbox; + + +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.SystemInfo; + +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.plaf.InsetsUIResource; +import javax.swing.plaf.UIResource; +import java.awt.*; + +/** + * @author Jannis Weis + */ +public class DarkCheckBoxBorder implements Border, UIResource { + + @Override + public void paintBorder(final Component c, final Graphics g, final int x, final int y, + final int width, final int height) { + } + + @Override + public Insets getBorderInsets(final Component c) { + if (isInCell(c)) { + return new Insets(0, 0, 0, 0); + } + final int a = SystemInfo.isMac ? 2 : 4; + return new InsetsUIResource(a, a, a, a); + } + + protected boolean isInCell(final Component c) { + return isTreeCellEditor(c) || isTableCellEditor(c) || DarkUIUtil.isInCell(c); + } + + protected boolean isTreeCellEditor(final Component c) { + return c instanceof JComponent + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); + } + + protected boolean isTableCellEditor(final Component c) { + return c instanceof JComponent + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); + } + + @Override + public boolean isBorderOpaque() { + return false; + } +} diff --git a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java similarity index 69% rename from src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java rename to src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java index 0fdd825c..adc8df85 100644 --- a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxMenuItemUI.java @@ -1,9 +1,32 @@ -package com.weis.darklaf.ui.checkbox; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.checkbox; -import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.ui.menu.DarkMenuItemUIBase; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.decorators.MouseClickListener; +import com.github.weisj.darklaf.ui.menu.DarkMenuItemUIBase; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.MenuItemLayoutHelper; diff --git a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxUI.java b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxUI.java rename to src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxUI.java index e47b50d3..1b8f9270 100644 --- a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/checkbox/DarkCheckBoxUI.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.checkbox; +package com.github.weisj.darklaf.ui.checkbox; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPipette.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPipette.java similarity index 89% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorPipette.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPipette.java index 7b0e056c..0c329ec2 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPipette.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPipette.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license /* * MIT License * @@ -22,9 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.components.Disposable; +package com.github.weisj.darklaf.ui.colorchooser; + +import com.github.weisj.darklaf.components.Disposable; import org.jetbrains.annotations.Nullable; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPreviewComponent.java similarity index 54% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPreviewComponent.java index a9e0adc7..6b870a1f 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorPreviewComponent.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.colorchooser; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.colorchooser; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorValueFormatter.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorValueFormatter.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorValueFormatter.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorValueFormatter.java index d4ff952d..064a4e11 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorValueFormatter.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorValueFormatter.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; +package com.github.weisj.darklaf.ui.colorchooser; -import com.weis.darklaf.color.DarkColorModel; +import com.github.weisj.darklaf.color.DarkColorModel; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheel.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheel.java index 8d72ef5d..d56203d1 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheel.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; +package com.github.weisj.darklaf.ui.colorchooser; -import com.weis.darklaf.util.ColorUtil; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.ColorUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelImageProducer.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelImageProducer.java similarity index 70% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelImageProducer.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelImageProducer.java index c39d4454..3c90c1f5 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelImageProducer.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelImageProducer.java @@ -1,5 +1,27 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license -package com.weis.darklaf.ui.colorchooser; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.colorchooser; import java.awt.*; import java.awt.image.ColorModel; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelPanel.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelPanel.java index dccfb4b2..66961910 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheelPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/ColorWheelPanel.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license /* * MIT License * @@ -22,7 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; + +package com.github.weisj.darklaf.ui.colorchooser; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserPanel.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserPanel.java index e0e36089..5ef51086 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserPanel.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license /* * MIT License * @@ -22,12 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.color.DarkColorModel; -import com.weis.darklaf.components.DefaultColorPipette; -import com.weis.darklaf.decorators.AncestorAdapter; -import com.weis.darklaf.util.ColorUtil; +package com.github.weisj.darklaf.ui.colorchooser; + +import com.github.weisj.darklaf.color.DarkColorModel; +import com.github.weisj.darklaf.components.DefaultColorPipette; +import com.github.weisj.darklaf.decorators.AncestorAdapter; +import com.github.weisj.darklaf.util.ColorUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -332,9 +332,6 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements @Override public int getDisplayedMnemonicIndex() { return 6; - } @Override - public boolean isColorTransparencySelectionEnabled() { - return colorWheelPanel.isColorTransparencySelectionEnabled(); } @Override @@ -342,26 +339,14 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements return null; } + @Override + public boolean isColorTransparencySelectionEnabled() { + return colorWheelPanel.isColorTransparencySelectionEnabled(); + } + @Override public Icon getLargeDisplayIcon() { return null; - } @Override - public void setColorTransparencySelectionEnabled(final boolean b) { - boolean oldValue = isColorTransparencySelectionEnabled(); - if (b != oldValue) { - var color = getColorFromModel(); - color = new Color(color.getRed(), color.getBlue(), color.getGreen()); - var model = getColorSelectionModel(); - if (model != null) { - model.setSelectedColor(color); - } - currentColor = color; - hexFormatter.setTransparencyEnabled(b); - colorWheelPanel.setColorTransparencySelectionEnabled(b); - applyColorToHEX(getColorFromModel()); - firePropertyChange(TRANSPARENCY_ENABLED_PROPERTY, - oldValue, b); - } } @Override @@ -392,6 +377,25 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements isChanging = false; } + @Override + public void setColorTransparencySelectionEnabled(final boolean b) { + boolean oldValue = isColorTransparencySelectionEnabled(); + if (b != oldValue) { + var color = getColorFromModel(); + color = new Color(color.getRed(), color.getBlue(), color.getGreen()); + var model = getColorSelectionModel(); + if (model != null) { + model.setSelectedColor(color); + } + currentColor = color; + hexFormatter.setTransparencyEnabled(b); + colorWheelPanel.setColorTransparencySelectionEnabled(b); + applyColorToHEX(getColorFromModel()); + firePropertyChange(TRANSPARENCY_ENABLED_PROPERTY, + oldValue, b); + } + } + private void applyColorToHEX(@NotNull final Color c) { boolean changingOld = isChanging; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserUI.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserUI.java similarity index 93% rename from src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserUI.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserUI.java index 87f5b49c..f1e6f232 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkColorChooserUI.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; +package com.github.weisj.darklaf.ui.colorchooser; -import com.weis.darklaf.color.DarkColorModel; -import com.weis.darklaf.color.DarkColorModelCMYK; -import com.weis.darklaf.color.DarkColorModelHSL; -import com.weis.darklaf.decorators.AncestorAdapter; +import com.github.weisj.darklaf.color.DarkColorModel; +import com.github.weisj.darklaf.color.DarkColorModelCMYK; +import com.github.weisj.darklaf.color.DarkColorModelHSL; +import com.github.weisj.darklaf.decorators.AncestorAdapter; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkPreviewPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkPreviewPanel.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/colorchooser/DarkPreviewPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkPreviewPanel.java index 2853a3f6..06763449 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkPreviewPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkPreviewPanel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; +package com.github.weisj.darklaf.ui.colorchooser; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java index d6acd82a..bd156ace 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; +package com.github.weisj.darklaf.ui.colorchooser; import javax.accessibility.AccessibleContext; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/MainSwatchPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/MainSwatchPanel.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/colorchooser/MainSwatchPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/MainSwatchPanel.java index 0809d113..1d9ecd9a 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/MainSwatchPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/MainSwatchPanel.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.colorchooser; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.colorchooser; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/RecentSwatchPanel.java similarity index 53% rename from src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/RecentSwatchPanel.java index 916e8727..e226549c 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/RecentSwatchPanel.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.colorchooser; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.colorchooser; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/SlideComponent.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/SlideComponent.java index a0ee3088..9d6cda2f 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/SlideComponent.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license /* * MIT License * @@ -22,12 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.util.ColorUtil; -import com.weis.darklaf.util.DarkUIUtil; +package com.github.weisj.darklaf.ui.colorchooser; + +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tooltip.ToolTipContext; +import com.github.weisj.darklaf.util.ColorUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/SwatchPanel.java similarity index 84% rename from src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/colorchooser/SwatchPanel.java index d7359468..7b18e9b5 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/colorchooser/SwatchPanel.java @@ -1,9 +1,32 @@ -package com.weis.darklaf.ui.colorchooser; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.colorchooser; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tooltip.ToolTipContext; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java b/src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboBoxUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java rename to src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboBoxUI.java index 17648f0f..87c5ca2e 100644 --- a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboBoxUI.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.combobox; +package com.github.weisj.darklaf.ui.combobox; -import com.weis.darklaf.components.ArrowButton; -import com.weis.darklaf.ui.list.DarkListCellRenderer; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.components.ArrowButton; +import com.github.weisj.darklaf.ui.list.DarkListCellRenderer; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -184,6 +184,32 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { paintCurrentValue(g, r, hasFocus); } + private void paintBackground(final Graphics g, @NotNull final JComponent c, final int width, final int height) { + final Container parent = c.getParent(); + if (parent != null && parent.isOpaque()) { + g.setColor(parent.getBackground()); + g.fillRect(0, 0, c.getWidth(), c.getHeight()); + } + if (comboBox.isEditable() && comboBox.getEditor() != null) { + g.setColor(comboBox.getEditor().getEditorComponent().getBackground()); + } else { + g.setColor(getBackground(comboBox)); + } + if (!isTableCellEditor(c) && !isTreeCellEditor(c)) { + DarkUIUtil.fillRoundRect((Graphics2D) g, borderSize, borderSize, + width - 2 * borderSize, height - 2 * borderSize, + arcSize); + } else { + g.fillRect(0, 0, width, height); + } + } + + protected Color getBackground(final JComboBox c) { + if (!c.isEnabled()) return inactiveBackground; + if (c.isEditable()) return editBackground; + return background; + } + protected static boolean isTableCellEditor(@NotNull final Component c) { return c instanceof JComponent && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JComboBox.isTableCellEditor")); @@ -194,6 +220,38 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JComboBox.isTreeCellEditor")); } + private Color getForeground() { + return comboBox.isEnabled() ? comboBox.getForeground() : inactiveForeground; + } + + @Override + public Dimension getPreferredSize(final JComponent c) { + return getMinimumSize(c); + } + + @Override + public Dimension getMinimumSize(final JComponent c) { + if (!isMinimumSizeDirty) { + return new Dimension(cachedMinimumSize); + } + Dimension size = getDisplaySize(); + Insets insets = getInsets(); + //calculate the width and height of the button + int buttonHeight = size.height; + int buttonWidth = squareButton + ? buttonHeight + : arrowButton.getPreferredSize().width + + arrowButton.getInsets().left + arrowButton.getInsets().right; + //adjust the size based on the button width + size.height += insets.top + insets.bottom; + size.width += insets.left + insets.right + buttonWidth; + + cachedMinimumSize.setSize(size.width, size.height); + isMinimumSizeDirty = false; + + return new Dimension(size); + } + @Override protected Rectangle rectangleForCurrentValue() { var rect = super.rectangleForCurrentValue(); @@ -250,64 +308,6 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { } } - private void paintBackground(final Graphics g, @NotNull final JComponent c, final int width, final int height) { - final Container parent = c.getParent(); - if (parent != null && parent.isOpaque()) { - g.setColor(parent.getBackground()); - g.fillRect(0, 0, c.getWidth(), c.getHeight()); - } - if (comboBox.isEditable() && comboBox.getEditor() != null) { - g.setColor(comboBox.getEditor().getEditorComponent().getBackground()); - } else { - g.setColor(getBackground(comboBox)); - } - if (!isTableCellEditor(c) && !isTreeCellEditor(c)) { - DarkUIUtil.fillRoundRect((Graphics2D) g, borderSize, borderSize, - width - 2 * borderSize, height - 2 * borderSize, - arcSize); - } else { - g.fillRect(0, 0, width, height); - } - } - - protected Color getBackground(final JComboBox c) { - if (!c.isEnabled()) return inactiveBackground; - if (c.isEditable()) return editBackground; - return background; - } - - @Override - public Dimension getPreferredSize(final JComponent c) { - return getMinimumSize(c); - } - - @Override - public Dimension getMinimumSize(final JComponent c) { - if (!isMinimumSizeDirty) { - return new Dimension(cachedMinimumSize); - } - Dimension size = getDisplaySize(); - Insets insets = getInsets(); - //calculate the width and height of the button - int buttonHeight = size.height; - int buttonWidth = squareButton - ? buttonHeight - : arrowButton.getPreferredSize().width - + arrowButton.getInsets().left + arrowButton.getInsets().right; - //adjust the size based on the button width - size.height += insets.top + insets.bottom; - size.width += insets.left + insets.right + buttonWidth; - - cachedMinimumSize.setSize(size.width, size.height); - isMinimumSizeDirty = false; - - return new Dimension(size); - } - - private Color getForeground() { - return comboBox.isEnabled() ? comboBox.getForeground() : inactiveForeground; - } - @Override public void paintBorder(final Component c, final Graphics g2, final int x, final int y, final int width, final int height) { diff --git a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboPopup.java b/src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboPopup.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/combobox/DarkComboPopup.java rename to src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboPopup.java index 55b7b5b1..786bc9c7 100644 --- a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboPopup.java +++ b/src/main/java/com/github/weisj/darklaf/ui/combobox/DarkComboPopup.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.combobox; +package com.github.weisj.darklaf.ui.combobox; -import com.weis.darklaf.components.OverlayScrollPane; +import com.github.weisj.darklaf.components.OverlayScrollPane; import javax.swing.*; import javax.swing.plaf.basic.BasicComboPopup; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java index 292685ce..86cddede 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUI.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUI.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUI.java index 18453ac7..3700bde4 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUI.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; -import com.weis.darklaf.components.tooltip.TooltipAwareButton; -import com.weis.darklaf.components.tooltip.TooltipAwareToggleButton; +import com.github.weisj.darklaf.components.tooltip.TooltipAwareButton; +import com.github.weisj.darklaf.components.tooltip.TooltipAwareToggleButton; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.FilePane; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUIBridge.java index 839bf72b..16f45a40 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFileChooserUIBridge.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; import sun.awt.shell.ShellFolder; import sun.swing.FilePane; @@ -1226,15 +1226,15 @@ public class DarkFileChooserUIBridge extends BasicFileChooserUI { return directories.size(); } + public Object getElementAt(final int index) { + return directories.elementAt(index); + } + public void setSelectedItem(final Object selectedDirectory) { this.selectedDirectory = (File) selectedDirectory; fireContentsChanged(this, -1, -1); } - public Object getElementAt(final int index) { - return directories.elementAt(index); - } - public Object getSelectedItem() { return selectedDirectory; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePane.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePane.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePane.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePane.java index dfdccfbb..14edcd58 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePane.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePane.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; -import com.weis.darklaf.components.OverlayScrollPane; -import com.weis.darklaf.ui.table.TextFieldTableCellEditorBorder; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.OverlayScrollPane; +import com.github.weisj.darklaf.ui.table.TextFieldTableCellEditorBorder; +import com.github.weisj.darklaf.util.DarkUIUtil; import sun.awt.AWTAccessor; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePaneUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePaneUIBridge.java index 87db2079..b2de67c7 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/DarkFilePaneUIBridge.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; -import com.weis.darklaf.ui.list.DarkListCellRenderer; -import com.weis.darklaf.ui.table.DarkTableCellEditor; -import com.weis.darklaf.ui.table.DarkTableCellRenderer; -import com.weis.darklaf.ui.table.TextFieldTableCellEditorBorder; +import com.github.weisj.darklaf.ui.list.DarkListCellRenderer; +import com.github.weisj.darklaf.ui.table.DarkTableCellEditor; +import com.github.weisj.darklaf.ui.table.DarkTableCellRenderer; +import com.github.weisj.darklaf.ui.table.TextFieldTableCellEditorBorder; import org.jetbrains.annotations.NotNull; import sun.awt.AWTAccessor; import sun.awt.shell.ShellFolder; diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/FileTextField.java b/src/main/java/com/github/weisj/darklaf/ui/filechooser/FileTextField.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/filechooser/FileTextField.java rename to src/main/java/com/github/weisj/darklaf/ui/filechooser/FileTextField.java index 7a43e36f..2520ecec 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/FileTextField.java +++ b/src/main/java/com/github/weisj/darklaf/ui/filechooser/FileTextField.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.filechooser; +package com.github.weisj.darklaf.ui.filechooser; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/html/DarkHTML.java b/src/main/java/com/github/weisj/darklaf/ui/html/DarkHTML.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/html/DarkHTML.java rename to src/main/java/com/github/weisj/darklaf/ui/html/DarkHTML.java index 99a802b6..dd3d6b14 100644 --- a/src/main/java/com/weis/darklaf/ui/html/DarkHTML.java +++ b/src/main/java/com/github/weisj/darklaf/ui/html/DarkHTML.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.html; +package com.github.weisj.darklaf.ui.html; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.AttributeSet; diff --git a/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconBorder.java b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconBorder.java new file mode 100644 index 00000000..0fb246cb --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconBorder.java @@ -0,0 +1,40 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.internalframe; + +import com.github.weisj.darklaf.components.border.MutableLineBorder; + +import javax.swing.*; +import javax.swing.plaf.UIResource; + +/** + * @author Jannis Weis + */ +public class DarkDesktopIconBorder extends MutableLineBorder implements UIResource { + + public DarkDesktopIconBorder() { + super(1, 1, 1, 1, null); + setColor(UIManager.getColor("DesktopIcon.borderColor")); + } +} diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconUI.java similarity index 74% rename from src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java rename to src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconUI.java index 36b43f75..04d4525b 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkDesktopIconUI.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.internalframe; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.internalframe; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameBorder.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameBorder.java index c3c29182..87f2de41 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.internalframe; +package com.github.weisj.darklaf.ui.internalframe; -import com.weis.darklaf.components.border.DropShadowBorder; +import com.github.weisj.darklaf.components.border.DropShadowBorder; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java rename to src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java index 6d345dd2..e735cd7f 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java +++ b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java @@ -1,8 +1,31 @@ -package com.weis.darklaf.ui.internalframe; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.internalframe; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.ui.rootpane.TitlePaneIcon; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.ui.rootpane.TitlePaneIcon; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; @@ -43,19 +66,26 @@ public class DarkInternalFrameTitlePane extends BasicInternalFrameTitlePane { super(f); } - private static int getButtonMnemonic(final String button) { - try { - return Integer.parseInt(UIManager.getString("InternalFrameTitlePane." + button + "Button.mnemonic")); - } catch (NumberFormatException e) { - return -1; - } - } - @Override protected void installTitlePane() { super.installTitlePane(); } + @Override + protected void addSubComponents() { + super.addSubComponents(); + label = new JLabel(); + label.setOpaque(false); + if (menu != null) { + menu = frame.getJMenuBar(); + frame.getRootPane().setJMenuBar(null); + } + if (menu != null) { + add(menu); + } + add(label); + } + @Override protected void installListeners() { super.installListeners(); @@ -146,19 +176,12 @@ public class DarkInternalFrameTitlePane extends BasicInternalFrameTitlePane { mi.setIcon(closeIcon); } - @Override - protected void addSubComponents() { - super.addSubComponents(); - label = new JLabel(); - label.setOpaque(false); - if (menu != null) { - menu = frame.getJMenuBar(); - frame.getRootPane().setJMenuBar(null); - } - if (menu != null) { - add(menu); + private static int getButtonMnemonic(final String button) { + try { + return Integer.parseInt(UIManager.getString("InternalFrameTitlePane." + button + "Button.mnemonic")); + } catch (NumberFormatException e) { + return -1; } - add(label); } @Override diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameUI.java b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameUI.java rename to src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameUI.java index 0b6c7829..4c8f614a 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/internalframe/DarkInternalFrameUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.internalframe; +package com.github.weisj.darklaf.ui.internalframe; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java b/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java new file mode 100644 index 00000000..cd2b164c --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.label; + +import org.jetbrains.annotations.Contract; + +import javax.swing.*; +import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.basic.BasicLabelUI; + +/** + * @author Jannis Weis + */ +public class DarkLabelUI extends BasicLabelUI { + + protected static final DarkLabelUI darkLabelUI = new DarkLabelUI(); + + @Contract(pure = true) + public static ComponentUI createUI(final JComponent c) { + return darkLabelUI; + } +} diff --git a/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellBorder.java b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellBorder.java new file mode 100644 index 00000000..00e76fc2 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellBorder.java @@ -0,0 +1,32 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.list; + +import com.github.weisj.darklaf.ui.cell.DarkCellBorder; + +/** + * @author Jannis Weis + */ +public class DarkListCellBorder extends DarkCellBorder { +} diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellFocusBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellFocusBorder.java index 7c5966db..cd353337 100644 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellFocusBorder.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.list; +package com.github.weisj.darklaf.ui.list; -import com.weis.darklaf.ui.cell.DarkCellBorder; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.ui.cell.DarkCellBorder; +import com.github.weisj.darklaf.util.DarkUIUtil; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListCellRenderer.java b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/list/DarkListCellRenderer.java rename to src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java index 36bb2a2f..89e61322 100644 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListCellRenderer.java +++ b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.list; +package com.github.weisj.darklaf.ui.list; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListUI.java b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java similarity index 87% rename from src/main/java/com/weis/darklaf/ui/list/DarkListUI.java rename to src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java index 5b8837dc..b585f81a 100644 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.list; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.list; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/list/DarkListUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java index 918a89c1..b0d676d9 100644 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.list; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.list; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.LazyActionMap; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.LazyActionMap; import org.jdesktop.swingx.plaf.basic.core.BasicTransferable; import org.jdesktop.swingx.plaf.basic.core.DragRecognitionSupport; import sun.swing.DefaultLookup; @@ -1002,6 +1025,19 @@ public class DarkListUIBridge extends BasicListUI { return getHandler(); } + /** + * Returns the closest location to the model index of the passed in location. + */ + protected int convertLocationToModel(final int x, final int y) { + int row = convertLocationToRow(x, y, true); + int column = convertLocationToColumn(x, y); + + if (row >= 0 && column >= 0) { + return getModelIndex(column, row); + } + return -1; + } + /** * Returns the row at location x/y. * @@ -1047,19 +1083,6 @@ public class DarkListUIBridge extends BasicListUI { } } - /** - * Returns the closest location to the model index of the passed in location. - */ - protected int convertLocationToModel(final int x, final int y) { - int row = convertLocationToRow(x, y, true); - int column = convertLocationToColumn(x, y); - - if (row >= 0 && column >= 0) { - return getModelIndex(column, row); - } - return -1; - } - /** * Returns the closest column to the passed in location. */ @@ -1102,6 +1125,84 @@ public class DarkListUIBridge extends BasicListUI { } } + /** + * Invoked when the list is layed out horizontally to determine how many columns to create. + *

+ * This updates the rowsPerColumn, columnCount, + * preferredHeight and potentially cellHeight + * instance variables. + */ + protected void updateHorizontalLayoutState(final int fixedCellWidth, + final int fixedCellHeight) { + int visRows = list.getVisibleRowCount(); + int dataModelSize = list.getModel().getSize(); + Insets insets = list.getInsets(); + + listHeight = list.getHeight(); + listWidth = list.getWidth(); + + if (dataModelSize == 0) { + rowsPerColumn = columnCount = 0; + preferredHeight = insets.top + insets.bottom; + return; + } + + int height; + + if (fixedCellHeight != -1) { + height = fixedCellHeight; + } else { + // Determine the max of the renderer heights. + int maxHeight = 0; + if (cellHeights.length > 0) { + maxHeight = cellHeights[cellHeights.length - 1]; + for (int counter = cellHeights.length - 2; + counter >= 0; counter--) { + maxHeight = Math.max(maxHeight, cellHeights[counter]); + } + } + height = cellHeight = maxHeight; + cellHeights = null; + } + // The number of rows is either determined by the visible row + // count, or by the height of the list. + rowsPerColumn = dataModelSize; + if (visRows > 0) { + rowsPerColumn = visRows; + columnCount = Math.max(1, dataModelSize / rowsPerColumn); + if (dataModelSize > 0 && dataModelSize > rowsPerColumn && + dataModelSize % rowsPerColumn != 0) { + columnCount++; + } + if (layoutOrientation == JList.HORIZONTAL_WRAP) { + // Because HORIZONTAL_WRAP flows differently, the + // rowsPerColumn needs to be adjusted. + rowsPerColumn = (dataModelSize / columnCount); + if (dataModelSize % columnCount > 0) { + rowsPerColumn++; + } + } + } else if (layoutOrientation == JList.VERTICAL_WRAP && height != 0) { + rowsPerColumn = Math.max(1, (listHeight - insets.top - + insets.bottom) / height); + columnCount = Math.max(1, dataModelSize / rowsPerColumn); + if (dataModelSize > 0 && dataModelSize > rowsPerColumn && + dataModelSize % rowsPerColumn != 0) { + columnCount++; + } + } else if (layoutOrientation == JList.HORIZONTAL_WRAP && cellWidth > 0 && + listWidth > 0) { + columnCount = Math.max(1, (listWidth - insets.left - + insets.right) / cellWidth); + rowsPerColumn = dataModelSize / columnCount; + if (dataModelSize % columnCount > 0) { + rowsPerColumn++; + } + } + preferredHeight = rowsPerColumn * cellHeight + insets.top + + insets.bottom; + } + /** * Gets the bounds of the specified model index, returning the resulting bounds, or null if index is * not valid. @@ -1457,84 +1558,6 @@ public class DarkListUIBridge extends BasicListUI { return rowsPerColumn; } - /** - * Invoked when the list is layed out horizontally to determine how many columns to create. - *

- * This updates the rowsPerColumn, columnCount, - * preferredHeight and potentially cellHeight - * instance variables. - */ - protected void updateHorizontalLayoutState(final int fixedCellWidth, - final int fixedCellHeight) { - int visRows = list.getVisibleRowCount(); - int dataModelSize = list.getModel().getSize(); - Insets insets = list.getInsets(); - - listHeight = list.getHeight(); - listWidth = list.getWidth(); - - if (dataModelSize == 0) { - rowsPerColumn = columnCount = 0; - preferredHeight = insets.top + insets.bottom; - return; - } - - int height; - - if (fixedCellHeight != -1) { - height = fixedCellHeight; - } else { - // Determine the max of the renderer heights. - int maxHeight = 0; - if (cellHeights.length > 0) { - maxHeight = cellHeights[cellHeights.length - 1]; - for (int counter = cellHeights.length - 2; - counter >= 0; counter--) { - maxHeight = Math.max(maxHeight, cellHeights[counter]); - } - } - height = cellHeight = maxHeight; - cellHeights = null; - } - // The number of rows is either determined by the visible row - // count, or by the height of the list. - rowsPerColumn = dataModelSize; - if (visRows > 0) { - rowsPerColumn = visRows; - columnCount = Math.max(1, dataModelSize / rowsPerColumn); - if (dataModelSize > 0 && dataModelSize > rowsPerColumn && - dataModelSize % rowsPerColumn != 0) { - columnCount++; - } - if (layoutOrientation == JList.HORIZONTAL_WRAP) { - // Because HORIZONTAL_WRAP flows differently, the - // rowsPerColumn needs to be adjusted. - rowsPerColumn = (dataModelSize / columnCount); - if (dataModelSize % columnCount > 0) { - rowsPerColumn++; - } - } - } else if (layoutOrientation == JList.VERTICAL_WRAP && height != 0) { - rowsPerColumn = Math.max(1, (listHeight - insets.top - - insets.bottom) / height); - columnCount = Math.max(1, dataModelSize / rowsPerColumn); - if (dataModelSize > 0 && dataModelSize > rowsPerColumn && - dataModelSize % rowsPerColumn != 0) { - columnCount++; - } - } else if (layoutOrientation == JList.HORIZONTAL_WRAP && cellWidth > 0 && - listWidth > 0) { - columnCount = Math.max(1, (listWidth - insets.left - - insets.right) / cellWidth); - rowsPerColumn = dataModelSize / columnCount; - if (dataModelSize % columnCount > 0) { - rowsPerColumn++; - } - } - preferredHeight = rowsPerColumn * cellHeight + insets.top + - insets.bottom; - } - /** * Returns the closest row that starts at the specified y-location in the passed in column. */ diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarBorder.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarBorder.java index b51e660e..21ef8f0a 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarUI.java index 9cebf862..e38a04c7 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuBarUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemBorder.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemBorder.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemBorder.java index b35d8178..33d9d927 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; import javax.swing.plaf.BorderUIResource; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemUIBase.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemUIBase.java index 7b36b560..211f83a1 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuItemUIBase.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.LazyActionMap; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.LazyActionMap; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.MenuItemLayoutHelper; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuUI.java index 99f5f4f8..38429886 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkMenuUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import sun.swing.MenuItemLayoutHelper; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuBorder.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuBorder.java similarity index 94% rename from src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuBorder.java index 8a03c68e..77e6b656 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java similarity index 94% rename from src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java index 1433453e..5fcef83a 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuSeparatorUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; -import com.weis.darklaf.ui.separator.DarkSeparatorUI; +import com.github.weisj.darklaf.ui.separator.DarkSeparatorUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuUI.java b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuUI.java rename to src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuUI.java index 85ae3b73..946e7c53 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkPopupMenuUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/menu/DarkPopupMenuUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.menu; +package com.github.weisj.darklaf.ui.menu; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/optionpane/DarkOptionPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/optionpane/DarkOptionPaneUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/optionpane/DarkOptionPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/optionpane/DarkOptionPaneUI.java index 1a5e278d..7262e496 100644 --- a/src/main/java/com/weis/darklaf/ui/optionpane/DarkOptionPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/optionpane/DarkOptionPaneUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.optionpane; +package com.github.weisj.darklaf.ui.optionpane; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/panel/DarkPanelUI.java b/src/main/java/com/github/weisj/darklaf/ui/panel/DarkPanelUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/panel/DarkPanelUI.java rename to src/main/java/com/github/weisj/darklaf/ui/panel/DarkPanelUI.java index cfc20201..99516d23 100644 --- a/src/main/java/com/weis/darklaf/ui/panel/DarkPanelUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/panel/DarkPanelUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.panel; +package com.github.weisj.darklaf.ui.panel; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarBorder.java b/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarBorder.java new file mode 100644 index 00000000..625a4d09 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarBorder.java @@ -0,0 +1,36 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.progressbar; + +import javax.swing.plaf.BorderUIResource; + +/** + * @author Konstantin Bulenkov + * @author Jannis Weis + */ +public class DarkProgressBarBorder extends BorderUIResource.EmptyBorderUIResource { + public DarkProgressBarBorder() { + super(0, 0, 0, 0); + } +} diff --git a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java b/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java rename to src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java index 1f3200b1..bda25a70 100644 --- a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.progressbar; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.progressbar; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -55,8 +78,9 @@ public class DarkProgressBarUI extends BasicProgressBarUI { passedEndColor = UIManager.getColor("ProgressBar.passedEndColor"); } - protected static boolean hasFailed(@NotNull final JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty("JProgressBar.failed")); + @Override + protected int getBoxLength(final int availableLength, final int otherDimension) { + return availableLength; } @Override @@ -144,6 +168,58 @@ public class DarkProgressBarUI extends BasicProgressBarUI { } } + protected static boolean hasFailed(@NotNull final JComponent c) { + return Boolean.TRUE.equals(c.getClientProperty("JProgressBar.failed")); + } + + protected static boolean hasPassed(@NotNull final JComponent c) { + return Boolean.TRUE.equals(c.getClientProperty("JProgressBar.passed")); + } + + protected Color getStartColor() { + return indeterminateStartColor; + } + + protected Color getEndColor() { + return indeterminateEndColor; + } + + @NotNull + @Contract("_, _, _, _, _ -> new") + private Shape getShapedRect(final float x, final float y, final float w, final float h, final float ar) { + return new RoundRectangle2D.Float(x, y, w, h, ar, ar); + } + + private void paintString(@NotNull final Graphics2D g, final int x, final int y, + final int w, final int h, final int fillStart, final int amountFull) { + String progressString = progressBar.getString(); + g.setFont(progressBar.getFont()); + Point renderLocation = getStringPlacement(g, progressString, x, y, w, h); + + var config = GraphicsUtil.setupAAPainting(g); + if (progressBar.getOrientation() == SwingConstants.HORIZONTAL) { + g.setColor(getSelectionBackground()); + g.drawString(progressString, renderLocation.x, renderLocation.y); + + g.setColor(getSelectionForeground()); + g.clipRect(fillStart, y, amountFull, h); + g.drawString(progressString, renderLocation.x, renderLocation.y); + + } else { // VERTICAL + g.setColor(getSelectionBackground()); + AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2); + g.setFont(progressBar.getFont().deriveFont(rotate)); + renderLocation = getStringPlacement(g, progressString, x, y, w, h); + g.drawString(progressString, renderLocation.x, renderLocation.y); + + g.setColor(getSelectionForeground()); + g.clipRect(x, fillStart, w, amountFull); + + g.drawString(progressString, renderLocation.x, renderLocation.y); + } + config.restore(); + } + @Override protected void paintDeterminate(@NotNull final Graphics g, final JComponent c) { Graphics2D g2 = (Graphics2D) g.create(); @@ -235,59 +311,6 @@ public class DarkProgressBarUI extends BasicProgressBarUI { } } - protected static boolean hasPassed(@NotNull final JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty("JProgressBar.passed")); - } - - @Override - protected int getBoxLength(final int availableLength, final int otherDimension) { - return availableLength; - } - - protected Color getStartColor() { - return indeterminateStartColor; - } - - protected Color getEndColor() { - return indeterminateEndColor; - } - - @NotNull - @Contract("_, _, _, _, _ -> new") - private Shape getShapedRect(final float x, final float y, final float w, final float h, final float ar) { - return new RoundRectangle2D.Float(x, y, w, h, ar, ar); - } - - private void paintString(@NotNull final Graphics2D g, final int x, final int y, - final int w, final int h, final int fillStart, final int amountFull) { - String progressString = progressBar.getString(); - g.setFont(progressBar.getFont()); - Point renderLocation = getStringPlacement(g, progressString, x, y, w, h); - - var config = GraphicsUtil.setupAAPainting(g); - if (progressBar.getOrientation() == SwingConstants.HORIZONTAL) { - g.setColor(getSelectionBackground()); - g.drawString(progressString, renderLocation.x, renderLocation.y); - - g.setColor(getSelectionForeground()); - g.clipRect(fillStart, y, amountFull, h); - g.drawString(progressString, renderLocation.x, renderLocation.y); - - } else { // VERTICAL - g.setColor(getSelectionBackground()); - AffineTransform rotate = AffineTransform.getRotateInstance(Math.PI / 2); - g.setFont(progressBar.getFont().deriveFont(rotate)); - renderLocation = getStringPlacement(g, progressString, x, y, w, h); - g.drawString(progressString, renderLocation.x, renderLocation.y); - - g.setColor(getSelectionForeground()); - g.clipRect(x, fillStart, w, amountFull); - - g.drawString(progressString, renderLocation.x, renderLocation.y); - } - config.restore(); - } - @Contract(pure = true) private static boolean isSimplified() { return UIManager.getBoolean("ProgressBar.isSimplified"); diff --git a/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonBorder.java b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonBorder.java new file mode 100644 index 00000000..c51d21b6 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonBorder.java @@ -0,0 +1,74 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.radiobutton; + + +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.SystemInfo; + +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.plaf.InsetsUIResource; +import javax.swing.plaf.UIResource; +import java.awt.*; + +/** + * @author Konstantin Bulenkov + * @author Jannis Weis + */ +public class DarkRadioButtonBorder implements Border, UIResource { + + @Override + public void paintBorder(final Component c, final Graphics g, final int x, final int y, + final int width, final int height) { + } + + @Override + public Insets getBorderInsets(final Component c) { + if (isInCell(c)) { + return new Insets(0, 0, 0, 0); + } + final int a = SystemInfo.isMac ? 2 : 4; + return new InsetsUIResource(a, a, a, a); + } + + protected boolean isInCell(final Component c) { + return isTreeCellEditor(c) || isTableCellEditor(c) || DarkUIUtil.isInCell(c); + } + + protected boolean isTreeCellEditor(final Component c) { + return c instanceof JComponent + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); + } + + protected boolean isTableCellEditor(final Component c) { + return c instanceof JComponent + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); + } + + @Override + public boolean isBorderOpaque() { + return false; + } +} diff --git a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java rename to src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java index 920de403..ceb97be1 100644 --- a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.radiobutton; +package com.github.weisj.darklaf.ui.radiobutton; -import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.ui.menu.DarkMenuItemUIBase; +import com.github.weisj.darklaf.decorators.MouseClickListener; +import com.github.weisj.darklaf.ui.menu.DarkMenuItemUIBase; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.MenuItemLayoutHelper; diff --git a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonUI.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java rename to src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonUI.java index bd792e68..049a7072 100644 --- a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/radiobutton/DarkRadioButtonUI.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.radiobutton; +package com.github.weisj.darklaf.ui.radiobutton; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.ui.checkbox.DarkCheckBoxUI; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.ui.checkbox.DarkCheckBoxUI; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/github/weisj/darklaf/ui/rootpane/CloseButtonUI.java b/src/main/java/com/github/weisj/darklaf/ui/rootpane/CloseButtonUI.java new file mode 100644 index 00000000..f9e69cf8 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/rootpane/CloseButtonUI.java @@ -0,0 +1,51 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.rootpane; + +import com.github.weisj.darklaf.ui.button.DarkButtonUI; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.*; + +/** + * @author Jannis Weis + */ +public class CloseButtonUI extends DarkButtonUI { + + protected Color closeHover; + protected Color closeClick; + + @Override + protected void installDefaults(final AbstractButton b) { + super.installDefaults(b); + closeHover = UIManager.getColor("TitlePane.close.rollOverColor"); + closeClick = UIManager.getColor("TitlePane.close.clickColor"); + } + + @Override + protected Color getShadowColor(@NotNull final AbstractButton c) { + return c.getModel().isArmed() ? closeClick : closeHover; + } +} diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/DarkRootPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/rootpane/DarkRootPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java index 29253842..1caae104 100644 --- a/src/main/java/com/weis/darklaf/ui/rootpane/DarkRootPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. /* * MIT License * @@ -22,9 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.rootpane; -import com.weis.darklaf.platform.windows.JNIDecorations; +package com.github.weisj.darklaf.ui.rootpane; + +import com.github.weisj.darklaf.platform.windows.JNIDecorations; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java b/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkTitlePane.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java rename to src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkTitlePane.java index fd893ae3..c2623ced 100644 --- a/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java +++ b/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkTitlePane.java @@ -1,4 +1,3 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. /* * MIT License * @@ -22,11 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.rootpane; -import com.weis.darklaf.decorators.AncestorAdapter; -import com.weis.darklaf.platform.windows.JNIDecorations; -import com.weis.darklaf.util.GraphicsUtil; +package com.github.weisj.darklaf.ui.rootpane; + +import com.github.weisj.darklaf.decorators.AncestorAdapter; +import com.github.weisj.darklaf.platform.windows.JNIDecorations; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -60,6 +60,21 @@ public class DarkTitlePane extends JComponent { private static final int IMAGE_HEIGHT = 16; private static final int IMAGE_WIDTH = 16; private final JRootPane rootPane; + private final ContainerListener rootPaneContainerListener = new ContainerListener() { + @Override + public void componentAdded(@NotNull final ContainerEvent e) { + if (e.getChild() instanceof JLayeredPane) { + ((JLayeredPane) e.getChild()).addContainerListener(layeredPaneContainerListener); + } + } + + @Override + public void componentRemoved(@NotNull final ContainerEvent e) { + if (e.getChild() instanceof JLayeredPane) { + ((JLayeredPane) e.getChild()).removeContainerListener(layeredPaneContainerListener); + } + } + }; private boolean oldResizable; private PropertyChangeListener propertyChangeListener; private WindowListener windowListener; @@ -113,21 +128,6 @@ public class DarkTitlePane extends JComponent { public void componentRemoved(final ContainerEvent e) { } }; - private final ContainerListener rootPaneContainerListener = new ContainerListener() { - @Override - public void componentAdded(@NotNull final ContainerEvent e) { - if (e.getChild() instanceof JLayeredPane) { - ((JLayeredPane) e.getChild()).addContainerListener(layeredPaneContainerListener); - } - } - - @Override - public void componentRemoved(@NotNull final ContainerEvent e) { - if (e.getChild() instanceof JLayeredPane) { - ((JLayeredPane) e.getChild()).removeContainerListener(layeredPaneContainerListener); - } - } - }; private int state; private Color inactiveBackground; diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/SubstanceRootLayout.java b/src/main/java/com/github/weisj/darklaf/ui/rootpane/SubstanceRootLayout.java similarity index 85% rename from src/main/java/com/weis/darklaf/ui/rootpane/SubstanceRootLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/rootpane/SubstanceRootLayout.java index 526a4e85..722d3c08 100644 --- a/src/main/java/com/weis/darklaf/ui/rootpane/SubstanceRootLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/rootpane/SubstanceRootLayout.java @@ -1,5 +1,27 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. -package com.weis.darklaf.ui.rootpane; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.rootpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/github/weisj/darklaf/ui/rootpane/TitlePaneIcon.java b/src/main/java/com/github/weisj/darklaf/ui/rootpane/TitlePaneIcon.java new file mode 100644 index 00000000..d33a16d2 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/rootpane/TitlePaneIcon.java @@ -0,0 +1,69 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.rootpane; + +import org.jetbrains.annotations.Contract; + +import javax.swing.*; +import java.awt.*; + +/** + * @author Jannis Weis + */ +public class TitlePaneIcon implements Icon { + + private final Icon activeIcon; + private final Icon inactiveIcon; + private boolean active = true; + + @Contract(pure = true) + public TitlePaneIcon(final Icon active, final Icon inactive) { + this.activeIcon = active; + this.inactiveIcon = inactive; + } + + public void setActive(final boolean active) { + this.active = active; + } + + @Override + public void paintIcon(final Component c, final Graphics g, final int x, final int y) { + currentIcon().paintIcon(c, g, x, y); + } + + @Contract(pure = true) + private Icon currentIcon() { + return active ? activeIcon : inactiveIcon; + } + + @Override + public int getIconWidth() { + return currentIcon().getIconWidth(); + } + + @Override + public int getIconHeight() { + return currentIcon().getIconHeight(); + } +} diff --git a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollBarUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java rename to src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollBarUI.java index 42e06aa7..6d69998b 100644 --- a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollBarUI.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.scrollpane; +package com.github.weisj.darklaf.ui.scrollpane; -import com.weis.darklaf.decorators.MouseMovementListener; -import com.weis.darklaf.util.Animator; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.decorators.MouseMovementListener; +import com.github.weisj.darklaf.util.Animator; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollPaneUI.java similarity index 84% rename from src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollPaneUI.java index b12eb935..ba9264f2 100644 --- a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/DarkScrollPaneUI.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.scrollpane; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.scrollpane; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java similarity index 68% rename from src/main/java/com/weis/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java rename to src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java index 3948a441..4b0f8463 100644 --- a/src/main/java/com/weis/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java +++ b/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollLayoutManagerDelegate.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.scrollpane; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.scrollpane; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/ui/separator/DarkSeparatorUI.java b/src/main/java/com/github/weisj/darklaf/ui/separator/DarkSeparatorUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/separator/DarkSeparatorUI.java rename to src/main/java/com/github/weisj/darklaf/ui/separator/DarkSeparatorUI.java index 24d20b2d..e95f0903 100644 --- a/src/main/java/com/weis/darklaf/ui/separator/DarkSeparatorUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/separator/DarkSeparatorUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.separator; +package com.github.weisj.darklaf.ui.separator; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java b/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java similarity index 94% rename from src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java rename to src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java index 2306ee40..a9fa1110 100644 --- a/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java @@ -1,9 +1,32 @@ -package com.weis.darklaf.ui.slider; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.slider; -import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.decorators.MouseClickListener; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java b/src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerBorder.java similarity index 73% rename from src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerBorder.java index d755d545..9308cb2a 100644 --- a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerBorder.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.spinner; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.spinner; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java b/src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java rename to src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerUI.java index 060d0ed2..d44dcd5c 100644 --- a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/spinner/DarkSpinnerUI.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.spinner; +package com.github.weisj.darklaf.ui.spinner; -import com.weis.darklaf.components.ArrowButton; -import com.weis.darklaf.decorators.LayoutManagerDelegate; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.ArrowButton; +import com.github.weisj.darklaf.decorators.LayoutManagerDelegate; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneBorder.java b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneBorder.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneBorder.java index 95e83e32..037c0b72 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.splitpane; +package com.github.weisj.darklaf.ui.splitpane; import javax.swing.plaf.BorderUIResource; diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDivider.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java rename to src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDivider.java index 954b871b..fdf8cc84 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java +++ b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDivider.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.splitpane; +package com.github.weisj.darklaf.ui.splitpane; -import com.weis.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.icons.EmptyIcon; import org.jetbrains.annotations.Contract; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java index 23d50d9c..3029336b 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneDividerBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.splitpane; +package com.github.weisj.darklaf.ui.splitpane; import javax.swing.border.Border; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneUI.java index 552e7d81..5958a3aa 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/splitpane/DarkSplitPaneUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.splitpane; +package com.github.weisj.darklaf.ui.splitpane; -import com.weis.darklaf.decorators.LayoutManagerDelegate; +import com.github.weisj.darklaf.decorators.LayoutManagerDelegate; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java b/src/main/java/com/github/weisj/darklaf/ui/statusbar/DarkStatusBarUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java rename to src/main/java/com/github/weisj/darklaf/ui/statusbar/DarkStatusBarUI.java index c2041930..fade3a39 100644 --- a/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/statusbar/DarkStatusBarUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.statusbar; +package com.github.weisj.darklaf.ui.statusbar; import org.jdesktop.swingx.JXStatusBar; import org.jdesktop.swingx.plaf.basic.BasicStatusBarUI; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkHandler.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkHandler.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java index 3cc2a0a7..45e37029 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkHandler.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; @@ -221,11 +221,20 @@ public class DarkHandler extends TabbedPaneHandler { } } - protected Point getDragMousePos() { - var p = new Point(ui.dragRect.x + ui.dragRect.width / 2, ui.dragRect.y + ui.dragRect.height / 2); - p.x += ui.scrollableTabSupport.viewport.getX(); - p.y += ui.scrollableTabSupport.viewport.getY(); - return p; + @Override + public void componentAdded(@NotNull final ContainerEvent e) { + if (!(e.getChild() instanceof UIResource)) { + e.getChild().addFocusListener(ui.focusListener); + } + super.componentAdded(e); + } + + @Override + public void componentRemoved(@NotNull final ContainerEvent e) { + if (!(e.getChild() instanceof UIResource)) { + e.getChild().removeFocusListener(ui.focusListener); + } + super.componentRemoved(e); } protected void stopDrag(final MouseEvent e, final boolean changeTabs) { @@ -248,19 +257,10 @@ public class DarkHandler extends TabbedPaneHandler { ui.scrollableTabSupport.viewport.repaint(); } - @Override - public void componentAdded(@NotNull final ContainerEvent e) { - if (!(e.getChild() instanceof UIResource)) { - e.getChild().addFocusListener(ui.focusListener); - } - super.componentAdded(e); - } - - @Override - public void componentRemoved(@NotNull final ContainerEvent e) { - if (!(e.getChild() instanceof UIResource)) { - e.getChild().removeFocusListener(ui.focusListener); - } - super.componentRemoved(e); + protected Point getDragMousePos() { + var p = new Point(ui.dragRect.x + ui.dragRect.width / 2, ui.dragRect.y + ui.dragRect.height / 2); + p.x += ui.scrollableTabSupport.viewport.getX(); + p.y += ui.scrollableTabSupport.viewport.getY(); + return p; } } diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollHandler.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollHandler.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollHandler.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollHandler.java index 7e3a0842..1c05ee0e 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollHandler.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollHandler.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java index aca6cbe1..785d41e9 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabPanel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java index 6930082b..64504411 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; -import com.weis.darklaf.components.ScrollPopupMenu; -import com.weis.darklaf.decorators.PopupMenuAdapter; +import com.github.weisj.darklaf.components.ScrollPopupMenu; +import com.github.weisj.darklaf.decorators.PopupMenuAdapter; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java index bc53b7fa..408c664a 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabViewport.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabAreaButton.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabAreaButton.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabAreaButton.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabAreaButton.java index 5c2db386..616772e5 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabAreaButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabAreaButton.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java index a752a67d..9571c644 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java index 5149ece6..477bba88 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java index 8a032ede..b58043c2 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java @@ -1,8 +1,31 @@ -package com.weis.darklaf.ui.tabbedpane; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.tabbedpane; -import com.weis.darklaf.components.uiresource.UIResourceWrapper; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.components.uiresource.UIResourceWrapper; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -154,6 +177,73 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } } + @Override + protected void paintContentBorder(final Graphics g, final int tabPlacement, final int selectedIndex) { + + } + + @Override + protected void paintTabArea(@NotNull final Graphics g, final int tabPlacement, final int selectedIndex) { + paintTabAreaBackground(g, tabPlacement); + paintTabAreaBorder(g, tabPlacement); + super.paintTabArea(g, tabPlacement, selectedIndex); + } + + @Override + protected void paintTabBackground(@NotNull final Graphics g, final int tabPlacement, final int tabIndex, + final int x, + final int y, final int w, final int h, + final boolean isSelected) { + g.setColor(getTabBackgroundColor(tabIndex, isSelected, getRolloverTab() == tabIndex)); + g.fillRect(x, y, w, h); + } + + @Override + protected void paintTabBorder(@NotNull final Graphics g, final int tabPlacement, final int tabIndex, + final int x, final int y, final int w, final int h, + final boolean isSelected) { + g.setColor(getTabBorderColor()); + switch (tabPlacement) { + case TOP: + g.fillRect(x, y + h - 1, w, 1); + break; + case BOTTOM: + g.fillRect(x, y, w, 1); + break; + case LEFT: + g.fillRect(x + w - 1, y, 1, h); + break; + case RIGHT: + g.fillRect(x, y, 1, h); + break; + } + } + + @Override + protected void paintFocusIndicator(final Graphics g, final int tabPlacement, final Rectangle r, + final int tabIndex, final Rectangle iconRect, + final Rectangle textRect, final boolean isSelected) { + if (isSelected) { + if (!drawFocusBar()) return; + g.setColor(getAccentColor()); + int focusSize = UIManager.getInt("TabbedPane.focusBarHeight"); + switch (tabPlacement) { + case LEFT: + g.fillRect(r.x + r.width - focusSize, r.y, focusSize, r.height); + break; + case RIGHT: + g.fillRect(r.x, r.y, focusSize, r.height); + break; + case BOTTOM: + g.fillRect(r.x, r.y + 1, r.width, focusSize); + break; + default: + g.fillRect(r.x, r.y + r.height - focusSize, r.width, focusSize); + break; + } + } + } + @Override protected LayoutManager createLayoutManager() { if (tabPane.getTabLayoutPolicy() == JTabbedPane.SCROLL_TAB_LAYOUT) { @@ -259,84 +349,6 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return handler; } - @Override - protected void paintContentBorder(final Graphics g, final int tabPlacement, final int selectedIndex) { - - } - - @Override - public void setRolloverTab(final int index) { - if (dragging) return; - int oldRollover = rolloverTabIndex; - super.setRolloverTab(index); - if (oldRollover != getRolloverTab()) { - repaintTab(oldRollover); - repaintTab(getRolloverTab()); - } - } - - @Override - protected void paintTabArea(@NotNull final Graphics g, final int tabPlacement, final int selectedIndex) { - paintTabAreaBackground(g, tabPlacement); - paintTabAreaBorder(g, tabPlacement); - super.paintTabArea(g, tabPlacement, selectedIndex); - } - - @Override - protected void paintTabBackground(@NotNull final Graphics g, final int tabPlacement, final int tabIndex, - final int x, - final int y, final int w, final int h, - final boolean isSelected) { - g.setColor(getTabBackgroundColor(tabIndex, isSelected, getRolloverTab() == tabIndex)); - g.fillRect(x, y, w, h); - } - - @Override - protected void paintTabBorder(@NotNull final Graphics g, final int tabPlacement, final int tabIndex, - final int x, final int y, final int w, final int h, - final boolean isSelected) { - g.setColor(getTabBorderColor()); - switch (tabPlacement) { - case TOP: - g.fillRect(x, y + h - 1, w, 1); - break; - case BOTTOM: - g.fillRect(x, y, w, 1); - break; - case LEFT: - g.fillRect(x + w - 1, y, 1, h); - break; - case RIGHT: - g.fillRect(x, y, 1, h); - break; - } - } - - @Override - protected void paintFocusIndicator(final Graphics g, final int tabPlacement, final Rectangle r, - final int tabIndex, final Rectangle iconRect, - final Rectangle textRect, final boolean isSelected) { - if (isSelected) { - if (!drawFocusBar()) return; - g.setColor(getAccentColor()); - int focusSize = UIManager.getInt("TabbedPane.focusBarHeight"); - switch (tabPlacement) { - case LEFT: - g.fillRect(r.x + r.width - focusSize, r.y, focusSize, r.height); - break; - case RIGHT: - g.fillRect(r.x, r.y, focusSize, r.height); - break; - case BOTTOM: - g.fillRect(r.x, r.y + 1, r.width, focusSize); - break; - default: - g.fillRect(r.x, r.y + r.height - focusSize, r.width, focusSize); - break; - } - } - } - @Override protected int tabForCoordinate(final JTabbedPane pane, final int x, final int y, final boolean validateIfNecessary) { @@ -351,6 +363,17 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return tab; } + @Override + public void setRolloverTab(final int index) { + if (dragging) return; + int oldRollover = rolloverTabIndex; + super.setRolloverTab(index); + if (oldRollover != getRolloverTab()) { + repaintTab(oldRollover); + repaintTab(getRolloverTab()); + } + } + @Override protected void paintFocusIndicator(final Graphics g, final int tabPlacement, final Rectangle[] rects, final int tabIndex, @@ -388,6 +411,26 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return super.calculateTabHeight(tabPlacement, tabIndex, fontHeight) - 1; } + @Override + protected int calculateMaxTabHeight(final int tabPlacement) { + return Math.max(super.calculateMaxTabHeight(tabPlacement), getFallBackSize()); + } + + @Override + protected int calculateMaxTabWidth(final int tabPlacement) { + return Math.max(super.calculateMaxTabWidth(tabPlacement), getFallBackSize()); + } + + @Override + protected int calculateTabAreaHeight(final int tabPlacement, final int horizRunCount, final int maxTabHeight) { + return Math.max(super.calculateTabAreaHeight(tabPlacement, horizRunCount, maxTabHeight), getFallBackSize()); + } + + @Override + protected int calculateTabAreaWidth(final int tabPlacement, final int vertRunCount, final int maxTabWidth) { + return Math.max(super.calculateTabAreaWidth(tabPlacement, vertRunCount, maxTabWidth), getFallBackSize()); + } + @Override protected Insets getTabAreaInsets(final int tabPlacement) { Insets insets = super.getTabAreaInsets(tabPlacement); @@ -427,16 +470,19 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return insets; } - protected Color getTabBorderColor() { - return tabBorderColor; + protected int getFallBackSize() { + int max = 0; + if (scrollableTabLayoutEnabled() && scrollableTabSupport.newTabButton.isVisible()) { + max = Math.max(scrollableTabSupport.newTabButton.getPreferredSize().height, 27); + } + return max; } - public Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { - if (isSelected) { - return hover ? selectedHoverBackground : selectedBackground; - } else { - return hover ? hoverBackground : tabPane.getBackgroundAt(tabIndex); + protected DarkScrollHandler getScrollHandler() { + if (scrollHandler == null) { + scrollHandler = new DarkScrollHandler(this); } + return scrollHandler; } protected boolean drawFocusBar() { @@ -452,11 +498,16 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return focus ? focusAccent : accent; } - protected DarkScrollHandler getScrollHandler() { - if (scrollHandler == null) { - scrollHandler = new DarkScrollHandler(this); + protected Color getTabBorderColor() { + return tabBorderColor; + } + + public Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { + if (isSelected) { + return hover ? selectedHoverBackground : selectedBackground; + } else { + return hover ? hoverBackground : tabPane.getBackgroundAt(tabIndex); } - return scrollHandler; } private void paintTabAreaBorder(@NotNull final Graphics g, final int tabPlacement) { @@ -663,34 +714,6 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { p.x, p.y, e.getClickCount(), e.isPopupTrigger(), e.getButton()); } - @Override - protected int calculateMaxTabHeight(final int tabPlacement) { - return Math.max(super.calculateMaxTabHeight(tabPlacement), getFallBackSize()); - } - - @Override - protected int calculateMaxTabWidth(final int tabPlacement) { - return Math.max(super.calculateMaxTabWidth(tabPlacement), getFallBackSize()); - } - - @Override - protected int calculateTabAreaHeight(final int tabPlacement, final int horizRunCount, final int maxTabHeight) { - return Math.max(super.calculateTabAreaHeight(tabPlacement, horizRunCount, maxTabHeight), getFallBackSize()); - } - - @Override - protected int calculateTabAreaWidth(final int tabPlacement, final int vertRunCount, final int maxTabWidth) { - return Math.max(super.calculateTabAreaWidth(tabPlacement, vertRunCount, maxTabWidth), getFallBackSize()); - } - - protected int getFallBackSize() { - int max = 0; - if (scrollableTabLayoutEnabled() && scrollableTabSupport.newTabButton.isVisible()) { - max = Math.max(scrollableTabSupport.newTabButton.getPreferredSize().height, 27); - } - return max; - } - protected void layoutTabComponents() { if (tabContainer == null) { return; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java index 20514299..d47db394 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.LazyActionMap; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.LazyActionMap; import org.jetbrains.annotations.NotNull; import sun.swing.DefaultLookup; import sun.swing.SwingUtilities2; @@ -423,6 +423,20 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi return Component.BaselineResizeBehavior.OTHER; } + protected void ensureCurrentLayout() { + if (!tabPane.isValid()) { + tabPane.validate(); + } + /* If tabPane doesn't have a peer yet, the validate() call will + * silently fail. We handle that by forcing a layout if tabPane + * is still invalid. See bug 4237677. + */ + if (!tabPane.isValid()) { + TabbedPaneLayout layout = (TabbedPaneLayout) tabPane.getLayout(); + layout.calculateLayoutInfo(); + } + } + /** * Paints the content border. * @@ -801,22 +815,6 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi installTabContainer(); } - /** - * Reloads the mnemonics. This should be invoked when a memonic changes, when the title of a mnemonic changes, or - * when tabs are added/removed. - */ - protected void updateMnemonics() { - resetMnemonics(); - for (int counter = tabPane.getTabCount() - 1; counter >= 0; - counter--) { - int mnemonic = tabPane.getMnemonicAt(counter); - - if (mnemonic > 0) { - addMnemonic(counter, mnemonic); - } - } - } - /** * Install the defaults. */ @@ -991,15 +989,19 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi } /** - * Sets the tab the mouse is over by location. This is a cover method for setRolloverTab(tabForCoordinate(x, - * y, false)). + * Reloads the mnemonics. This should be invoked when a memonic changes, when the title of a mnemonic changes, or + * when tabs are added/removed. */ - protected void setRolloverTab(final int x, final int y) { - // NOTE: - // This calls in with false otherwise it could trigger a validate, - // which should NOT happen if the user is only dragging the - // mouse around. - setRolloverTab(tabForCoordinate(tabPane, x, y, false)); + protected void updateMnemonics() { + resetMnemonics(); + for (int counter = tabPane.getTabCount() - 1; counter >= 0; + counter--) { + int mnemonic = tabPane.getMnemonicAt(counter); + + if (mnemonic > 0) { + addMnemonic(counter, mnemonic); + } + } } /** @@ -1042,15 +1044,15 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi } /** - * Returns a point which is translated from the specified point in the JTabbedPane's coordinate space to the - * coordinate space of the ScrollableTabPanel. This is used for SCROLL_TAB_LAYOUT ONLY. + * Sets the tab the mouse is over by location. This is a cover method for setRolloverTab(tabForCoordinate(x, + * y, false)). */ - protected Point translatePointToTabPanel(final int srcx, final int srcy, final Point dest) { - Point vpp = tabScroller.viewport.getLocation(); - Point viewp = tabScroller.viewport.getViewPosition(); - dest.x = srcx - vpp.x + viewp.x; - dest.y = srcy - vpp.y + viewp.y; - return dest; + protected void setRolloverTab(final int x, final int y) { + // NOTE: + // This calls in with false otherwise it could trigger a validate, + // which should NOT happen if the user is only dragging the + // mouse around. + setRolloverTab(tabForCoordinate(tabPane, x, y, false)); } protected int tabForCoordinate(final JTabbedPane pane, final int x, final int y, @@ -1081,6 +1083,18 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi return -1; } + /** + * Returns a point which is translated from the specified point in the JTabbedPane's coordinate space to the + * coordinate space of the ScrollableTabPanel. This is used for SCROLL_TAB_LAYOUT ONLY. + */ + protected Point translatePointToTabPanel(final int srcx, final int srcy, final Point dest) { + Point vpp = tabScroller.viewport.getLocation(); + Point viewp = tabScroller.viewport.getViewPosition(); + dest.x = srcx - vpp.x + viewp.x; + dest.y = srcy - vpp.y + viewp.y; + return dest; + } + /** * Returns the tab the mouse is currently over, or {@code -1} if the mouse is no longer over any tab. * @@ -1178,6 +1192,24 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi return tabForCoordinate(pane, x, y, true); } + +// TabbedPaneUI methods + + /** + * Returns the bounds of the specified tab index. The bounds are with respect to the JTabbedPane's coordinate + * space. + */ + public Rectangle getTabBounds(final JTabbedPane pane, final int i) { + ensureCurrentLayout(); + Rectangle tabRect = new Rectangle(); + return getTabBounds(i, tabRect); + } + + public int getTabRunCount(final JTabbedPane pane) { + ensureCurrentLayout(); + return runCount; + } + protected int calculateBaselineIfNecessary() { if (!calculatedBaseline) { calculatedBaseline = true; @@ -1189,9 +1221,6 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi return baseline; } - -// TabbedPaneUI methods - protected void calculateBaseline() { int tabCount = tabPane.getTabCount(); int tabPlacement = tabPane.getTabPlacement(); @@ -1220,76 +1249,13 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi } } +// BasicTabbedPaneUI methods + protected abstract void paintFocusIndicator(final Graphics g, final int tabPlacement, final Rectangle[] rects, final int tabIndex, final Rectangle iconRect, final Rectangle textRect, final boolean isSelected); - /** - * Returns the bounds of the specified tab index. The bounds are with respect to the JTabbedPane's coordinate - * space. - */ - public Rectangle getTabBounds(final JTabbedPane pane, final int i) { - ensureCurrentLayout(); - Rectangle tabRect = new Rectangle(); - return getTabBounds(i, tabRect); - } - - protected void ensureCurrentLayout() { - if (!tabPane.isValid()) { - tabPane.validate(); - } - /* If tabPane doesn't have a peer yet, the validate() call will - * silently fail. We handle that by forcing a layout if tabPane - * is still invalid. See bug 4237677. - */ - if (!tabPane.isValid()) { - TabbedPaneLayout layout = (TabbedPaneLayout) tabPane.getLayout(); - layout.calculateLayoutInfo(); - } - } - -// BasicTabbedPaneUI methods - - public int getTabRunCount(final JTabbedPane pane) { - ensureCurrentLayout(); - return runCount; - } - - /** - * Returns the bounds of the specified tab in the coordinate space of the JTabbedPane component. This is required - * because the tab rects are by default defined in the coordinate space of the component where they are rendered, - * which could be the JTabbedPane (for WRAP_TAB_LAYOUT) or a ScrollableTabPanel (SCROLL_TAB_LAYOUT). This method - * should be used whenever the tab rectangle must be relative to the JTabbedPane itself and the result should be - * placed in a designated Rectangle object (rather than instantiating and returning a new Rectangle each time). The - * tab index parameter must be a valid tabbed pane tab index (0 to tab count - 1, inclusive). The destination - * rectangle parameter must be a valid Rectangle instance. The handling of invalid parameters is - * unspecified. - * - * @param tabIndex the index of the tab - * @param dest the rectangle where the result should be placed - * @return the resulting rectangle - * @since 1.4 - */ - protected Rectangle getTabBounds(final int tabIndex, final Rectangle dest) { - dest.width = rects[tabIndex].width; - dest.height = rects[tabIndex].height; - - if (scrollableTabLayoutEnabled()) { // SCROLL_TAB_LAYOUT - // Need to translate coordinates based on viewport location & - // view position - Point vpp = tabScroller.viewport.getLocation(); - Point viewp = tabScroller.viewport.getViewPosition(); - dest.x = rects[tabIndex].x + vpp.x - viewp.x; - dest.y = rects[tabIndex].y + vpp.y - viewp.y; - - } else { // WRAP_TAB_LAYOUT - dest.x = rects[tabIndex].x; - dest.y = rects[tabIndex].y; - } - return dest; - } - /** * Assure the rectangles are created. * @@ -1703,9 +1669,6 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi } } - -// Tab Navigation methods - /** * Select the next tab in the run. * @@ -1721,6 +1684,9 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi navigateTo(tabIndex); } + +// Tab Navigation methods + /** * Select the previous tab in the run. * @@ -1838,6 +1804,40 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi } } + /** + * Returns the bounds of the specified tab in the coordinate space of the JTabbedPane component. This is required + * because the tab rects are by default defined in the coordinate space of the component where they are rendered, + * which could be the JTabbedPane (for WRAP_TAB_LAYOUT) or a ScrollableTabPanel (SCROLL_TAB_LAYOUT). This method + * should be used whenever the tab rectangle must be relative to the JTabbedPane itself and the result should be + * placed in a designated Rectangle object (rather than instantiating and returning a new Rectangle each time). The + * tab index parameter must be a valid tabbed pane tab index (0 to tab count - 1, inclusive). The destination + * rectangle parameter must be a valid Rectangle instance. The handling of invalid parameters is + * unspecified. + * + * @param tabIndex the index of the tab + * @param dest the rectangle where the result should be placed + * @return the resulting rectangle + * @since 1.4 + */ + protected Rectangle getTabBounds(final int tabIndex, final Rectangle dest) { + dest.width = rects[tabIndex].width; + dest.height = rects[tabIndex].height; + + if (scrollableTabLayoutEnabled()) { // SCROLL_TAB_LAYOUT + // Need to translate coordinates based on viewport location & + // view position + Point vpp = tabScroller.viewport.getLocation(); + Point viewp = tabScroller.viewport.getViewPosition(); + dest.x = rects[tabIndex].x + vpp.x - viewp.x; + dest.y = rects[tabIndex].y + vpp.y - viewp.y; + + } else { // WRAP_TAB_LAYOUT + dest.x = rects[tabIndex].x; + dest.y = rects[tabIndex].y; + } + return dest; + } + /** * Returns the index of the tab closest to the passed in location, note that the returned tab may not contain the * location x,y. diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/MoreTabsButton.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/MoreTabsButton.java index 7632767b..5350bf68 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/MoreTabsButton.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/NewTabButton.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/NewTabButton.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/NewTabButton.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/NewTabButton.java index c66485fe..b7fc801f 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/NewTabButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/NewTabButton.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabPanel.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabPanel.java index f75b96f3..5f280ad1 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabPanel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabSupport.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabSupport.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabSupport.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabSupport.java index b88187e3..96740ebd 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabSupport.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabSupport.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabViewport.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabViewport.java index fb5c2371..176bb3e3 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/ScrollableTabViewport.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneHandler.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneHandler.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneHandler.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneHandler.java index 6579db67..5d94fbf9 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneHandler.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneHandler.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneLayout.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneLayout.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneLayout.java index bca90b94..9a397ca2 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneLayout.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java index 533a36f5..94b9e3e6 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneScrollLayout.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java index f9156fc0..e7abcca2 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneTransferHandler.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabbedpane; +package com.github.weisj.darklaf.ui.tabbedpane; -import com.weis.darklaf.util.ImageUtil; +import com.github.weisj.darklaf.util.ImageUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneUtil.java b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneUtil.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneUtil.java rename to src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneUtil.java index 03ebfa07..04176c06 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/TabbedPaneUtil.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/TabbedPaneUtil.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.tabbedpane; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.tabbedpane; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkPanelPopupUI.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkPanelPopupUI.java index 949f1127..e713ea37 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkPanelPopupUI.java @@ -21,16 +21,16 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; - -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.PanelPopup; -import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.components.uiresource.JLabelUIResource; -import com.weis.darklaf.ui.panel.DarkPanelUI; -import com.weis.darklaf.util.DarkUIUtil; +package com.github.weisj.darklaf.ui.tabframe; + +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.PanelPopup; +import com.github.weisj.darklaf.components.tooltip.ToolTipContext; +import com.github.weisj.darklaf.components.uiresource.JLabelUIResource; +import com.github.weisj.darklaf.ui.panel.DarkPanelUI; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java index 49887e46..4a9be1ce 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; -import com.weis.darklaf.components.JXPopupMenu; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tabframe.TabFrameTab; -import com.weis.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.components.JXPopupMenu; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tabframe.TabFrameTab; +import com.github.weisj.darklaf.icons.EmptyIcon; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java index cc25c240..0ae3ecf4 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFramePopupHeaderBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; import javax.swing.plaf.BorderUIResource; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabBorder.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabBorder.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabBorder.java index 120bca18..f61e1e15 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabBorder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; import javax.swing.plaf.BorderUIResource; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java index 89d7b77f..7596b422 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.TabFrameTabContainer; -import com.weis.darklaf.decorators.HoverListener; -import com.weis.darklaf.ui.panel.DarkPanelUI; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.TabFrameTabContainer; +import com.github.weisj.darklaf.decorators.HoverListener; +import com.github.weisj.darklaf.ui.panel.DarkPanelUI; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java index 4e85f4e1..340b0863 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java @@ -21,15 +21,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.TabFrameTabLabel; -import com.weis.darklaf.decorators.HoverListener; -import com.weis.darklaf.icons.RotatableIcon; -import com.weis.darklaf.ui.label.DarkLabelUI; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.TabFrameTabLabel; +import com.github.weisj.darklaf.decorators.HoverListener; +import com.github.weisj.darklaf.icons.RotatableIcon; +import com.github.weisj.darklaf.ui.label.DarkLabelUI; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameUI.java index ada43612..c1c12d09 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabFrameUI.java @@ -21,17 +21,17 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; - -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.PopupContainer; -import com.weis.darklaf.components.tabframe.TabFramePopup; -import com.weis.darklaf.components.tabframe.TabFrameTab; -import com.weis.darklaf.components.tabframe.TabFrameUI; -import com.weis.darklaf.components.uiresource.JPanelUIResource; -import com.weis.darklaf.util.Pair; +package com.github.weisj.darklaf.ui.tabframe; + +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.PopupContainer; +import com.github.weisj.darklaf.components.tabframe.TabFramePopup; +import com.github.weisj.darklaf.components.tabframe.TabFrameTab; +import com.github.weisj.darklaf.components.tabframe.TabFrameUI; +import com.github.weisj.darklaf.components.uiresource.JPanelUIResource; +import com.github.weisj.darklaf.util.Pair; import org.jdesktop.jxlayer.JXLayer; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -310,6 +310,22 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { return new Pair<>(new JTabFrame.TabFramePosition(a, -1), pos); } + public JComponent getTopContainer() { + return tabFrame.getTopTabContainer(); + } + + public JComponent getBottomContainer() { + return tabFrame.getBottomTabContainer(); + } + + public JComponent getLeftContainer() { + return rotatePaneLeft; + } + + public JComponent getRightContainer() { + return rotatePaneRight; + } + protected JTabFrame.TabFramePosition maybeRestoreTabContainer(@NotNull final JTabFrame tabFrame, final Point p) { Alignment a = null; int size = tabFrame.getTabSize(); @@ -383,36 +399,6 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { } } - protected Component getTabContainer(@NotNull final Alignment a) { - switch (a) { - case NORTH: - case NORTH_EAST: - return getTopContainer(); - case EAST: - case SOUTH_EAST: - return getRightContainer(); - case SOUTH: - case SOUTH_WEST: - return getBottomContainer(); - case WEST: - case NORTH_WEST: - return getLeftContainer(); - } - return null; - } - - public JComponent getTopContainer() { - return tabFrame.getTopTabContainer(); - } - - public JComponent getRightContainer() { - return rotatePaneRight; - } - - public JComponent getBottomContainer() { - return tabFrame.getBottomTabContainer(); - } - @Override public JTabFrame.TabFramePosition getNearestTabIndexAt(final JTabFrame tabFrame, final Point pos) { return getNearestTabIndexAtImpl(tabFrame, pos).getFirst(); @@ -461,8 +447,22 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { return res; } - public JComponent getLeftContainer() { - return rotatePaneLeft; + protected Component getTabContainer(@NotNull final Alignment a) { + switch (a) { + case NORTH: + case NORTH_EAST: + return getTopContainer(); + case EAST: + case SOUTH_EAST: + return getRightContainer(); + case SOUTH: + case SOUTH_WEST: + return getBottomContainer(); + case WEST: + case NORTH_WEST: + return getLeftContainer(); + } + return null; } public void setDropSize(final int width, final int height) { diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabbedPopupUI.java similarity index 94% rename from src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabbedPopupUI.java index dad901fb..931b7da2 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/DarkTabbedPopupUI.java @@ -21,14 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; - -import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.components.tabframe.TabbedPopup; -import com.weis.darklaf.components.uiresource.JPanelUIResource; -import com.weis.darklaf.ui.tabbedpane.DarkTabbedPaneUI; -import com.weis.darklaf.ui.tabbedpane.MoreTabsButton; -import com.weis.darklaf.ui.tabbedpane.NewTabButton; +package com.github.weisj.darklaf.ui.tabframe; + +import com.github.weisj.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.tabframe.TabbedPopup; +import com.github.weisj.darklaf.components.uiresource.JPanelUIResource; +import com.github.weisj.darklaf.ui.tabbedpane.DarkTabbedPaneUI; +import com.github.weisj.darklaf.ui.tabbedpane.MoreTabsButton; +import com.github.weisj.darklaf.ui.tabbedpane.NewTabButton; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -157,8 +157,13 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { protected class DarkTabFrameTabbedPaneUI extends DarkTabbedPaneUI { @Override - protected Color getTabAreaBackground() { - return hasFocus() ? headerFocusBackground : headerBackground; + protected Color getAccentColor(final boolean focus) { + return super.getAccentColor(focus || hasFocus()); + } + + @Override + protected Color getTabBorderColor() { + return tabBorderColor; } public Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { @@ -178,13 +183,8 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { } @Override - protected Color getTabBorderColor() { - return tabBorderColor; - } - - @Override - protected Color getAccentColor(final boolean focus) { - return super.getAccentColor(focus || hasFocus()); + protected Color getTabAreaBackground() { + return hasFocus() ? headerFocusBackground : headerBackground; } @Override diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/TabDragListener.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabDragListener.java similarity index 93% rename from src/main/java/com/weis/darklaf/ui/tabframe/TabDragListener.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/TabDragListener.java index c5f82aa6..ddd56222 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/TabDragListener.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabDragListener.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; -import com.weis.darklaf.components.tabframe.TabFrameTab; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.SwingXUtilities; +import com.github.weisj.darklaf.components.tabframe.TabFrameTab; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.SwingXUtilities; import org.jdesktop.jxlayer.JXLayer; import org.jetbrains.annotations.NotNull; @@ -37,13 +37,12 @@ import java.awt.event.MouseEvent; public class TabDragListener extends MouseAdapter { private final TabFrameTab tabComponent; + protected Point origin; public TabDragListener(final TabFrameTab tabComponent) { this.tabComponent = tabComponent; } - protected Point origin; - @Override public void mousePressed(@NotNull final MouseEvent e) { origin = e.getPoint(); diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/TabFrameLayout.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameLayout.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/tabframe/TabFrameLayout.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameLayout.java index b6c743de..86d93967 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/TabFrameLayout.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameLayout.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; +package com.github.weisj.darklaf.ui.tabframe; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/TabFrameTransferHandler.java b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameTransferHandler.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tabframe/TabFrameTransferHandler.java rename to src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameTransferHandler.java index 7e0f2b22..6b0f6b49 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/TabFrameTransferHandler.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tabframe/TabFrameTransferHandler.java @@ -21,14 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tabframe; - -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.TabFramePopup; -import com.weis.darklaf.components.tabframe.TabFrameTab; -import com.weis.darklaf.components.tabframe.TabFrameUI; -import com.weis.darklaf.util.ImageUtil; +package com.github.weisj.darklaf.ui.tabframe; + +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.TabFramePopup; +import com.github.weisj.darklaf.components.tabframe.TabFrameTab; +import com.github.weisj.darklaf.components.tabframe.TabFrameUI; +import com.github.weisj.darklaf.util.ImageUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -55,13 +55,12 @@ import java.awt.event.MouseEvent; /** - * @author Robert Futrell * @author Jannis Weis */ public class TabFrameTransferHandler extends TransferHandler implements DropTargetListener, SwingConstants { private static final String MIME_TYPE = DataFlavor.javaJVMLocalObjectMimeType - + ";class=com.weis.darklaf.components.tabframe.JTabFrame"; + + ";class=com.github.weisj.darklaf.components.tabframe.JTabFrame"; private static TabbedPaneDragGestureRecognizer recognizer = null; private final Timer timer; private final Timer startTimer; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkColorTableCellRendererEditor.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkColorTableCellRendererEditor.java similarity index 65% rename from src/main/java/com/weis/darklaf/ui/table/DarkColorTableCellRendererEditor.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkColorTableCellRendererEditor.java index d73dac1b..cb2b483f 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkColorTableCellRendererEditor.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkColorTableCellRendererEditor.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; import javax.swing.*; import javax.swing.table.TableCellEditor; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableBorder.java similarity index 93% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableBorder.java index e97c681e..f6d691da 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellBorder.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableCellBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellBorder.java index 6d5def5b..dc41cbd7 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.ui.cell.DarkCellBorder; +import com.github.weisj.darklaf.ui.cell.DarkCellBorder; /** * @author Jannis Weis diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java index 504b4507..fa777868 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.ui.combobox.DarkComboBoxUI; +import com.github.weisj.darklaf.ui.combobox.DarkComboBoxUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditorToggleButton.java similarity index 69% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditorToggleButton.java index 59773a1a..50e04265 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditorToggleButton.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.decorators.CellRenderer; +import com.github.weisj.darklaf.util.DarkUIUtil; import javax.swing.*; import javax.swing.table.TableCellEditor; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java similarity index 57% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java index 1cb502ac..a9362cce 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.ui.cell.DarkCellBorder; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.ui.cell.DarkCellBorder; +import com.github.weisj.darklaf.util.DarkUIUtil; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java similarity index 76% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java index 08e49304..2ebc1401 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.ui.cell.DarkCellRendererToggleButton; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderBorder.java index 18902638..8db1ac70 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderCorner.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderCorner.java index 8a4f338d..cd75bea9 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderCorner.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUI.java index a9017782..ca5f5d34 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUIBridge.java index 470acf7b..a04e3dd3 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableHeaderUIBridge.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; import sun.swing.UIAction; @@ -138,6 +138,7 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { } return selectedColumnIndex; } + /** * Selects the specified column in the table header. Repaints the affected header cells and makes sure the newly * selected one is visible. @@ -146,6 +147,17 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { selectColumn(newColIndex, true); } + void selectColumn(final int newColIndex, final boolean doScroll) { + Rectangle repaintRect = header.getHeaderRect(selectedColumnIndex); + header.repaint(repaintRect); + selectedColumnIndex = newColIndex; + repaintRect = header.getHeaderRect(newColIndex); + header.repaint(repaintRect); + if (doScroll) { + scrollToColumn(newColIndex); + } + } + /** * Creates the mouse listener for the {@code JTableHeader}. * @@ -180,15 +192,58 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { table.scrollRectToVisible(vis); } - void selectColumn(final int newColIndex, final boolean doScroll) { - Rectangle repaintRect = header.getHeaderRect(selectedColumnIndex); - header.repaint(repaintRect); - selectedColumnIndex = newColIndex; - repaintRect = header.getHeaderRect(newColIndex); - header.repaint(repaintRect); - if (doScroll) { - scrollToColumn(newColIndex); + protected int selectPreviousColumn(final boolean doIt) { + int newIndex = getSelectedColumnIndex(); + if (newIndex > 0) { + newIndex--; + if (doIt) { + selectColumn(newIndex); + } + } + return newIndex; + } + + protected int changeColumnWidth(final TableColumn resizingColumn, + final JTableHeader th, + final int oldWidth, final int newWidth) { + resizingColumn.setWidth(newWidth); + + Container container; + JTable table; + + if ((th.getParent() == null) || + ((container = th.getParent().getParent()) == null) || + !(container instanceof JScrollPane) || + ((table = th.getTable()) == null)) { + return 0; + } + + if (!container.getComponentOrientation().isLeftToRight() && + !th.getComponentOrientation().isLeftToRight()) { + JViewport viewport = ((JScrollPane) container).getViewport(); + int viewportWidth = viewport.getWidth(); + int diff = newWidth - oldWidth; + int newHeaderWidth = table.getWidth() + diff; + + /* Resize a table */ + Dimension tableSize = table.getSize(); + tableSize.width += diff; + table.setSize(tableSize); + + /* If this table is in AUTO_RESIZE_OFF mode and + * has a horizontal scrollbar, we need to update + * a view's position. + */ + if ((newHeaderWidth >= viewportWidth) && + (table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF)) { + Point p = viewport.getViewPosition(); + p.x = Math.max(0, Math.min(newHeaderWidth - viewportWidth, + p.x + diff)); + viewport.setViewPosition(p); + return diff; + } } + return 0; } protected static class Actions extends UIAction { @@ -337,6 +392,7 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { ui.changeColumnWidth(resizingColumn, th, oldWidth, newWidth); } } + /** * This class should be treated as a "protected" inner class. Instantiate it only within subclasses of * {@code DarkTableHeaderUIBridge}. @@ -543,59 +599,6 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { super.installUI(c); } - protected int selectPreviousColumn(final boolean doIt) { - int newIndex = getSelectedColumnIndex(); - if (newIndex > 0) { - newIndex--; - if (doIt) { - selectColumn(newIndex); - } - } - return newIndex; - } - - protected int changeColumnWidth(final TableColumn resizingColumn, - final JTableHeader th, - final int oldWidth, final int newWidth) { - resizingColumn.setWidth(newWidth); - - Container container; - JTable table; - - if ((th.getParent() == null) || - ((container = th.getParent().getParent()) == null) || - !(container instanceof JScrollPane) || - ((table = th.getTable()) == null)) { - return 0; - } - - if (!container.getComponentOrientation().isLeftToRight() && - !th.getComponentOrientation().isLeftToRight()) { - JViewport viewport = ((JScrollPane) container).getViewport(); - int viewportWidth = viewport.getWidth(); - int diff = newWidth - oldWidth; - int newHeaderWidth = table.getWidth() + diff; - - /* Resize a table */ - Dimension tableSize = table.getSize(); - tableSize.width += diff; - table.setSize(tableSize); - - /* If this table is in AUTO_RESIZE_OFF mode and - * has a horizontal scrollbar, we need to update - * a view's position. - */ - if ((newHeaderWidth >= viewportWidth) && - (table.getAutoResizeMode() == JTable.AUTO_RESIZE_OFF)) { - Point p = viewport.getViewPosition(); - p.x = Math.max(0, Math.min(newHeaderWidth - viewportWidth, - p.x + diff)); - viewport.setViewPosition(p); - return diff; - } - } - return 0; - } /** * Initializes JTableHeader properties such as font, foreground, and background. The font, foreground, and @@ -625,9 +628,6 @@ public class DarkTableHeaderUIBridge extends BasicTableHeaderUI { // Uninstall methods - - - public void uninstallUI(final JComponent c) { uninstallDefaults(); uninstallListeners(); diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUI.java similarity index 94% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUI.java index a45400f5..49f31287 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUI.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUIBridge.java index 5bf1aace..9e7e0600 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableUIBridge.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/com/weis/darklaf/ui/table/TableUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/table/TableUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java index e9d54faa..1d423101 100644 --- a/src/main/java/com/weis/darklaf/ui/table/TableUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.table; +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.LazyActionMap; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.LazyActionMap; import org.jdesktop.swingx.plaf.basic.core.BasicTransferable; import org.jdesktop.swingx.plaf.basic.core.DragRecognitionSupport; import sun.swing.DefaultLookup; diff --git a/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java b/src/main/java/com/github/weisj/darklaf/ui/table/TextFieldTableCellEditorBorder.java similarity index 69% rename from src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/table/TextFieldTableCellEditorBorder.java index c7551e05..4e9be375 100644 --- a/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/table/TextFieldTableCellEditorBorder.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.table; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.table; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java b/src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java rename to src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java index d9261d63..c28500f9 100644 --- a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneContainerUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.taskpane; +package com.github.weisj.darklaf.ui.taskpane; import org.jdesktop.swingx.plaf.basic.BasicTaskPaneContainerUI; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneUI.java index 2d85e459..4777fbd7 100644 --- a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/taskpane/DarkTaskPaneUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.taskpane; +package com.github.weisj.darklaf.ui.taskpane; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jdesktop.swingx.JXCollapsiblePane; import org.jdesktop.swingx.JXHyperlink; import org.jdesktop.swingx.JXTaskPane; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkCaret.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkCaret.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/text/DarkCaret.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkCaret.java index 39ca2909..1074f957 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkCaret.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkCaret.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -56,9 +79,6 @@ public class DarkCaret extends DefaultCaret implements UIResource { public CaretStyle getStyle() { return style; - } @Override - protected void positionCaret(final MouseEvent e) { - super.positionCaret(e); } public void setStyle(final CaretStyle style) { @@ -72,6 +92,11 @@ public class DarkCaret extends DefaultCaret implements UIResource { } } + @Override + protected void positionCaret(final MouseEvent e) { + super.positionCaret(e); + } + public boolean isAlwaysVisible() { return alwaysVisible; } @@ -94,6 +119,15 @@ public class DarkCaret extends DefaultCaret implements UIResource { } } } + + public enum CaretStyle { + VERTICAL_LINE_STYLE, + UNDERLINE_STYLE, + BLOCK_STYLE, + BLOCK_BORDER_STYLE, + THICK_VERTICAL_LINE_STYLE + } + /** * Called when the mouse is clicked. If the click was generated from button1, a double click selects a word, and a * triple click the current line. @@ -202,15 +236,6 @@ public class DarkCaret extends DefaultCaret implements UIResource { } - public enum CaretStyle { - VERTICAL_LINE_STYLE, - UNDERLINE_STYLE, - BLOCK_STYLE, - BLOCK_BORDER_STYLE, - THICK_VERTICAL_LINE_STYLE - } - - @Override public void mousePressed(final MouseEvent e) { super.mousePressed(e); diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkEditorPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkEditorPaneUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/text/DarkEditorPaneUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkEditorPaneUI.java index 949d57f2..0a3232b2 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkEditorPaneUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkEditorPaneUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.text; +package com.github.weisj.darklaf.ui.text; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkFormattedTextFieldUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkFormattedTextFieldUI.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/text/DarkFormattedTextFieldUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkFormattedTextFieldUI.java index 9abd6028..adcc0358 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkFormattedTextFieldUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkFormattedTextFieldUI.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.text; +package com.github.weisj.darklaf.ui.text; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java index 120d5375..1458b291 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.text; +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.decorators.MouseMovementListener; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.decorators.MouseMovementListener; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -194,10 +194,21 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { && Boolean.TRUE.equals(((JComponent) c).getClientProperty("PasswordField.view")); } + @NotNull + private Point getShowIconCoord() { + Rectangle r = getDrawingRect(getComponent()); + int w = getShowIcon().getIconWidth(); + return new Point(r.x + r.width - w - DarkTextBorder.PADDING, r.y + (r.height - w) / 2); + } + private boolean isOverEye(final Point p) { return showShowIcon() && DarkTextFieldUI.isOver(getShowIconCoord(), getShowIcon(), p); } + protected static Icon getShowIcon() { + return show; + } + private boolean showShowIcon() { var c = (JPasswordField) getComponent(); char[] pw = c.getPassword(); @@ -206,17 +217,6 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { return show; } - @NotNull - private Point getShowIconCoord() { - Rectangle r = getDrawingRect(getComponent()); - int w = getShowIcon().getIconWidth(); - return new Point(r.x + r.width - w - DarkTextBorder.PADDING, r.y + (r.height - w) / 2); - } - - protected static Icon getShowIcon() { - return show; - } - @Override public void installUI(final JComponent c) { super.installUI(c); diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUIBridge.java similarity index 65% rename from src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUIBridge.java index 5beb3c12..7b15e863 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUIBridge.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; import javax.swing.*; import javax.swing.plaf.basic.BasicPasswordFieldUI; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextAreaUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextAreaUI.java similarity index 90% rename from src/main/java/com/weis/darklaf/ui/text/DarkTextAreaUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkTextAreaUI.java index d19e5376..b5355b74 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextAreaUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextAreaUI.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.ui.html.DarkHTML; +import com.github.weisj.darklaf.ui.html.DarkHTML; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java index e5d876f0..1242955c 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.text; +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.ui.table.TextFieldTableCellEditorBorder; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.ui.table.TextFieldTableCellEditorBorder; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java similarity index 88% rename from src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java index 7e956ce6..264a89ca 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java @@ -1,10 +1,33 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.decorators.MouseMovementListener; -import com.weis.darklaf.decorators.PopupMenuAdapter; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.decorators.MouseClickListener; +import com.github.weisj.darklaf.decorators.MouseMovementListener; +import com.github.weisj.darklaf.decorators.PopupMenuAdapter; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -151,6 +174,13 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh return new Point(r.x + DarkTextBorder.PADDING, r.y + (r.height - w) / 2); } + @NotNull + @Contract("_ -> new") + public Rectangle getDrawingRect(@NotNull final JTextComponent c) { + int w = borderSize; + return new Rectangle(w, w, c.getWidth() - 2 * w, c.getHeight() - 2 * w); + } + protected static Icon getSearchIcon(final Component c) { return isSearchFieldWithHistoryPopup(c) ? searchWithHistory : search; } @@ -164,13 +194,6 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh return c instanceof JTextField && "search".equals(((JTextField) c).getClientProperty("JTextField.variant")); } - @NotNull - @Contract("_ -> new") - public Rectangle getDrawingRect(@NotNull final JTextComponent c) { - int w = borderSize; - return new Rectangle(w, w, c.getWidth() - 2 * w, c.getHeight() - 2 * w); - } - protected void paintBorderBackground(@NotNull final Graphics2D g, @NotNull final JTextComponent c) { g.setColor(getBackgroundColor(c)); Rectangle r = getDrawingRect(getComponent()); diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUIBridge.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUIBridge.java index d14c1dbd..8391315c 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUIBridge.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; -import com.weis.darklaf.ui.html.DarkHTML; +import com.github.weisj.darklaf.ui.html.DarkHTML; import javax.swing.*; import javax.swing.event.DocumentEvent; diff --git a/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextPaneUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextPaneUI.java new file mode 100644 index 00000000..caabba90 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextPaneUI.java @@ -0,0 +1,70 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import javax.swing.plaf.ComponentUI; +import javax.swing.text.Element; +import javax.swing.text.View; +import java.beans.PropertyChangeEvent; + +/** + * @author Jannis Weis + */ +public class DarkTextPaneUI extends DarkEditorPaneUI { + + + @NotNull + @Contract("_ -> new") + public static ComponentUI createUI(final JComponent c) { + return new DarkTextPaneUI(); + } + + /* + * Implementation of BasicEditorPaneUI + */ + + @Override + public void installUI(final JComponent c) { + super.installUI(c); + } + + @Override + protected void propertyChange(final PropertyChangeEvent evt) { + super.propertyChange(evt); + } + + @Override + protected String getPropertyPrefix() { + return "TextPane"; + } + + @Override + public View create(final Element elem) { + return super.create(elem); + } +} diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextUI.java b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextUI.java similarity index 88% rename from src/main/java/com/weis/darklaf/ui/text/DarkTextUI.java rename to src/main/java/com/github/weisj/darklaf/ui/text/DarkTextUI.java index 8b1482c5..14da800a 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextUI.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; import sun.awt.SunToolkit; import sun.swing.DefaultLookup; @@ -163,14 +186,6 @@ public abstract class DarkTextUI extends BasicTextUI { } } - protected static int getFocusAcceleratorKeyMask() { - Toolkit tk = Toolkit.getDefaultToolkit(); - if (tk instanceof SunToolkit) { - return ((SunToolkit) tk).getFocusAcceleratorKeyMask(); - } - return ActionEvent.ALT_MASK; - } - /** * Create a default action map. This is basically the set of actions found exported by the component. */ @@ -189,6 +204,14 @@ public abstract class DarkTextUI extends BasicTextUI { return map; } + protected static int getFocusAcceleratorKeyMask() { + Toolkit tk = Toolkit.getDefaultToolkit(); + if (tk instanceof SunToolkit) { + return ((SunToolkit) tk).getFocusAcceleratorKeyMask(); + } + return ActionEvent.ALT_MASK; + } + /** * Invoked when editable property is changed. *

diff --git a/src/main/java/com/weis/darklaf/ui/text/SelectLineAction.java b/src/main/java/com/github/weisj/darklaf/ui/text/SelectLineAction.java similarity index 78% rename from src/main/java/com/weis/darklaf/ui/text/SelectLineAction.java rename to src/main/java/com/github/weisj/darklaf/ui/text/SelectLineAction.java index 49277183..98074077 100644 --- a/src/main/java/com/weis/darklaf/ui/text/SelectLineAction.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/SelectLineAction.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.text; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.text; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/ui/text/SelectWordAction.java b/src/main/java/com/github/weisj/darklaf/ui/text/SelectWordAction.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/text/SelectWordAction.java rename to src/main/java/com/github/weisj/darklaf/ui/text/SelectWordAction.java index 4475082c..c1cb041c 100644 --- a/src/main/java/com/weis/darklaf/ui/text/SelectWordAction.java +++ b/src/main/java/com/github/weisj/darklaf/ui/text/SelectWordAction.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.text; +package com.github.weisj.darklaf.ui.text; import javax.swing.*; import javax.swing.text.BadLocationException; diff --git a/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java b/src/main/java/com/github/weisj/darklaf/ui/titledborder/DarkTitledBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/titledborder/DarkTitledBorder.java index b20eb61c..59dff6da 100644 --- a/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/titledborder/DarkTitledBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.titledborder; +package com.github.weisj.darklaf.ui.titledborder; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarBorder.java similarity index 69% rename from src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarBorder.java index 8d0af32f..80fee823 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarBorder.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.ui.toolbar; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.toolbar; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUI.java similarity index 89% rename from src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java rename to src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUI.java index 807cf207..19989169 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUI.java @@ -1,6 +1,29 @@ -package com.weis.darklaf.ui.toolbar; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.toolbar; -import com.weis.darklaf.decorators.MouseResponder; +import com.github.weisj.darklaf.decorators.MouseResponder; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUIBridge.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java rename to src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUIBridge.java index 2cdbae2f..3d8bb473 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java +++ b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DarkToolBarUIBridge.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.toolbar; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.toolbar; -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.LazyActionMap; +import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.LazyActionMap; import sun.swing.DefaultLookup; import sun.swing.UIAction; diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java rename to src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java index 1bb9557e..9bdded8f 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java +++ b/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.toolbar; +package com.github.weisj.darklaf.ui.toolbar; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java similarity index 92% rename from src/main/java/com/weis/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java index 69a4a11f..6b7b2ac2 100644 --- a/src/main/java/com/weis/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkDefaultToolTipBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tooltip; +package com.github.weisj.darklaf.ui.tooltip; -import com.weis.darklaf.components.border.MutableLineBorder; +import com.github.weisj.darklaf.components.border.MutableLineBorder; import javax.swing.*; import javax.swing.plaf.UIResource; diff --git a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipBorder.java similarity index 78% rename from src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipBorder.java index 623ca6b6..fb4b4273 100644 --- a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipBorder.java @@ -1,10 +1,33 @@ -package com.weis.darklaf.ui.tooltip; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.tooltip; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.border.BubbleBorder; -import com.weis.darklaf.components.border.DropShadowBorder; -import com.weis.darklaf.components.tooltip.ToolTipStyle; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.border.BubbleBorder; +import com.github.weisj.darklaf.components.border.DropShadowBorder; +import com.github.weisj.darklaf.components.tooltip.ToolTipStyle; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipUI.java b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java similarity index 87% rename from src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java index 9762ac22..8077cbf0 100644 --- a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java @@ -1,7 +1,30 @@ -package com.weis.darklaf.ui.tooltip; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.tooltip; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkDefaultTreeEditor.java b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tree/DarkDefaultTreeEditor.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java index 76f84c45..6a9805a9 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkDefaultTreeEditor.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellBorder.java similarity index 95% rename from src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellBorder.java index 19a364bb..3792c01e 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellBorder.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellEditor.java b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellEditor.java similarity index 97% rename from src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellEditor.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellEditor.java index fceccd41..029717a8 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellEditor.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellEditor.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; -import com.weis.darklaf.components.SelectableTreeNode; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.components.SelectableTreeNode; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellRenderer.java b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellRenderer.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java index 00757ee8..5783f248 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellRenderer.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; -import com.weis.darklaf.ui.cell.DarkCellRendererToggleButton; -import com.weis.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; +import com.github.weisj.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java index ed64418c..62fbfaf4 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; -import com.weis.darklaf.util.SystemInfo; +import com.github.weisj.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tree/TreeCellEditorDelegate.java b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeCellEditorDelegate.java similarity index 98% rename from src/main/java/com/weis/darklaf/ui/tree/TreeCellEditorDelegate.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/TreeCellEditorDelegate.java index 7d7b14ce..2f11c0f3 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/TreeCellEditorDelegate.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeCellEditorDelegate.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/ui/tree/TreeRendererComponent.java b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererComponent.java similarity index 99% rename from src/main/java/com/weis/darklaf/ui/tree/TreeRendererComponent.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererComponent.java index bb593d80..b50dc398 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/TreeRendererComponent.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererComponent.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/ui/tree/TreeRendererSupport.java b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererSupport.java similarity index 96% rename from src/main/java/com/weis/darklaf/ui/tree/TreeRendererSupport.java rename to src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererSupport.java index b1039edf..cc423b6b 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/TreeRendererSupport.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tree/TreeRendererSupport.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.ui.tree; +package com.github.weisj.darklaf.ui.tree; import javax.swing.*; import java.awt.*; diff --git a/src/main/java/com/weis/darklaf/ui/tristate/DarkTristateCheckBoxUI.java b/src/main/java/com/github/weisj/darklaf/ui/tristate/DarkTristateCheckBoxUI.java similarity index 52% rename from src/main/java/com/weis/darklaf/ui/tristate/DarkTristateCheckBoxUI.java rename to src/main/java/com/github/weisj/darklaf/ui/tristate/DarkTristateCheckBoxUI.java index 9311a858..1c5a95fa 100644 --- a/src/main/java/com/weis/darklaf/ui/tristate/DarkTristateCheckBoxUI.java +++ b/src/main/java/com/github/weisj/darklaf/ui/tristate/DarkTristateCheckBoxUI.java @@ -1,8 +1,31 @@ -package com.weis.darklaf.ui.tristate; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.ui.tristate; -import com.weis.darklaf.components.tristate.TristateCheckBox; -import com.weis.darklaf.components.tristate.TristateState; -import com.weis.darklaf.ui.checkbox.DarkCheckBoxUI; +import com.github.weisj.darklaf.components.tristate.TristateCheckBox; +import com.github.weisj.darklaf.components.tristate.TristateState; +import com.github.weisj.darklaf.ui.checkbox.DarkCheckBoxUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/Animator.java b/src/main/java/com/github/weisj/darklaf/util/Animator.java similarity index 81% rename from src/main/java/com/weis/darklaf/util/Animator.java rename to src/main/java/com/github/weisj/darklaf/util/Animator.java index 0c125fe6..631d77b5 100644 --- a/src/main/java/com/weis/darklaf/util/Animator.java +++ b/src/main/java/com/github/weisj/darklaf/util/Animator.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.util; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/ColorUtil.java b/src/main/java/com/github/weisj/darklaf/util/ColorUtil.java similarity index 98% rename from src/main/java/com/weis/darklaf/util/ColorUtil.java rename to src/main/java/com/github/weisj/darklaf/util/ColorUtil.java index de6de27b..6e951b30 100644 --- a/src/main/java/com/weis/darklaf/util/ColorUtil.java +++ b/src/main/java/com/github/weisj/darklaf/util/ColorUtil.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/DarkUIUtil.java b/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java similarity index 99% rename from src/main/java/com/weis/darklaf/util/DarkUIUtil.java rename to src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java index d98c9dcc..4b8806a3 100644 --- a/src/main/java/com/weis/darklaf/util/DarkUIUtil.java +++ b/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java @@ -21,10 +21,10 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; -import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.ui.menu.DarkPopupMenuUI; +import com.github.weisj.darklaf.decorators.CellRenderer; +import com.github.weisj.darklaf.ui.menu.DarkPopupMenuUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/util/GraphicsContext.java b/src/main/java/com/github/weisj/darklaf/util/GraphicsContext.java similarity index 98% rename from src/main/java/com/weis/darklaf/util/GraphicsContext.java rename to src/main/java/com/github/weisj/darklaf/util/GraphicsContext.java index 78386958..46012c8a 100644 --- a/src/main/java/com/weis/darklaf/util/GraphicsContext.java +++ b/src/main/java/com/github/weisj/darklaf/util/GraphicsContext.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import java.awt.*; import java.util.Map; diff --git a/src/main/java/com/weis/darklaf/util/GraphicsUtil.java b/src/main/java/com/github/weisj/darklaf/util/GraphicsUtil.java similarity index 98% rename from src/main/java/com/weis/darklaf/util/GraphicsUtil.java rename to src/main/java/com/github/weisj/darklaf/util/GraphicsUtil.java index eace4cf5..d9de38a0 100644 --- a/src/main/java/com/weis/darklaf/util/GraphicsUtil.java +++ b/src/main/java/com/github/weisj/darklaf/util/GraphicsUtil.java @@ -21,9 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; -import com.weis.darklaf.log.LogFormatter; +import com.github.weisj.darklaf.log.LogFormatter; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/ImageUtil.java b/src/main/java/com/github/weisj/darklaf/util/ImageUtil.java similarity index 95% rename from src/main/java/com/weis/darklaf/util/ImageUtil.java rename to src/main/java/com/github/weisj/darklaf/util/ImageUtil.java index 58ef7448..3abddfd6 100644 --- a/src/main/java/com/weis/darklaf/util/ImageUtil.java +++ b/src/main/java/com/github/weisj/darklaf/util/ImageUtil.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -30,9 +30,6 @@ import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage; -import static com.weis.darklaf.util.GraphicsUtil.SCALE_X; -import static com.weis.darklaf.util.GraphicsUtil.SCALE_Y; - /** * @author Jannis Weis */ @@ -51,7 +48,7 @@ public final class ImageUtil { */ @NotNull public static Image scaledImageFromComponent(@NotNull final Component c, @NotNull final Rectangle bounds) { - return scaledImageFromComponent(c, bounds, SCALE_X, SCALE_Y); + return scaledImageFromComponent(c, bounds, GraphicsUtil.SCALE_X, GraphicsUtil.SCALE_Y); } /** @@ -163,11 +160,11 @@ public final class ImageUtil { @NotNull @Contract("_, _, _ -> new") public static BufferedImage createImage(final int width, final int height, final int type) { - return new BufferedImage((int) (width * SCALE_X), (int) (height * SCALE_Y), type) { + return new BufferedImage((int) (width * GraphicsUtil.SCALE_X), (int) (height * GraphicsUtil.SCALE_Y), type) { @Override public Graphics2D createGraphics() { var g = super.createGraphics(); - g.scale(SCALE_X, SCALE_Y); + g.scale(GraphicsUtil.SCALE_X, GraphicsUtil.SCALE_Y); return g; } }; diff --git a/src/main/java/com/weis/darklaf/util/LazyActionMap.java b/src/main/java/com/github/weisj/darklaf/util/LazyActionMap.java similarity index 78% rename from src/main/java/com/weis/darklaf/util/LazyActionMap.java rename to src/main/java/com/github/weisj/darklaf/util/LazyActionMap.java index 78b90c30..42609200 100644 --- a/src/main/java/com/weis/darklaf/util/LazyActionMap.java +++ b/src/main/java/com/github/weisj/darklaf/util/LazyActionMap.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.util; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/Pair.java b/src/main/java/com/github/weisj/darklaf/util/Pair.java similarity index 97% rename from src/main/java/com/weis/darklaf/util/Pair.java rename to src/main/java/com/github/weisj/darklaf/util/Pair.java index dee12395..457d8f64 100644 --- a/src/main/java/com/weis/darklaf/util/Pair.java +++ b/src/main/java/com/github/weisj/darklaf/util/Pair.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/weis/darklaf/util/PropertyLoader.java b/src/main/java/com/github/weisj/darklaf/util/PropertyLoader.java similarity index 98% rename from src/main/java/com/weis/darklaf/util/PropertyLoader.java rename to src/main/java/com/github/weisj/darklaf/util/PropertyLoader.java index b6a3e57e..871e0e3c 100644 --- a/src/main/java/com/weis/darklaf/util/PropertyLoader.java +++ b/src/main/java/com/github/weisj/darklaf/util/PropertyLoader.java @@ -21,11 +21,11 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; -import com.weis.darklaf.icons.DarkUIAwareIcon; -import com.weis.darklaf.icons.EmptyIcon; -import com.weis.darklaf.icons.IconLoader; +import com.github.weisj.darklaf.icons.DarkUIAwareIcon; +import com.github.weisj.darklaf.icons.EmptyIcon; +import com.github.weisj.darklaf.icons.IconLoader; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/com/weis/darklaf/util/StringUtil.java b/src/main/java/com/github/weisj/darklaf/util/StringUtil.java similarity index 99% rename from src/main/java/com/weis/darklaf/util/StringUtil.java rename to src/main/java/com/github/weisj/darklaf/util/StringUtil.java index fd3614ab..d369541b 100644 --- a/src/main/java/com/weis/darklaf/util/StringUtil.java +++ b/src/main/java/com/github/weisj/darklaf/util/StringUtil.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/SwingXUtilities.java b/src/main/java/com/github/weisj/darklaf/util/SwingXUtilities.java similarity index 98% rename from src/main/java/com/weis/darklaf/util/SwingXUtilities.java rename to src/main/java/com/github/weisj/darklaf/util/SwingXUtilities.java index 08569fb0..8eec214a 100644 --- a/src/main/java/com/weis/darklaf/util/SwingXUtilities.java +++ b/src/main/java/com/github/weisj/darklaf/util/SwingXUtilities.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -package com.weis.darklaf.util; +package com.github.weisj.darklaf.util; import org.jdesktop.jxlayer.JXLayer; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/weis/darklaf/util/SystemInfo.java b/src/main/java/com/github/weisj/darklaf/util/SystemInfo.java similarity index 76% rename from src/main/java/com/weis/darklaf/util/SystemInfo.java rename to src/main/java/com/github/weisj/darklaf/util/SystemInfo.java index d218ed1d..03d363fa 100644 --- a/src/main/java/com/weis/darklaf/util/SystemInfo.java +++ b/src/main/java/com/github/weisj/darklaf/util/SystemInfo.java @@ -1,4 +1,27 @@ -package com.weis.darklaf.util; +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.util; import org.jetbrains.annotations.Contract; diff --git a/src/main/java/com/github/weisj/darklaf/util/TimerUtil.java b/src/main/java/com/github/weisj/darklaf/util/TimerUtil.java new file mode 100644 index 00000000..ca938850 --- /dev/null +++ b/src/main/java/com/github/weisj/darklaf/util/TimerUtil.java @@ -0,0 +1,58 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.github.weisj.darklaf.util; + +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.awt.event.ActionListener; + +/** + * @author Jannis Weis + */ +public final class TimerUtil { + @Contract("_, _, _ -> new") + @NotNull + public static Timer createNamedTimer(@NotNull final String name, final int delay, + @NotNull final ActionListener listener) { + return new Timer(delay, listener) { + @Override + public String toString() { + return name; + } + }; + } + + @Contract("_, _ -> new") + @NotNull + public static Timer createNamedTimer(@NotNull final String name, final int delay) { + return new Timer(delay, null) { + @Override + public String toString() { + return name; + } + }; + } +} diff --git a/src/main/java/com/weis/darklaf/DarkMetalTheme.java b/src/main/java/com/weis/darklaf/DarkMetalTheme.java deleted file mode 100644 index bb40d0c1..00000000 --- a/src/main/java/com/weis/darklaf/DarkMetalTheme.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.weis.darklaf; - -import javax.swing.plaf.metal.DefaultMetalTheme; - -/** - * @author Jannis Weis - */ -public class DarkMetalTheme extends DefaultMetalTheme { - public String getName() { - return "Darcula theme"; - } -} - diff --git a/src/main/java/com/weis/darklaf/components/OverlayScrollPane.java b/src/main/java/com/weis/darklaf/components/OverlayScrollPane.java deleted file mode 100644 index b738d844..00000000 --- a/src/main/java/com/weis/darklaf/components/OverlayScrollPane.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.components; - -import com.weis.darklaf.ui.scrollpane.ScrollLayoutManagerDelegate; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import javax.swing.plaf.ScrollPaneUI; -import java.awt.*; - -/** - * Scroll pane that displays its content beneath the scrollbar. - * - * @author Jannis Weis - */ -public class OverlayScrollPane extends JLayeredPane { - - protected final OScrollPane scrollPane; - private final ControlPanel controlPanel; - - /** - * Creates a JScrollIndicator that displays the contents of the specified component, where both - * horizontal and vertical scrollbars appear whenever the component's contents are larger than the view and - * scrolling in underway or the mouse is over the scrollbar position. - */ - public OverlayScrollPane() { - this(null); - } - - /** - * Creates a JScrollIndicator that displays the contents of the specified component, where both - * horizontal and vertical scrollbars appear whenever the component's contents are larger than the view and - * scrolling in underway or the mouse is over the scrollbar position. - * - * @param view the component to display in the scrollable viewport - * @see JScrollPane#setViewportView - */ - public OverlayScrollPane(final JComponent view) { - this(view, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); - } - - /** - * Creates a JScrollIndicator that displays the view component in a viewport whose view position can be controlled - * with a pair of scrollbars. The scrollbar policies specify when the scrollbars are displayed, For example, if - * vsbPolicy is JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED then the vertical scrollbar only appears if the view - * doesn't fit vertically. The available policy settings are listed at {@link JScrollPane#setVerticalScrollBarPolicy(int)} - * and {@link JScrollPane#setHorizontalScrollBarPolicy}. - * - * @param view the view of the component. - * @param vsbPolicy an integer that specifies the vertical scrollbar policy - * @param hsbPolicy an integer that specifies the horizontal scrollbar policy - */ - public OverlayScrollPane(final JComponent view, final int vsbPolicy, final int hsbPolicy) { - scrollPane = createScrollPane(view, vsbPolicy, hsbPolicy); - add(scrollPane, JLayeredPane.DEFAULT_LAYER); - - controlPanel = new ControlPanel(scrollPane); - add(controlPanel, JLayeredPane.PALETTE_LAYER); - } - - protected OScrollPane createScrollPane(final JComponent view, final int vsbPolicy, final int hsbPolicy) { - return new OScrollPane(view, vsbPolicy, hsbPolicy); - } - - /** - * Returns the scroll pane used by this scroll indicator. Use carefully (e.g. to set unit increments) because not - * all changes have an effect. You have to write listeners in this cases (e.g. for changing the scrollbar policy) - * - * @return the scrollPane - */ - @NotNull - public JScrollPane getScrollPane() { - return scrollPane; - } - - @Override - public void doLayout() { - scrollPane.setSize(getSize()); - controlPanel.setSize(getSize()); - scrollPane.doLayout(); - } - - public void setVerticalScrollBarPolicy(final int policy) { - scrollPane.setVerticalScrollBarPolicy(policy); - controlPanel.showVerticalScrollBar(policy != JScrollPane.VERTICAL_SCROLLBAR_NEVER); - } - - public void setHorizontalScrollBarPolicy(final int policy) { - scrollPane.setHorizontalScrollBarPolicy(policy); - controlPanel.showHorizontalScrollBar(policy != JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - } @Override - public Dimension getPreferredSize() { - return scrollPane.getPreferredSize(); - } - - @Contract(pure = true) - @NotNull - public JScrollBar getVerticalScrollBar() { - return scrollPane.verticalScrollBar; - } - - @Contract(pure = true) - @NotNull - public JScrollBar getHorizontalScrollBar() { - return scrollPane.horizontalScrollBar; - } - - public void setViewportView(final Component c) { - scrollPane.setViewportView(c); - } - - @Override - public void setPreferredSize(final Dimension preferredSize) { - super.setPreferredSize(preferredSize); - scrollPane.setPreferredSize(preferredSize); - } - - private static final class PopupScrollBar extends JScrollBar { - - private final JScrollPane pane; - - private PopupScrollBar(final int direction, final JScrollPane pane) { - super(direction); - this.pane = pane; - putClientProperty("JScrollBar.fastWheelScrolling", true); - setOpaque(false); - } - - @Contract(pure = true) - @Override - public boolean isOpaque() { - return false; - } - } - - protected static class OScrollPane extends JScrollPane { - private JScrollBar verticalScrollBar; - private JScrollBar horizontalScrollBar; - - protected OScrollPane(final JComponent view, final int vsbPolicy, final int hsbPolicy) { - super(view, vsbPolicy, hsbPolicy); - super.setLayout(new ScrollLayoutManagerDelegate((ScrollPaneLayout) getLayout()) { - @Override - public void removeLayoutComponent(final Component comp) { - if (comp == verticalScrollBar || comp == horizontalScrollBar) { - return; - } - super.removeLayoutComponent(comp); - } - - @Override - public void layoutContainer(final Container parent) { - super.layoutContainer(parent); - if (viewport != null) { - var bounds = viewport.getBounds(); - var vertBounds = verticalScrollBar.getBounds(); - var horBounds = horizontalScrollBar.getBounds(); - var columnHeader = getColumnHeader(); - var rowHeader = getRowHeader(); - if (getComponentOrientation().isLeftToRight()) { - if (verticalScrollBar.isVisible()) { - bounds.width += vertBounds.width; - } - if (columnHeader != null && verticalScrollBar.isVisible()) { - var chb = columnHeader.getBounds(); - chb.width += vertBounds.width; - columnHeader.setBounds(chb); - } - if (rowHeader != null && horizontalScrollBar.isVisible()) { - var rhb = rowHeader.getBounds(); - rhb.height += horBounds.height; - rowHeader.setBounds(rhb); - } - } else { - if (verticalScrollBar.isVisible()) { - bounds.x -= vertBounds.width; - bounds.width += vertBounds.width; - } - if (columnHeader != null && verticalScrollBar.isVisible()) { - var chb = columnHeader.getBounds(); - chb.x -= vertBounds.width; - chb.width += vertBounds.width; - columnHeader.setBounds(chb); - } - if (rowHeader != null && horizontalScrollBar.isVisible()) { - var rhb = rowHeader.getBounds(); - rhb.height += horBounds.height; - rowHeader.setBounds(rhb); - } - } - if (horizontalScrollBar.isVisible()) { - bounds.height += horBounds.height; - } - viewport.setBounds(bounds); - } - } - }); - } - - /* - * Ensure the correct background. - */ - public void setUI(final ScrollPaneUI ui) { - if (verticalScrollBar == null) { - verticalScrollBar = new PopupScrollBar(JScrollBar.VERTICAL, this); - verticalScrollBar.putClientProperty("JScrollBar.scrollPaneParent", this); - } - if (horizontalScrollBar == null) { - horizontalScrollBar = new PopupScrollBar(JScrollBar.HORIZONTAL, this); - horizontalScrollBar.putClientProperty("JScrollBar.scrollPaneParent", this); - } - super.setUI(ui); - SwingUtilities.invokeLater(() -> { - Component component = getViewport().getView(); - if (component != null) { - getViewport().setBackground(component.getBackground()); - } - }); - } - - @Override - public JScrollBar getHorizontalScrollBar() { - return horizontalScrollBar; - } - - @Override - public JScrollBar getVerticalScrollBar() { - return verticalScrollBar; - } - } - - private final class ControlPanel extends JPanel { - - private boolean showVertical; - private boolean showHorizontal; - - private ControlPanel(@NotNull final OScrollPane scrollPane) { - setLayout(null); - - scrollPane.setVerticalScrollBar(scrollPane.verticalScrollBar); - if (scrollPane.getVerticalScrollBarPolicy() != JScrollPane.VERTICAL_SCROLLBAR_NEVER) { - showVertical = true; - add(scrollPane.verticalScrollBar); - } - - scrollPane.setHorizontalScrollBar(scrollPane.horizontalScrollBar); - if (scrollPane.getHorizontalScrollBarPolicy() != JScrollPane.HORIZONTAL_SCROLLBAR_NEVER) { - showHorizontal = true; - add(scrollPane.horizontalScrollBar); - } - } - - private void showVerticalScrollBar(final boolean show) { - if (show == showVertical) { - return; - } - showVertical = show; - scrollPane.verticalScrollBar.setVisible(show); - } - - private void showHorizontalScrollBar(final boolean show) { - if (show == showHorizontal) { - return; - } - showHorizontal = show; - scrollPane.horizontalScrollBar.setVisible(show); - } - - @Override - public boolean contains(final int x, final int y) { - if (scrollPane.horizontalScrollBar.isVisible() - && scrollPane.horizontalScrollBar.getBounds().contains(x, y)) { - return true; - } - return scrollPane.verticalScrollBar.isVisible() - && scrollPane.verticalScrollBar.getBounds().contains(x, y); - } - - @Override - public boolean isOpaque() { - return false; - } - } - - - - - - -} diff --git a/src/main/java/com/weis/darklaf/components/ScrollPopupMenu.java b/src/main/java/com/weis/darklaf/components/ScrollPopupMenu.java deleted file mode 100644 index 9fd5455b..00000000 --- a/src/main/java/com/weis/darklaf/components/ScrollPopupMenu.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.components; - -import com.weis.darklaf.util.DarkUIUtil; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; -import javax.swing.event.MenuKeyEvent; -import javax.swing.event.MenuKeyListener; -import java.awt.*; - -/** - * @author Jannis Weis - */ -public class ScrollPopupMenu extends JPopupMenu { - - private final JPanel contentPane; - private final JScrollPane scrollPane; - private int maxHeight; - private JWindow popWin; - private int posX; - private int posY; - private JPanel view; - - public ScrollPopupMenu(final int maxHeight) { - this.maxHeight = maxHeight; - contentPane = new JPanel(new BorderLayout()); - OverlayScrollPane overlayScrollPane = createScrollPane(); - scrollPane = overlayScrollPane.getScrollPane(); - contentPane.add(overlayScrollPane, BorderLayout.CENTER); - contentPane.setBorder(getBorder()); - setDoubleBuffered(true); - MenuKeyListener menuKeyListener = new MenuKeyListener() { - @Override - public void menuKeyTyped(final MenuKeyEvent e) { - } - - @Override - public void menuKeyPressed(final MenuKeyEvent e) { - SwingUtilities.invokeLater(() -> { - var path = e.getMenuSelectionManager().getSelectedPath(); - if (path.length == 0) { - return; - } - var bounds = path[path.length - 1].getComponent().getBounds(); - var r = SwingUtilities.convertRectangle(ScrollPopupMenu.this, bounds, scrollPane); - scrollPane.getViewport().scrollRectToVisible(r); - }); - } - - @Override - public void menuKeyReleased(final MenuKeyEvent e) { - - } - }; - addMenuKeyListener(menuKeyListener); - } - - @NotNull - private OverlayScrollPane createScrollPane() { - view = new JPanel(new BorderLayout()); - view.add(this, BorderLayout.CENTER); - OverlayScrollPane overlayScrollPane = - new OverlayScrollPane(view, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); - JScrollBar bar = overlayScrollPane.getVerticalScrollBar(); - bar.putClientProperty("ScrollBar.thin", Boolean.TRUE); - DarkUIUtil.doNotCancelPopupSetup(bar); - DarkUIUtil.doNotCancelPopupSetup(overlayScrollPane.getScrollPane()); - return overlayScrollPane; - } - - /** - * Set the maximum height of the popup. If the size is larger than the specified maximum height the content will be - * wrapped inside a scroll pane. - *

- * Note: A value of <= 0 indicates that the height should not be limited. - * - * @param maxHeight the max height to use. - */ - public void setMaxHeight(final int maxHeight) { - this.maxHeight = maxHeight; - } - - @Override - public JMenuItem add(@NotNull final JMenuItem menuItem) { - menuItem.getModel().addChangeListener(e -> contentPane.repaint(menuItem.getBounds())); - return super.add(menuItem); - } - - @Override - public void pack() { - if (popWin == null) { - return; - } - final Dimension prefSize = getPreferredSize(); - if (maxHeight <= 0 || prefSize.height <= maxHeight) { - setBounds(0, 0, prefSize.width, prefSize.height); - popWin.setContentPane(this); - setBorderPainted(true); - popWin.setSize(prefSize.width, prefSize.height); - } else { - int increment = getComponentCount() > 0 - ? Math.max(1, getComponent(0).getPreferredSize().height / 2) - : 1; - var bar = scrollPane.getVerticalScrollBar(); - bar.setValue(bar.getMinimum()); - bar.setUnitIncrement(increment); - setBorderPainted(false); - view.add(this); - popWin.setContentPane(contentPane); - popWin.pack(); - popWin.setSize(prefSize.width + bar.getPreferredSize().width, maxHeight); - } - } - - @Override - public boolean isVisible() { - return popWin != null && popWin.isShowing(); - } @Override - public void setLocation(final int x, final int y) { - if (popWin != null && popWin.isShowing()) { - popWin.setLocation(x, y); - } else { - posX = x; - posY = y; - } - } - - /** - * Get the scroll pane of the popup. - * - * @return scroll pane; - */ - @Nullable - public JScrollPane getScrollPane() { - return scrollPane; - } - - @Override - public void setVisible(final boolean b) { - if (b == isVisible()) { - return; - } - if (b) { - if (isPopupMenu()) { - MenuElement[] menuElements = new MenuElement[1]; - if (getSubElements().length > 0) { - menuElements = new MenuElement[2]; - menuElements[1] = getSubElements()[0]; - } - menuElements[0] = this; - MenuSelectionManager.defaultManager().setSelectedPath(menuElements); - } - firePopupMenuWillBecomeVisible(); - showPopup(); - firePropertyChange("visible", Boolean.FALSE, Boolean.TRUE); - } else { - hidePopup(); - } - } - - protected void hidePopup() { - if (popWin != null) { - firePopupMenuWillBecomeInvisible(); - popWin.setVisible(false); - popWin = null; - firePropertyChange("visible", Boolean.TRUE, Boolean.FALSE); - if (isPopupMenu()) { - MenuSelectionManager.defaultManager().clearSelectedPath(); - } - } - } - - protected void showPopup() { - var comp = getInvoker(); - if (comp == null) return; - - while (comp.getParent() != null) { - comp = comp.getParent(); - } - - if (popWin == null || popWin.getOwner() != comp) { - popWin = comp instanceof Window ? new JWindow((Window) comp) : new JWindow(new JFrame()); - } - pack(); - popWin.setLocation(posX, posY); - popWin.setVisible(true); - requestFocus(); - } - - - private boolean isPopupMenu() { - var invoker = getInvoker(); - return ((invoker != null) && !(invoker instanceof JMenu)); - } -} diff --git a/src/main/java/com/weis/darklaf/components/TabEvent.java b/src/main/java/com/weis/darklaf/components/TabEvent.java deleted file mode 100644 index 4d6d8749..00000000 --- a/src/main/java/com/weis/darklaf/components/TabEvent.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.weis.darklaf.components; - -import java.awt.event.ActionEvent; - -/** - * @author Jannis Weis - */ -public class TabEvent extends ActionEvent { - - public static final int TAB_OPENED = 0; - public static final int TAB_CLOSED = 1; - private final int tabIndex; - - public TabEvent(final Object source, final int id, final String command, final int tabIndex) { - super(source, id, command); - this.tabIndex = tabIndex; - } - - public int getTabIndex() { - return tabIndex; - } -} diff --git a/src/main/java/com/weis/darklaf/components/TabListener.java b/src/main/java/com/weis/darklaf/components/TabListener.java deleted file mode 100644 index 0ea13507..00000000 --- a/src/main/java/com/weis/darklaf/components/TabListener.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.weis.darklaf.components; - -import java.util.EventListener; - -/** - * @author Jannis Weis - */ -public interface TabListener extends EventListener { - - void tabOpened(TabEvent e); - - void tabClosed(TabEvent e); -} diff --git a/src/main/java/com/weis/darklaf/components/TabPropertyChangeEvent.java b/src/main/java/com/weis/darklaf/components/TabPropertyChangeEvent.java deleted file mode 100644 index 5aac291a..00000000 --- a/src/main/java/com/weis/darklaf/components/TabPropertyChangeEvent.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.weis.darklaf.components; - -import java.beans.PropertyChangeEvent; - -/** - * @author Jannis Weis - */ -public class TabPropertyChangeEvent extends PropertyChangeEvent { - - private final int index; - - public TabPropertyChangeEvent(final Object source, final String propertyName, - final Object oldValue, final Object newValue, final int index) { - super(source, propertyName, oldValue, newValue); - this.index = index; - } - - public int getIndex() { - return index; - } -} diff --git a/src/main/java/com/weis/darklaf/components/text/TextFieldHistoryPopup.java b/src/main/java/com/weis/darklaf/components/text/TextFieldHistoryPopup.java deleted file mode 100644 index 4c3816c6..00000000 --- a/src/main/java/com/weis/darklaf/components/text/TextFieldHistoryPopup.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.components.text; - -import com.weis.darklaf.components.ScrollPopupMenu; -import com.weis.darklaf.decorators.PlainAction; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; - -/** - * @author Jannis Weis - */ -public class TextFieldHistoryPopup extends ScrollPopupMenu implements SearchListener { - - private final Set history; - private final JTextField textField; - private int capacity; - - /** - * Create a search popup Menu. - * - * @param textField the text field. - * @param capacity the length of the history. - * @param maxH maximum height. - */ - public TextFieldHistoryPopup(@NotNull final SearchTextField textField, final int capacity, final int maxH) { - super(maxH); - this.textField = textField; - textField.addSearchListener(this); - setCapacity(capacity); - this.history = Collections.newSetFromMap(new LinkedHashMap<>() { - protected boolean removeEldestEntry(final Map.Entry eldest) { - return size() > capacity; - } - }); - } - - /** - * Get the history as a list. - * - * @return the history. - */ - public List getHistory() { - return new ArrayList<>(history); - } - - /** - * Get the capacity of the history. - * - * @return the capacity. - * @see #setCapacity(int) setCapacity() - */ - public int getCapacity() { - return capacity; - } - - /** - * Set the capacity of the history. If the size grows larger than the capacity the oldest entry will be deleted. - * - * @param capacity the capacity. - * @throws IllegalArgumentException if capacity < 0 - */ - public void setCapacity(final int capacity) throws IllegalArgumentException { - if (capacity < 0) throw new IllegalArgumentException("Negative history size is not supported"); - this.capacity = capacity; - } - - /** - * Get the current length of the history. - * - * @return the current length of the history. - */ - public int getLength() { - return history.size(); - } - - @Override - public void searchPerformed(@NotNull final SearchEvent e) { - var text = e.getText(); - if (!text.isBlank()) { - addEntry(text); - } - } - - /** - * Add entry to the history. If the size is greater than the capacity the oldest entry will be deleted. - * - * @param entry the entry to add. - * @see #getLength() getLength - * @see #setCapacity(int) setCapacity - * @see #getCapacity() getCapacity - */ - public void addEntry(final String entry) { - history.remove(entry); - history.add(entry); - } - - @Override - public void show(final Component invoker, final int x, final int y) { - if (history.size() == 0) return; - super.show(invoker, x, y); - } - - @Override - protected void showPopup() { - if (history.size() == 0) { - firePopupMenuCanceled(); - return; - } - this.removeAll(); - LinkedList list = new LinkedList<>(history); - Iterator itr = list.descendingIterator(); - while (itr.hasNext()) { - String item = itr.next(); - add(new JMenuItem(new PlainAction(item, () -> textField.setText(item)))); - } - super.showPopup(); - } - - /** - * Clear all entries from the history. - */ - public void clearHistory() { - history.clear(); - } -} diff --git a/src/main/java/com/weis/darklaf/components/tristate/TristateState.java b/src/main/java/com/weis/darklaf/components/tristate/TristateState.java deleted file mode 100644 index b144142a..00000000 --- a/src/main/java/com/weis/darklaf/components/tristate/TristateState.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.weis.darklaf.components.tristate; - -public enum TristateState { - SELECTED { - public TristateState next() { - return INDETERMINATE; - } - }, - INDETERMINATE { - public TristateState next() { - return DESELECTED; - } - }, - DESELECTED { - public TristateState next() { - return SELECTED; - } - }; - - public abstract TristateState next(); -} diff --git a/src/main/java/com/weis/darklaf/decorators/AncestorAdapter.java b/src/main/java/com/weis/darklaf/decorators/AncestorAdapter.java deleted file mode 100644 index 3dfecaf9..00000000 --- a/src/main/java/com/weis/darklaf/decorators/AncestorAdapter.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.weis.darklaf.decorators; - -import javax.swing.event.AncestorEvent; -import javax.swing.event.AncestorListener; - -public class AncestorAdapter implements AncestorListener { - @Override - public void ancestorAdded(final AncestorEvent event) { - } - - @Override - public void ancestorRemoved(final AncestorEvent event) { - } - - @Override - public void ancestorMoved(final AncestorEvent event) { - } -} diff --git a/src/main/java/com/weis/darklaf/decorators/CellRenderer.java b/src/main/java/com/weis/darklaf/decorators/CellRenderer.java deleted file mode 100644 index 911ab623..00000000 --- a/src/main/java/com/weis/darklaf/decorators/CellRenderer.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.weis.darklaf.decorators; - -public interface CellRenderer { -} diff --git a/src/main/java/com/weis/darklaf/decorators/ComponentResizeListener.java b/src/main/java/com/weis/darklaf/decorators/ComponentResizeListener.java deleted file mode 100644 index 6cc9b7bd..00000000 --- a/src/main/java/com/weis/darklaf/decorators/ComponentResizeListener.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.decorators; - -import java.awt.event.ComponentEvent; -import java.awt.event.ComponentListener; - -/** - * Wrapper interface for resize listener. - * - * @author Jannis Weis - * @since 2019 - */ -public interface ComponentResizeListener extends ComponentListener { - @Override - void componentResized(ComponentEvent e); - - @Override - default void componentMoved(final ComponentEvent e) { - } - - @Override - default void componentShown(final ComponentEvent e) { - } - - @Override - default void componentHidden(final ComponentEvent e) { - } -} diff --git a/src/main/java/com/weis/darklaf/decorators/LayoutManagerDelegate.java b/src/main/java/com/weis/darklaf/decorators/LayoutManagerDelegate.java deleted file mode 100644 index fa869e95..00000000 --- a/src/main/java/com/weis/darklaf/decorators/LayoutManagerDelegate.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.decorators; - -import org.jetbrains.annotations.Contract; - -import java.awt.*; - -public class LayoutManagerDelegate implements LayoutManager { - private final LayoutManager delegate; - - @Contract(pure = true) - public LayoutManagerDelegate(final LayoutManager delegate) { - if (delegate == null) { - throw new IllegalArgumentException("Delegate is null"); - } - this.delegate = delegate; - } - - @Override - public void addLayoutComponent(final String name, final Component comp) { - delegate.addLayoutComponent(name, comp); - } - - @Override - public void removeLayoutComponent(final Component comp) { - delegate.removeLayoutComponent(comp); - } - - @Override - public Dimension preferredLayoutSize(final Container parent) { - return delegate.preferredLayoutSize(parent); - } - - @Override - public Dimension minimumLayoutSize(final Container parent) { - return delegate.minimumLayoutSize(parent); - } - - @Override - public void layoutContainer(final Container parent) { - delegate.layoutContainer(parent); - } -} diff --git a/src/main/java/com/weis/darklaf/decorators/MouseClickListener.java b/src/main/java/com/weis/darklaf/decorators/MouseClickListener.java deleted file mode 100644 index 1b1aada2..00000000 --- a/src/main/java/com/weis/darklaf/decorators/MouseClickListener.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.decorators; - -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; - -public interface MouseClickListener extends MouseListener { - - @Override - void mouseClicked(MouseEvent e); - - @Override - default void mousePressed(final MouseEvent e) { - } - - @Override - default void mouseReleased(final MouseEvent e) { - } - - @Override - default void mouseEntered(final MouseEvent e) { - } - - @Override - default void mouseExited(final MouseEvent e) { - } -} diff --git a/src/main/java/com/weis/darklaf/icons/DarkUIAwareIcon.java b/src/main/java/com/weis/darklaf/icons/DarkUIAwareIcon.java deleted file mode 100644 index 6790df1c..00000000 --- a/src/main/java/com/weis/darklaf/icons/DarkUIAwareIcon.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.icons; - -import com.weis.darklaf.LafManager; -import com.weis.darklaf.theme.Theme; -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import javax.swing.plaf.UIResource; -import java.awt.*; -import java.io.Serializable; - -/** - * Icon that is aware of the current ui theme and adjusts the icon accordingly. Icons are loaded lazily at their point - * of usage. - * - * @author Jannis Weis - * @since 2019 - */ -public class DarkUIAwareIcon implements UIAwareIcon, UIResource, Serializable { - - private final DarkUIAwareIcon dual; - private final String darkKey; - private final String lightKey; - private final int w; - private final int h; - private final Class parentClass; - private Theme currentTheme; - private transient boolean loaded; - private transient Icon icon; - - /** - * Create new ui aware icon. - * - * @param darkKey key to load icon for dark mode. - * @param lightKey key to load icon for light mode. - * @param w width of icon. - * @param h height of icon. - * @param parentClass the class to resolve the path while lazy loading. - */ - @Contract(pure = true) - public DarkUIAwareIcon(final String darkKey, final String lightKey, final int w, final int h, - final Class parentClass) { - this.darkKey = darkKey; - this.lightKey = lightKey; - this.w = w; - this.h = h; - this.parentClass = parentClass; - this.dual = new DarkUIAwareIcon(this); - } - - @Contract(pure = true) - private DarkUIAwareIcon(@NotNull final DarkUIAwareIcon dual) { - this.darkKey = dual.lightKey; - this.lightKey = dual.darkKey; - this.dual = dual; - this.w = dual.w; - this.h = dual.h; - this.parentClass = dual.parentClass; - } - - public void paintIcon(final Component c, @NotNull final Graphics g2, - final int x, final int y, final double scale) { - ensureLoaded(); - Graphics2D g = (Graphics2D) g2.create(); - g.translate(x, y); - g.scale(scale, scale); - icon.paintIcon(c, g, 0, 0); - g2.dispose(); - } - - private void ensureLoaded() { - if (!isLoaded()) { - loadIcon(); - } - } - - @Contract(pure = true) - private boolean isLoaded() { - return loaded && LafManager.getTheme().equals(currentTheme); - } - - private void loadIcon() { - currentTheme = LafManager.getTheme(); - if (currentTheme.isDark()) { - icon = IconLoader.get(parentClass).getIcon(darkKey, w, h); - } else { - icon = IconLoader.get(parentClass).getIcon(lightKey, w, h); - } - loaded = true; - } - - @Override - public void paintIcon(final Component c, final Graphics g, final int x, final int y) { - ensureLoaded(); - icon.paintIcon(c, g, x, y); - } - - @Override - public int getIconWidth() { - ensureLoaded(); - return icon.getIconWidth(); - } - - @Override - public int getIconHeight() { - ensureLoaded(); - return icon.getIconHeight(); - } - - public DarkUIAwareIcon getDual() { - return dual; - } -} diff --git a/src/main/java/com/weis/darklaf/icons/ThemedSVGIcon.java b/src/main/java/com/weis/darklaf/icons/ThemedSVGIcon.java deleted file mode 100644 index f5b4735d..00000000 --- a/src/main/java/com/weis/darklaf/icons/ThemedSVGIcon.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.weis.darklaf.icons; - -import com.weis.darklaf.LafManager; -import com.weis.darklaf.theme.Theme; -import org.jetbrains.annotations.NotNull; - -import java.awt.*; -import java.net.URI; - -/** - * @author Jannis Weis - */ -public class ThemedSVGIcon extends DarkSVGIcon { - - private Theme currentTheme; - - public ThemedSVGIcon(@NotNull final URI uri, final int displayWidth, final int displayHeight) { - super(uri, displayWidth, displayHeight); - } - - @Override - public void paintIcon(final Component c, final Graphics g, final int x, final int y) { - ensureTheme(); - super.paintIcon(c, g, x, y); - } - - private void ensureTheme() { - var theme = LafManager.getTheme(); - if (currentTheme != theme) { - IconColorMapper.patchColors(getSVGIcon()); - currentTheme = theme; - } - } -} diff --git a/src/main/java/com/weis/darklaf/icons/UIAwareIcon.java b/src/main/java/com/weis/darklaf/icons/UIAwareIcon.java deleted file mode 100644 index 00fff44a..00000000 --- a/src/main/java/com/weis/darklaf/icons/UIAwareIcon.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.weis.darklaf.icons; - -import javax.swing.*; - -/** - * @author Jannis Weis - */ -public interface UIAwareIcon extends Icon { - - UIAwareIcon getDual(); -} diff --git a/src/main/java/com/weis/darklaf/theme/DarculaTheme.java b/src/main/java/com/weis/darklaf/theme/DarculaTheme.java deleted file mode 100644 index 9e8b3494..00000000 --- a/src/main/java/com/weis/darklaf/theme/DarculaTheme.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.weis.darklaf.theme; - -/** - * @author Jannis Weis - */ -public class DarculaTheme extends Theme { - - @Override - protected String getResourcePath() { - return "darcula/"; - } - - @Override - public String getName() { - return "darcula"; - } - - @Override - public boolean isDark() { - return true; - } - - -} diff --git a/src/main/java/com/weis/darklaf/theme/IntelliJTheme.java b/src/main/java/com/weis/darklaf/theme/IntelliJTheme.java deleted file mode 100644 index e817991f..00000000 --- a/src/main/java/com/weis/darklaf/theme/IntelliJTheme.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.weis.darklaf.theme; - -import com.weis.darklaf.util.PropertyLoader; -import com.weis.darklaf.util.SystemInfo; - -import javax.swing.*; -import java.util.Properties; - -/** - * @author Jannis Weis - */ -public class IntelliJTheme extends Theme { - - @Override - public void loadPlatformProperties(final Properties properties, final UIDefaults currentDefaults) { - super.loadPlatformProperties(properties, currentDefaults); - if (SystemInfo.isMac) { - var name = getResourcePath() + getName() + "_mac.properties"; - PropertyLoader.putProperties(load(name), properties, currentDefaults); - } - } - - @Override - protected String getResourcePath() { - return "intellij/"; - } - - @Override - public boolean isDark() { - return false; - } - - @Override - public String getName() { - return "intellij"; - } - - @Override - public void loadUIProperties(final Properties properties, final UIDefaults currentDefaults) { - super.loadUIProperties(properties, currentDefaults); - var name = getResourcePath() + getName() + "_ui.properties"; - PropertyLoader.putProperties(load(name), properties, currentDefaults); - } -} diff --git a/src/main/java/com/weis/darklaf/ui/cell/DarkCellBorder.java b/src/main/java/com/weis/darklaf/ui/cell/DarkCellBorder.java deleted file mode 100644 index 65868ccd..00000000 --- a/src/main/java/com/weis/darklaf/ui/cell/DarkCellBorder.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.weis.darklaf.ui.cell; - -import javax.swing.border.EmptyBorder; -import javax.swing.plaf.UIResource; - -/** - * @author Jannis Weis - */ -public class DarkCellBorder extends EmptyBorder implements UIResource { - - public DarkCellBorder() { - super(2, 5, 2, 5); - } -} diff --git a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxBorder.java b/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxBorder.java deleted file mode 100644 index c2dae1d2..00000000 --- a/src/main/java/com/weis/darklaf/ui/checkbox/DarkCheckBoxBorder.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.weis.darklaf.ui.checkbox; - - -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.SystemInfo; - -import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.plaf.InsetsUIResource; -import javax.swing.plaf.UIResource; -import java.awt.*; - -/** - * @author Jannis Weis - */ -public class DarkCheckBoxBorder implements Border, UIResource { - - @Override - public void paintBorder(final Component c, final Graphics g, final int x, final int y, - final int width, final int height) { - } - - @Override - public Insets getBorderInsets(final Component c) { - if (isInCell(c)) { - return new Insets(0, 0, 0, 0); - } - final int a = SystemInfo.isMac ? 2 : 4; - return new InsetsUIResource(a, a, a, a); - } - - protected boolean isInCell(final Component c) { - return isTreeCellEditor(c) || isTableCellEditor(c) || DarkUIUtil.isInCell(c); - } - - protected boolean isTreeCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); - } - - protected boolean isTableCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); - } - - @Override - public boolean isBorderOpaque() { - return false; - } -} diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorListener.java b/src/main/java/com/weis/darklaf/ui/colorchooser/ColorListener.java deleted file mode 100644 index ec76ef74..00000000 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorListener.java +++ /dev/null @@ -1,32 +0,0 @@ -// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.ui.colorchooser; - -import java.awt.*; - -public interface ColorListener { - - void colorChanged(final Color color, final Object source); -} diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java b/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java deleted file mode 100644 index 24ae787f..00000000 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.weis.darklaf.ui.internalframe; - -import com.weis.darklaf.components.border.MutableLineBorder; - -import javax.swing.*; -import javax.swing.plaf.UIResource; - -/** - * @author Jannis Weis - */ -public class DarkDesktopIconBorder extends MutableLineBorder implements UIResource { - - public DarkDesktopIconBorder() { - super(1, 1, 1, 1, null); - setColor(UIManager.getColor("DesktopIcon.borderColor")); - } -} diff --git a/src/main/java/com/weis/darklaf/ui/label/DarkLabelUI.java b/src/main/java/com/weis/darklaf/ui/label/DarkLabelUI.java deleted file mode 100644 index 2b34adb4..00000000 --- a/src/main/java/com/weis/darklaf/ui/label/DarkLabelUI.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.weis.darklaf.ui.label; - -import org.jetbrains.annotations.Contract; - -import javax.swing.*; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicLabelUI; - -/** - * @author Jannis Weis - */ -public class DarkLabelUI extends BasicLabelUI { - - protected static final DarkLabelUI darkLabelUI = new DarkLabelUI(); - - @Contract(pure = true) - public static ComponentUI createUI(final JComponent c) { - return darkLabelUI; - } -} diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListCellBorder.java b/src/main/java/com/weis/darklaf/ui/list/DarkListCellBorder.java deleted file mode 100644 index 4bab21f7..00000000 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListCellBorder.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.weis.darklaf.ui.list; - -import com.weis.darklaf.ui.cell.DarkCellBorder; - -/** - * @author Jannis Weis - */ -public class DarkListCellBorder extends DarkCellBorder { -} diff --git a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarBorder.java b/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarBorder.java deleted file mode 100644 index 87b03438..00000000 --- a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarBorder.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.weis.darklaf.ui.progressbar; - -import javax.swing.plaf.BorderUIResource; - -/** - * @author Konstantin Bulenkov - * @author Jannis Weis - */ -public class DarkProgressBarBorder extends BorderUIResource.EmptyBorderUIResource { - public DarkProgressBarBorder() { - super(0, 0, 0, 0); - } -} diff --git a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonBorder.java b/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonBorder.java deleted file mode 100644 index 8b7825af..00000000 --- a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonBorder.java +++ /dev/null @@ -1,51 +0,0 @@ -package com.weis.darklaf.ui.radiobutton; - - -import com.weis.darklaf.util.DarkUIUtil; -import com.weis.darklaf.util.SystemInfo; - -import javax.swing.*; -import javax.swing.border.Border; -import javax.swing.plaf.InsetsUIResource; -import javax.swing.plaf.UIResource; -import java.awt.*; - -/** - * @author Konstantin Bulenkov - * @author Jannis Weis - */ -public class DarkRadioButtonBorder implements Border, UIResource { - - @Override - public void paintBorder(final Component c, final Graphics g, final int x, final int y, - final int width, final int height) { - } - - @Override - public Insets getBorderInsets(final Component c) { - if (isInCell(c)) { - return new Insets(0, 0, 0, 0); - } - final int a = SystemInfo.isMac ? 2 : 4; - return new InsetsUIResource(a, a, a, a); - } - - protected boolean isInCell(final Component c) { - return isTreeCellEditor(c) || isTableCellEditor(c) || DarkUIUtil.isInCell(c); - } - - protected boolean isTreeCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); - } - - protected boolean isTableCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JToggleButton.isTreeCellEditor")); - } - - @Override - public boolean isBorderOpaque() { - return false; - } -} diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java b/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java deleted file mode 100644 index 139736df..00000000 --- a/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.weis.darklaf.ui.rootpane; - -import com.weis.darklaf.ui.button.DarkButtonUI; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; - -/** - * @author Jannis Weis - */ -public class CloseButtonUI extends DarkButtonUI { - - protected Color closeHover; - protected Color closeClick; - - @Override - protected void installDefaults(final AbstractButton b) { - super.installDefaults(b); - closeHover = UIManager.getColor("TitlePane.close.rollOverColor"); - closeClick = UIManager.getColor("TitlePane.close.clickColor"); - } - - @Override - protected Color getShadowColor(@NotNull final AbstractButton c) { - return c.getModel().isArmed() ? closeClick : closeHover; - } -} diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/TitlePaneIcon.java b/src/main/java/com/weis/darklaf/ui/rootpane/TitlePaneIcon.java deleted file mode 100644 index b31de974..00000000 --- a/src/main/java/com/weis/darklaf/ui/rootpane/TitlePaneIcon.java +++ /dev/null @@ -1,46 +0,0 @@ -package com.weis.darklaf.ui.rootpane; - -import org.jetbrains.annotations.Contract; - -import javax.swing.*; -import java.awt.*; - -/** - * @author Jannis Weis - */ -public class TitlePaneIcon implements Icon { - - private final Icon activeIcon; - private final Icon inactiveIcon; - private boolean active = true; - - @Contract(pure = true) - public TitlePaneIcon(final Icon active, final Icon inactive) { - this.activeIcon = active; - this.inactiveIcon = inactive; - } - - public void setActive(final boolean active) { - this.active = active; - } - - @Override - public void paintIcon(final Component c, final Graphics g, final int x, final int y) { - currentIcon().paintIcon(c, g, x, y); - } - - @Contract(pure = true) - private Icon currentIcon() { - return active ? activeIcon : inactiveIcon; - } - - @Override - public int getIconWidth() { - return currentIcon().getIconWidth(); - } - - @Override - public int getIconHeight() { - return currentIcon().getIconHeight(); - } -} diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextPaneUI.java b/src/main/java/com/weis/darklaf/ui/text/DarkTextPaneUI.java deleted file mode 100644 index 2cddfe2b..00000000 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextPaneUI.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.weis.darklaf.ui.text; - -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import javax.swing.plaf.ComponentUI; -import javax.swing.text.Element; -import javax.swing.text.View; -import java.beans.PropertyChangeEvent; - -/** - * @author Jannis Weis - */ -public class DarkTextPaneUI extends DarkEditorPaneUI { - - - @NotNull - @Contract("_ -> new") - public static ComponentUI createUI(final JComponent c) { - return new DarkTextPaneUI(); - } - - /* - * Implementation of BasicEditorPaneUI - */ - - @Override - public void installUI(final JComponent c) { - super.installUI(c); - } - - @Override - protected void propertyChange(final PropertyChangeEvent evt) { - super.propertyChange(evt); - } - - @Override - protected String getPropertyPrefix() { - return "TextPane"; - } - - @Override - public View create(final Element elem) { - return super.create(elem); - } -} diff --git a/src/main/java/com/weis/darklaf/util/TimerUtil.java b/src/main/java/com/weis/darklaf/util/TimerUtil.java deleted file mode 100644 index 0071f18c..00000000 --- a/src/main/java/com/weis/darklaf/util/TimerUtil.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.weis.darklaf.util; - -import org.jetbrains.annotations.Contract; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.event.ActionListener; - -/** - * @author Jannis Weis - */ -public final class TimerUtil { - @Contract("_, _, _ -> new") - @NotNull - public static Timer createNamedTimer(@NotNull final String name, final int delay, - @NotNull final ActionListener listener) { - return new Timer(delay, listener) { - @Override - public String toString() { - return name; - } - }; - } - - @Contract("_, _ -> new") - @NotNull - public static Timer createNamedTimer(@NotNull final String name, final int delay) { - return new Timer(delay, null) { - @Override - public String toString() { - return name; - } - }; - } -} diff --git a/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java b/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java index 062cfdb7..7860eb49 100644 --- a/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java +++ b/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java @@ -23,8 +23,8 @@ */ package javax.swing.text.DefaultHighlighterDark; -import com.weis.darklaf.util.GraphicsContext; -import com.weis.darklaf.util.GraphicsUtil; +import com.github.weisj.darklaf.util.GraphicsContext; +import com.github.weisj.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; diff --git a/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java b/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java index 6e59e72f..59d273a4 100644 --- a/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java +++ b/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java @@ -30,8 +30,8 @@ package org.pbjar.jxlayer.plaf.ext; * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import com.github.weisj.darklaf.log.LogFormatter; import com.sun.java.swing.SwingUtilities3; -import com.weis.darklaf.log.LogFormatter; import org.jdesktop.jxlayer.JXLayer; import org.jdesktop.jxlayer.plaf.AbstractBufferedLayerUI; import org.jdesktop.jxlayer.plaf.LayerUI; diff --git a/src/main/java/org/pbjar/jxlayer/plaf/ext/transform/TransformRPMImpl.java b/src/main/java/org/pbjar/jxlayer/plaf/ext/transform/TransformRPMImpl.java index 0760d7e5..5166fa78 100644 --- a/src/main/java/org/pbjar/jxlayer/plaf/ext/transform/TransformRPMImpl.java +++ b/src/main/java/org/pbjar/jxlayer/plaf/ext/transform/TransformRPMImpl.java @@ -31,7 +31,7 @@ package org.pbjar.jxlayer.plaf.ext.transform; -import com.weis.darklaf.log.LogFormatter; +import com.github.weisj.darklaf.log.LogFormatter; import org.jdesktop.jxlayer.JXLayer; import org.jdesktop.jxlayer.plaf.LayerUI; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/org/pbjar/jxlayer/repaint/RepaintManagerUtils.java b/src/main/java/org/pbjar/jxlayer/repaint/RepaintManagerUtils.java index 2eb7f848..cfcdff4b 100644 --- a/src/main/java/org/pbjar/jxlayer/repaint/RepaintManagerUtils.java +++ b/src/main/java/org/pbjar/jxlayer/repaint/RepaintManagerUtils.java @@ -31,7 +31,7 @@ package org.pbjar.jxlayer.repaint; -import com.weis.darklaf.log.LogFormatter; +import com.github.weisj.darklaf.log.LogFormatter; import org.jdesktop.swingx.ForwardingRepaintManager; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBox.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBox.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBox.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBox.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxFocused.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxFocused.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxFocused.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxFocused.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelectedDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelectedDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelectedDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelectedDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelectedFocused.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelectedFocused.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxIndeterminateSelectedFocused.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxIndeterminateSelectedFocused.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxSelectedDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelectedDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxSelectedDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelectedDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/checkBoxSelectedFocused.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelectedFocused.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/checkBoxSelectedFocused.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/checkBoxSelectedFocused.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radio.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radio.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radio.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radio.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radioDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radioDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radioDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radioDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radioFocused.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radioFocused.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radioFocused.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radioFocused.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radioSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radioSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radioSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radioSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radioSelectedDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radioSelectedDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radioSelectedDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radioSelectedDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/control/radioSelectedFocused.svg b/src/main/resources/com/github/weisj/darklaf/icons/control/radioSelectedFocused.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/control/radioSelectedFocused.svg rename to src/main/resources/com/github/weisj/darklaf/icons/control/radioSelectedFocused.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/dialog/errorDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/errorDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/dialog/errorDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/errorDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/dialog/informationDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/informationDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/dialog/informationDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/informationDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/dialog/questionDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/questionDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/dialog/questionDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/questionDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/dialog/warningDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/warningDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/dialog/warningDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/dialog/warningDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/desktop.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/desktop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/desktop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/desktop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/drive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/drive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/drive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/drive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/folder.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/folder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/folder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/folder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/general.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/general.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/general.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/general.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/homeFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/homeFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/homeFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/homeFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/newFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/newFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/newFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/newFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/text.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/text.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/text.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/text.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/unknown.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/unknown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/unknown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/unknown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/files/upFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/files/upFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/files/upFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/files/upFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/frame/frame.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/frame/frame.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/frame/frame.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/frame/frame.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_0.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_0.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_0.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_0.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_1.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_1.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_1.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_1.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_2.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_2.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_2.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_2.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_3.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_3.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_3.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_3.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_4.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_4.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/indicator/speaker_4.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/indicator/speaker_4.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/copy.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/copy.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/copy.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/copy.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/cut.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/cut.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/cut.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/cut.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/delete.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/delete.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/delete.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/delete.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/down.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/down.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/down.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/down.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/groupBy.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/groupBy.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/groupBy.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/groupBy.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/listFiles.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/listFiles.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/listFiles.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/listFiles.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/paste.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/paste.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/paste.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/paste.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/save.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/save.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/save.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/save.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/up.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/up.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/up.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/up.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/menu/upDown.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/menu/upDown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/menu/upDown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/menu/upDown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/minus.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/minus.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/minus.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/minus.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/minusSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/minusSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/minusSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/minusSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/pipette.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/pipette.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/pipette.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/pipette.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/pipette_rollover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/pipette_rollover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/pipette_rollover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/pipette_rollover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/plus.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/plus.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/plus.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/plus.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/misc/plusSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/misc/plusSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/misc/plusSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/misc/plusSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/add.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/add.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/add.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/add.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDivider.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDivider.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDivider.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDivider.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDown.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDownHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDownHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDownHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDownHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDownSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDownSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowDownSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowDownSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeftHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeftHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeftHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeftHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeftSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeftSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowLeftSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowLeftSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRightHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRightHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRightHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRightHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRightSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRightSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowRightSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowRightSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowSplitCenterH.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowSplitCenterH.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowSplitCenterH.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowSplitCenterH.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowSplitCenterV.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowSplitCenterV.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowSplitCenterV.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowSplitCenterV.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUp.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUp.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUp.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUp.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUpHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUpHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUpHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUpHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUpSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUpSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/arrowUpSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/arrowUpSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmark.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmark.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmark.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmark.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmarkDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmarkDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmarkDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmarkDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmarkSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmarkSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/checkmarkSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/checkmarkSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/clear.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/clear.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/clear.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/clear.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/close.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/close.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/close.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/close.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/closeHovered.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/closeHovered.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/closeHovered.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/closeHovered.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/collapse.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/collapse.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/collapse.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/collapse.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/divider.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/divider.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/divider.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/divider.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/eye.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/eye.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/eye.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/eye.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/horizontalGlue.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/horizontalGlue.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/horizontalGlue.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/horizontalGlue.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/horizontalGrip.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/horizontalGrip.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/horizontalGrip.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/horizontalGrip.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moreTabs.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moreTabs.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moreTabs.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moreTabs.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToBottomLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToBottomLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToBottomRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToBottomRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToLeftBottom.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToLeftBottom.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToLeftTop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToLeftTop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToRightBottom.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToRightBottom.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToRightTop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToRightTop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToTopLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToTopLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToTopRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/moveToTopRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/search.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/search.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/search.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/search.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/searchWithHistory.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/searchWithHistory.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/searchWithHistory.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/searchWithHistory.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/separatorH.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/separatorH.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/separatorH.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/separatorH.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/separatorV.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/separatorV.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/separatorV.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/separatorV.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/verticalGlue.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/verticalGlue.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/verticalGlue.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/verticalGlue.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/verticalGrip.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/verticalGrip.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/navigation/verticalGrip.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/navigation/verticalGrip.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/closeActive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeActive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/closeActive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeActive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/closeHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/closeHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/closeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/closeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/closeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/help.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/help.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/help.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/help.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/helpInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/helpInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/helpInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/helpInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/maximize.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/maximize.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/maximize.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/maximize.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/maximizeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/maximizeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/maximizeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/maximizeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/minimize.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/minimize.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/minimize.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/minimize.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/minimizeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/minimizeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/minimizeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/minimizeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/restore.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/restore.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/restore.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/restore.svg diff --git a/src/main/resources/com/weis/darklaf/icons/dark/window/restoreInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/dark/window/restoreInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/dark/window/restoreInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/dark/window/restoreInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/duke.svg b/src/main/resources/com/github/weisj/darklaf/icons/duke.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/duke.svg rename to src/main/resources/com/github/weisj/darklaf/icons/duke.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/dialog/errorDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/dialog/errorDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/dialog/errorDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/dialog/errorDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/dialog/informationDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/dialog/informationDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/dialog/informationDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/dialog/informationDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/dialog/questionDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/dialog/questionDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/dialog/questionDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/dialog/questionDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/dialog/warningDialog.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/dialog/warningDialog.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/dialog/warningDialog.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/dialog/warningDialog.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/desktop.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/desktop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/desktop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/desktop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/drive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/drive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/drive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/drive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/folder.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/folder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/folder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/folder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/general.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/general.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/general.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/general.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/homeFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/homeFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/homeFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/homeFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/newFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/newFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/newFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/newFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/text.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/text.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/text.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/text.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/unknown.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/unknown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/unknown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/unknown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/files/upFolder.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/files/upFolder.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/files/upFolder.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/files/upFolder.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/frame/frame.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/frame/frame.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/frame/frame.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/frame/frame.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_0.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_0.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_0.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_0.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_1.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_1.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_1.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_1.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_2.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_2.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_2.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_2.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_3.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_3.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_3.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_3.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_4.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_4.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/indicator/speaker_4.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/indicator/speaker_4.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/copy.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/copy.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/copy.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/copy.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/cut.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/cut.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/cut.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/cut.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/delete.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/delete.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/delete.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/delete.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/down.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/down.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/down.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/down.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/groupBy.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/groupBy.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/groupBy.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/groupBy.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/listFiles.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/listFiles.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/listFiles.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/listFiles.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/paste.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/paste.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/paste.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/paste.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/save.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/save.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/save.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/save.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/up.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/up.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/up.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/up.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/menu/upDown.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/menu/upDown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/menu/upDown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/menu/upDown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/minus.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/minus.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/minus.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/minus.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/minusSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/minusSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/minusSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/minusSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/pipette.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/pipette.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/pipette.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/pipette.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/pipette_rollover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/pipette_rollover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/pipette_rollover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/pipette_rollover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/plus.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/plus.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/plus.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/plus.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/misc/plusSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/misc/plusSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/misc/plusSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/misc/plusSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/add.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/add.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/add.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/add.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDivider.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDivider.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDivider.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDivider.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDown.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDown.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDown.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDown.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDownHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDownHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDownHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDownHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDownSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDownSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowDownSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowDownSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeftHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeftHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeftHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeftHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeftSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeftSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowLeftSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowLeftSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRightHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRightHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRightHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRightHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRightSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRightSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowRightSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowRightSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowSplitCenterH.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowSplitCenterH.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowSplitCenterH.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowSplitCenterH.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowSplitCenterV.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowSplitCenterV.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowSplitCenterV.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowSplitCenterV.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUp.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUp.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUp.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUp.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUpHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUpHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUpHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUpHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUpSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUpSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/arrowUpSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/arrowUpSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/checkmark.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmark.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/checkmark.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmark.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/checkmarkDisabled.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmarkDisabled.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/checkmarkDisabled.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmarkDisabled.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/checkmarkSelected.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmarkSelected.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/checkmarkSelected.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/checkmarkSelected.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/clear.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/clear.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/clear.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/clear.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/close.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/close.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/close.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/close.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/closeHovered.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/closeHovered.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/closeHovered.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/closeHovered.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/collapse.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/collapse.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/collapse.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/collapse.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/divider.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/divider.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/divider.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/divider.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/eye.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/eye.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/eye.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/eye.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/horizontalGlue.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/horizontalGlue.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/horizontalGlue.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/horizontalGlue.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/horizontalGrip.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/horizontalGrip.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/horizontalGrip.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/horizontalGrip.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moreTabs.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moreTabs.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moreTabs.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moreTabs.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToBottomLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToBottomLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToBottomRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToBottomRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToLeftBottom.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToLeftBottom.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToLeftTop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToLeftTop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToRightBottom.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToRightBottom.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToRightTop.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToRightTop.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToTopLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToTopLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToTopRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/moveToTopRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/search.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/search.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/search.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/search.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/searchWithHistory.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/searchWithHistory.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/searchWithHistory.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/searchWithHistory.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/separatorH.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/separatorH.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/separatorH.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/separatorH.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/separatorV.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/separatorV.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/separatorV.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/separatorV.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/undo.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/undo.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/undo.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/undo.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/undo_inactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/undo_inactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/undo_inactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/undo_inactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/verticalGlue.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/verticalGlue.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/verticalGlue.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/verticalGlue.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/verticalGrip.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/navigation/verticalGrip.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/navigation/verticalGrip.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/navigation/verticalGrip.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/closeActive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/closeActive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/closeActive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/closeActive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/closeHover.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/closeHover.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/closeHover.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/closeHover.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/closeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/closeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/closeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/closeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/help.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/help.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/help.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/help.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/helpInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/helpInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/helpInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/helpInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/maximize.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/maximize.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/maximize.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/maximize.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/maximizeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/maximizeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/maximizeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/maximizeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/minimize.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/minimize.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/minimize.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/minimize.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/minimizeInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/minimizeInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/minimizeInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/minimizeInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/restore.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/restore.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/restore.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/restore.svg diff --git a/src/main/resources/com/weis/darklaf/icons/light/window/restoreInactive.svg b/src/main/resources/com/github/weisj/darklaf/icons/light/window/restoreInactive.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/light/window/restoreInactive.svg rename to src/main/resources/com/github/weisj/darklaf/icons/light/window/restoreInactive.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/bottom.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/bottom.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/bottom.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/bottom.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/bottomLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/bottomLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/bottomLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/bottomLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/bottomRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/bottomRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/bottomRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/bottomRight.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/left.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/left.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/left.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/left.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/right.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/right.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/right.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/right.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/top.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/top.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/top.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/top.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/topLeft.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/topLeft.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/topLeft.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/topLeft.svg diff --git a/src/main/resources/com/weis/darklaf/icons/shadow/topRight.svg b/src/main/resources/com/github/weisj/darklaf/icons/shadow/topRight.svg similarity index 100% rename from src/main/resources/com/weis/darklaf/icons/shadow/topRight.svg rename to src/main/resources/com/github/weisj/darklaf/icons/shadow/topRight.svg diff --git a/src/main/resources/com/github/weisj/darklaf/log/logging.properties b/src/main/resources/com/github/weisj/darklaf/log/logging.properties new file mode 100644 index 00000000..f734c015 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/log/logging.properties @@ -0,0 +1,30 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +handlers = java.util.logging.ConsoleHandler +.level = ALL + +java.util.logging.ConsoleHandler.level = INFO +java.util.logging.ConsoleHandler.formatter = com.github.weisj.darklaf.log.LogFormatter + +com.weis.darklaf.level = INFO \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/globals.properties b/src/main/resources/com/github/weisj/darklaf/properties/globals.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/properties/globals.properties rename to src/main/resources/com/github/weisj/darklaf/properties/globals.properties diff --git a/src/main/resources/com/weis/darklaf/properties/platform/linux.properties b/src/main/resources/com/github/weisj/darklaf/properties/platform/linux.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/properties/platform/linux.properties rename to src/main/resources/com/github/weisj/darklaf/properties/platform/linux.properties diff --git a/src/main/resources/com/weis/darklaf/properties/platform/mac.properties b/src/main/resources/com/github/weisj/darklaf/properties/platform/mac.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/properties/platform/mac.properties rename to src/main/resources/com/github/weisj/darklaf/properties/platform/mac.properties diff --git a/src/main/resources/com/weis/darklaf/properties/platform/windows.properties b/src/main/resources/com/github/weisj/darklaf/properties/platform/windows.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/properties/platform/windows.properties rename to src/main/resources/com/github/weisj/darklaf/properties/platform/windows.properties diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/borders.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/borders.properties new file mode 100644 index 00000000..81407de1 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/borders.properties @@ -0,0 +1,26 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +TitledBorder.titleColor = %textForeground +TitledBorder.border = com.github.weisj.darklaf.ui.titledborder.DarkTitledBorder +TitledBorder.borderColor = %border \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/button.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/button.properties new file mode 100644 index 00000000..465b3fa9 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/button.properties @@ -0,0 +1,50 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ButtonUI = com.github.weisj.darklaf.ui.button.DarkButtonUI +Button.border = com.github.weisj.darklaf.ui.button.DarkButtonBorder +Button.disabledText = %textForegroundInactive +Button.shadow = %shadow +Button.selectedButtonForeground = %textForegroundDefault +Button.activeBorderColor = %widgetBorder +Button.inactiveBorderColor = %widgetBorderInactive +Button.defaultBorderColor = %widgetBorderDefault +Button.focusBorderColor = %glowFocusLine +Button.inactiveFillColor = %widgetFillInactive +Button.defaultFillColor = %widgetFillDefault +Button.defaultFillColorRollOver = %hoverHighlightDefault +Button.defaultFillColorClick = %clickHighlightDefault +Button.activeFillColor = %widgetFill +Button.activeFillColorRollOver = %hoverHighlight +Button.activeFillColorClick = %clickHighlight + +Button.arc = %arc +Button.squareArc = %arcSecondary +Button.focusArc = %arcFocus +Button.squareFocusArc = %arcSecondaryFocus +Button.minimumArc = %arcSecondary +Button.borderThickness = %borderThickness +Button.shadowHeight = %shadowHeight + +Button.shadow.hover = %hoverHighlight +Button.shadow.click = %clickHighlight \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/checkBox.properties similarity index 53% rename from src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/checkBox.properties index 91238364..bbf26c00 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/checkBox.properties @@ -1,28 +1,28 @@ -#MIT License # -#Copyright (c) 2019 Jannis Weis +# MIT License # -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: +# Copyright (c) 2019 Jannis Weis # -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. # -# suppress inspection "UnusedProperty" for whole file -CheckBoxUI = com.weis.darklaf.ui.checkbox.DarkCheckBoxUI -CheckBox.border = com.weis.darklaf.ui.checkbox.DarkCheckBoxBorder +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +CheckBoxUI = com.github.weisj.darklaf.ui.checkbox.DarkCheckBoxUI +CheckBox.border = com.github.weisj.darklaf.ui.checkbox.DarkCheckBoxBorder CheckBox.activeFillColor = %widgetFill CheckBox.selectedFillColor = %widgetFillSelected CheckBox.inactiveFillColor = %widgetFillInactive diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/colorChooser.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/colorChooser.properties new file mode 100644 index 00000000..8e793a0a --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/colorChooser.properties @@ -0,0 +1,43 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ColorChooserUI = com.github.weisj.darklaf.ui.colorchooser.DarkColorChooserUI +ColorChooser.pipetteEnabled = true +ColorChooser.previewBorderColor = %widgetBorder +ColorChooser.sliderBorderColor = %widgetBorder +ColorChooser.sliderKnobColor = 993300 +ColorChooser.showPreviewPanelText = false +ColorChooser.colorWheelDropBackgroundColor = %dropBackground +ColorChooser.colorWheelDropBorderColor = %dropForeground +ColorChooser.pipetteBorderColor = %widgetBorder +ColorChooser.swatchesRecentSwatchSize = 15,15 +ColorChooser.swatchesSwatchSize = 15,15 +ColorChooser.swatchBorderColor = %borderSecondary +ColorChooser.swatchGridColor = %gridLine +ColorChooser.sliderShadow = %shadow +ColorChooser.errorDelay = 600 +ColorChooser.swatchesDefaultRecentColor = %background +ColorChooser.colorWheelBackground = %background +#Icons +ColorChooser.pipette.icon = misc/pipette.svg[aware] +ColorChooser.pipetteRollover.icon = misc/pipette_rollover.svg[aware] diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/comboBox.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/comboBox.properties new file mode 100644 index 00000000..798832c4 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/comboBox.properties @@ -0,0 +1,43 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ComboBoxUI = com.github.weisj.darklaf.ui.combobox.DarkComboBoxUI +ComboBox.squareButton = false +ComboBox.background = %backgroundContainer +ComboBox.activeBorderColor = %widgetBorder +ComboBox.inactiveBorderColor = %widgetBorderInactive +ComboBox.focusBorderColor = %glowFocusLine +ComboBox.inactiveBackground = %widgetFillInactive +ComboBox.activeBackground = %backgroundContainer +ComboBox.arrowBackgroundStart = %background +ComboBox.arrowBackgroundEnd = %background +ComboBox.editBackground = %background +ComboBox.disabledForeground = %textForegroundInactive +ComboBox.disabledBackground = %widgetFillInactive +ComboBox.selectionBackground = %highlightFillFocus +ComboBox.arc = %arc +ComboBox.borderThickness = %borderThickness + +#Icons +ComboBox.arrow.icon = navigation/arrowDown.svg[aware] +ComboBox.arrowInactive.icon = navigation/arrowDown.svg[dual] \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/fileChooser.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/fileChooser.properties new file mode 100644 index 00000000..11a9aaf2 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/fileChooser.properties @@ -0,0 +1,51 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +FileChooserUI = com.github.weisj.darklaf.ui.filechooser.DarkFileChooserUI +FileChooser.newFolderIcon = files/newFolder.svg[aware] +FileChooser.upFolderIcon = files/upFolder.svg[aware] +FileChooser.homeFolderIcon = files/homeFolder.svg[aware] +FileChooser.listViewBorder = com.github.weisj.darklaf.ui.filechooser.DarkFileChooserListViewBorder + +FileChooser.detailsViewIcon = menu/listFiles.svg[aware] +FileChooser.listViewIcon = menu/groupBy.svg[aware] + +FileChooser.borderColor = %borderSecondary +FileChooser.rowHeight = 20 +FileChooser.minEditDelay = 200 +FileChooser.maxEditDelay = 600 +FileChooser.listViewWindowsStyle = false +FileChooser.fileSizeKiloBytes = {0} kb +FileChooser.fileSizeMegaBytes = {0} mb +FileChooser.fileSizeGigaBytes = {0} gb +FileChooser.readOnly = false + +FileView.background = %textBackground +FileView.foreground = %textForeground +FileView.fullRowSelection = true + +FileView.fileIcon = files/general.svg[aware] +FileView.directoryIcon = files/folder.svg[aware] +FileView.computerIcon = files/desktop.svg[aware] +FileView.floppyDriveIcon = menu/save.svg[aware] +FileView.hardDriveIcon = files/drive.svg[aware] \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/internalFrame.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/internalFrame.properties new file mode 100644 index 00000000..f14dc9bd --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/internalFrame.properties @@ -0,0 +1,58 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +InternalFrameUI = com.github.weisj.darklaf.ui.internalframe.DarkInternalFrameUI +InternalFrame.border = com.github.weisj.darklaf.ui.internalframe.DarkInternalFrameBorder +InternalFrame.optionDialogBorder = com.github.weisj.darklaf.ui.internalframe.DarkInternalFrameBorder +InternalFrame.paletteBorder = com.github.weisj.darklaf.ui.internalframe.DarkInternalFrameBorder +InternalFrame.borderShadowColor = %shadow +InternalFrame.activeTitleBackground = %backgroundColorful +InternalFrame.background = %background + +InternalFrameTitlePane.selectedTextForeground = %textForeground +InternalFrameTitlePane.borderColor = %border +InternalFrameTitlePane.backgroundColor = %background +InternalFrameTitlePane.selectedBackgroundColor = %backgroundColorful +InternalFrameTitlePane.selectedButtonColor = %backgroundColorful +InternalFrameTitlePane.selectedButtonHoverColor = %hoverHighlightColorful +InternalFrameTitlePane.selectedButtonClickColor = %clickHighlightColorful +InternalFrameTitlePane.buttonColor = %background +InternalFrameTitlePane.buttonHoverColor = %hoverHighlight +InternalFrameTitlePane.buttonClickColor = %clickHighlight + + +DesktopIconUI = com.github.weisj.darklaf.ui.internalframe.DarkDesktopIconUI +DesktopIcon.border = com.github.weisj.darklaf.ui.internalframe.DarkDesktopIconBorder +DesktopIcon.background = %background +DesktopIcon.borderColor = %borderTertiary +DesktopIcon.hoverColor = %backgroundHoverSecondary +DesktopIcon.clickColor = %backgroundHoverSecondary +desktop = %backgroundColorful + +#Icons +InternalFrame.icon = duke.svg +InternalFrameTitlePane.close.icon = window/closeActive.svg[aware] +InternalFrameTitlePane.minimize.icon = window/restore.svg[aware] +InternalFrameTitlePane.maximize.icon = window/maximize.svg[aware] +InternalFrameTitlePane.iconify.icon = window/minimize.svg[aware] +DesktopIcon.drag.icon = navigation/horizontalGrip.svg[aware](5,20) \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/label.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/label.properties new file mode 100644 index 00000000..d67df955 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/label.properties @@ -0,0 +1,24 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +LabelUI = com.github.weisj.darklaf.ui.label.DarkLabelUI \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/list.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/list.properties new file mode 100644 index 00000000..ad82a268 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/list.properties @@ -0,0 +1,34 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ListUI = com.github.weisj.darklaf.ui.list.DarkListUI +List.border = null +List.background = %backgroundContainer +List.focusSelectedCellHighlightBorder = com.github.weisj.darklaf.ui.list.DarkListCellFocusBorder +List.focusCellHighlightBorder = com.github.weisj.darklaf.ui.list.DarkListCellBorder +List.cellNoFocusBorder = com.github.weisj.darklaf.ui.list.DarkListCellBorder +List.dropLineColor = %dropForeground +List.selectionBackground = %highlightFillFocus +List.focusBorderColor = %borderFocus +List.alternateRowBackground = %backgroundAlternative +List.selectionForegroundInactive = %textSelectionForegroundInactive diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/menu.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/menu.properties new file mode 100644 index 00000000..5bc2cc74 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/menu.properties @@ -0,0 +1,35 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +MenuUI = com.github.weisj.darklaf.ui.menu.DarkMenuUI +Menu.maxGutterIconWidth = 18 +Menu.border = com.github.weisj.darklaf.ui.menu.DarkMenuItemBorder +Menu.selectionBackground = %highlightFillFocus +Menu.acceleratorForeground = %acceleratorForeground +Menu.acceleratorSelectionForeground = %acceleratorForeground +Menu.submenuPopupOffsetX = -4 +Menu.submenuPopupOffsetY = -2 +Menu.background = %background + +#Icons +Menu.arrowIcon = navigation/arrowRight.svg[aware] \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/menuBar.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/menuBar.properties new file mode 100644 index 00000000..4fe63160 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/menuBar.properties @@ -0,0 +1,29 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +MenuBarUI = com.github.weisj.darklaf.ui.menu.DarkMenuBarUI +MenuBar.disabledBackground = %background +MenuBar.border = com.github.weisj.darklaf.ui.menu.DarkMenuBarBorder +MenuBar.borderColor = %border +MenuBar.highlight = %background +MenuBar.background = %background \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/menuItem.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/menuItem.properties new file mode 100644 index 00000000..12c01451 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/menuItem.properties @@ -0,0 +1,51 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +MenuItemUI = com.github.weisj.darklaf.ui.menu.DarkMenuItemUIBase +MenuItem.border = com.github.weisj.darklaf.ui.menu.DarkMenuItemBorder + +MenuItem.selectionBackground = %highlightFillFocus +MenuItem.maxGutterIconWidth = 18 +MenuItem.acceleratorDelimiter = - +MenuItem.acceleratorForeground = %acceleratorForeground +MenuItem.acceleratorSelectionForeground = %acceleratorForeground + +RadioButtonMenuItemUI = com.github.weisj.darklaf.ui.radiobutton.DarkRadioButtonMenuItemUI +RadioButtonMenuItem.borderPainted = false +RadioButtonMenuItem.acceleratorForeground = %acceleratorForeground +RadioButtonMenuItem.acceleratorSelectionForeground = %acceleratorForeground +RadioButtonMenuItem.selectionBackground = %highlightFillFocus + +CheckBoxMenuItemUI = com.github.weisj.darklaf.ui.checkbox.DarkCheckBoxMenuItemUI +CheckBoxMenuItem.borderPainted = false +CheckBoxMenuItem.acceleratorForeground = %acceleratorForeground +CheckBoxMenuItem.acceleratorSelectionForeground = %acceleratorForeground +CheckBoxMenuItem.selectionBackground = %highlightFillFocus +CheckBoxMenuItem.foreground = %textForeground + +#Icons +MenuItem.arrowIcon = navigation/arrowRight.svg[aware] +MenuItem.arrowHover.icon = navigation/arrowRightHover.svg[aware] +RadioButtonMenuItem.arrowIcon = empty(16,16) +CheckBoxMenuItem.checkIcon = empty(19,19) +RadioButtonMenuItem.checkIcon = empty(19,19) \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/optionPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/optionPane.properties new file mode 100644 index 00000000..e3f58461 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/optionPane.properties @@ -0,0 +1,35 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +OptionPaneUI = com.github.weisj.darklaf.ui.optionpane.DarkOptionPaneUI +OptionPane.messageForeground = %textForeground +OptionPane.buttonPadding = 5 +#SwingConstants.CENTER +OptionPane.buttonOrientation = 0 +OptionPane.sameSizeButtons = false + +#Icons +OptionPane.informationIcon = dialog/informationDialog.svg[aware](32,32) +OptionPane.questionIcon = dialog/questionDialog.svg[aware](32,32) +OptionPane.warningIcon = dialog/warningDialog.svg[aware](32,32) +OptionPane.errorIcon = dialog/errorDialog.svg[aware](32,32) diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/panel.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/panel.properties new file mode 100644 index 00000000..d1478519 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/panel.properties @@ -0,0 +1,26 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +PanelUI = com.github.weisj.darklaf.ui.panel.DarkPanelUI +Panel.foreground = %textForeground +Panel.background = %background diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/popupMenu.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/popupMenu.properties new file mode 100644 index 00000000..08dd6422 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/popupMenu.properties @@ -0,0 +1,27 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +PopupMenuUI = com.github.weisj.darklaf.ui.menu.DarkPopupMenuUI +PopupMenu.border = com.github.weisj.darklaf.ui.menu.DarkPopupMenuBorder +PopupMenu.translucentBackground = %backgroundContainer +PopupMenu.borderColor = %border \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/progressBar.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/progressBar.properties new file mode 100644 index 00000000..578bd910 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/progressBar.properties @@ -0,0 +1,39 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ProgressBarUI = com.github.weisj.darklaf.ui.progressbar.DarkProgressBarUI +ProgressBar.border = com.github.weisj.darklaf.ui.progressbar.DarkProgressBarBorder +ProgressBar.foreground = %textForeground + +ProgressBar.trackColor = %controlBackground +ProgressBar.progressColor = %controlFillSecondary +ProgressBar.indeterminateStartColor = %controlFadeStart +ProgressBar.indeterminateEndColor = %controlFadeEnd + +ProgressBar.failedColor = %controlErrorFadeStart +ProgressBar.failedEndColor = %controlErrorFadeEnd +ProgressBar.passedColor = %controlPassedFadeStart +ProgressBar.passedEndColor = %controlPassedFadeEnd + +ProgressBar.isSimplified = false +ProgressBar.stripeWidth = 4 \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/radioButton.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/radioButton.properties new file mode 100644 index 00000000..e5d7f1fb --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/radioButton.properties @@ -0,0 +1,45 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +RadioButtonUI = com.github.weisj.darklaf.ui.radiobutton.DarkRadioButtonUI +RadioButton.border = com.github.weisj.darklaf.ui.radiobutton.DarkRadioButtonBorder +RadioButton.selectionSelectedColor = %controlFill +RadioButton.selectionDisabledColor = %controlFillDisabled +RadioButton.selectionFocusSelectedColor = %controlFillFocus + +RadioButton.focusBorderColor = %controlBorderFocus +RadioButton.focusSelectedBorderColor = %controlBorderFocusSelected +RadioButton.inactiveFillColor = %widgetFillInactive +RadioButton.activeFillColor = %widgetFill +RadioButton.selectedFillColor = %widgetFillSelected +RadioButton.selectedBorderColor = %controlBorderSelected +RadioButton.activeBorderColor = %controlBorder +RadioButton.inactiveBorderColor = %controlBorderDisabled + +#Icons +RadioButton.unchecked.icon = control/radio.svg[patch](19,19) +RadioButton.uncheckedDisabled.icon = control/radioDisabled.svg[patch](19,19) +RadioButton.uncheckedFocused.icon = control/radioFocused.svg[patch](19,19) +RadioButton.selected.icon = control/radioSelected.svg[patch](19,19) +RadioButton.selectedDisabled.icon = control/radioSelectedDisabled.svg[patch](19,19) +RadioButton.selectedFocused.icon = control/radioSelectedFocused.svg[patch](19,19) \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/rootPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/rootPane.properties new file mode 100644 index 00000000..b4837797 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/rootPane.properties @@ -0,0 +1,29 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +RootPaneUI = com.github.weisj.darklaf.ui.rootpane.DarkRootPaneUI +RootPane.background = %backgroundContainer + +RootPane.frameBorder = null +RootPane.informationDialogBorder = null +RootPane.plainDialogBorder = null \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollBar.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollBar.properties new file mode 100644 index 00000000..cb8a7a7d --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollBar.properties @@ -0,0 +1,31 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ScrollBarUI = com.github.weisj.darklaf.ui.scrollpane.DarkScrollBarUI +ScrollBar.fadeStartColor = %controlFadeStart +ScrollBar.fadeEndColor = %controlFadeEnd +ScrollBar.trackColor = %controlTrack +ScrollBar.thumbBorderColor = %controlBorderSecondary +ScrollBar.thumb = %controlFillSecondary +ScrollBar.thumbShadow = null +ScrollBar.thumbHighlight = null diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollPane.properties new file mode 100644 index 00000000..9756c7f2 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/scrollPane.properties @@ -0,0 +1,26 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ScrollPaneUI = com.github.weisj.darklaf.ui.scrollpane.DarkScrollPaneUI +ScrollPane.barInsets = 0,0,0,0 +ScrollPane.border = null diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/separator.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/separator.properties new file mode 100644 index 00000000..8baf87ff --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/separator.properties @@ -0,0 +1,27 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +SeparatorUI = com.github.weisj.darklaf.ui.separator.DarkSeparatorUI +PopupMenuSeparatorUI = com.github.weisj.darklaf.ui.menu.DarkPopupMenuSeparatorUI +Separator.foreground = %border +Separator.background = %background diff --git a/src/main/resources/com/weis/darklaf/properties/ui/slider.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/slider.properties similarity index 60% rename from src/main/resources/com/weis/darklaf/properties/ui/slider.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/slider.properties index 3c001ed7..65fe9d0f 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/slider.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/slider.properties @@ -1,27 +1,27 @@ -#MIT License # -#Copyright (c) 2019 Jannis Weis +# MIT License # -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: +# Copyright (c) 2019 Jannis Weis # -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. # -# suppress inspection "UnusedProperty" for whole file -SliderUI = com.weis.darklaf.ui.slider.DarkSliderUI +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +SliderUI = com.github.weisj.darklaf.ui.slider.DarkSliderUI Slider.font = Dialog-0-10 Slider.tickColor = %textForegroundSecondary Slider.disabledTickColor = %textForegroundInactive diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/spinner.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/spinner.properties new file mode 100644 index 00000000..6a75b25c --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/spinner.properties @@ -0,0 +1,47 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +SpinnerUI = com.github.weisj.darklaf.ui.spinner.DarkSpinnerUI +Spinner.border = com.github.weisj.darklaf.ui.spinner.DarkSpinnerBorder +Spinner.activeBorderColor = %widgetBorder +Spinner.inactiveBorderColor = %widgetBorderInactive +Spinner.focusBorderColor = %glowFocusLine +Spinner.inactiveBackground = %widgetFillInactive +Spinner.arrowBackgroundStart = %background +Spinner.arrowBackgroundEnd = %background +Spinner.activeBackground = %textBackground +Spinner.arrowButtonInsets = 2,2,2,2 +Spinner.editorBorderPainted = false +Spinner.arrowButtonSize = 16,5 +Spinner.arrowButtonBorder = null +Spinner.arc = %arc +Spinner.borderThickness = %borderThickness + +Spinner.plus.icon = misc/plus.svg[aware] +Spinner.plusInactive.icon = misc/plus.svg[aware] +Spinner.minus.icon = misc/minus.svg[aware] +Spinner.minusInactive.icon = misc/minus.svg[aware] +Spinner.arrowUp.icon = navigation/arrowUp.svg[aware] +Spinner.arrowUpInactive.icon = navigation/arrowUp.svg[dual] +Spinner.arrowDown.icon = navigation/arrowDown.svg[aware] +Spinner.arrowDownInactive.icon = navigation/arrowDown.svg[dual] \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/splitPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/splitPane.properties new file mode 100644 index 00000000..9204d33c --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/splitPane.properties @@ -0,0 +1,38 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +SplitPaneUI = com.github.weisj.darklaf.ui.splitpane.DarkSplitPaneUI +SplitPane.border = com.github.weisj.darklaf.ui.splitpane.DarkSplitPaneBorder +SplitPaneDivider.border = com.github.weisj.darklaf.ui.splitpane.DarkSplitPaneDividerBorder +SplitPane.highlight = %backgroundContainer +SplitPane.dividerLineColor = %border +SplitPane.dividerFocusColor = null +SplitPane.centerOneTouchButtons = true + +#Icons +SplitPane.horizontalGlue.icon = navigation/horizontalGlue.svg[aware](4,13) +SplitPane.verticalGlue.icon = navigation/verticalGlue.svg[aware](13,4) +SplitPaneDivider.leftOneTouch.icon = navigation/arrowLeft.svg[aware] +SplitPaneDivider.rightOneTouch.icon = navigation/arrowRight.svg[aware] +SplitPaneDivider.topOneTouch.icon = navigation/arrowUp.svg[aware](13,13) +SplitPaneDivider.bottomOneTouch.icon = navigation/arrowDown.svg[aware](13,13) diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/statusBar.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/statusBar.properties new file mode 100644 index 00000000..3ad65137 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/statusBar.properties @@ -0,0 +1,26 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +StatusBarUI = com.github.weisj.darklaf.ui.statusbar.DarkStatusBarUI +StatusBar.topColor = %border +StatusBar.background = %background \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/tabFrame.properties similarity index 85% rename from src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/tabFrame.properties index 403ec928..d1088c78 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/tabFrame.properties @@ -21,10 +21,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # -# suppress inspection "UnusedProperty" for whole file -TabFramePanelPopupUI = com.weis.darklaf.ui.tabframe.DarkPanelPopupUI -TabFrameTabbedPopupUI = com.weis.darklaf.ui.tabframe.DarkTabbedPopupUI -TabFramePopup.headerBorder = com.weis.darklaf.ui.tabframe.DarkTabFramePopupHeaderBorder +TabFramePanelPopupUI = com.github.weisj.darklaf.ui.tabframe.DarkPanelPopupUI +TabFrameTabbedPopupUI = com.github.weisj.darklaf.ui.tabframe.DarkTabbedPopupUI +TabFramePopup.headerBorder = com.github.weisj.darklaf.ui.tabframe.DarkTabFramePopupHeaderBorder TabFramePopup.headerBackground = %background TabFramePopup.headerFocusBackground = %backgroundColorful @@ -46,16 +45,16 @@ TabFramePopup.minimumHeaderSize = null TabFramePopup.borderColor = %borderSecondary -TabFrameTabLabelUI = com.weis.darklaf.ui.tabframe.DarkTabFrameTabLabelUI -TabFrameTabContainerUI = com.weis.darklaf.ui.tabframe.DarkTabFrameTabContainerUI -TabFrameTab.border = com.weis.darklaf.ui.tabframe.DarkTabFrameTabBorder +TabFrameTabLabelUI = com.github.weisj.darklaf.ui.tabframe.DarkTabFrameTabLabelUI +TabFrameTabContainerUI = com.github.weisj.darklaf.ui.tabframe.DarkTabFrameTabContainerUI +TabFrameTab.border = com.github.weisj.darklaf.ui.tabframe.DarkTabFrameTabBorder TabFrameTab.font = Dialog-0-11 TabFrameTab.foreground = %textForeground TabFrameTab.selectedForeground = %textForegroundHighlight TabFrameTab.selectedBackground = %backgroundSelectedSecondary TabFrameTab.hoverBackground = %backgroundHoverSecondary -TabFrameUI = com.weis.darklaf.ui.tabframe.DarkTabFrameUI +TabFrameUI = com.github.weisj.darklaf.ui.tabframe.DarkTabFrameUI TabFrame.line = %borderSecondary TabFrame.tabHeight = 24 TabFrame.acceleratorKeyCode = alt pressed diff --git a/src/main/resources/com/weis/darklaf/properties/ui/tabbedPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/tabbedPane.properties similarity index 51% rename from src/main/resources/com/weis/darklaf/properties/ui/tabbedPane.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/tabbedPane.properties index b2366a75..0e97d215 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/tabbedPane.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/tabbedPane.properties @@ -1,27 +1,27 @@ -#MIT License # -#Copyright (c) 2019 Jannis Weis +# MIT License # -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: +# Copyright (c) 2019 Jannis Weis # -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. # -# suppress inspection "UnusedProperty" for whole file -TabbedPaneUI = com.weis.darklaf.ui.tabbedpane.DarkTabbedPaneUI +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +TabbedPaneUI = com.github.weisj.darklaf.ui.tabbedpane.DarkTabbedPaneUI TabbedPane.tabInsets = 5,7,5,7 TabbedPane.tabRunOverlay = 0 diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/table.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/table.properties new file mode 100644 index 00000000..d960b65b --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/table.properties @@ -0,0 +1,62 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +TableHeaderUI = com.github.weisj.darklaf.ui.table.DarkTableHeaderUI +TableHeader.cellBorder = com.github.weisj.darklaf.ui.table.DarkTableCellBorder +TableHeader.focusCellBorder = com.github.weisj.darklaf.ui.table.DarkTableCellBorder +TableHeader.border = com.github.weisj.darklaf.ui.table.DarkTableHeaderBorder +TableHeader.background = %backgroundHeader +TableHeader.focusCellBackground = %backgroundHeader +TableHeader.borderColor = %borderSecondary +TableHeader.height = 26 + +TableUI = com.github.weisj.darklaf.ui.table.DarkTableUI +Table.scrollPaneCornerComponent = com.github.weisj.darklaf.ui.table.DarkTableHeaderCorner +Table.cellNoFocusBorder = com.github.weisj.darklaf.ui.table.DarkTableCellBorder +Table.focusCellHighlightBorder = com.github.weisj.darklaf.ui.table.DarkTableCellFocusBorder +Table.focusSelectedCellHighlightBorder = com.github.weisj.darklaf.ui.table.DarkTableCellFocusBorder +Table.cellEditorBorder = com.github.weisj.darklaf.ui.table.DarkTableCellBorder +Table.scrollPaneBorder = com.github.weisj.darklaf.ui.table.DarkTableBorder +Table.background = %backgroundContainer +Table.focusBorderColor = %borderFocus +Table.focusRowBorderColor = %borderFocus +Table.gridColor = %gridLine +Table.dropLineColor = %dropForeground +Table.dropLineShortColor = %dropForeground +Table.focusSelectionBackground = %highlightFillFocus +Table.focusCellBackground = %backgroundContainer +Table.focusCellForeground = %textForeground +Table.selectionNoFocusBackground = %highlightFill +Table.selectionBackground = %highlightFillFocus +Table.selectionForegroundInactive = %textSelectionForegroundInactive + +Table.alternateRowColor = false +Table.alternateRowBackground = %backgroundAlternative + +Table.renderBooleanAsCheckBox = true +Table.booleanRenderType = checkBox +Table.rowHeight = 22 + +#Icons +Table.ascendingSortIcon = menu/up.svg[aware](8,16) +Table.descendingSortIcon = menu/down.svg[aware](8,16) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/taskPane.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/taskPane.properties similarity index 85% rename from src/main/resources/com/weis/darklaf/properties/ui/taskPane.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/taskPane.properties index 54458715..6a775664 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/taskPane.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/taskPane.properties @@ -1,3 +1,4 @@ +# # MIT License # # Copyright (c) 2019 Jannis Weis @@ -20,9 +21,8 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # -# suppress inspection "UnusedProperty" for whole file -swingx/TaskPaneUI = com.weis.darklaf.ui.taskpane.DarkTaskPaneUI -swingx/TaskPaneContainerUI = com.weis.darklaf.ui.taskpane.DarkTaskPaneContainerUI +swingx/TaskPaneUI = com.github.weisj.darklaf.ui.taskpane.DarkTaskPaneUI +swingx/TaskPaneContainerUI = com.github.weisj.darklaf.ui.taskpane.DarkTaskPaneContainerUI TaskPane.background = %widgetFill TaskPane.foreground = %textForeground TaskPane.titleForeground = %textForeground diff --git a/src/main/resources/com/weis/darklaf/properties/ui/text.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/text.properties similarity index 60% rename from src/main/resources/com/weis/darklaf/properties/ui/text.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/text.properties index 8019e408..d844693b 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/text.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/text.properties @@ -1,36 +1,36 @@ -#MIT License # -#Copyright (c) 2019 Jannis Weis +# MIT License # -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: +# Copyright (c) 2019 Jannis Weis # -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. # -# suppress inspection "UnusedProperty" for whole file TextComponent.roundedSelection = true -EditorPaneUI = com.weis.darklaf.ui.text.DarkEditorPaneUI -TextPaneUI = com.weis.darklaf.ui.text.DarkTextPaneUI -TextAreaUI = com.weis.darklaf.ui.text.DarkTextAreaUI +EditorPaneUI = com.github.weisj.darklaf.ui.text.DarkEditorPaneUI +TextPaneUI = com.github.weisj.darklaf.ui.text.DarkTextPaneUI +TextAreaUI = com.github.weisj.darklaf.ui.text.DarkTextAreaUI EditorPane.inactiveBackground = %textBackgroundInactive EditorPane.inactiveForeground = %textForegroundInactive -TextFieldUI = com.weis.darklaf.ui.text.DarkTextFieldUI -TextField.border = com.weis.darklaf.ui.text.DarkTextBorder +TextFieldUI = com.github.weisj.darklaf.ui.text.DarkTextFieldUI +TextField.border = com.github.weisj.darklaf.ui.text.DarkTextBorder TextField.border.enabled = %widgetBorder TextField.border.disabled = %widgetBorderInactive TextField.border.focusError = %glowFocusErrorLine @@ -66,20 +66,20 @@ TextArea.background = %textBackground TextArea.disabledBackground = %textBackgroundInactive -FormattedTextFieldUI = com.weis.darklaf.ui.text.DarkFormattedTextFieldUI -FormattedTextField.border = com.weis.darklaf.ui.text.DarkTextBorder +FormattedTextFieldUI = com.github.weisj.darklaf.ui.text.DarkFormattedTextFieldUI +FormattedTextField.border = com.github.weisj.darklaf.ui.text.DarkTextBorder FormattedTextField.background = %textBackground FormattedTextField.disabledBackground = %textBackgroundInactive FormattedTextField.selectionBackground = %textSelectionBackground FormattedTextField.selectionForeground = %textSelectionForeground -PasswordFieldUI = com.weis.darklaf.ui.text.DarkPasswordFieldUI +PasswordFieldUI = com.github.weisj.darklaf.ui.text.DarkPasswordFieldUI PasswordField.background = %textBackground PasswordField.disabledBackground = %textBackgroundInactive PasswordField.selectionBackground = %textSelectionBackground PasswordField.selectionForeground = %textSelectionForeground -PasswordField.border = com.weis.darklaf.ui.text.DarkTextBorder +PasswordField.border = com.github.weisj.darklaf.ui.text.DarkTextBorder PasswordField.arc = %arcSecondary PasswordField.borderThickness = %borderThickness diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/toggleButton.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/toggleButton.properties new file mode 100644 index 00000000..ec1e9f03 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/toggleButton.properties @@ -0,0 +1,37 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ToggleButtonUI = com.github.weisj.darklaf.ui.button.DarkToggleButtonUI +ToggleButton.border = com.github.weisj.darklaf.ui.button.DarkButtonBorder +ToggleButton.sliderBorderColor = %widgetBorder +ToggleButton.disabledSliderBorderColor = %widgetBorderInactive +ToggleButton.focusedSliderBorderColor = %glowFocusLine +ToggleButton.sliderKnobFillColor = %controlFill +ToggleButton.sliderKnobBorderColor = %controlBorder +ToggleButton.disabledSliderKnobFillColor = %controlFillDisabled +ToggleButton.disabledSliderKnobBorderColor = %controlFillDisabled + +ToggleButton.inactiveFillColor = %widgetFill +ToggleButton.activeFillColor = %backgroundHoverSecondary + +ToggleButton.sliderSize = 35,17 \ No newline at end of file diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/toolBar.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/toolBar.properties new file mode 100644 index 00000000..eceba9dc --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/toolBar.properties @@ -0,0 +1,36 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ToolBarUI = com.github.weisj.darklaf.ui.toolbar.DarkToolBarUI +ToolBar.border = com.github.weisj.darklaf.ui.toolbar.DarkToolBarBorder +ToolBar.rolloverBorder = com.github.weisj.darklaf.ui.toolbar.DarkToolBarBorder +ToolBar.nonrolloverBorder = com.github.weisj.darklaf.ui.toolbar.DarkToolBarBorder +ToolBar.dropColor = %dropBackground +ToolBar.dockingForeground = %textForeground +ToolBar.floatingBackground = %background +ToolBar.floatingForeground = %textForeground +ToolBar.borderColor = %border + +#Icons +ToolBar.horizontalGrip.icon = navigation/horizontalGrip.svg[aware](5,20) +ToolBar.verticalGrip.icon = navigation/verticalGrip.svg[aware](20,5) diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/toolTip.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/toolTip.properties new file mode 100644 index 00000000..b49ca459 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/toolTip.properties @@ -0,0 +1,28 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +ToolTipUI = com.github.weisj.darklaf.ui.tooltip.DarkTooltipUI +ToolTip.background = %backgroundToolTip +ToolTip.borderColor = %borderTertiary +ToolTip.border = com.github.weisj.darklaf.ui.tooltip.DarkDefaultToolTipBorder +ToolTip.borderShadowColor = %shadow \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/tree.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/tree.properties similarity index 61% rename from src/main/resources/com/weis/darklaf/properties/ui/tree.properties rename to src/main/resources/com/github/weisj/darklaf/properties/ui/tree.properties index c77a6bd4..aabc2150 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/tree.properties +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/tree.properties @@ -1,28 +1,28 @@ -#MIT License # -#Copyright (c) 2019 Jannis Weis +# MIT License # -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: +# Copyright (c) 2019 Jannis Weis # -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: # -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. # -# suppress inspection "UnusedProperty" for whole file -TreeUI = com.weis.darklaf.ui.tree.DarkTreeUI -Tree.editorBorder = com.weis.darklaf.ui.tree.DarkTreeCellBorder +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +TreeUI = com.github.weisj.darklaf.ui.tree.DarkTreeUI +Tree.editorBorder = com.github.weisj.darklaf.ui.tree.DarkTreeCellBorder Tree.editorBorderColor = %widgetBorder Tree.rendererFillBackground = false Tree.background = %backgroundContainer diff --git a/src/main/resources/com/github/weisj/darklaf/properties/ui/tristate.properties b/src/main/resources/com/github/weisj/darklaf/properties/ui/tristate.properties new file mode 100644 index 00000000..54b62171 --- /dev/null +++ b/src/main/resources/com/github/weisj/darklaf/properties/ui/tristate.properties @@ -0,0 +1,24 @@ +# +# MIT License +# +# Copyright (c) 2019 Jannis Weis +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +# +TristateCheckBoxUI = com.github.weisj.darklaf.ui.tristate.DarkTristateCheckBoxUI \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties b/src/main/resources/com/github/weisj/darklaf/theme/darcula/darcula_defaults.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties rename to src/main/resources/com/github/weisj/darklaf/theme/darcula/darcula_defaults.properties diff --git a/src/main/resources/com/weis/darklaf/theme/darcula/darcula_styleSheet.css b/src/main/resources/com/github/weisj/darklaf/theme/darcula/darcula_styleSheet.css similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/darcula/darcula_styleSheet.css rename to src/main/resources/com/github/weisj/darklaf/theme/darcula/darcula_styleSheet.css diff --git a/src/main/resources/com/weis/darklaf/theme/intellij/intellij_defaults.properties b/src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_defaults.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/intellij/intellij_defaults.properties rename to src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_defaults.properties diff --git a/src/main/resources/com/weis/darklaf/theme/intellij/intellij_mac.properties b/src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_mac.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/intellij/intellij_mac.properties rename to src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_mac.properties diff --git a/src/main/resources/com/weis/darklaf/theme/intellij/intellij_styleSheet.css b/src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_styleSheet.css similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/intellij/intellij_styleSheet.css rename to src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_styleSheet.css diff --git a/src/main/resources/com/weis/darklaf/theme/intellij/intellij_ui.properties b/src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_ui.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/intellij/intellij_ui.properties rename to src/main/resources/com/github/weisj/darklaf/theme/intellij/intellij_ui.properties diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_defaults.properties b/src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_defaults.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_defaults.properties rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_defaults.properties diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_styleSheet.css b/src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_styleSheet.css similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_styleSheet.css rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_styleSheet.css diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_ui.properties b/src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_ui.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_dark/solarized_dark_ui.properties rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_dark/solarized_dark_ui.properties diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_defaults.properties b/src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_defaults.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_defaults.properties rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_defaults.properties diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_styleSheet.css b/src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_styleSheet.css similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_styleSheet.css rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_styleSheet.css diff --git a/src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_ui.properties b/src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_ui.properties similarity index 100% rename from src/main/resources/com/weis/darklaf/theme/solarized_light/solarized_light_ui.properties rename to src/main/resources/com/github/weisj/darklaf/theme/solarized_light/solarized_light_ui.properties diff --git a/src/main/resources/com/weis/darklaf/log/logging.properties b/src/main/resources/com/weis/darklaf/log/logging.properties deleted file mode 100644 index 706e9a22..00000000 --- a/src/main/resources/com/weis/darklaf/log/logging.properties +++ /dev/null @@ -1,7 +0,0 @@ -handlers = java.util.logging.ConsoleHandler -.level = ALL - -java.util.logging.ConsoleHandler.level = INFO -java.util.logging.ConsoleHandler.formatter = com.weis.darklaf.log.LogFormatter - -com.weis.darklaf.level = INFO \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/borders.properties b/src/main/resources/com/weis/darklaf/properties/ui/borders.properties deleted file mode 100644 index 073fe747..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/borders.properties +++ /dev/null @@ -1,26 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -TitledBorder.titleColor = %textForeground -TitledBorder.border = com.weis.darklaf.ui.titledborder.DarkTitledBorder -TitledBorder.borderColor = %border \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/button.properties b/src/main/resources/com/weis/darklaf/properties/ui/button.properties deleted file mode 100644 index e8ce775a..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/button.properties +++ /dev/null @@ -1,50 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ButtonUI = com.weis.darklaf.ui.button.DarkButtonUI -Button.border = com.weis.darklaf.ui.button.DarkButtonBorder -Button.disabledText = %textForegroundInactive -Button.shadow = %shadow -Button.selectedButtonForeground = %textForegroundDefault -Button.activeBorderColor = %widgetBorder -Button.inactiveBorderColor = %widgetBorderInactive -Button.defaultBorderColor = %widgetBorderDefault -Button.focusBorderColor = %glowFocusLine -Button.inactiveFillColor = %widgetFillInactive -Button.defaultFillColor = %widgetFillDefault -Button.defaultFillColorRollOver = %hoverHighlightDefault -Button.defaultFillColorClick = %clickHighlightDefault -Button.activeFillColor = %widgetFill -Button.activeFillColorRollOver = %hoverHighlight -Button.activeFillColorClick = %clickHighlight - -Button.arc = %arc -Button.squareArc = %arcSecondary -Button.focusArc = %arcFocus -Button.squareFocusArc = %arcSecondaryFocus -Button.minimumArc = %arcSecondary -Button.borderThickness = %borderThickness -Button.shadowHeight = %shadowHeight - -Button.shadow.hover = %hoverHighlight -Button.shadow.click = %clickHighlight \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties b/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties deleted file mode 100644 index 7b9db99c..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties +++ /dev/null @@ -1,43 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ColorChooserUI = com.weis.darklaf.ui.colorchooser.DarkColorChooserUI -ColorChooser.pipetteEnabled = true -ColorChooser.previewBorderColor = %widgetBorder -ColorChooser.sliderBorderColor = %widgetBorder -ColorChooser.sliderKnobColor = 993300 -ColorChooser.showPreviewPanelText = false -ColorChooser.colorWheelDropBackgroundColor = %dropBackground -ColorChooser.colorWheelDropBorderColor = %dropForeground -ColorChooser.pipetteBorderColor = %widgetBorder -ColorChooser.swatchesRecentSwatchSize = 15,15 -ColorChooser.swatchesSwatchSize = 15,15 -ColorChooser.swatchBorderColor = %borderSecondary -ColorChooser.swatchGridColor = %gridLine -ColorChooser.sliderShadow = %shadow -ColorChooser.errorDelay = 600 -ColorChooser.swatchesDefaultRecentColor = %background -ColorChooser.colorWheelBackground = %background -#Icons -ColorChooser.pipette.icon = misc/pipette.svg[aware] -ColorChooser.pipetteRollover.icon = misc/pipette_rollover.svg[aware] diff --git a/src/main/resources/com/weis/darklaf/properties/ui/comboBox.properties b/src/main/resources/com/weis/darklaf/properties/ui/comboBox.properties deleted file mode 100644 index 5902b9d2..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/comboBox.properties +++ /dev/null @@ -1,43 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ComboBoxUI = com.weis.darklaf.ui.combobox.DarkComboBoxUI -ComboBox.squareButton = false -ComboBox.background = %backgroundContainer -ComboBox.activeBorderColor = %widgetBorder -ComboBox.inactiveBorderColor = %widgetBorderInactive -ComboBox.focusBorderColor = %glowFocusLine -ComboBox.inactiveBackground = %widgetFillInactive -ComboBox.activeBackground = %backgroundContainer -ComboBox.arrowBackgroundStart = %background -ComboBox.arrowBackgroundEnd = %background -ComboBox.editBackground = %background -ComboBox.disabledForeground = %textForegroundInactive -ComboBox.disabledBackground = %widgetFillInactive -ComboBox.selectionBackground = %highlightFillFocus -ComboBox.arc = %arc -ComboBox.borderThickness = %borderThickness - -#Icons -ComboBox.arrow.icon = navigation/arrowDown.svg[aware] -ComboBox.arrowInactive.icon = navigation/arrowDown.svg[dual] \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/fileChooser.properties b/src/main/resources/com/weis/darklaf/properties/ui/fileChooser.properties deleted file mode 100644 index b270c25b..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/fileChooser.properties +++ /dev/null @@ -1,51 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -FileChooserUI = com.weis.darklaf.ui.filechooser.DarkFileChooserUI -FileChooser.newFolderIcon = files/newFolder.svg[aware] -FileChooser.upFolderIcon = files/upFolder.svg[aware] -FileChooser.homeFolderIcon = files/homeFolder.svg[aware] -FileChooser.listViewBorder = com.weis.darklaf.ui.filechooser.DarkFileChooserListViewBorder - -FileChooser.detailsViewIcon = menu/listFiles.svg[aware] -FileChooser.listViewIcon = menu/groupBy.svg[aware] - -FileChooser.borderColor = %borderSecondary -FileChooser.rowHeight = 20 -FileChooser.minEditDelay = 200 -FileChooser.maxEditDelay = 600 -FileChooser.listViewWindowsStyle = false -FileChooser.fileSizeKiloBytes = {0} kb -FileChooser.fileSizeMegaBytes = {0} mb -FileChooser.fileSizeGigaBytes = {0} gb -FileChooser.readOnly = false - -FileView.background = %textBackground -FileView.foreground = %textForeground -FileView.fullRowSelection = true - -FileView.fileIcon = files/general.svg[aware] -FileView.directoryIcon = files/folder.svg[aware] -FileView.computerIcon = files/desktop.svg[aware] -FileView.floppyDriveIcon = menu/save.svg[aware] -FileView.hardDriveIcon = files/drive.svg[aware] \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/internalFrame.properties b/src/main/resources/com/weis/darklaf/properties/ui/internalFrame.properties deleted file mode 100644 index 1ca38b23..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/internalFrame.properties +++ /dev/null @@ -1,58 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -InternalFrameUI = com.weis.darklaf.ui.internalframe.DarkInternalFrameUI -InternalFrame.border = com.weis.darklaf.ui.internalframe.DarkInternalFrameBorder -InternalFrame.optionDialogBorder = com.weis.darklaf.ui.internalframe.DarkInternalFrameBorder -InternalFrame.paletteBorder = com.weis.darklaf.ui.internalframe.DarkInternalFrameBorder -InternalFrame.borderShadowColor = %shadow -InternalFrame.activeTitleBackground = %backgroundColorful -InternalFrame.background = %background - -InternalFrameTitlePane.selectedTextForeground = %textForeground -InternalFrameTitlePane.borderColor = %border -InternalFrameTitlePane.backgroundColor = %background -InternalFrameTitlePane.selectedBackgroundColor = %backgroundColorful -InternalFrameTitlePane.selectedButtonColor = %backgroundColorful -InternalFrameTitlePane.selectedButtonHoverColor = %hoverHighlightColorful -InternalFrameTitlePane.selectedButtonClickColor = %clickHighlightColorful -InternalFrameTitlePane.buttonColor = %background -InternalFrameTitlePane.buttonHoverColor = %hoverHighlight -InternalFrameTitlePane.buttonClickColor = %clickHighlight - - -DesktopIconUI = com.weis.darklaf.ui.internalframe.DarkDesktopIconUI -DesktopIcon.border = com.weis.darklaf.ui.internalframe.DarkDesktopIconBorder -DesktopIcon.background = %background -DesktopIcon.borderColor = %borderTertiary -DesktopIcon.hoverColor = %backgroundHoverSecondary -DesktopIcon.clickColor = %backgroundHoverSecondary -desktop = %backgroundColorful - -#Icons -InternalFrame.icon = duke.svg -InternalFrameTitlePane.close.icon = window/closeActive.svg[aware] -InternalFrameTitlePane.minimize.icon = window/restore.svg[aware] -InternalFrameTitlePane.maximize.icon = window/maximize.svg[aware] -InternalFrameTitlePane.iconify.icon = window/minimize.svg[aware] -DesktopIcon.drag.icon = navigation/horizontalGrip.svg[aware](5,20) \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/label.properties b/src/main/resources/com/weis/darklaf/properties/ui/label.properties deleted file mode 100644 index acb758f1..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/label.properties +++ /dev/null @@ -1,24 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -LabelUI = com.weis.darklaf.ui.label.DarkLabelUI \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/list.properties b/src/main/resources/com/weis/darklaf/properties/ui/list.properties deleted file mode 100644 index 9518e1a8..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/list.properties +++ /dev/null @@ -1,34 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ListUI = com.weis.darklaf.ui.list.DarkListUI -List.border = null -List.background = %backgroundContainer -List.focusSelectedCellHighlightBorder = com.weis.darklaf.ui.list.DarkListCellFocusBorder -List.focusCellHighlightBorder = com.weis.darklaf.ui.list.DarkListCellBorder -List.cellNoFocusBorder = com.weis.darklaf.ui.list.DarkListCellBorder -List.dropLineColor = %dropForeground -List.selectionBackground = %highlightFillFocus -List.focusBorderColor = %borderFocus -List.alternateRowBackground = %backgroundAlternative -List.selectionForegroundInactive = %textSelectionForegroundInactive diff --git a/src/main/resources/com/weis/darklaf/properties/ui/menu.properties b/src/main/resources/com/weis/darklaf/properties/ui/menu.properties deleted file mode 100644 index f868d0f5..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/menu.properties +++ /dev/null @@ -1,35 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -MenuUI = com.weis.darklaf.ui.menu.DarkMenuUI -Menu.maxGutterIconWidth = 18 -Menu.border = com.weis.darklaf.ui.menu.DarkMenuItemBorder -Menu.selectionBackground = %highlightFillFocus -Menu.acceleratorForeground = %acceleratorForeground -Menu.acceleratorSelectionForeground = %acceleratorForeground -Menu.submenuPopupOffsetX = -4 -Menu.submenuPopupOffsetY = -2 -Menu.background = %background - -#Icons -Menu.arrowIcon = navigation/arrowRight.svg[aware] \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties deleted file mode 100644 index 76d8afe1..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties +++ /dev/null @@ -1,29 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -MenuBarUI = com.weis.darklaf.ui.menu.DarkMenuBarUI -MenuBar.disabledBackground = %background -MenuBar.border = com.weis.darklaf.ui.menu.DarkMenuBarBorder -MenuBar.borderColor = %border -MenuBar.highlight = %background -MenuBar.background = %background \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/menuItem.properties b/src/main/resources/com/weis/darklaf/properties/ui/menuItem.properties deleted file mode 100644 index 8a00e7a5..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/menuItem.properties +++ /dev/null @@ -1,51 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -MenuItemUI = com.weis.darklaf.ui.menu.DarkMenuItemUIBase -MenuItem.border = com.weis.darklaf.ui.menu.DarkMenuItemBorder - -MenuItem.selectionBackground = %highlightFillFocus -MenuItem.maxGutterIconWidth = 18 -MenuItem.acceleratorDelimiter = - -MenuItem.acceleratorForeground = %acceleratorForeground -MenuItem.acceleratorSelectionForeground = %acceleratorForeground - -RadioButtonMenuItemUI = com.weis.darklaf.ui.radiobutton.DarkRadioButtonMenuItemUI -RadioButtonMenuItem.borderPainted = false -RadioButtonMenuItem.acceleratorForeground = %acceleratorForeground -RadioButtonMenuItem.acceleratorSelectionForeground = %acceleratorForeground -RadioButtonMenuItem.selectionBackground = %highlightFillFocus - -CheckBoxMenuItemUI = com.weis.darklaf.ui.checkbox.DarkCheckBoxMenuItemUI -CheckBoxMenuItem.borderPainted = false -CheckBoxMenuItem.acceleratorForeground = %acceleratorForeground -CheckBoxMenuItem.acceleratorSelectionForeground = %acceleratorForeground -CheckBoxMenuItem.selectionBackground = %highlightFillFocus -CheckBoxMenuItem.foreground = %textForeground - -#Icons -MenuItem.arrowIcon = navigation/arrowRight.svg[aware] -MenuItem.arrowHover.icon = navigation/arrowRightHover.svg[aware] -RadioButtonMenuItem.arrowIcon = empty(16,16) -CheckBoxMenuItem.checkIcon = empty(19,19) -RadioButtonMenuItem.checkIcon = empty(19,19) \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/optionPane.properties b/src/main/resources/com/weis/darklaf/properties/ui/optionPane.properties deleted file mode 100644 index fdf45747..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/optionPane.properties +++ /dev/null @@ -1,35 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -OptionPaneUI = com.weis.darklaf.ui.optionpane.DarkOptionPaneUI -OptionPane.messageForeground = %textForeground -OptionPane.buttonPadding = 5 -#SwingConstants.CENTER -OptionPane.buttonOrientation = 0 -OptionPane.sameSizeButtons = false - -#Icons -OptionPane.informationIcon = dialog/informationDialog.svg[aware](32,32) -OptionPane.questionIcon = dialog/questionDialog.svg[aware](32,32) -OptionPane.warningIcon = dialog/warningDialog.svg[aware](32,32) -OptionPane.errorIcon = dialog/errorDialog.svg[aware](32,32) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/panel.properties b/src/main/resources/com/weis/darklaf/properties/ui/panel.properties deleted file mode 100644 index 4c12464a..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/panel.properties +++ /dev/null @@ -1,26 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -PanelUI = com.weis.darklaf.ui.panel.DarkPanelUI -Panel.foreground = %textForeground -Panel.background = %background diff --git a/src/main/resources/com/weis/darklaf/properties/ui/popupMenu.properties b/src/main/resources/com/weis/darklaf/properties/ui/popupMenu.properties deleted file mode 100644 index 7dffa22d..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/popupMenu.properties +++ /dev/null @@ -1,27 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -PopupMenuUI = com.weis.darklaf.ui.menu.DarkPopupMenuUI -PopupMenu.border = com.weis.darklaf.ui.menu.DarkPopupMenuBorder -PopupMenu.translucentBackground = %backgroundContainer -PopupMenu.borderColor = %border \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/progressBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/progressBar.properties deleted file mode 100644 index e34883cc..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/progressBar.properties +++ /dev/null @@ -1,39 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ProgressBarUI = com.weis.darklaf.ui.progressbar.DarkProgressBarUI -ProgressBar.border = com.weis.darklaf.ui.progressbar.DarkProgressBarBorder -ProgressBar.foreground = %textForeground - -ProgressBar.trackColor = %controlBackground -ProgressBar.progressColor = %controlFillSecondary -ProgressBar.indeterminateStartColor = %controlFadeStart -ProgressBar.indeterminateEndColor = %controlFadeEnd - -ProgressBar.failedColor = %controlErrorFadeStart -ProgressBar.failedEndColor = %controlErrorFadeEnd -ProgressBar.passedColor = %controlPassedFadeStart -ProgressBar.passedEndColor = %controlPassedFadeEnd - -ProgressBar.isSimplified = false -ProgressBar.stripeWidth = 4 \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/radioButton.properties b/src/main/resources/com/weis/darklaf/properties/ui/radioButton.properties deleted file mode 100644 index dea1496b..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/radioButton.properties +++ /dev/null @@ -1,45 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -RadioButtonUI = com.weis.darklaf.ui.radiobutton.DarkRadioButtonUI -RadioButton.border = com.weis.darklaf.ui.radiobutton.DarkRadioButtonBorder -RadioButton.selectionSelectedColor = %controlFill -RadioButton.selectionDisabledColor = %controlFillDisabled -RadioButton.selectionFocusSelectedColor = %controlFillFocus - -RadioButton.focusBorderColor = %controlBorderFocus -RadioButton.focusSelectedBorderColor = %controlBorderFocusSelected -RadioButton.inactiveFillColor = %widgetFillInactive -RadioButton.activeFillColor = %widgetFill -RadioButton.selectedFillColor = %widgetFillSelected -RadioButton.selectedBorderColor = %controlBorderSelected -RadioButton.activeBorderColor = %controlBorder -RadioButton.inactiveBorderColor = %controlBorderDisabled - -#Icons -RadioButton.unchecked.icon = control/radio.svg[patch](19,19) -RadioButton.uncheckedDisabled.icon = control/radioDisabled.svg[patch](19,19) -RadioButton.uncheckedFocused.icon = control/radioFocused.svg[patch](19,19) -RadioButton.selected.icon = control/radioSelected.svg[patch](19,19) -RadioButton.selectedDisabled.icon = control/radioSelectedDisabled.svg[patch](19,19) -RadioButton.selectedFocused.icon = control/radioSelectedFocused.svg[patch](19,19) \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/rootPane.properties b/src/main/resources/com/weis/darklaf/properties/ui/rootPane.properties deleted file mode 100644 index cafea8d0..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/rootPane.properties +++ /dev/null @@ -1,29 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -RootPaneUI = com.weis.darklaf.ui.rootpane.DarkRootPaneUI -RootPane.background = %backgroundContainer - -RootPane.frameBorder = null -RootPane.informationDialogBorder = null -RootPane.plainDialogBorder = null \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/scrollBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/scrollBar.properties deleted file mode 100644 index 75fe5b79..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/scrollBar.properties +++ /dev/null @@ -1,31 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ScrollBarUI = com.weis.darklaf.ui.scrollpane.DarkScrollBarUI -ScrollBar.fadeStartColor = %controlFadeStart -ScrollBar.fadeEndColor = %controlFadeEnd -ScrollBar.trackColor = %controlTrack -ScrollBar.thumbBorderColor = %controlBorderSecondary -ScrollBar.thumb = %controlFillSecondary -ScrollBar.thumbShadow = null -ScrollBar.thumbHighlight = null diff --git a/src/main/resources/com/weis/darklaf/properties/ui/scrollPane.properties b/src/main/resources/com/weis/darklaf/properties/ui/scrollPane.properties deleted file mode 100644 index 4d0d60e6..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/scrollPane.properties +++ /dev/null @@ -1,26 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ScrollPaneUI = com.weis.darklaf.ui.scrollpane.DarkScrollPaneUI -ScrollPane.barInsets = 0,0,0,0 -ScrollPane.border = null diff --git a/src/main/resources/com/weis/darklaf/properties/ui/separator.properties b/src/main/resources/com/weis/darklaf/properties/ui/separator.properties deleted file mode 100644 index afb2e6d9..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/separator.properties +++ /dev/null @@ -1,27 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -SeparatorUI = com.weis.darklaf.ui.separator.DarkSeparatorUI -PopupMenuSeparatorUI = com.weis.darklaf.ui.menu.DarkPopupMenuSeparatorUI -Separator.foreground = %border -Separator.background = %background diff --git a/src/main/resources/com/weis/darklaf/properties/ui/spinner.properties b/src/main/resources/com/weis/darklaf/properties/ui/spinner.properties deleted file mode 100644 index b633956e..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/spinner.properties +++ /dev/null @@ -1,47 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -SpinnerUI = com.weis.darklaf.ui.spinner.DarkSpinnerUI -Spinner.border = com.weis.darklaf.ui.spinner.DarkSpinnerBorder -Spinner.activeBorderColor = %widgetBorder -Spinner.inactiveBorderColor = %widgetBorderInactive -Spinner.focusBorderColor = %glowFocusLine -Spinner.inactiveBackground = %widgetFillInactive -Spinner.arrowBackgroundStart = %background -Spinner.arrowBackgroundEnd = %background -Spinner.activeBackground = %textBackground -Spinner.arrowButtonInsets = 2,2,2,2 -Spinner.editorBorderPainted = false -Spinner.arrowButtonSize = 16,5 -Spinner.arrowButtonBorder = null -Spinner.arc = %arc -Spinner.borderThickness = %borderThickness - -Spinner.plus.icon = misc/plus.svg[aware] -Spinner.plusInactive.icon = misc/plus.svg[aware] -Spinner.minus.icon = misc/minus.svg[aware] -Spinner.minusInactive.icon = misc/minus.svg[aware] -Spinner.arrowUp.icon = navigation/arrowUp.svg[aware] -Spinner.arrowUpInactive.icon = navigation/arrowUp.svg[dual] -Spinner.arrowDown.icon = navigation/arrowDown.svg[aware] -Spinner.arrowDownInactive.icon = navigation/arrowDown.svg[dual] \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/splitPane.properties b/src/main/resources/com/weis/darklaf/properties/ui/splitPane.properties deleted file mode 100644 index be0275c4..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/splitPane.properties +++ /dev/null @@ -1,38 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -SplitPaneUI = com.weis.darklaf.ui.splitpane.DarkSplitPaneUI -SplitPane.border = com.weis.darklaf.ui.splitpane.DarkSplitPaneBorder -SplitPaneDivider.border = com.weis.darklaf.ui.splitpane.DarkSplitPaneDividerBorder -SplitPane.highlight = %backgroundContainer -SplitPane.dividerLineColor = %border -SplitPane.dividerFocusColor = null -SplitPane.centerOneTouchButtons = true - -#Icons -SplitPane.horizontalGlue.icon = navigation/horizontalGlue.svg[aware](4,13) -SplitPane.verticalGlue.icon = navigation/verticalGlue.svg[aware](13,4) -SplitPaneDivider.leftOneTouch.icon = navigation/arrowLeft.svg[aware] -SplitPaneDivider.rightOneTouch.icon = navigation/arrowRight.svg[aware] -SplitPaneDivider.topOneTouch.icon = navigation/arrowUp.svg[aware](13,13) -SplitPaneDivider.bottomOneTouch.icon = navigation/arrowDown.svg[aware](13,13) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/statusBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/statusBar.properties deleted file mode 100644 index 1571c82a..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/statusBar.properties +++ /dev/null @@ -1,26 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -StatusBarUI = com.weis.darklaf.ui.statusbar.DarkStatusBarUI -StatusBar.topColor = %border -StatusBar.background = %background \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/table.properties b/src/main/resources/com/weis/darklaf/properties/ui/table.properties deleted file mode 100644 index 7f87a712..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/table.properties +++ /dev/null @@ -1,62 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -TableHeaderUI = com.weis.darklaf.ui.table.DarkTableHeaderUI -TableHeader.cellBorder = com.weis.darklaf.ui.table.DarkTableCellBorder -TableHeader.focusCellBorder = com.weis.darklaf.ui.table.DarkTableCellBorder -TableHeader.border = com.weis.darklaf.ui.table.DarkTableHeaderBorder -TableHeader.background = %backgroundHeader -TableHeader.focusCellBackground = %backgroundHeader -TableHeader.borderColor = %borderSecondary -TableHeader.height = 26 - -TableUI = com.weis.darklaf.ui.table.DarkTableUI -Table.scrollPaneCornerComponent = com.weis.darklaf.ui.table.DarkTableHeaderCorner -Table.cellNoFocusBorder = com.weis.darklaf.ui.table.DarkTableCellBorder -Table.focusCellHighlightBorder = com.weis.darklaf.ui.table.DarkTableCellFocusBorder -Table.focusSelectedCellHighlightBorder = com.weis.darklaf.ui.table.DarkTableCellFocusBorder -Table.cellEditorBorder = com.weis.darklaf.ui.table.DarkTableCellBorder -Table.scrollPaneBorder = com.weis.darklaf.ui.table.DarkTableBorder -Table.background = %backgroundContainer -Table.focusBorderColor = %borderFocus -Table.focusRowBorderColor = %borderFocus -Table.gridColor = %gridLine -Table.dropLineColor = %dropForeground -Table.dropLineShortColor = %dropForeground -Table.focusSelectionBackground = %highlightFillFocus -Table.focusCellBackground = %backgroundContainer -Table.focusCellForeground = %textForeground -Table.selectionNoFocusBackground = %highlightFill -Table.selectionBackground = %highlightFillFocus -Table.selectionForegroundInactive = %textSelectionForegroundInactive - -Table.alternateRowColor = false -Table.alternateRowBackground = %backgroundAlternative - -Table.renderBooleanAsCheckBox = true -Table.booleanRenderType = checkBox -Table.rowHeight = 22 - -#Icons -Table.ascendingSortIcon = menu/up.svg[aware](8,16) -Table.descendingSortIcon = menu/down.svg[aware](8,16) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/toggleButton.properties b/src/main/resources/com/weis/darklaf/properties/ui/toggleButton.properties deleted file mode 100644 index ca7643b1..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/toggleButton.properties +++ /dev/null @@ -1,37 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ToggleButtonUI = com.weis.darklaf.ui.button.DarkToggleButtonUI -ToggleButton.border = com.weis.darklaf.ui.button.DarkButtonBorder -ToggleButton.sliderBorderColor = %widgetBorder -ToggleButton.disabledSliderBorderColor = %widgetBorderInactive -ToggleButton.focusedSliderBorderColor = %glowFocusLine -ToggleButton.sliderKnobFillColor = %controlFill -ToggleButton.sliderKnobBorderColor = %controlBorder -ToggleButton.disabledSliderKnobFillColor = %controlFillDisabled -ToggleButton.disabledSliderKnobBorderColor = %controlFillDisabled - -ToggleButton.inactiveFillColor = %widgetFill -ToggleButton.activeFillColor = %backgroundHoverSecondary - -ToggleButton.sliderSize = 35,17 \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/toolBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/toolBar.properties deleted file mode 100644 index 2fe1941f..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/toolBar.properties +++ /dev/null @@ -1,36 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ToolBarUI = com.weis.darklaf.ui.toolbar.DarkToolBarUI -ToolBar.border = com.weis.darklaf.ui.toolbar.DarkToolBarBorder -ToolBar.rolloverBorder = com.weis.darklaf.ui.toolbar.DarkToolBarBorder -ToolBar.nonrolloverBorder = com.weis.darklaf.ui.toolbar.DarkToolBarBorder -ToolBar.dropColor = %dropBackground -ToolBar.dockingForeground = %textForeground -ToolBar.floatingBackground = %background -ToolBar.floatingForeground = %textForeground -ToolBar.borderColor = %border - -#Icons -ToolBar.horizontalGrip.icon = navigation/horizontalGrip.svg[aware](5,20) -ToolBar.verticalGrip.icon = navigation/verticalGrip.svg[aware](20,5) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/toolTip.properties b/src/main/resources/com/weis/darklaf/properties/ui/toolTip.properties deleted file mode 100644 index 4292c7eb..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/toolTip.properties +++ /dev/null @@ -1,28 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -ToolTipUI = com.weis.darklaf.ui.tooltip.DarkTooltipUI -ToolTip.background = %backgroundToolTip -ToolTip.borderColor = %borderTertiary -ToolTip.border = com.weis.darklaf.ui.tooltip.DarkDefaultToolTipBorder -ToolTip.borderShadowColor = %shadow \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/tristate.properties b/src/main/resources/com/weis/darklaf/properties/ui/tristate.properties deleted file mode 100644 index 39d12125..00000000 --- a/src/main/resources/com/weis/darklaf/properties/ui/tristate.properties +++ /dev/null @@ -1,24 +0,0 @@ -#MIT License -# -#Copyright (c) 2019 Jannis Weis -# -#Permission is hereby granted, free of charge, to any person obtaining a copy -#of this software and associated documentation files (the "Software"), to deal -#in the Software without restriction, including without limitation the rights -#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -#copies of the Software, and to permit persons to whom the Software is -#furnished to do so, subject to the following conditions: -# -#The above copyright notice and this permission notice shall be included in all -#copies or substantial portions of the Software. -# -#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -#SOFTWARE. -# -# suppress inspection "UnusedProperty" for whole file -TristateCheckBoxUI = com.weis.darklaf.ui.tristate.DarkTristateCheckBoxUI \ No newline at end of file diff --git a/src/main/resources/library/x64/jniplatform.dll b/src/main/resources/library/x64/jniplatform.dll index 78a2fff82666f38d4dfbbefeaf15c7d9010631be..ee79377360471b5002a340dad6b2b7fd8dcc4f88 100644 GIT binary patch delta 219724 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%0ALH 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 delta 219499 zcmZUc2YeJo8^-qz?h<+~7gB&EM^O<`f})^+1VuU|2r8XJQKU%_RC*4i*C6FZK?sPQ z5)=dlBq%6SgQ6l*5=F5f1Vuqb`Tn!B!t57+KfGt2_nCLzd1rQZcXsdc$1AHm3;CBb z%{yS?ycr$6v)0c$daGyU+Z8;+J)V`%PVi2h;PvoNeU{>1Y5w{6=jUG(|DyR`B#B|75P_b(*$qKvy<^G{%J9H+&DVHvbt5VtV4WGD~PcU@h|33jFrK^+59`i zzqn6htUmJSw3xc3pLuk^aOpcE=02y@cK9EM3K zXKI3e%gS&uon!}1CN0O1hUHpxr(p`7D=!%>0?BcY5;z6Jd^}2SxhGH~>0Y8LSY=vX zg2}%SCBu4EPEPt<7mSLYGE_*2mU-tAl7qMEf?@6@2k!~gjGKWWrv0hC77JpjBZmfnwk!i-&jIj0x7}IZR|CyRpq$y znpK{Way7RdCT|sqnHHNIysm;>FzQW~HZ1}*gZnV#e(5(16(k!&LQX}?Dt^gKScOUi zE*Y%@sR^SMbQz0aBGT;MKx(jQ4A9ks`BMEpVmyfsbx#swzauP%0hb%VX9P@Cj zT9quVlFZi3oMkpP{Z*BAt?~C_HKvAZER$pchNKnAmKBp@)~K1na4jw`D_RDUgUfWm zNM2BWQT3*#GGFJK^?rxR{L&}q3u2R#9tqh6quySatOuf{?>uH|e095En0v_FHVjs% z2BYZe_eq#MJy>ZqfvzzbBY#sXX&Z*L&gR(v36s^i+`{#7$%##C+1O}o3{3I;i`oWK z;qAoP^IKeb> zF(H)3%yiA=H82tB(1PRaf`YCU=yvJRfo|p3=Qx{ZwsxP)Q-*?DN#8=#@PK@*499Nc zn3-)FddWW+5)U+>4VU50+nF%)>_a2zO&gol67Hadl^$t6I5s(Mpe`8Q+H{BHb|fFQ z8#3xHxAS2NQ_4vogR{{lT`($s-cZVCaMagqqz-QLP#q-AGsyi~Wq2UksPc0o8L6sl zxRZ(L>hv?RhAIi4-bLS9o2%*#jd5ZRa*`^ zR4x8;$E1{(q6qrCbYE+hPjul>r778 zVaRjMg}>X%_cR#yXgdaUg*l*~w3BLGm{?WYlSfyb{?e%n&Ng6(>0qvZf47%us>;j` zSX{?*W!XlRqzN4{%rQstG)&=ak3Pe9&aewc-0x;cod@t(J=0=kF)KbReICH$Rt&ip zqKqo%V6wO{Q&&p~H*~TKhPfL|#Gd@smn!I*{9nQ3B&fqnEz@^N^Z5Aqg!}*F{#&IR z!i0NC&bfq?U~e0nNywHV4-(i7ooU$>@h33hU3$?7CU>z5Mqq>FE9wP{F@#*Fv7u7w zA=T3d7*tofOFgKjYk6tfw{miDfi4&hQ)P^*H~Aq}|6OM4zJrOmznpY9&FQvtSG!=; z+X53IPWvn#)6Fgz=01|#6}M|KWd31Jn2Rvs+bh_K54P`a7mRvKWIFXcHDyiL!0mA_ z_pq#OT&$`K^-^TpvOe!2e{>Dx`irq-T9W&AFxAsTwss5D@KltO-2ydzDLwHi+q(r) z{kJG+EgBb>S{gK1kyT}2_dt99KFWz6iJS)6#sR-Evu17vaS!N%G@3Z%k{CW79J_spOESUc5z(349?W`y+`^;sAr&t zziimDdOALvfFE~!4%FCgezC0UiPxW?M*Ju3Ygs!T={#`6ar=E=N$-W*h7ViTEJr&H ze9Q^qbMRu#duqtRUbr3k2=`Tv^Z>ZnaeI3|j(118RQmKrdJ1Z*Bdzcoj@MYJ z6vk_h0hYx=r84aUw)X0=+6RuIfw~O)0LcyGv)4eoO_e|YN8qkr3GZS!23b~ZuO8Jb zsn-{u`A`is<&PQ62zVvEUVN$#nC>W-%66rkJ;buwJJfiIdKl{GCv4aDFm;s-MeP`B zS^XS;b+Rn0RwEvOSHP(@qe$uj8=utREb=AB~p0M{%1t#KW!6JeG{2)z=jMykgVCm zI$p9LN9dWvT2V^UpTP=@DXoX;Xg zoiLSaeMfo*+{lqerdif&jxy)G24W2~+Cj+UzIjjSYbnP4| zR8sF;%ew4H9|Y$*vF-*(m)5zuONI_6);>9w6<1p43b?_E^)qnDQPz+vO8MA4mQ+o7 z-yxYn9L)>tL@1^A$N~vHLGAVnSx_Bm zJ~-W{vwzPb4sEBUor@$-Y0C>U-qCgecXhN&!4XG$N+f+K+5wC0?AWvKEI7-jCqRSe zSy8ptGg=M~CE6=ctDNq?z+7;=)>*=W>Ub?!BH=8&KDv|@)rsIQ@G8e^w-;Ga9qr~9 zrC4ceFJnn{w2Q%;9lz1bSyDCc87bMrh+sd|8An-m6#{-n!AD} z)h9XMlg^bKDvoj!IL4<(wT3Kz5~o97VoCMcQ_Tmo{5k=ZR-iaMe6i15NoG zy-Y1fIup!z*yDBLWyv2-`*mMoEpxP^!D)UyUgci3$HSflOC@6jZp*yJ%IcHCfgFOs z7LM{;Fr#5BGv%aGzWX{0tK+oB8%zi%fS%xKj&zX>eG2J8s0EHR`b|7J()Qq7N17v7 zl=MTW)sFNJ@FXXIl-2fNq#aG*{Qoq!njwAd9T;TY;M^c|bx_d3Fsw3^V zj#blfxfKUNd_hlY=9*8$!-~`dcWQz zw@e^WmuVVVFq7)U1F>XWv&{nyU_2)+U(TM|4+8d17F^k~}#O z@PC7$;1P+L97stBY{9i_bZ>wuka@qvrFvS(@=0`g08C_}#Ej!qwg8;_iiF1mQ@pFU zNcqWu8s42-B#qBXMc4`_{?}kFDM|}g_Q!06Y$tg)CDo8+lLL=?8cEa?hWK&0Nqsyo z8GLy6Y?TpH7^FW@Pm_96xG#w83Y3xUQv#`;8|9>uc9T+5$?ddlEE{^1Hv{wa0Q|5` zvZmso?)xh9L#Hu8h5`3!>pSnuF|6L7-d{8gQR;Ti$9j0WNULdf7=!rmp4=`u2t3!x z+Z6rH^Er&7A z9n|h)j!rC0fmFXfsjB2P4wSyG73I)mJ)(O22EnAc?$yRgrx}5ojo!u(`P00K+Xs{7 zVv1lgy=H@d?~v6q0%JV^xp5{vzDqi&kA5H-M^(hn~%8rQ~j^ppG811_Z)4&$_Zuk(R6wPG3?w296a6M4w@!@+GLtWbt zwG>F;QuIb*vUkge^6xAL<7>!9w%z;phthI3RQyh^7R580LA({%Lc8rK>u2Nd37GcU zI2V|ytLE*LlsQ!0XH$07AAvn>tM3qFQ6O_y1!~FqIf0oTzcig2XccwqE-p4FGDO>W zL^F~?)*drslVC!7?4v*GIY+wUa^+<2iCxk=hiP(?Ovs_5Bjsg2{4+kHy=Y0B5=imA z2p(a#T`3P3vi)*ocrs+d1F@BTJ0Ty}iTer|ksb3{j3V;_v%F_Nl8Vm-2KuUgY)|eR zV^cki<;CY{r?c$f!#@Z^dWLaC&5@_5?Rx>9O*u7UuYN4=&u0#9fGT9f)ExAkpb(Lw z8HuTVD(<#<>)K+`2qw=p{T_x%+iXtAe8p@sne8WyR zpQH(~4BXH19W61l6H|QW!CP%Jqq#(A`}+fukIMJJL9Pe&@RVH~2zhrNl)8%pHL{Pu zhg?VJ8O6A^ykiRfpScYt#-$ml7?+<}FljE$Dj3Vf?C})HfyIG2-fs$|_w$5#8OdgS zR3seYYE@_JRv;nCumK#gnJ;iy_k`JM>pW8>@B%4&3x<#k%|9^t+E<%Txt!H`Stu)z z`_{qi)W$u)OFF0DeJT}~a72`n`b(IiH9q6gHd?}m11V9>!31w#YWRjwDA3KnAUl?D z41Np~S+A$4_rhm#%hEuuCru764b&|2$YFXCZCO64zdJr?Um^Gfu9|l3-FsM?yhy7R zq|b|lrjGJLnLC}M{LL5HZmRk@{a7t&i@C13P0lGvKd4+;u^sC&V9xy#UdHr1`nmL6 zW;@DWhU&pD)LMUaZT3y0Y)PMG)Y<~f&(O6Fe<3l;nMgmu(rE{4XDO+dO9XcuQH*NQHxOvqM*k#Wx)bvIMz-~p$eogD@vPn!2H$bDdc0AyiF!^vIKJxruY?8 zlO!jV=axs+LTrcoBrvSua$v3vz59)-bX9g60EumF#(Z^VC%ScQ+wngfL(;d4y z8LtYo^mT{Jk<^#D=*&@&jZ(EHdh?G-wU+}m+FXLnb8WZQIj;I)ZV@*x!E}YmbZLgl z)R)<0U#txE%`3^H$K`z*N-TeZMRA?EVm5+FTPraGScV3I)8)|E#MFeP3c7^5VTxr3 zeMr2lpvze2B)xLH^akhKUgDlp&?U@2DJNbbkkeSK*=8Wog|zsny*7uNfD4{Cd!Jc? z=?9bV(qxxlUVzE#X+Fk!2PU_@eE?;D0}f9ytrr#3+iW+vh>k5XnR{U(E~YS3pjxh~e zUrbv`Iod&^JdaSrHsrNdE(0fpML+sP7|4VRqvZQZ}OYxMEC73-; zW&7)aw|(7Dv6&*<-(Y>32W%g$Z*+H`lC5vB0D9!)8=MpF`i}ZiPO8^QNcKHMVS%h$ zOO>a9{q&*bnJ+`%q}e>E#bxaKAs;ZyIq=SWC&%8zVO6=JRPDa!Ozl)0Bdu1mW=x05 zwcUCa%Us303bRVbb`-ck$L6nank~69_Lc{CYN=~b4u{Iq%GZFa9p!QG21gky>rnbz z{lNLIjD(&`jF{x&YO7? zxiO8FHxcs=z(MuVUVh`l|HO~n0XVD9Jn#=r=QsQ);dQt?2zR-R6i-Y{@&63I;A9|5 z_O8PV=OjLS;hz{w>H86@|7>ZPhu?Q$YL}JBBB-AvlE<}o@Mn9{%e>N+ll@I8q?NUA z*nN+K*+)>d=S!vaftr=_U>cO=tclxFo?bHS-inod2O!y3K;}L3vy5HO(D-FJa$of` zIMWWA$Y~gVXPBjS^C_M|QtvH7eO5a2;eQ#+sj?I&swj zbDOW?YAZLrjgOg`-&0`D`wT~A%zXOk6i=~UnikW zT&!;cN95!Na`RQOzjwZI)mu{LYCJC>TKX<)XBrms1t#k*`_>C(IbZVgj19Y;)CG43nE^y4$Fjc$4{5d3G^pVXT0uiH^NMTrR4nc;4m3 zg!`1i)xyItmcG851}xMUMmN5#u&ZaE!lZMMs0`}fUxdlEud{qLeTA*mr0G^VzV1(|MVpNugt6?4U0?0LXvOY9+(clmOSkebIj}WQqs{>( zDrb7Qpct1n?r-|v&b~hIH3jGEAz28F*!~mF0z9>k?7e<9INc@O ztAwt3@YCf*?{hVj@DD>0G$XqeCZcnZ&;^{HXj+HC#MtBP5t;jbpyrJqz*w%vieL&| zQ_TObI&G=J^4$u|visxdBdOb27gxh%+Ab3=1JkRR?Im4-(bMoTc@cTSJ1}9F<};Wa z+k3*lz=$j0s+Na2YES7_z_6ZSBY{?o*-$P_p=-8$V9V{Ge^+wtSzG+ez-uKx%1VfgX`nz#QGeKfp9s3)OtIsb|dGyWUT7?KpjHfyFi(90m-#oXnH;A2K60+H%$BHphTjF3n{a z_j((QA`7l-=R07+uC8~L<~upiCtxVhlRNP>aK7th=Z_SltrJsdy0aVJa@- z1pX&DUtb&4lohD_t;%|=V~%w&m>pwvU%&Btf@-fAi4`$aGtM^D*8NHkR z#IC;$ zljm+JQi?~*6J&Q;_6Y&c1+xtAq0x8COUFHGn;q)v6!+xF`tgCvz6ur8p}7qmyM^!W z!Px*gu09rsXD@Rp-?n$yi=VRuj1LqiDW)7KT0}2%g)H= zit;aF-*LD!+wAjJQcX=LU=^zk%+qW~V2%wvBV_$Py0KL0%1TW0q$=~$O8a+GOi%o; z=sjIYQuY%?S!uo>@y#)axh!|Y_fw2q6?>kNHHbWm0RPp4YX0jhynAI_0Tl*Lh8+dC>ffyFk=o~oehj&(Ooz5KtY-NVlrD+J0{*qa%X9;EkOvt5qB^#=6gIVn~Ox9|XsU1&aTTP}z3Fb+dbeBe8 zir+SCZ7snR#j}zYynSsAiIys#u}kEa#-EYk4$_AY-@*isdJ@A?>OT%FULxtAaU9i3 z^zf8n#csxRu$)8a-vASNQ;ON6^q&N$m$%m&PdVvv7$(h3(|KBA^%;y{(fhr!JaVS$%Qy^)Rz zeyVtU8Ne2HWv(UaeLGWMcD(J-IszlM)t;>(>H8Cp zDV{tM2>C~2%DYvKWyRAvAvK|)f~`$sPnaCr15X7~k8)*^2b1Q~ zd=5j$TH(N|4s2>VxDF;uJLo9uaL{8EOxUGa24nqUzQMW&Ci7pDDOH2Z7ni09Os>y- z5xkq+{B@va~m<2RYL zFp+qZ*{c}4k%kva7z4Fv)+N6MCZ?k4pq=zN7N~jsh!Tc*FvS&2>DpTI+A*f!msl*R zUW#X5mYk!u@5bxYdf2x(F4ccOkOh79F%Ii7;B;H)U3HyAj#GC(R7g=(rFZ>cmhTVB z1!_9$_ci=AuJ>58%G%przK-A{*K9ncUw(qdUV$#ubXF*#jE^F_9_oz{-@o7=j2d;M z-brdacmrM0bmp(|WqcI3IyKgUFI}tQJ$i%WpCnFyZPmx-KN43=pSUtUiie#ly}{Ai zq+T)M^|FjY^>9no_#;X@LlTqyKTwFNp!a~P-ss^e4U0ro$!{KvmTwAK7CTC*A|jiO zEl&AL_3Z~KZ0x9E@(dWTbfU+tClZ2wl2U1 z+Bi~XV)SmRD|z42@8ogYMQM zN&bNW{Z!Q*R$iy|4+>i=NY-DxkaVkuePNXtPr9r@$&K70K77+L-`fCcbY=wNVD~oQ==YM@N8N88p<<4eqk)4R>5V#aYp7XqhYbpiJxf3Vxh3~7TOOm z;XfpOedUyd3b!k4elMghOrD(oiJoT2il14pN5G`JH1lC{J~2ljA11fJWWIn2+jo&2 zE|oA=yo1^6lGlRCIb=HM1e1TnWctHo*)Ff2Uc$H>Cf6n3c!%Vj;R5xDvW&8y_4xk= zN0!OIH^im*QySVy4=)VN@HGdQmcA8Z^}^}tF9&~NbZ0}C*K}d&gfgWm9#i9?Z^e9H zQI5M-%X_7vgwHbZuWO{1nycP??I>TkT90=&_a;WmfwL@J!{ppq+F6Bw9qWp*slFpX z?l>;6HkH5APO3d~JhdhJ9LoFP%G+lD!@x*^o;2gZEo=v#B~q!FC1vxS(x8}Fe#X*X zyH34JwW3_}dc|@?{-H2kD(WR`7C6nedSAaw%AaQ@@48FU`1E~)sflf}kNZr0+%G%N zD*{*Ul6)lDw>M^NDw}VVJO-2RViv)KUCc)?nJ(rcj8(<-b8{0kA(QC`lXHv7ypjNw zcB4ss3saD!UuR2_^S_e22b!wuzw^IwdUy`lT6gwfQ|bL1hpS&E{D$c6yGe;{iFz7H z5A3J;-qm-@S!BL%A;a2UrJ3Cy{j@)mLd15?%Ld~va4fzLL+7;lcM6kq+c&4H3uSv4 z9+e8e)8-18Y1()KI7z#&+T89q-_uH{JnxohUsuYrbPJ1Q2lc#%o6GmV6H~Q&NQfTe zM}bT2`Y~&PIw$JcNDtq<>T$mFaErC__IuTJvmM4L+4cuvY=p_xVf+f*U>haeI_Q&| zFEVNBNr#Jpnr#NQV2JKBpJcuOliA8-_LgAImtbnhLfmCfx(|09%*s1TFlS3JRa^dl zt;GrcOECRfXaB!wehJYBC79w8 zOsLKO`^hN5Oe(>=+s2b^rMaU16_J~%+V=mM7A2UGC79JEn3E-#xON^Z+uc|jC^s{% z1hc6Ga~>w->c$Q2|DWklf*G%v7OrY}B}Au7Fex24OvalhraNTGU(Do3N*Kn#gxZ<+ zTgyr?J7B`D@AiLJf+^FHi!s+X>uxQ<^oWHDyW$!y8GjR3ZVAI?n8LPZTwj-9{)Gv- z;;NDH|4d7mJXc&pOE8PGp|V_Y<-ruYn*R(Y&DGdNn0%M(P$n9epGGiwEOGjO7AA8JCdPF>xVa0X(A@O%STj;wKW6U3{%k2Wd3@9Nsz@as1SrbIF{A_L9mP2 z4-;;0Rtr2t&+ayv446}-tad|pW?EB|=?9bN>g#ftu&ZZZ z!=$@hm+nD^Tz(oUrj6-&3`}~qYnj~&m35EVvkNd0SM#-dG8tW|?g5j>@AzEH;zF2+ zE7kAA6u1WQ5=?%(2h50W?L}fUOlA;F%-yEzw_qZ!;W!0jxrVH|cs#K+{Y`u0ZiIdt zsTq~L5I-hMCG7uN?D zGR(tu5 zm*S(FH0Q%NA*@k=Za`pra?=!2Hqx}oP`8sFb9S=)y zAKm#y*^k)^pTEo_)c)GWzU#m-a`G~lqwVDvAAK4w0Y8B*!BAiu{2v0Xqqg2#{D_SA z$IkI2ONA)Jy`?@MzTAE)e0A;X{idIcjv~awN7WXGx;fy!cLyT>6qw9bGCnGn*Ji-n z6{}l^-+@Q;b@R>ADH?BCkEx4g+qeOEN;|&vn7kiNB5#!CUIV7dj%e=o zP6M~Itr@=XPdQGWor&XDs9*{lx@R8Rlx-nNtK8CB$p?_Go(2mz6}^MrBiHd$PeN&Li>##tZty~W^a>2 z2%~z#a0Q{wvndp6&)a~H>%e~ja{VAhbK;YI<%XyP+jq)!fPC*jHQq+{SD^7H`F0hJ zFU7#i{}_B90n?-?mbq9wM0!^wgH>fhMH+7T1i7VQ+v`&lc#xv*zh4IO{ymkWJ_mBa zp(VdjC@p~)B(X!;Bh~)v1M}oi1!CwfD=N|WB%878uLW{3V%PT`87dWH?Bl9_49(w? zMU4M7--|*u?Rz$Gx9z*qHlV&tQ5O?YGGPkOKE1>2d-z1cXbt4uch&zna&v&Ti(t}Z zSTHtJ`bm{ZI|b8$VHsAI6s&(z-VZR>k3#XLyXs@9;Z$*A^xZ_Ek&dGakoVn{^KmjP z7U!?Pq|1%~Ef)a!_E#J({~9hQV(AudDFqRA7@-bNWr=zQ$fbxgp(wQ1l@9}}X-TQ4 zI8fEkhN+RQPa)H8+!L06aK;zvs>k8;D2A@O?)6Wrom1tWv7W7r@4)nw>XnJ=Zy=9K zl`&oZ#K>d!}?kC(tyGH#7h zx81fh9oSE|5RsK>f^v^I*vDi`m#sGahs0gZ^%3?Z9i7+M%q1nQGQ7vj?*yQud8Ws>o~R6+QxCx zEityHch@)>pU4`56Lb*e0#>LCBW|2-PvjXllLkBHC!`3WZ#~RqZTua0K^yOs4pr^rd>9|T)svV$GOQZ0d_PIvt4b`5 z<+u{e6HhfdetNQ8UyV3!n&RQT(dMbdktIX0RN4rmFSb-Sd+PT_&q9W5nXmR#b(ksF zd`;&cYWTOn)Q-{5ASzF@k27T*Dg%;fX~Q&`lT1s0VQHf4rOW47{BKT&iCNSvK3)o| z^A*~J8EWUr_WZ0gPoW!IV0dYU=zJG|U9|CLS%cB@v>Z~J{F(MaOpE@qvl!o|b_#h8 z+%(nhZeKoppJU0B3RQ3vKU*!Iw$HA>k=o}Aa$f0KwJ*bX}u*WqpAA~i2P*VEz$Ku*rJ$eCA$VC3Rrp3=N1YOX1R z_h*r#*V#+xKT5!Ac0C^ply!xJLvw%+qAczXSK#zOt$JoJpDCE{KUtxMgw%x=|7uy^9abE*1 zm++q@Qdpa5m$6ixQi|^4t02pOA(tp0Cd>Ke4`1iLktV}0a%j6cGXciRkjRID)OcXn zW&8~$U-u$$8PH|CQ?B6B*BgUn$C;1~EOv#k3?|KX5cdHv;xc}}OmgbP)<}$9PKI5U zJ7ChBJUk4x>@LQw2gbOBpDmZrP2}OaTzkf-Jd6OQxkQU#A{kO}fk#z9HiK`BO-;OG z1;M&H^bkyp&R4=~;E2om2@H>q`NmlAEYNz~+##wa&FaRELvEqMoidLPf8SLqt5;u_nn^MDYSFuKmHc}PYtS+1;;XdZ^RgOf?YcI& zP`mbJfI~9u77n6kWPLr{FNaCLR`C;6@oLfc8%55h_0U(5=4r&Qo_z8E;P+rHnVkmR zOx8eW&wd4AWqnUsij5!3s{Sg?CYa27iitOwPOnibXfod^CeCC=y$<85l@C);%hYtt zeuJ=YGpXG$nUzeY%$xMx#XJPV?<-mG&bG+QFoji2=FZhvlTGGR#Z)ty0c*0UmS|G{ ztbs`~nR#nrs+!CZnDEUe^Vm89YGg8nFkx4Qs^>BLUChut_E$o8nAI*Kiqtom5$kEb zw8^{=6L$4J`Ym!6Fg5*Q(kqzEYMA`l=2pQEFxg=jRqJhq zxid}8r!aY&Oij!NLY!i1GGJmhnwr@#q3mg=CU1io(DD+RuVB)jHERXmrLnioTJ2$!hWQ_I#&rr* zWRh7eA12e)*q}S331f?{YG%Mh zvdzXmgh_KX_IC+QgRKNK%B(d6Cf}Y_+5a{F%2nz=<|IsLyjd-A+y672U@X^cn4vVT zA=?R4=<@TAV)Ov%@wcpo?=wLrn2iln%+n_GdI_coCge(fmF*myDzR5{)&(Yiq{+-O zm~4Ga?}SR9YKltb|37mNO#Td0Gob{N4-=VXYOa)E?%qMp{yWN=+NYdxCS@~QVZwFH z_3Ob8I25a!%y%D1q+x80VEl)K>iUXmbJ^H1mfx|(kpGg7#%sI1Q+~#fuz4r5<_*(O zf0w!>?a_!IM9o!jsc9@D4>gLd88`AHjv|+#=p&iaD7HpipO5kPqFLq3k7cK_Jg}QX zDA%;?-z|SBOSex*!xqzW@)JqBlZ&oFdkA~IX*my5d_Z#Vj7&&Eo%-9s_av6M|GE*d@acpYb1O;8gbn#PZ-OeS79tgso%eX^-B9sc8UQq;{ftoTCC;xO3nOH$F>v{aXxO{j9}2!r0w zG_3eax;G(5osW`e$+XCZ3cExTm1uw|+M+Zw zOy+{p3^bXWPokM=GLOMT9y6I`N;B1DzBrjp)Q_7~#X_QX^}Z#H<#IGmXG#AW)erCkiNj8-tz!G$Jn#dd=-YX|V;$3+ z`?Zcg;znD~0B7lYp&2r!Ijz=`<$UqIt5&<8K^~`Dy#UVBt5J~s67@tv_n9)nN<_l|BkMT-8*mo?~CpuKRy1icbJv+4`3)+_kH0- zd$*6Sd2W}v_tBrvFJY~wtxx``wgr`Uf6QMjK>_=BSG;Tgl2A)RZT&YJ)3Nr~pZwo~ zt7*G${ACqp{m=M8!bDlu5~pwf!*-swmg)E}R&`@yC)dA(Vw`s3{qbK(Z$;7?$|J3) zwf71>W9`)X!>m>5PW!)GQh?0=l*en;cG~{~++N$c)ok3F{j&G@dDzy-{H45BS8eil z1g8bBW!JwFqLI`5#ZppC1s-(;+mPF%+`gnsrFQgwfX{1XIjvvvNu&)K9plHXHeUgb zwar!ZYtm=i#D@50d!@Fx`7DaMT33tPpJ`5zPstdp-d)j>+m;~X%XqB?j;X(#R;GPr zq5p<)0TPjEqJr`S+AVeTJ2OEBiog78&rXl7ppu<$9%8c)SjbZ zvSje#-;HIbw)o3&&lPz_&K~7CY8%<2RMX_7Qhkgiccv6};O9@uSM*vJ9KZL2kJ+_T zWoQS4$005|#+uyr{-9m^27p5{;b<_`ySCDzj&$_`%mt_6yJE18mGn-y9|bNSw5OBz z-5AMH+CSkU-Jc$m8k9h5#YkRF7r;3gk6;-+zF|l^`(mwVJmQClJ4bHa91aU-SJYav}M@W z$d71yYjD_UVj6g`6T*cT}ruk9_txlR*P z!26sKKH{rJO6yOd*`S2;c!mr-qRq_eb`NrB?M{)b2T_$t^;)N#*4u)^PcQ1K`VZW! zXOj2h)I|?*wEIJ98m~CTB)Jc`&uMxxm{}j@t6tt+A<04N_f_{=hyUw6IGQl9^P=kC z52+)*x`etSD_z5$&dTJ!7o0v-^17+U!NpF`57dx6rH!je@@Hs!H}ECL{c>m}Ts zg=c^~OVRi54J@sBk#@hGBO2*M-gf^ST$=8w-e<~5 zCEa_6*NTY~^^3B;hV-ej?)>ZEYL2qJ4DEw*C|h#1HRb;lJgc(g&ZE|yUaNtoz5DK5 z6lM(D+{L_clplc?a3S?;E1V_y(-Y#=o7m4%j7arg zSv7XwC*emBSKxg@mTV>N01VHNj=1#CR`fv0dzddk?{6u^wv>0OA~LKPX?tLJs@=M8 zCfJho%ITg~66uH2GOZP*l)hHLLb+M_pRCv++UK6u67wj^O1yCu(Xn;`hG+j5tN(e5 zmJ`8OZ6sHzliDi3Dt=!#V4-wSO+0V2Dl6V2Z6)n7gbD4GTNRV2Hc1-aA@?r<7rbL*Z(&EtdK_se1H0|W9|mUS>93nF z&yZu7y(cmj4M3%K?X&b3klPL5+A>)N4PbrYm%sV&cgtkf9+$$su_;MeHa33%W&%v; zRFpKYR5>|ru`XC#lUk&K|6b3O&_Hgow`0lYM)aEHAWTk??KbWQ8=Ka@Gi4U_g0Y>* z1UH`7>eZAT1KEhU8$+nbG<24W%J2+^oG(nnLb-WREPwJsxpLLmp``qYghRXIlM_$s zg3;1N7%tb-2eSnN>_5Smv`!Zc)w`;mV~+bo7Yy@f zT_om-*cu5xUsTo9WQcgn`5 z*WVtH{GrV8s0VTDil#D5;W5b>7@LxKla0-KjbS215|hE-T#BJWrtpYI&VL%8oKU0-MlXL+6=cGb zOik}YKv!1+GIUsMO@0PHwsc&&D|fe{4SywtQ+Y=-pKsL#+uDTLmmcypm4jIrB43&F zI$HuyG9dFX#QbI&UW5sqh>}i+`9n(^bioL9*F!S?Nm70kOO`9nA7KiJh6#}PkB!Yh z%5^0IUKv-@<3<~s*5;BroM^gX2(ck|ZK@7}DLiWb;Bj*BSzR#93uUINw^|uoso4fo zOugfU@yT(Y>Vi?PsH$-E*y)cf#a-Ejh#KKqniUaXuo? zQ!O|OL&Q~Wx*Wui^d^R4_ARgV>|>bl7rJMOKk9;E_I0PZ&vkRx+t{q!T!uYGb72fw zt`&Ebyow?21q{XPpI&QjV|O|66yx>r3@#=v@~KIWDim zkEwM(j0T zgQO{jq^TH+U4|E7(mAj2vxvz_AL@cp?_1@`F$c@^u?vQopK(`i+hWN7(md!Ng$aGd zx~8rrrs{%G@1;J{el!c)F6Gg6oE5JM41`w@8Nq5Ms~#5XadxvnX;z!dP)xszDc4%*oCdK@P2E87}(-o~c&N?%zvHnv99*oW0w z&$Oh%Z z9l&54T`)X$mLA#UZ6F5AogSHoA!#FqOqatSVPbxw>kslnqyPRw-n@_6jN!Gi{6poc zT`=T*XGSv{CP%rGz$by=qF-a9<97c?T^-AR9+iO+dRhH3vgqn%Gg%&C);)wF>xAid zfMR~rvu>`9P3tb zn?UwDVo*QUcx^ozF5hBEn57IwreQfux~!joyK@SXl)K zjZN!k17z?d&R0KUNk3;={(&hzC&yTCf|Uj;Y+9?zmy?L&W(+Z|=I)dVlS$bls)lQd zO@)cDl2%<5mz=a(7mR%Dg~?J2bbtO7VzDk5=1Q^-x4~Nm(Qns+(MrBkhJhH;Tnq42 zsXB!~Uc?ao$qapsVh+>N53C`3birt;Xpl^s!a?#UmY8E^#d5L@kJVEKlh6yM;U<_| zTgsy~PoAvk6sR1$?<)DQ}w?#>+_c|F(kf@A5R9CR%oiQ5^NcHI~Ue%vqs=2y(6O5$>PoIP`{wrQx zxQ57VY9>W66uM^HY?%DwD9K*QvYx98Ml5TdkiVvLjkF6(=1DV_FQ1UK8CZV85_aY8 z;uG>1mSBUSxE^QzWWpd>GJ|1y1w&@UG<*#c%9fa4*dB?`QrNV%gDGS+=)}YiZqNlI z#sq0P6R+KdkrmfMun;DEPQvpz0Kc@c*@2+EPPJgSCkf^=)9}2U#E`HSL(F;8uni_n zw#?#9h))$fYZ{B5l=ide^(8Ep>(a1{OqfMO*A3_Rbopy6n=m9igdxY}YY0rPG@r>E zwzCv;_3CAqeBGR$dR z^P9S0qbszBfIdQ`#S+*h6IfFZ+~TFe;`>|2g!%35L8M&3c{XMGQ$p zFci4X!xLbv@3<^}gQZ{n$avBRnlZfo0~3Sh(1XF`;N4H#1;ac_n$2ZGyo({nbp`kv zO!{|{H<$D29nUCihBO?eP&(zXm-3E+?y4{mnjH5}LULlOk#@moav@Audk!A4vFW+8 zbjYEzeMgaYm)BQeLL7aazF==DUl$CopTVRvD#{#pMi&h8l~Gch!>H69O%h!*t20dT zSv{Ny5nV7Uz6!(lGt~V0SV7nPDuT(;^DDtKMq#rnRbkS_^Bh+RJr&$&-s_0`Gmi=V z6$Z;?s619p==C2arpEPGaJYGRzdcq4J{Mb~N!f8s?53ur2Tb@z^T&h6DNSvYc@-w~ zkYr}_rO}VUF;ZzhzgAZGT%fe~^f)O$KX#7)FZf1mtnlQ8AL`sbpAFf&$MYytQ~n3R zt9hKs!x$fs-3eWL$Gi78;~e|B%mPUjqCsFg2i;` zAlyhtdImhp@%fLcrg^?e*5`S=rasI3gQ6K9aDk(230~?bd&)Vb%z}EYvi@70%IYYW zfH!ER_pN6o@&fID441Dt|1t0?NBbLipX0TxR9d3ipTu)iN7?|q+L5*gpK_%AWVw=# zhAMWXIp7VB^kwj6o@PB8pUUs?r!6IbLr~F})rkH8-s(s_lX*Ozbz@IGfktpm5vy!V62Qure6AA!qsv}eIb!0Mr7 zsVO|_)I4vo3|)rXG^ocNX>0H)N7@_Atg$B*f1OZCr$R*>=?mauCxW-YYKV!x1pPOF8-dR_UhkKKEAToP z>XPGi3b?i7bvd|ng6`GkX%b$E*Mo2|n)81T?&`QLGu@8H4z{kGTZ!8YsM?s-pVkHr zcDybC6O5g!ccx3^CA@wCm+pA|13cF8nmB{CM)Umrxk{_>+7pUK?G%g$=lmBexS!*e zXX?4DaC;Ii%hCP|&UM^gH`8uH{UKGU_cBh0LrimoFMu~VPV>PF9H-yUl>C=*T6UK0 z$PVBZ@J`2R7w~GWd`$~=!yrHHG+(<|3pT~Sil+cIF zGT<*>@`>)Us1@B9=S7)iT2H|3eBaU!2c$G6w+rXzZ?>+FGnaI+&VJD+t!OIa-Ht;K5tsOTg;|679#9BFrOoaQ})WxJA2fC@R%Mc_gw($(O) zn)iM%UozJbz~69<9BqRIOeDu`7Py6@UA;gGmG%H!rlTze$0SK;7jIE6WNA&Z7aSRy zNBi|49(Q!L#F2gvZs16*MJ%k2w2I7KkF-0~Vn_M{INgzc z0bb=uVkw?@!Ai( z(}{IDxV__b?F$m~4qmszb#=4_;3G~1Mc{sp_SY9AS82;EVP$o+A@C25wjp?|=J`F@ zdYcHLKh!iw8Ud3JyJOFT7dUR;S|a(IaJvgG*U=sUNAtGp33~Q3c(tSbcZpT0?TXK6C-oq!)dK$EUu2S5qPOqb_Uj} zs^5@G-GXi^M4Hz5bHS>AD$b9=O*HR4yG-)7(7Jy)Yb%x2`5m~M>7?d%eQ+12^%l}> zD_*mp!Va}mrYh<^s3XjvX;wOk6e;_wn2J+~8HDVG)23FLZkvF7=sV12exy$jSO zC$@p$9LIY^_G0G8#?L9$TUbbhJ>x$FzvehR46X*IXWl<^CGtLvr>tOo;Jejov~LCH zSJkH%U~NtF+aQ&;^WNGMP-(I}pG;2$9&w!Jf>nx?(+w*mcRTN^?1tl2UnTXgq!U`| zX(8qEi83Pf`0#JVl2ui5nvq9fbTxfiY#>XNXqjwRqUcpjRwul6U|yxRkJLHfrJDC1 zS|yn~=t|tn9KBT+rLdHP8ac|9;5{eS@K zyuuJW(pKQd9ce#sfg_zDSCn)a6j`xT`93(}NKb$ZHShiR70LOK45hrvnCoOd3S8_+ zSA#D&(vM%2&`yH=2JW)s_8)MbqfLB`wXB-`DjloNx}8Lj2~`bq6H*G??I@>#Yw->` z-SWQjnxyZ->rS}3)%4Uo2`+TBe}Pr%7*0v>_zQHLBIqTL973arq;-wj;cIHAjro`b5e880kk) z{i^AE$TdtWM;Qh)7V6OBs;|;+l#5%Iruh=5Y{K zll056sgkh=;RcA+PN?PAGa0qe(@(Zw_RNx#O0^No&Sd>I?1}YKdoR&cd<%{Y^S6un z^7hcZ9GL3uFn%yg{hIZAd)WralCPn?E8bePj|%&!5IQ62l`8YTg^m5jZcXjCIXw5< zFTe!5+SuH4nJ9Dju_wF{L%Qp6|2Hr>d~M7lof`3AGPuDhUfmPETmGhI;&2QFd|B(- zBchcsc^}JV-ndCBw6SST+{nt#3tydD^Z2!$E*O&nAW!1wd6dHn{a_-DV& zJC~50l<4C6(G?@NOHM)~BVzLHhS5hJ4pw5k3l2aMZ6~ z1dDmkE*Kq1mv^b>nJCBkNL-CQ=CbLx0H*kF>DVHWlK7X6O>4>)qTHw7x#?hIGqq1k zb^$THgdvSDAYRM)9+=PpXRQ9x1;boRex_dV{;i~*?<8KUH(IJ6Vp6?YO+F|?Uuf%*Co7K+1gm@cvp;OGv;ARKB;l#x&=(09-^e-Ha6=mg$eH=ZH?74GhHz9`fI)v;x?(~4%R`J+m0|+ zkzb02QE|L37!_aJA?*(n&*xauTodXtOyPHud6);Rw|t0? zR(UPNQtS#R`a|;dv7U(OHa6=$DcwHjU7J-H()sr5wRuzUq2zpy!%{nO=(422SbOzb zJ$-F#)|(}N<1lH9GPp+Rlw$UKrF86mQc zH6ljIl5Lbi(TtLiWn}rP$S6u>8B!5t{7AA6DU@ZDt+I@w5c$8)IggzC&+FwipXc-a zobTDc&vT#WJm*vStQIW=#+n1m{N7jc_V*>qB_76-6XrK!JH5zj zxNg?n7I4>>*8~dn)VH|w1mmqZWd>y zYiy@m2b1}=gqE?6@q)&-H6$m=F0S_uI+=Hy?`D??leyj0)4$ssSZ0rOILrgr#^2ED zVZk^JCQEy|Tg|}of5|)5{NWq<{4mk8)J`(yHR!t;cauwa4$i}n6=ukV$=_l6v-mEB z?PP7F_Yo@c3Wn^kWSd|@JKS>X9{Tfdb6{mxXE*i4tow7cIk3#DcFR9Um_FyRo@5Ua<`hl9)-pdH#o#?xk$K^Yf{ye?xf1a>F`Z)D%~b#0%l!dKh_xs2?? z_QV|llg}66^|G-Q=D5loFIk3#3Z^;d_x?%_nF$b1;#kbP;7?bfd7S{>8uEB#a zd5Te^bgJ~P8Z24jU+&Hzoi5)TqY-m3 z>@b$R@K6ntc^p^f@qOh(&f&jj)s8am1XY}XA^A5u%l8gRHa-L2swBFl?zGB{LvjX7 zu;O7VqkRACtgT{BniIoVjcscdjO!0kX!-*MKc=LrBWKE*e$g>;I2K%L)gvp?NMjqvH@eFfdRb&&4>x@tKzsk71U=A#EP}clRJzM6{{b6pOg2_EA$-i<1 zy;@_tI2ZFI{uISYJW1z-RkR~alxkO|k$;0Zu=0zSsi%l~-F_k*{%U)iB%3kBeX0y$ z4u68lq#sq3_m})xA6O1sO10Cp__G*N!X|naOtPNgYIw187@Hvm|K;v9c!^V}{&uGI zgXX~UK1}xDJ#Ha}sB3m{w=3y!C!|K6)(2L)meSx1)f|Dr^|zhwbs32vxCuk*nnPtmiq*i}189hpFq zxKS8#!(za4m>lY)7K_E5HV0On%A8|DVZNM8M|3v_mU)UKoWt!_44Gj8`x;E{?=;n9 z(pCONA6V(S$ZIOyR18^RKe;|v%+EfVLAtmL=DQ@^5mMN{jjXAK)X;R}C#>FxW zNvG`UAB4&JNik|%{Hd3fNy;z0ePP%;Bjdi`XzN>M0z9p;?PbMplKTr2;24%P?d?vw z$n%U9%B3e<9dlrn>rrX+Yl-sJ7GuZ{E7x(DkaIb17Li3=VDy~!NvA0^T(UW^JUt~F z@Dz9xLuOd~-*!Rrf2C}HV95xxl(|T2T%`-~7}wDpSRS8;Nu}t@TzaWFu*^FYqqVmQIfwtAL>j_m{^`@}#{7fLft5Z}Zv942e~BR{Y;>Q22@%3>Po-FK`TD?0_Yh3R zO{b?vn*+A7?Q%~Vn_KIL+pwx6eR3+L&Q}|Ae%3; zaHfueH|!zSS2|rJRLsPX7dGeD!zAyOl<9w7xf`VaHTLBX~BInd1y?d@HY**oNn3U`0+#Q%} z4lK_(*XHLFqJCHD!fF^Vb@Qo1*Xz_F?ELzY48;()9)m0Fw0sUGM35OildcKf&<9pd zUE~ny0+TT$g*jYzLyBEyu0;Kf<$_)IfiNi-OxfeMngh#Yshf-rE*EF@KSu&10`-S-zN;0m&@ z!&Dxp0MBy^eobtGyO8Al#a-pIP*)sZrSB==NPb{?Q3>6koW+Y3a0MJ`M{s7mq-@}kIWXu*w-%FZCA|(;rmRGL$+L^% z1zgK@IW-I!rTcYh_BYvofwh9;^Bg#b?BB#^Q~~uIBjY0;a_mFreFmcXyjuQ{vK)4* zy$_t^_;X3WoA|38UBFex@s|qDccinx^(oM}Kmwb}=HH}@m!TRv(ohMSCBZa1P(2t? zZ8=fWZ{hS~sFsfMXK*ON6w*%*l$GpP)!q>Qpc@6z-qF1SuAd;;_wY~zm_nP+q%w<@ zu0f!HtDB=622M$k+4G!QWLwi^`l;-xA^Zf-k-O0UDuz+jFoq~ch9jBA!wi~aXK+Sce7r}Xsv{D>J zDQg}>Ju0(2NM}GTb);Ls*Bt3p@N!35NfHVm?NzFPYn>yV3XTeymf8Sb?-cezDakHC zVG~O;(j09MaOIGsr84S(+l*Jwm!%~+0_kPATt`~23`2vRRO+!_5_r&fWnJ682nw(V z>L{T_t&b~9PlhBkkR4utc}_`Rk$zr;TcFN6F8>CnIVG(d&v`FA-cOgoeJS|3{=Z_GfY>5gNc$C#dHF;H?%uZPAFyXicF|@J#u`r zz)6nNtzZJ5dU)@-UQyESp+jrkON%>R2ZGx;+C^Z3pPqe3@10*5Y3WJ~e*)5%)C8F7 zDBl2Q#LvGNlfbStnMxR4nF--ksv~%8q8U%XDe?LVE??~o6+!8(!ZeB3F+;&j$7Q<0 zPUc@$k!&Ts1vl4m+PW&^J<&`)-~vawtEwayRbHzVa4mG|)B>E7C{f=Ml|Cx!FYo!Z zn&c|cZx}W?qH@)VqE6nuz}qO&48l{tVzlN)h#ijbS8#r!+C5YjN0GZgl_4Og5x*UrVto3pf(g+nZa?SvXoTI97_W}Y z55R*R;Vp0-$7eU$tfU{+W*8<&-V5XiWKVLvM56qCI!fzs%dOcGC|`l{^Er=TvDGc!%S(P+c9*Qw?yOK!>Y0yKA2S$}QPA`CSoOUWDtCg~K{Q|DtPC;jYE0;Gt56m^i;yX3XN}_DkKu7qj zZ)W$-J%XQ^JW*=bc_!2ku$kOn0CP`|5mLM*78~?A(ax=hWzBaGF!j zPrwl&J#;+3H)dH&Z}GJ+`ofC~}f)Np#B2?5mc zIu2aH(JpNwQE_PZ!Bsb$?*@3iqpjGK5oLIHH(4A`2#wa~8I01q?Sc~&)-Jf%GWH##I$Z;c-@3ltWt5vySpD@L0#`9&lu$ z>De1CB@|ClE4AW8#wp=EryO9Wk$OIECDSo`erqM!N>C_A+}6TshIq*_q(w z6(oBs-}!n-k`s{TL#=aiOl(c)AwsIr&>5Ul!GzR(2^4c3#BQe&Ku#fgZkK37lbG~w z7MX=mJ`Z)uarqgzr<3~`aK0mrkxNS2@?q*;K|&uhQGkOTr|*L!E9xHe{P?hBBvR0O z+ER7H`5J&Z-{?)q#(+bP_LH^}RSxZCxay9!Mmv2P(b^&4`i^#4JIPYo%Iz7Gj`kyP zF8jf$MX?=-eibF zx<-?#6;;3tBXlp4P8IOE4{EyO)19KvCHexj9(aKx9WE!7^j)Z>j`RpP$SFdtxr^>h zY^|s-yJTcVgcBh)Il>L#%H>QsgIyTTj?Xc2TS-5JI_OA`fs-AdQC+E?BW)qG?nOEd z>U_od6*(n>QXSzL@HIzRRuU>9?9q*Qbg!9gv%qQP%sANwjxxOGdN;|gL^Jj1&dJQt zehlW!W9rm{VjG@M3^l8a+g(s~9BHLTxJV$Nt6@4BoP4k3uV7cJMJHf-pH+j&!3dhI-5sm?` zck1*3c#7dYKlYZ4s^p&7hr($t6v2dXYP1qI%TfN(N202sto|71qI)H&8f^+ZT27K# zg{t6sM|tQm$x_Pu`*O8nINvPrIj5lK!MXREzOPlCg1*%cKaTJMIE7%US}8e|ME6R{ zFzx_sR>I#Pt{9=WD4%R~iTfbMP%FVQ%}TH?HMl%!Dz^*Al=rsiPlL!vb`GmJP{Bv+ zy{TV@$?Ii*D`mc%sNpYPb>)8yIg06HOTUE){U}NEOU8SD1+zWcrs#z9QjhKOnJIRIT!6{i zuG`XIWWfKoR+YbN`OC9}HX(`r?~C2_?)=}`8u3|R=taqF5fjh4!Pl^Q)(w#CB*xuQ zOi^0p{R5b4KB{?-l&+1ZD$=aBe->B8`#ACrdlH9ovXMVl^3VAr`F$9BANhO$J%B;T z9C+$47wm*RE&FgH^NqYjZy!wd$(oh0ZH~_p@iO zay-nGDSNOitjnqT&|t~oulF{lu_nJtQt$y1ClBF7z?rulD^nkpPEf^1LzxkwnyiJK ze5gc>cNQc!9-DBI`3RV)oUk1F{+L4Y^8@TA`1KHps7DUJVXQ3C52A~Dig;);t1Bbx zky%feBu*cn5hX@}Ig={Pmn?t8?D_Di`So$J6HBt3sE3PRf%yuScjsuvT}@`yr%8P+*pUuL1Kk^n5f_LJe@X3o6@Ke*@+ks6tPc3OyC%;|BhOf`y0CvfVsVdqH&B zwpBRD>uS%V)-Xvu?Rhi^CgW$?hZ(H?yIgOe1cL}S`)4^)cj>kGi$rVoqC5t1@VZmBslQzMzW-Q$g-Hq1s+bz?PleHN#yg5Z(b0}<<^RJphjI0?2gKlX zsH~ngH5n#3j9Cto6vk|a$qhT7orB4H)b`_k8b4u72qq&eRm-Q-8P#E~hagJpZ9AHz z9ECCODW;FD*{WQJY0ko=K57s3qR$YQ#Tn}EfN4IdRoh>jmth`DCMvg+3(1UyVG`Y3 zjRo{K%>c*-rld&TOisA_!IR9O`U4m#OCBVE(=co^X+H+0=(NR;0!>e;sMuRZwI~+DcTl;e zHPX^!xMDYD;LDi!ai@yA749Zu7_1GR6=S4rE5h;jV`Kz>-ENtU!dHE)>P_j`ikA)_ z0TL!yoUHJJV42UtxEymZ#N6e;GIxc^Xd$`%{PBTT zG%jLU*Q86acJ$ECYR6-Hm>h|2$I0v&VD2tc$GGL@!18wpCeJYki%ir9 zmbnp3*8Msg{~(R+Y-UJ}_KbxM7((Am+7On;#lEDlU7wLKN#AIz|A5A}wU&H=i@4q| z)5hP}hKVrwn>{jdK}^}$Y;#~0>D@}E6m2xN zts|sUXIkq`4Egukh8!3+=^v@S>7-z3+ZZJqNmaGc40^YeZAgX5`ky)9QC$Az!lZ4O zf14I6G*dx)j5dbJ*eQ8kXrW;m+t&FqvI}L~jzKN{zPr#gA0|mobWvk>7BJH`_LUz= z6?_vzewZN_CS|71ELbp8VLMrUn9wd$lpz}1*10mFD^7P|$en5%Zo*{qO%G}id|#4CVpCDg!C;#mjLRq$<&^(w$64i@V>Y}l2ou`;3lHv=*2fotSwqBYi zsXZuN!hBS3+m?r6Ql_a7(8LE`(%7!mC-Y@D>HHV5WQ6rfqPQQSnB9cV3~Tm@FsV~b zGp*OycKD0Ph({<$xdpU)n8WTcS<`g7;7pC}bX#CTrkMU~8r#+?QoJXH>GuXs!$#ID zn4Br|BUPhlXs5dRhK%n?E7b?-O*+??~lW!9h!!8UK$YtekKZa14 zA!0H8XA0?Wq_OR9m^{{-F!T41I$!g^^c^NLk zE~uCZO-r)19)jF&esWLLKh|AWb? zT|{R0;HBjoX9%aHiaW?U)wZ;e*+X!+9D{3zJq|qIP@x@W4nL`}ZT;Uj z@(&J!aXV?0uWidyFsVD##~w>c(v6al!8w|+C7;41J*j`|1b)!iF447}lJyj>`w(NZ z!d!n2!^Q;MIPr~HxrE1IxfSC+ySTZij|;s~H^; ztNuN$;an4Rk{W58`k$80{E5xR67__wJqHt#=$$bMz9NU1hodB85)X*j++FFPg-T1c z_3M;K-0^_~-w9w;s$?Y)tt%W>*cLt^{YEk9XJSZsQj21*Yix`99wCs6e>5YX30m@wYRQWrh=pNLr@Rj^ZDm# zep1IDqhOEQ8T5d0nFP-RGt$gc)3@b?XPDN9p|U&M`XaIhL$LL6`ns!a7!Q-rUHJVm z34RT2zUV5#!dH5#XjZ8;B z?Qf_Mp>VA3-Z^$Jn# z8Tn0#GNt%T9`cJ<`mE+`$^-i z`;XEo=w=7#7s>j2#bip;s(7h+Ta{O3jddf|0&8yJca;voa{{ zw~%?7oIgFLkk=F8>gmYafX_Rg#Efe2Sb6}^7UohGYM z`&L3l8Orx7Sgp2GtC}iCM7YX0(o|{o64E!JDm&7H;53#q@Ya#n8{w+sC|R(glrKOf zJIYnyv5wP|;P#F*ApKrO+SW&P9BBqP!;yXp9$%zgB@f@E67Y=H-y;z*Z) z$2(plBz+QI2S;LdyzT~PI@0UlxsLQ+DgFx59);*JM>-kI(!l&p)C#!5QC5}3N;&?X z2-kW?xfh(}I87)V;o9a%)1=m9q~Ad08p>O)NCb~`6I;{WsUu26`nq#`)R9k-%}Txz z>YO9L2wrc=lZ!^Ut~m17rPHg(PeHk=>TdKtP)rRb?L9d%wvd;@BF4l-JE7Dkp@LN< z)Haw9Q9QzR*z)}v#}$m)bE-H`VQJ(-Q4y{r!})50ukhS;HBV~0f*U)Y$I9&~cwPwA z#*yZLS#GGMr@-ADX{5}WinMNYge%pNJ`Qf_NN0hERh6hwY?95Vt*23db5LU)X`lpV zN16T0Atp7^ zQb}6dkq(wiO8O?$DMz{+eBO~p#74OC9cg1ppMi7?)J;da793H@6!sE0vYMI0)us4M zq(g!cu7II@?}5uW(x1U0M;emFO4=hX!d2aoP6ww{(z|MZ0<3Rn&+#}(nnepll%ks) zX;pAqC9@{D2ROy?`jTv(h1XS3eH`fz;H*lL`XDPrOA}9cSwwy7xKk#&^$?>Sou>>_ z#Bq5)IKy!{Ku##>JgDi8bUT<;Ryr=Z$}&YAX+s$~8|i4MrH*tJII^;7sh_~vjN2o!~sDQ6nl4 zgdJ&9xum2|Lk)1G?}783mO2hjbEG9DeLm8Zio{<>It?6I#aWdMo?>{7!XvW%)Zr_5c;7Ip^qnPFDlpCr+}{M{&J`I}_Z-@p+HTdJAb*Ekdp%eISX(a(qq!ryAb#Lz09RQq=0T3963v zMX-wYD*s&YSjTNSS-lXqQ|=??I?{_^P5`}Wza%fhZJRnoS4aCMm@`A} z22LE+>k?fZ?U!{WS7}ooAi6r*pTG+^1*lJnx2s2Vb+qg1@#_I?qxytbNBckUdbDaL zoCO~?JRNrFZHimF0pZn=_5h!Aq;tUej@#S@lCc=KMH>=d9c^21u$pl@3LII}#McE< zJPWs*p#p~TodLID{;LLyYeWR8>3pJH3DY5}JHoYK!lZtW;{>?AhExU9BsKKw0t!)4!eK{J8oZ+PVeCM7}RJ-TED3dYT3&f z+`tUS>&2#$_YPi5HzUG2(l+38Gyrcidw~lar}bszyEx5GCcrw%%FSs?r~c!>*^bwp z&F3#wP9G$|I?`ca;-B7c7PzCP`DDpbJign4*y_m2wbU_DkE39gRx zIG8Z0x4`e;mYL&dPqFq$X_MO#T^;R0a32DK>ilcqWW)1jR=@Wt!S42iS4Y~igNdI? zx(VFVk=Bt*N;;z>W=DDkJgmAIeT6#_Ug1@((w8Ib4l&*lJ`Y~#2$zDV7~ZqDlSF+$ zQLn+xb+qMDm^DsOUj}D6+EXc#rL=826I~tc3h+UvStGhI!wm24Beg!H2$P|K4R`QE+ zCy+-Z>g7Yvjc$_n5nj7@C%78Umkq98!@L#UgH(oQW$wroIGqDk!B7Qrz)2~QdikR- z_7Ub)4ZVbr*IsU;^?nW2&171>C$Y`(lrBS8`pbKM>?xTm$-7=Jrb!LcJH5f(oN}at zmm1#lZZ8R~Li;t`Cf-j~?+#r64@)xdCO%378k$v~t5;FZeo!i?so^mXJjwC83!H1D zo?DMf@@l-+>TLp@()Ix_bP76EK3YvdSN4`%CEJgQAeUE->xn*u*Cfdb1{0)FHov+1 zNSHt$lLreVv(lZZ^GgUz7AT zNWXy^UsICqC)<96R7cqwJjqeckm74mehZ}n&K6$8No69}HgmNfc&<@;c5y>qqcslOu=w-5SMh% z#0+2-JDGO|Z*z({S30djdI)N_BTasi`a04Nz{D(_c?mh8q%RC)v^&zD!P6aSyFoOW zBYjmyeu8u>6k$vk;2-c(BV|1Nh}r#u+*YbD1~Z~-nKOZV2t{@rwgOkEB~j75fjsL| zgkM8cuVtcE=cg!`Bm5EE((vvPlJFT)_b{sKNM8k?ccev!Q#VICPgW~w*%8#iP~Mf` z2${X-&YKxcMp9^F^W=<_p`Bqikm>~ zGZ>R96}$aE5sZ}oZDN-a^$JIhd3)@hFZ?0TxwTUL3tkLZv6g$pGtGj2b8D~Jdu~^D zgt-N3m>Dpkk~Wk0zT1@=w3*Kp6KgY_my;@BGp7|3V>9E@KXAKp!d&OTKGFKQg{3Wg&wwgs)rh|_C zhiU&ZmzMFipV4b*GoQ`;gC;$ruuXl5D8G=+JUfZ&#jvJ650h2P)=Yne0@bmZ7uaYi zcY-~t*1_bhabAniw~%M7bGtIrr`V$1P^q8Vq6!}~WX9T>J}}v)#5vvbXUm9{s>g&%XVh| z4K#jOvi30Hn#nM^lk8MEFd1Q~uK!1Kj6$cpq*A5d$v&3a=Y-WP1;&W(XzFaDK+oHm zb^d}u6xJQXl_qTDzxN;J1Wd+@+E2Pu`yh@S%3(@vW-973-pRfjOv*Sr`|1B-Zs8{> ztUac|q`hLN+NLzlXwd!7Ht}B~%CJTCV6wydeiTgpbGGJ#|1b~c;QBRNGx0x64ov=? zS;qY1-))=H%r7=@tq-)z(b-4^wihdIYNe-FfC&eKL{peU-|^qftrT z<}d00=wI%Rs)7vJ#xuNkUnR1wGFh-AAOFh8Vhq98rVz{*+J-AIQH!KcefGkAVyeQn zb@x;$@|C|_V%urlpm^K1{0}B?iDFcFX3PHiC1L`}uiYW<6lncxG8PAcmea9pwjJ!8 zE~~Hvd(0p%e`;HfD(0ZXZ|4!=;F${B){8Tx)OJ=oJU@$5=Qp;+C7rhOoN`DezaKvQwk(j1B=MJco$LNg+b~%!V~BOlp}pqXhS4y*cl0%@KEGEmtTFGC z$G#@j+_@Aw%#aV0DV-XXNQfOa5BRR_@+X*VZ4C6C4-7LNoIigDt@Mh}evjCxk`{1+ z?IW8Su~X(rjcx068M=dtb$XME^|uX0WQj8DdyCc^WE-Z-Aq;`0izxeW+wkimDfSJQ zTnpdE^0aMfvl!+%a{@KPY{gN+(I7^I8Wn2XxlX}kO|h9W$Iv`!GhJb_Cfm$3nB-wL zvm+fUG{dHR$8j{&W?I5zO}CkslxB#{Y*d2oCE9)0r|J8AS*h zqlhtzE8tX<_bh3$kDqf@r9XeXV=lURhg4_#6);IBb^B!xM&J9FIBnE6FJ?B*ce@&E zt9L&zS8BE3=0fMoZhqA13O!` zQ`UKZxp@s$XIl4~%3n36?>k@?+j=U+)7RbnUet=H8(b=Bg=f_bsrfC<&8zL-lJ(Dj zt4ws-7jKd`AE8regSXtgqpH(>3|y`ig*yI2uc;q4Qu~;{wD&Czw;9ndz;#+g$B#Nl zS$ExbyLLMbo9beRU}e?sEJsS-L3S)DDDLmjZC=9tsM>lD1@G8*_;IYgc&@r+#CH_) zS(%N>`=^@^u4#*RjK{;NqFEcd=1br;T>v+mg@2E?+V860M`}eNACCUsAL;!}5whhd zebaO)!CCw8eFaS3YM%2pTE;E<`^*Sf3%;o(Y?@K_5E-9*k005x<`C)Md>^4SKg?UA zFBfE+VV_5$zw*b(h;}6+J>M3TRfi~V1=&wBcUQTpQs*vL_rg?ahIf<07@n2>{PBLp zZ_z%+ZApG%Ro8AkyFZYC>gyD|QGG#ci zlKUyf-{e)?o7Aa%*Q1!=6C}AaJz77S4|1A@7z^xU{0@-`KahMCzv;Fa;}zgwV=OGc zV5Brff8@^;sm&i>Lwu%hR+H*@qjnr-}k-eK~b#$AitbX^(GH$fS3 zoIDH3Y*fBN+`fpKXzJMpT-|t`0?adsw~|5BWTPm+jf^@*(Gqyx-aKjG>tnDI_GMU>+UeJ1^OZm%RwGUr|=nvs0%NQpE#~Y(h7GY$rY*Ct5 zDC!h#@J=BoE(LoKGInUFGc6>YPm^ie1giAh{GL1noB~|$6#8p$mhl^qlL)=N%JcPM zlj&mM3T^b9E-xL=Fl?&Is56MtD&Rs}d@ZPU_N$WJi?*5qK5EkL1#UCt`V=uMr+QJY zzk#QWpgH%ua!t-PWcFE{u3XKXVR4_M18QUwgz8AzN?z7knJxdECF>fJcn;N~H9P__ zs-kPTHD5=PW4XgS1Do#xMD;rQxr2Au$2|X#*~;5*z?OCN-OPw}>Y<5de*yL(b+%d~ z_X+ok4PD?-ixTEYw~#L{(&J6#q%u!vsm`mbA1{&M+1OI5 zUSfBQ>n)`te^HFOgyQ8^N|E?Gt-1r4HC=M1#+IC2Gm_0ek0Ee(5O+S~W5z@1o|5dx z3BG$ClD7G{C@RA-x!cQZ{&-(&?NLDhPoABv#yu}|@CFy(#aW`3`#BabPn>@Woz#-|NT*XP*-^sR@H0O`^jkYR}Ef=Z4VPI&A z9M9+VxL8@KL_K7`63uI;L?`j>I|$_UTP^ZSlRpr3k^cPgWw!TlJ5jye9Pj-O%(rO= zaY0*3_9)S#a#@Mq>_B|VmK-HI0w&b|L79T`*cF}KME>~R>PU8<8BclOkX*ikC?pq@ zh;{8(5iRaS7HidB2qh)usz1_q93tuCyM%|$KVH1*f2iQwbaKW#v*kp=ADjcVnUXt7 zivGz;@b)_y%k%9YgfGFQkwovPvB?~`xD@6(Oa04-am{sh|ERJ{A6Vu-vRb*FharEC z?RE!D-kZ+m7ZJPlft9WyOy*mT`8ji7nODH@QEOeO*fZw9GMCz;Cis@W_=(?D!8h!j zC(9RqaU*3jhLkYF?=X3t=l6?Eh~2A@{o+IlOwyNk-&a=~I$gudI{2twwlWVU>#nj; z#6ERZc=8%$X|3QsyDZPiF}%cngdr--@B>V?MDx0x->(yV!o}yi@P%5jRR>JI}o^X*)fVST#0AQWwNT`fnJR-zeHU=9c}wmc1;gHwJAY7; z{^pTXsPdhPpQHlZLJQIC9^y6;@@}$!>Y9Xui07~8fk1>d%~m`AN=~h zaEs1)8!EYANwkN{+l-c1x&`g)x34}mqKB-YI#IDQ;ID8nk-@GDHt9R2oPu>2{7?Z)T< zlRwwIn>R~i+xov#l2ss3E_fA7a@eV@+-U~&>*nq3UK-o!rom*)HP)>f+txo}qKq}J z))|Fu>*Fw)bJ(Y_d2GDjU@N-rJR_?jD3R+d>B7cp5=_o)wKYd@poX^7`7kLP&CVNJ zG`5@Q%vnkC2H1iB9IExE?;2}ttNOzvZ_vFH_)ufpdf}Yp;UoCKFQ`7XE#nmPx!FnO z1C4F#x4%exU!a`7z^|x2vn@4bqK_UOh#?eqvV8+4m`+)!v7KxWOx_#X>i3;j*tRy1Sp{+WG={V=!!nrs1*R-VHMWx#mA^^mZ*hTS zVjG^3+L8GC07EFua0Di~quCmx*hPiysMkamsbo)M$PL@YVhK!sC$lw%`;x+TvfeNm z?akI08#T7AG19CMPFv@bEbKJ+3`|;gU6#OdjqPNI@?}LKIV<%sS6yTZ10HB3l4bF~vZsbJWpQPDr>PP0u%u&>5;(hp!VoJ~A#Xlz?s z$)$TJ&zDyiHlNxTJGHOUj-SYM_Wp?7uCZs*c3mIXW|+{6X4|%=Hx#zL zPL;()sAZ|Y2~51_c-QMPm|XL2t|#|zxltrgF3|rbLyNat@2bx8K3UN~IexNqEsC4; zTL^gD_O9S0Oy2jB&!!-OLH{UhThIO@IV2AjzD;Ih?Q&ItNj3X+_&R{|o|TOLTndcR z*jCPxPQ}Q2mvZr(ZE(B1uDoaTwjKT^8r#-qWTQ&<28P@*wqb*kj@G+&#GcUDw%&%x zlK#cHOs?$)hMfi!eM3aUEysn(E4K|*TB^ctqz>r(t zP7xhJ4t2SU!iFA!q2|Eq(#;W4EILpw?l&wsVb`P4Uau?p%su>SE>Sl4nmMo%-iFC> zUeNC@i=w&C*yp3M!*=#)QP9h;*95l63C>Y4?3(r%OzI1gpAwr;B2q!S*khzw30xk) z;EJ+GS*1d>k979aXUi09Ya7eTN2Kz0x%z?IH2u#Kxvopi%8r#-S zV6xb`TkZI9Tw~knmRcoo+P@^7_>Da^Hp1k6qffMP@v#cq))!zhzG3T}kdu<>mVgq~#4?{AqEvdaZ=4xzu+8c>{f8+kx0UO`WsxqiH{AFFCasI)Uf~udkaZ(D z!>C}3c!h1@0+|(uhm9Cg`r6qah6z1py8dsCZEH~eCYirU0{+61^^w}82yYWHLojI@?DMA*JE?76j*a*85kqQ&_wH`~s=^ER;w-zRpYR1HO8rymP9+KqJ zjEPVpc_-MGHZVyW_0MhJGhkPl`E0QfSfZgV{Du#GC>Q0*QK67+c@`$CtV$N#tD$X7 zEYFxLugm3cud!_%C8Nqv*;N?w!?xx)tr&Cq_eNI0h15>tHefZmgg$l%Oj_6`7E55b zC9SsS_zD;@n_hT+sURcD2Fk_OtcW=*gW)i|F0c0ISOCm*_UAaJvAr=w8M#$9P@bnK ziSgvT_Fks=leRs!5|Kpb>>UgYF`J2b8+frZo{TG0rXFG2b4-OvGbQ~2m^VuDM)LWs zvI%&fSA}ARsjtJN81=(dDY4m{!}|s}TinlZkL{3xVf%9wm;E^N-CvDqX7=XrJ_3%C z{)vHvz-$G>w!ZkPnxup%tE)OS3EQBfE=-D~lTGXx1;e)W_!uTv5=T>p(lvl#dvr{Y z%ON`UG=``!L+hIOF`IYzS7~fFW^s8ekxA3G7XHG@m=2T8_8gacaZRwn99Wa)LM_>u z$Yp)aBxF3Azk2~VL~i3TumVGCFtaZ>4R1&b48h6|(Bu_t!y1@mvm1x!w+H0y z@|=~2*P|z+ZPhRJdFYaXDFmntj%U3QV#My(G3GhVPm(wl~;@cG5u^er`tJ zerg+@m6w&_Rx*vm{gb`_EsFxtzpbI8cpRE{`eeS zVx>TN@0S?z%{Cm-ZB#f=+i-a60hy#~=Z>keM(I|=q-e%-u#McP6e#EUtBu50<`+yk zXodm?QC3c*SxQI3rVUr@@z!R$}&k1C^?`((qmZCTr+Ukhm%oriC<7e^>>< zAMg8ZmA$#zF5?I=WCCbm*`qXlt!(FYWzA75nP$Hh@JmwFK&0nZJ84)oP|n-E zJvP0IhHoX1O6h$)j(|g&_If+em}c9IhH{}QZbwRVHL_lWAypYlOW)f5H195s^Yn8- zUt~wGE3%$>XS0w_D5`F-aub7Y* zRNv8+P4V)8R_h*>&Na|+cZlTxit!x;rZ~dr&R!n-X<>Ugsf4e>xTJGUgj;}vjnMOV zXX#jzo~bLNYN8t1g_0Z9JHQOb-FINtTaeftDehVb8+BE&R=XPoT;K@b2L}v&47ikc zX8E#GL^m%_hP5~unC*y%gUc9tH*k|fSL?1CU#n*UcR2JP;0l`NIoX;d%Fv;Qmjwx0 zI02aF2v>ru8~QfzyhC?>gxPKAcY)U&`YO1Nar=<$uZ>&jNrP*~n-8Rx^{Ds5(&Rq+ zalG{Bk9T!1FUu{O-^aN72}mi>cw-**vWP*k?m=={={CTynoH>l_f|ty>mCELd`9V} z$;A87eFihY=py@gS?i#6y@10EyB0XWu!SGSzxwi-G!xgU39hjdRa=Kef0rm8QoOiVZ(k3uw}99w6UA(wRTLIT!-<%){$F;9Mo*OS8LpZz$)1fLgP45}mhxs+aW$%7JePuyH;8 z-7?RTROwicyPZei+8fRr-CvD)Eqxf+2b$No-RW|y9vOZDHL0F{L(Q8HE+QwD(`t_s zpd5NIm`@BTdKqw`L;nQk+d_&?c*5&iUQd#q4 z2I@<4R%}AVKq_e1Il$`mP2(N|XBw}Sq<4a$=yh1z#PMV3mgy22ROY2hj>|?pv8@V)9ah|eg=Hl&>sO8IP_^S zpP*4WCOkz9aOhs(d`-LO$dV?Mcoz(xDpA4$Ln%&u^D<*YDcY0~HA-sp$GaR$K%$!> zIsx3~RIBhX6(khRa=|T1_yi2AIFxV}@QNcm0%m!J5|)?FJpJ(wAFk%E7Jde-(7?3l zIWQNYN*E_6m9XsyHBGhf1z@)Zrs+Nb4>t5AV9y5gi}({FMyg4vwNC*1G%zhE;0#0W z0uF0nTCPAEt!U^*z_AYfEO>#TR|6+G^e^D0hAuyfZg6>w|X~;YeAdgv($K8sU$?94?yFQl02$^eId=L2GH=B2ZqETLdE9oS9Us z78*^|bd*miZ0KFUKtt0s|9~T;c}vu_pJmoH)P4yLO3Xqs@)T z`xLmcp?3j?8Cvq$8OL46@H55`${Olz0V05$_*G7S0H-?zXf;+xU_}csv!SG1yTBC= zeHA>{(5)xXJC56x;4I_TFI!sUR$f$LRi`hVP6ss9pZSact~cyv;I@W3)OkB+s35Jy zKLgJ@^s^IHd{wlHs%`L^_L7RKT6hFly^*NT!bZHTt~oS&7Fef|8Sh0Vsko}?+Q9aP zW#-10AEuqI0>?XP?|VguRA{bOW-H-*7^0~XegRzJ2v30tr%G5@ z65AncI$4KPB^(9Z(a4OPrC`FTq7MOgvn#ENJQ1(zn5yX7z@v@K{OJoOrYg6uN%Qu& z-2g*ORl>8tD~-&Ej-8@osuH%A{Yp3nhIp!k?*pqhHbT!-9Z!|;G3nm{;d&V2sS^69 zFw7fEy{gx6t+pi0<%CavCBq8ibUKmw@Jb(JMbcVLzdpi0*{lSyE7?o26`!X@1! zQac6F(b+nHrXcG7I#uFpz$z%@feE0{?tZdG3A5+u0IG!Uxm2>Te)-uu1xx@{!s61o zGs4&B=>V#PG4lx|PCZ6}380GJ13cVV$3@XGRFSU$k2+e{0v$t@(-&k^7o7eHLjYC6 zQEyOvN4OJA09C^B;_iyD&6_%QD&cUTi!TiJgl63>egOLIjY|so27AF%%tf zT`-|jdF>~O-3WA{ZiE?Pr&1;^WI8l4-Texf*s17WfGJH(>os4b1E`|k0QPj$Tfuoo zeF4~~iQclnTjFhfd9T#&f3Y;} z!H<`l?_9mXjd_44-$FqgDF0%rZ7J3=lzLU>4(=$@2!)4Qr-s*v8`QXNro<{m8*FuM8p zmDXSg$;6&$@_+*mGEg*4I z`PvCws#zA|kLr!?#pP-qYu#ZWAyfIfPmW<^BMWyQG}AuNzt$*$ZwIgl->_Cc>wF*T z4ps$gC9{=q5{ygSk0IO%tYC!hD7l4|*qitmqJ!{UdOgBP_XE&2BC1BKwtaCQPys?gvhC zgn?`optW#<^zVo83=F^XRb4u*A+R{Y^ z(7Hx4F_mli=U~#BN!}+c(q9kWZ9IBzd@L7J3203vx0IC;9!KQ;f>@a>$z!N6FjcdZ^`z2G`clnt zt#fTATsY3gONRkCt0<%RCkh*d`uE2 zEZtr+knG?4M$IKHthJNKXoQ~iJ0*S)9e1xZA4Eas?IJoRt341)nVlr24+@0TBGy%d z0uL36*v-^nM+dho`6k*gQG)}K1zQn(HvOj9Ck4$p}){UGG;f6y9wJ%?V+^jJPbMPg>lz#_@E3PN|MlboV>#P`qa#-;$!nl^=M4CSmDDAKJy>s|)FFh}XhH=yLe;9JY8ZttfVTgP35P2yF|E9=+ z$^Vcu>+0wj$s87l^d}zHjHMYbACWkAJ%-%HcH)aLA(?e081f!bSB8>3jMZBMG`4kb z!bCaW$T)aJQioIRs2`|Zn74;y-f&v#B@8aHldu0lcB>>;u;k6REmg%mf;ltrN2Vi7 z9UoChqZVm-R4;7GuZ2lkslR{i`$JjZlc+RSd^S3%uwAkV@|JS31w(F_;kIIy zNtR01;wOdeWD}*}D2Cft7(yy2{X41(ND~ZkZGUDQzGE9+gUNn}sw^y7Hn`6mSm}zM z!qZ~ik^YA@wiBnz3B39?V#t3>i-Lb?Y>R4~rc)NNYcE~*g2uLW>uE`Qny!mJLnFUw zTYAAnEi_%eN@Lr4>x>*#>AIX{2rjTKOJGv7OqUf?>u9@(Zc_Ut!2+SDd@eUQiN7(?D&0rI0J+;xjZsrpC7D zz_0TBXr@ES-za!k@@}%4@`_rJ**m88^piV}8O=qaV2rK1;P$POC;c`#Ya zosO<>K_6HpeH1 zaAe0XO6qgSN?pSH07;z}J>JD0gL2*bVC z%+M^Bq7)-UA!FY&%9?G2DBD;HA)^S{#`>j{k%VlcRLV9=k;o{@ZX{8*5uuR(`z-3* z|Ih2?HJ|hOe9rf*&v~BvtZci=`uZOnkkyl@k9mb5u$pz2yu$9@6va=e$|G^U2X(NX zKJgL`Y-yd9u5yrVV-AQawdvE?JDKFC%y{>T-XRG=F zc(nEAf%DhbXA5|g^~B4Bef2traP@VM_;!QmSZj$Jw6MNDCnAGJVf+B1oHbqnud>G4 ze{p1IW4hIJv%Vf_L@bk};a9UW03CIA6z`y49Jl@jf_U zM?*7E31f)*$}JjQ-@MmuBlxPVzzy&S!*gY3t+Ece&0(Fjt_9yiWz?9S2WMLA15)=D ztk3{2VJO^%jmGzlBG^M`&1?^h_R!vkv`T{uFT0h7qQRA@w4%e`OnJiWF`#cM+cQiP~@ZPWTOD5j%BH=#H+!lS6 z!`!EVbcSjb6)f~>pse>;xFo%btBlXbSy=7r1Ke!`t^&Wu_kcP7K5VMYn1FMak`3i6SeVYTL7Rh{Hq@QWN#%ssu^xqLYbf7+MSPxN zbPaFN4hN<-)X!3SKPn2Y1zh2RaQX5N!gl7m;jY%b5dY_8-aE+XA8wI=b~r-yXsPsF@pG_QC8sW*uu>3t^Q ztj9k2441!tai1ses{59d5poG3upS{ju7H!{_u_K@WDb=}`+a=u%+2x?Omg7@`d+q* zlTE_O_&H2o0TaqRt5GOG@GFth`3H`RnwW%>VT>G_OcgdDWEOX;a3LU3Z%~B_L7yk- zcee^%VRFw$%D6WIae)OU;Y8dUl+k4L7b?M45p+Y=lXY)U))<7udtKq95^`2$xrCDO zr(4#25;rAKwsenZvc$Vt1Sb2KvZ`Bcd1!ZY@nG!Xf62SI+D6CtJf7o`(&G@f{&hA9 zr>+ZRE8%1IAmrU~%e@Jcyi*_D@n~}FREDodEFE#nHE~NaLf~tJlz&{|daS%YmG)FB zNqhcwmF}{UEHMiZvVV4kJuta7C3O}bmx?TEz+W;S04h=XE_t{1ZDb_*1CtSwYP$CwZY(WXGdRe+f|6L-RqiW8kRFovRv?}m zHVS00UC)q*`4hcMDG$5eJ22^T^36a(>|sXdb{mr-(_ca^d-m@K|$?xUT%rAP*KpC+HFC_ACj z`?}uSe87V!u{G|eIUxo2Q_S6gM6r?=g4N z{J6aAoJFP2qhwTel{mRg7OowXp3Nzn2^E-O5;mLj%bP053$w{`4JxUUn}sip;EnD1 z05dzJ_<1ntl?&+3j?OU&r|S71WGqb8>na$McbL?hL(oqV5`AuIS7B0p1!Pg7m^gpU ziaOy0eMwf6FXjU!RB-bhgvmC`MMS}eSW3(B>6xkQ44yCvCq{p%GnWaz1R?u=H^zP# zPg%vN2|iDMr!ltB!*|KM6TCJ|QlSE}jqrh&Ou`BO0q;AWOHZCg$qQLSN=k4ZxmJgQ>AbQ=O)KVsRb+}n_w~O8e>aOt<`LaM(QCe5ti5f{K2%?n8B1%bHe^0jrssZ3{>MAP$g z6bz}%4w&2)c1;PZqZ3Zv>M%*VA%QdnL-H=IBS~-5$5&DEK6h`nts}kPrim{;!K^v$ z?$VY$Aq!QOBPfaa+$I)~ePr?1sY^?}uFy{+-XT^dLiQ8x;Owm{PrMT-Q#yY#ga4?j zRE5bLp%^vkMZb>G-}hhg?xYu4p(5{ALYkZZX0qfG*ZT;XY{ixBf>bA;Nia0DhQS&pyf zELP(d3cKpc7P9JH#_tMBVt=>Q)#aorX>m)|xPh(^A<;_^TDM{$8RiNzr4>TVZG?=M zT%qTaOpYqDWeHVSsj;hGcv3!J!exX`t(hrRU1e))$wP^WNTCjoyGk>djM_4NEuHkS z#;#gQI=@E^+qPlB(-u zZ7?aaFN>-1kAfkqL3Me4Db;xXX}Y$t+vy^U5Tf@XM1AJ2AK`7)QP|>^e7&=tf+6B? zDfB+wyAmNPWTiNym{F3uPR-tS3cFRT1H+g7sAAw{1w*R1uAQuTpQZO#l+=1|wqSd; zZ__P%O2Lq9lO=W;oA4Hd<@UrCYBfa2Z0C06_0Do|1@(BS3!T!+RXR)I56F^%kUHHJwsw(*ACTp$QeJnJ zvNDn^{tjI!rMp}F1X+s^^BIDttt*^?;j>&Ri`c^AyD99dt)-0{)pQ z53XYI=+lFUAqQSR^pI4Pm`2YsL&mset%FH!K5sFF_F|Mng06zwuWRTAttA6gu2*}remv<4U&17}F^heb=M;9;1#*aN{#+$= za)r`TbPY3LMjvKk7gxC6M;fnT2Gs4#z>ISnJx)fE#h-@|HQp6E$vPEl@$(e&hAW(U zUd|FL@YD-*?NnFU_=3c*rEBx`qdiSsr4dX{bG_30*K6#maWZ)=MfL8l8tMwm`b)M7 zSYiMTdfHXS!elj))c4r5HfZds=U|e?YSmwEpu(=&L3(7VUP8zWIjr0^Q08aROV?0R zJGfcylRadKd3F%>2wA=sz@$Gb1DCSK?$Oxo_M0$CW(}*J1`JuMo|i%Eh`AIYFGM&3 zlg?MV-e=Af9jve$vyL1gTl5fwoD8>)i(zuj%6weGka`BC$%o`>K7=mr=;j&;ldf~c ze4=1Tt_v_+caC31>&gsO*v;AoCdceSrYjhd^{b(h_z`=MzfjV8x(z5lj5_E}iSD6b zNZaSacuXVqDHswnLbiRxT&?{g12@yHNk6%c5XeM`3R!mcz9^N}Q;U2rF;{!JwWtD< zD0M&PByvw6@2$JQuZg*`ay=*KcfKS!Wb@rb$$V3?*7J-|rQ!6>aLGAZjPD11%sGtN z(w#ryU%~S+SOWR31EXG&jKN%<8bNrIlQT+}F#2Xd<=S9hfHQ~d%W>gnlO1cxH`HL7%C-l0X{-nKLtr^Wb5CUD zZB(G=6qZQq+yG9u6}SmzkX2M}zuT&;=~KBxWUXI-Ga8%Ahd04(t+kr8{sQZOX>6a? z`aU?Dx_-z83hduV4~(2pzE0D*Ze)FPz`2dhsOEsj+mQFjpf9mDn?Z@z`a1ZmEqyC^ zq2awZX3X18>#JmNg~?i90LL`Zw|e{D2d}r*pED#wdE;hMJL~NTuGz%YU=Db<_2$f! z#INucp5^l#wBF|6M< z-otQ_G+cQDb7*A~$(%`N0Rx8SVX?hm(+6KeC0eI_`mvo~(0pG$po$?oOanL&3%Od4m3N@cu_Yf-|FtVxnm{`3xxin~< z)1~q*oZmxb*_b8XqRH0U4ZO+l-uK^<>|JUA;C5Q?6APK3O--v_2Jg4tPZmnbw|I-c zt!JLTxCtEA)U@hL@Ofhmi;)xGQiIO#u*No)hOx9LweFdCrqkaai#$eDfVVRP#hnglW*0WCcYJc!q zYh3|uX+n5^T`Y;;;Z1m##np!G2+rTk)LqvxNBECkAnlv%`FW66)dcV=au)1l=T&;7;9Y* zPHwJWr|kP3T+Uh(rScD0+ke2qYOPbj!>siSaBahTZ+sxxKhRSTuViJl-e|9A-+EsJ_qX0Pt9Va7-e2KHFq_qma5ar-VZwF*k2h8x z85wkd+8%*YvstY{_pf0Bv@kP!E_k7}=9fFlI&3YgtF`_DZrH-?-P&fcx*FcQJxelv zqykmf`8?Uy`!2X`3&~r@wgcR4qdqPPKN0oy4_RBS^LubF8#V4D)>donD{GZC3o6fA zZ-6J+X7yUnGGlme&U#5cNCjd(W<_ac+La2>AYsRS!s2SJyTCWB zwZ^BcG|eRKem28TCG`+dFF>)0=-zsC19D5VX)OUav{9qv(jlUD`i#}pTHghy^2#?} z!0jvgx!xdD2oCJV9>)3=R9|Z?vXSk{MjZtnW_a(}jS_W)8kE_@@@ltk3mpmMGCYjACAy$L=K&sriUl<~Q2`rR5Ag8Q~I z9s4~ve{)^cut*tn9BZ9zEU$)3!TQQp!kzfxz+1NP z&%o7;(|hp?$v8pt%YLc1Y28&F!R4Mbs8xw)}_ukuZR z$h5vK;PX$K4f`6HwL?#;O49vjtbKN{vRZ2}GLgF;NT4v*3=_ zy9Ug9q$l6syCqY38|`6rwcZSH-`1vC2f^hG&yyvUPg8{%-?6${>p$R3-m|DStHyho zUDi5XwkqpwsHWE1KZjMuT0aJ}9_bqVlOrj=QiFl}*g~!MI5;ZBjDPv>SzK+{G&%7r zVRNBISZm4;Oq&!_g9YI6Htf$oNZJ{~KDD3K)q1}GkHFi6*?54()kbYAcg_%XJJfRP zto9=~#f-r~@Om3{`HzxumZ(3&v7YI!z4s@E*?QZ7ciXVjCE+&}7V4n2{te!rVz$-F z2U%UMwU?|_)&)>`*7_azmbKSLrH8P_wW ztUP``kQlKAOKzFM`mvD*j*v+9yC;pW!ekeBnR|}1Jo848;=DNkm_1gX9*C|F&I!84 zE-=Y_#-y0~U~1_LoYtAIm}uAYF-*FwyU5x79AIimSG;&sreEN+TESyXtNUH$A(-5e zrr?&~6*vTJerFqqN5}9T1E$ZFj6XPA z^v_9|ip=|M*8aiUYHIyVr9yh^&AaOv9C^A{<9=sVN=-)mt*wsYv3$d zytP<@FYy$^Yph|-W$zWLIut6+Mp^)76IW5gw}G=|?^SNDJSC}DiCOd)y{YOl9|vdH zTs^?7jfxMOD3`7>EUTc>Rgv5X*E%**-kDIWukSm^+%l4Wjq`Vx!E@S}^H0IkrvCfM z|CkiLMx{DJEwu6oa2M*lpHqFK5WSzAmdtC^=Kw-qEyVk-f_XWljve@wot??dtJXflyrZnGpmth$C^#y{lrRt6#f0#F{+nd{O%0C2<(cfh{J(S5Xp5)_ z&b2joN)m1ob|lnPD=!9fphwrod%yWzrru;rIRCq3@z)o1jw3RgwVGU4S=&QxdPvf-eSnMoRd|z$b9mg=7xgK^=Wiv*E<_XeXS>(yeBz6zwP*~+EJv^z|Op|XxYK0!$~ zO2kHRE+=|VPA?JXJ$`X+e6UQIcW%94lZg8-v7M|h_}}*!!iLOU9V{EW0Y2*s^VEvD zNBB48JX28W6%EGKtd^$}&gHF`_muG8Mo(Kz;seMP~uHw-j z@i0n_%S@$^+`V8tZQVOzM#H4+(7iQw{{N_1FgZ`V{+%${Ax+5l2jzO*)wm=~a)eux zwlJB8+&H6PGVXp2IjjQh@Jg+nB?`#E6~!WZEdL+>UYNX)2-p6HiMvAGLOcy&q7J*| zz5*awrA2%B zfn~u~a-!DZY zDY+p8Ge^45FTopurxc3}9}LsiDSi>@92;iO-;x3bUYT)Euxv~fPlPAq zifeiXCefID6T!J>^hZ31?%R4U=|P z{?a5I`2tKb^2u+D$HkWQ>VzXd4U=<%muwF$9v7Hv5{|sjE0u}_xyGF@!jt}sTifKf5+Qtk`*0{_s2#m>}KmO=g3xi z7D8r7)wjYV>JnHMxuUzSd$FMZ^1tNWSsEuDicz1Z3lKP@*w6?{5;0JXb0gr^AeWLb9+p z191%{D%VvWmVE>ajJSsegmmcUdnD3Nmhi&#=&x>;CQ`@GCOZQmGo%jtU@{~&z>QhH zBEaKruIjRaT!DcIo}XP|aS_Q?1^uX$6Rr|2!2o^ucu|HTB-ZmVIj!tg`KC!Yo%9t< z?p^s$lW^pOs0dFMvf3*B?M%XvC&&d=>JEg=b8dC=6{CWA_RZQ&O~T1HQ91>g3ONYL zAye8fGZ11M7iS}Ax3g$kt!t!+Y=$9r5knz zOuAil0^gW~lkc`)-YLPd(kMWELMl2DCi9B^OhoJ_8oSLu0h4vNI>mxI;e@Rtb)%UT z6A+?)bMx(hNtV`uU}ABFLVDl{^8Mkg`s|q^MbODLT&YkI@OI{`KTD6)+7U?+>>s3*?dtxKri0 z>frBX$0Iu{z-doFbiL3HSp-YDhN+WhO%GQzelBd#TCq5><+o@L7%B*36Ve zCD}fAA>@P%1y6(hSd#7YkvNp!-7Gz%P$`Cd9ztHo7<>hjC3h}!=gU!G?pSjSdIg;L z{(r}y;fe7ySQgLXq)02-N38IdVK_f9OZ`|^udQ81I#V5lB!vG2EN6~lB4p3K9L3a- z%lrxNlMul>&-9Uw0BdWHcSnMBi{n7+I#g3lg_lo^;01O%SSMgx!%hKiGVCTG?~dX? zDf|L3+py(IM{uYHtKSq_K*q&$AjJ##;wk$bv=Ju9N#JgsgI~pk6R6(+sluP|Ps^xQ z>ZoC5BY44&u0eI+Ld}LfFWZ!FAJ9O?%rU;(Gxm+xXrFo;ALM zz}?2jXDgJi%YCXaUG7p~p79+3{$hOLGPpFpn)fSF`}zTI7~dk`EyMnxp{{jg`3T;? zJGcyo&2@nEp}J{=E2IO;aBTRKQrn8UG9O;30)uUwb%6m(4*~P3VHIGha#;E(xTc}~ z58$wLQ!w8R#vL|B)|I8Qt6@@%@fa}KR3NMa0saJ`9JOE5@r!P)$XI!01tTlXmm_Olf*P`Q%={MkenAFDj zNNu%ts=S=ax~z=bVUmooa2;lvZC?X$ZDSlM<0@nP2&SnqUI6BqV#CWmp%zdbv6B=_ z!Z-saRWtfWUXuBdm!1?%^nIlyK2JKI6A=f&87K5lx9*oT@9t8(b?LUxT&5&UddNwm zS};kgT+d+TS?V&gV4|eWwqglm*8r10aK$4qX(0i;$=J8Lp5Xs56=3qVxSm=t$)CGS zdzjRXcbQ7VdXE?;o8KtbkJkmad4vV>4fH^J$u1a7$Per$Tw90LhWi_;3_562;BF(nAoU(aoC1?=#MQuq zTJ-L1C~F?2?bo1E%1iRwOp)@9=-2X+yPop}t--wWwgxlz1*ubm%CQ>rCp;4&R}0~r zftdy#1V$P72hbxuYSO}}#(J_7B)lRp(Zp*kU277rw~XUY_;>_9&!Oz^0`s)To84G0 z)}*bcpfZe_zlq)sRj>-cY{NDKrfL}0R~A1;z}I28YNrA&1!gIjs4}M;@>gJ3sRrf%GfjAPq9s`dkK~;6+qIZv zmz&C#T1*j6pw(g~7HUS9bk|R%`r^U4-ONMoNz$q|$8?RMJR$dAw};^}ih9y$pn@S{ zx_m}1e+EKMWQ23f`leh`;j$3&Hn?YCvtiP7xWGXLL&E*uOuE$JkTan>B9qAyR##T@r*!KlX=4Fb?*x++p%``eKT8%*3k3bo|4ZII{2wZ@$&Ar! z2-%!#`tRjc)1);*U=c!Qepgueq`aOSEECwQvT$DSzbxN8DVtDAA3@0qsmvMWtFJ2WeT-s%H8dyswUyYZzo;r(bgphS{(ZU|dYGt~%jt{B>cHcj@<*gbxNMnx%HNf+0)oDVXe^3dn$# ztl`n!bi#?#2!?B>>N(bN3WntUw43C#Vne)yk~GF`aA^sDl9qPrPWO&lyVLwd6b)nXClv|_#=8SRHI$RFQrpB z-+UiJ-f&l_0>dX|vy(ZQ)IeibZ7tJOwq6KXOL~#XaQj6l%B; zCHpy7+1o>s+Ax`NRm9g_2zjdwqgnS^$_?#b*{6ip5E7qo z1J00$r|8*t5po`Pg|*Mh6HjsCbUR8mKa>C49sU55R7IX_O{>mm?5cl0D<6>0pVX7V zf7Dfa%L!G~B7~gkuJA)oDe*KNaaLtvdHJuX>pi6&Co>IZs#r>yTR^Ap7GNUJzDAHRe9Qi)ENm>482)P_A{FkqfRB4Bhj*zzB zeVgWN>7#`25mKtSN0x=;ZG_lX%pXsND@=yTo?KYJ1vd6;lW!Q{;C64@C{ciE1f$s6pav)?sbJ8G7}+Y2txYnt}sT$NRZTy zY%q&7cGZpj<)4mhXuDA|Lh}6tlT=pci~dVvH(zi7V6OzkSr6;1{)mAJyIIT1 z>SyShY6v+Y+3G55j482)#%{JTFuA(2{^<&aRCa;1?o1Oms$9j~TtC5NnK+Kr>2st6yTES!$G}+QLcC$^Bu3eb*ix4tHvaN(kWuINI0n_@1 zNjTHGu6#qjz|=H0-u>=Vxj&@M>&n6s!3vdh&=sn~q#P=scfNrkCgB8JFoiJ40)B$!&0~#4SRkl;kLWs7QtlDuw&!--S>k@ zIQ0mVk>vANA4X{h+Md#0ouUpPWWVd?D7e`5{AG!HNiatwG-yvi!bcH*kr17&E#G%-?_pGn8a@t zqdK>_>D*Wj*$jENb6d$7RpbPOq%1f8r(-0(CqHa2qGT^|l>`n?6Ib7j%*M9eAM|(l zm%JN!vP|wtD|aDezwhP`m#qk~tvF!HTj2^bU{W6AYuW13`EHYNx-Fkn>_x!(>1;Js z-5tv)>46Z~jF7(E75++>`Mv12TH`3{T~`?{d&m;|6+-GNS18PSlCje6H#?hzQ->um zImmjydBr3gxsD9#%~t>VYiv{@VZVXl9_rp|4>umT(k-)x93fZiGK9Pk;S5a5tGouN zBR^#-P0$Iav_UYrzeq+O_H*xP?Dpml6XccW*xi<7N0l?&RXW3D$&5b1gjlr$%+j0S z-C^4blQPPb>Gw_438%~^lF)~`jz-81$+r?F=M|gp50h~6Rh22^^Y@*EDkI^+t|k>oT{#vF6l1>%al5Sk`q#1 z(HTsJ|937ZP7b}m5A=$1Tm9)OrTg*ge+I_H<>s>c+u&S{OX`d2zP%8`I_k47-rN}y z-=7l;m*GZql&Ej`9$f~#Bc=OuD##B^H_q^;;CnUAwb*_AIfe8gOa)^+1DtA&i8Ixe zL6x6Ri}e_QaTW~U$yE`*1unP7qu`c?z5rZh>F`;3j*>Nz?`Z<(n3#ODY!ESf!DJfW zi@@_8=jG#~C}@?jy~Q_tv8{pGU~JofQJwU;m+<}I?S?)Be8|$b!F;A$_vjohr*$&d zf-8ZKny}5J&0tkJ%vr;Xl?95K33F95;Y)zq-CHNTVkv2o<&>g_UXXKs1!T2zb zv>L)3cuWTKC%olcbuCbvx&sdyQ}|FYU#cZ9Pe_Cf#rQT1FQZY>J_2TRHrG0Lf@>T4 z7;s@{`ED}Tt>&rgf!f>-c*B}Az-`-?3Ec+jw?fSKJT zeIv7Efx5FoH>#(M8&1^sVe*XcH((&uT-z=Grnn%pwm<|EUrJ7k(VIj@cbl7mIG7{t0Fg1-a_%_fM`y9BTp+5!IwshD# zEJlWI0Zg{^Ti`B+J_l@Q=|>i++bVQTM*^FsnjT#U=BvM|0b7CZS@%A0x}i@2ms__l zQ{7vk-1Pt8QB=7W%zR^P1&r(=PflR?fbSXKYzZ5UZz)Wc@qG&H+rt!p7`(~Qw}IPx zn2s*GSlwEoYgJl7>uw0%Z^HJG(qjla5+>IervNKFYr?Jp^G#vZs(rxm&zi8Oz&8y2 zCvcK+^ZJFjR~W5YQjb63t=`qE=qu#y4m@i^z6xd)RrFF|!=5JOr(l*+MSlZq+S63v zJeZ{vny(x77)#jFOY~Bzj8%clt+73rrBoS5%4KDo0>dh*jBf)Ydzpyaz^tN*KCNIc zQ~nJwOR1s@y+^-Vx)YeCRME?T{d<|)3H}7Lm@2x#Qu@WZM}S#P6}=ib$ji(1kSN^fn|DSRdj3M!d{X!jZgmqSy&bO6)>}xS)#nl^}?#? zy1-So#9?3-RzX4z^V2eY~=+P{M7V1u*(v&2Gk%l*mM=(~+DEU)7+UICu(WzMWu zlvd*z;GQy=KjH6upqE!=Is`1&+iZ@pEA{dU&E79;0>%X}EU(%KY}i`{j$v-E(yOcT z@%26B8wJD4s(kB!w|biqy8~urRmN6Q`gM%sSL;Pp88-sgKWB_rz$~iDSW(s~WA8P3 zQB}r8!2W$Cu?D+BAZx1f6_a`s@jbg%uc^xS5paJW)4Tby^qQ)SPs=`KoCd>ss*F2; zwfovCg1PRmj5VakB#eXC>Gf0@R|2nE<8NS=Q)MhKmzD9^5A{;2jBf*1J#QlZ2xcu+ z#-cKAGR7t!>9tfD#{zr3V2m5Utfh*+49vE4)%AKoeFOSM;Jy8{+q-4Gyz)k{3}2*O z{01=_eXLhh<$4V`x}TZeUxHatq4{K9l_?k-f1+1Zm;#f5dHp<|aM>0UEET?+B#Wx@ z7L{$v+wD`mo~od$fvNq?7Iq8Fda8^qq|H=}3pePcR2eTQXpJ>K(@Uu`j+2whxDSR^ zR2fTu&UV^ga`Ko!Ko(KOt_2S3Z#v{Un3Yt~bvLqg*r+dpSxObX61d;GuYg%k6|ikKsiKzws|_%*FM(N46(g7j&#Ob^^1QD&q{ftc*Xw zu$U@i!k2WaHMRq@m@4BG88-{#4=}8w%2;YU{h4NpZUbf=RmO=@Y&OOm7?x0FjQxtP z#5jv(4#*0se1&DP@~PW6QqASM^RxfGTo?1d&&y0CYwj<6ji`8h%tnpfv*o|Rq@32O zKkjRVUA2X*ox{(VF$g)oxWWpU>{EQ2kD!M&cGd7541!Vpk813yJ*3TCg3d)qJ?jcz z!sMJab-AvwtKKJ@RkjX0sbomD*I<&*n7XXj*v)nVCdsJ&sBaW@)mqYh9zlC6p@91+ z=46<(?+i>M)rH!~c7<)8EN3j%T=xnjb7%`yGUoTlpMeV1haurT*PL+pv_M z73SYvW-GapujC8YN3Kx9|} z>G~F@nmT z5-GMbLT1P!I#F3qn|!ewO~T3d8%*9WHf-Esop9t9GI$ZQ=w*b=U)?or2@GE=Si}j- z0}6&LmSJ*C<*I&!Tp>bFm^7U$Rul{ozksWPT}W1DTZDGvfKFMV+tQr*fo}gNq=33 z@js!lt3EC37IWgOKSI>&Iz;S5ja}11n9RKeW$-|MTx_;UI2An(lZ3pj4YK#RPB?NR zOyWwD+uy(>96421zsm%D4I%3TcazS9$tWjJZsd||w#M%B-iKk*zS8TE_r`H~VhO8y z%n7)1uImw)%(n{4zV38!2a|BhehDULx8&a9VT=W`XGySZjV&t1TW&p$DH98h+EZxkAg?|9?Z7{Xfi~s zPXf!kd(}pAfygmw2uUHrT$r2+lG-FXK9H@ko9*;Td1fh>4x)Z$6@0{1s>_U}1WZLp ztKte1V4|w(fU#K`yXpa$lv~^<(UI-@hDkVG9F!{WGr=A`h3l_*z`$Sb70;L8lmCw3 z^Y6@^Pffzf{fA<%Te<2lI^oCz6>~E}+W7c#&peZGET&3J_i}jvnqp*uo zY*mwRGIoPWvx`e$hDkW`=cgryxG|?uQbP_23;s&q^8%OU+~4z<#_rnltkhag56?zO z3|Z^8DC;SmE%uVeZnlzV=)1csXfu;=YBNNR5j8p!A^m4J-%gk$Ik}w6A=eZP5#!IY zb>-*mnHsiwCgB9_CSzCdl>S&Hgc(=tyC&hdw!)-)BlYO{J-_LMBiE9mAE;|8O1R^8 z|EG${7pccB_Jm0|`NDoj=FFZNR{sMg;m9pyoeqoOIpa2X8BE?8yH7Z15>CE+61S4> zuXHZLlN+*tKMj-etM2}oS2cE{u7t@vW5)ET#;zJ6TL~Il^E@F!D$^4t=U2P`nq?AB zWj4Ziki#Nr<8LP6$i<|`D#F&iz^WKB!}`Evgcp)^1(@=4Ov1^x@q&D}iYb2X?L+u{TUkJ|hQan}j28yvQrihV!!+azq}zRLIEw>L%gHU1iJ~Msy-VTF6h1l`wf%B(WR2 z#H$*+`?DICX{%8K=^DH0mzO1RElsWV2d)?0`?nXtq`c^pY2DbH6uY7mPHo00#vI}M zzt-3d%lF0BQrD-hvY3V(D9(k+yQ=HzKd!Nxt+YIxMYdP|WRqCsR^|Xq;ws5}Dmp&8 z`Za}Jbp{L%3e<{D@E=q#q{LFPmzc3Ete&Wg?yjyoOx6XC`X=$~X}n1|4P0_vYOiD6 z+li7FlJN{o#$HM9L4W6CrOnvuwjmZKDOdkM^Hl|B?$%C!YmHrJZwdR5)-F&X_PD|h zW!)uDw2hAU-_+PuACLhmTN8FI8Q-}=cbLp?CA$dUpctdEtImZ-ttR0#_tak! z^$`=H@ZSUpIdZE4lSjsS%Y$*T?M%YSI20!Nh?T`89Qk9IjJxt-lW^p}U{VfpycEUC zka$xk9J!vvt*5Ph5%TuCgEtw*b67IkN5{vk)7VvifXU?Tf~fwR8oO$oY$a%Py;}qg z`EA`DCP}Jvh)#%pU%`+cCTC!xwCJyN8yF%Ek{%xu@)$zKru0GhhJ&~TY5OD`g;->tvt~iV0qhUJXl(;BN(mvsifnQNF zLMmC_8>wzG?nv_nDj4$1YAp==PelJU1w+IdQtVR>W@hF?_|!eBKb=pSe#!w>-Tc%t zM42sP$P#k_Av;8<7ar-!`$Y0OF>-Hf>;}97lVyIf`ycly?9Sm)lCXiGZy}_Wbq{?% zR!o9)d4|Kl0~)*PC7(>)KrJgo;7W9r&a#bwfjLUJ*A;d|$PJa{JW6_LS1BY9e?}dW zA`#+Tp*2i$o}_mu79aDf#_q0jEljFW{Xc8$szqh53fiPVq$fAe6-L4&bh&5r7N3NUya>>Z%MO_1l)*_bf4QX2MTfRlYlo-l5e_OVySyz{*p}ujIF1! ztM-6N=f}SOJu}fHoQb{+ChxG>?OoE?ohnrdM{@p6tAUXkyXwZmGJO+Oy0=KAC#sRV zFBuM#VovkKZq?Y$7giKMX9`NQQw+2<38zYni%QaFPX1j&$@<0EV(UlggkzfllVYRz zPnm=xSCOroSr#S~qkX@)9r6PVx1qkpy`*J}14GUj4S>lxWV+*Hjopf0SAL_$*7Ymw zs^egC`KY))ZL!}ZoC=keJzJ=d1Q?Gfx3eOGbcgKQ!a?^K1w+IOFdoiM>UFA537v3) z9w{MdTUn<%L=*LAcMaGBlc%G`G>8F)MEwXR$(&&G-_+P`NF6Db&32R#O9zLXsyPOe z$~n5bXWk+zmZZL?>=3D;Dg-N?BCzR3&M;-u^WM%(0lW^psQg|EH=+2Uo6H<*8 zFv(v?>hl~re5J8l`y()^*;@5q*Vt7H%UTt*5{pjCHdkl{leSf7i+w?3SDgTp_mdgh z*pE!Ysp=7!L{0^(p^v>MUMC#6223`&PY&j8zAh%=$fIQQ7u0DXLQ2RP=1*aww(Aoy zu|H_+*6BBxbQM+IBUmayC!DBFr2Cf~vW-N@_{p6aOJOqi6qI89*!*^zgp=<=g6#g1 zOLs-(lFI)mOMTRCcLVAGlgP;%_1&-7u_oc#a;MX{twen&TXf^W+SAEoB3lHZo1Fg&iS8X8oTNpn5Z`;yT3o)U!jb`uG&JT zeMNJJA$aDwg1}_mJt4HoB%BH#fk~WTrrR}*-7(_ZKVMVT``ORtz2*wFU~OgJ7~=Q)28?4P9{wO!BRK`aO}cIVR!M=Q>O}^5CxAvz*AOEfS90Kb zR}hlwy9@7A#mnM+Q?r2B5lnG2QlfYja-jE~-@v3sU3q7r?l zqxtJA7!qx`Tv8FFl>Uy!zEXvaP`?%_{3~FFj7y_WZ!6fxEu*q5 zQufx5P*eTdXx=z<2FAY+CN1R1r?SNDWzx*3%D4=4WBdk_tw%V#N;UdS7wa1iAkV$Ddi4e9;Hnm z>W>dh(AX_t^`r7#4o7e&P|`ZON}(Fmv6IdhT}xwE?X4JTGc-COFi*iQuDGp+r0pYU zTuq98##M&GRj|D)&X8i?GyWHp(A^apJxGl0yP^hslz#7ug&)DcIG`=C6(2v@cD;koN7UEr~xcNpGN}b#}9rm3BWc zE85p#Q2%n5&(~y%63!r`t#S9ojbxh=vYud9w$v4Za$N}>>oUe|-3?)`JiMQ$9Ihc` zeCFn8lT7eys#Nuq!y1{nxp*)z?O*clMddG(<<0%n{timwb+?k$WiOEfqw6tIZ@a%q zHrEs1fnb^YD%MBY;I5#apa18QgtR)qI332CdD9J2ssYu@l7a`gLw~ZyZlKEzn6Vl067D`#!}C3dwQhf5toQ)c>D;Tc45& zhnYvso@Vp7iFWJ_*0`sZK5i$wQ2h6|r&+sQWv1LY zOh0)$uo3NWg#j>G-^h1|xtw!cV^?h^{f^M+T^-3b$Q2sNVua{VIx+fRxI*b?)P&l0 zj0rkR!M(0{`xz;6l$!VJ%y4aSl^;4wLzI}dUFi2ouCf;QDnuK$>cC4p7c%07Y){EIW*Nu3nm!zUZH}B1) z2x;!eFudgM1Y2a;=YZL6wkh)MacX!^AEw1(SKw~`69_jDJo{Xsr_@lwfxd*=<_h&> zfD+a|PxpkB5iLuUF#iR{{Wo_~`sI)k-t5N+U2=s|QZyG~Zhwa0gew$~MhJn|1`z7F zD_kESqjMS47X~u(3%P6SPcWH1QTz`Mp$lGel?5{SB=zP?ibO85sMIiH(jko>8H)593gBCgO* zD*hZS`{4c;>6`Ozs8%mAXAYP>vRN5M!DQw)M~9h8wfHM=uFo9FM#%}n`8p40oi&ti zBskIHFTlyxT1W<+!us$CdeX|n!I>6s1E(77Juzb5FTpYeZb79lVUH|TK8-Qo7x4v0 zV&g+0eD=flD46Flc*}P@UzwQkOR#K#!BFW7b(UIwn`Jg!wy}9X9x1m7?frYCB%bDO zsk$$ty(94t1meScf<4lMZD$2R2751#mCWCW7f5I8(VTsR>v4!V_U6(-VD7J1x01dGoS!C{OQ?LhWdBaq zBI6=G3$3#rn5UMMa~Lo)P4X^ttLZpNIfwHg)O*%h@Ku%s$y%QW z$5`teaJJ#STgOYr1uFVG+;;1YnZRcFjQQRyaHowrOcE{<^R!UybYi6EsI{hnM_B88aBiBU-ezc5;((Jv%zO=)JW-`N7R(bk)HF`Iv>2;T64j9)*2y~l(o_uk)Es8IvkvRH!Aps zwHA=Em$5!ICDL=tT9<%%226j#6zCajZn178MgPD#Z)&6`|6u)OhHo1<&jvjYzGtvx zEMrU;DP#RoD_+G<@@%^(aSYMbP=_zNeGr)<~x*q(H;k~z}OZFAI zs^N@CPqn*Y!8NUSKe)E_-kc#RSMip~i1akH-hSYeyK%uSt@n0@bTQrs!M_+jtg&?eONE8HVXd!#D_HBB;CqIcuvxXTcUdX-O7otQ6CHwo)mz#t4UQ?@iX&3fyD zM-S1@NXVj_1f33%K4e~y6&N&0+w6x-irnHuCWjYD(k%j3coTJqB)!f%D2IdRbTOYB z`ua^-i0(cArerIh|1H)|qxl|Jn8H3|um=$%j-Y`y*l=MFKSf?dc8 zW}Q#T3FUkRD#toM0H3uj`w@K9TD>ypAFP$$Mz+>xz*mRpP1*Ol!iM*L`1ZUzRP{KN zr>hyog71Kb>PK9BmB9BHp01y9ho~<>@z|xF9B+b?hR(}kcL*xiRezmzZbFH&zSKo1 z*7Ytpb*Q9%PR9akcQu~@UNkqW1mCRAWF)(qg&CMJ)YNeVxUI?W{UB44!>}HOOSLhJ zEM{{WY6kUjaDT&xJtup^D1IK)2y6WsyxdxEfX7?wgVNoLwadGdYOT}38*B}>fEOCx zd+}Y#^Qy`&AyilW@yc-Ec6#X%wrAja>-=Der02u=9bC4J`Um(I+o2`iV^3pvK1owF zKNT1ab=tUC~LRnthv@Y9X!ceH-ozv-g|zzq(xAJQY%<ivMN!CI?;ry4#iRc1s|gBeist#u1H@K@ zab7LQ2VZ5cGH!ynVU4~u^wo=!{s&KR1M_#+`Mtldk<>yI-*qi3uHk$+;Q2OY$t?D) zh7ao{mkJSe4O9hdy#daAQ9sTezK#XeI;YCmdvN{^#na5XqD?PVes@NoHZH8nvF~)<%64oNc3a0gtv(UzN&5h`I=B zQg?|O%=QG#ebH#mO_r6|_l;5Jxm z)oB@?zhczbuf>d1+r6h9au#~K%cyS!uuY6tkJ4f@9?k`_hK=ucT!t+zI~?@N*_ zEP=qQh7NmO?nDuF6%;=#bgzC79)UB9J;2}KdkoJv)@KyM+I$1cDvxTbPXGh6tn)2! zIpg$h-yn&_DgOdol8sv8GwNdNS_`b6)>d0zW3!|NsBGUY zEU(sk5Pa`&)3J$LSzc|}zH%u**eoa>{nnMe0WN2)$=R&0);dYX2C<%k%C^=gw$UB7 z1`EKuQ_cQmn?#kM0vHHz;pWJxHJ zut_$dB%!D%Ehr*VgVIEVfT*Adi=fg8ii*^wDJUh8@}aavK~O=0!V{1Z1f)Yys#1c2 zA~h%|BIW(&&ID%P%Rf1D&Y5rOom=)6f-Z*2*O`^t>P6<=?ZJwbgh7;KgrB-U{Zx+u*9kyLhvtC*b`au8#3u1z)DF zCDb>QSz9&Dz#dPa22-KZjdLsby6G$T7Ur(8)|LK=So=cp0K8M#5V-IlJpwzy12ylt zx@CH4%CESUCCXS^gNqyM+u#Ytx^AmvD(_ji8OEEijdmMvJMetXyC+C;8EUWuD%)6h zgHw(53V4mNmX)Q-`q*~XR%7i2u4AlO;C-6+tlTbXWvPLC2kV6Kwgjgc?-cMk<2|xN za+SB?PS#iB4S`z?(t846;TI*PWkRxaDM$Hl?_xdS`F-_?=O4lCP0Z@MnYx(G{C9G z87=FT^PK}MuEu#2Ji`><{2)`;STm(fd8{X)RvK%aLu5173E)kd_v9Utyz+FwLx)*k zjrU#fBE0vr)B}&0sI{bj1)`4qkrmB24}i0&D)0C8{t3QptkH5yS*!iT^2(bL)L^v) z=NW4saB`FAsbClJ!+w^^OB&gC``is$x!R@uv-B}vlP0%c;fC;(@T;Bx!8{EfO@0UHw z+U^(wX{>|6fw%OhxIY4q(Y$B-F$vs5`G3M?8gJR-Y`UgVO~JFeN$y!1b@3j8PJ!SR z5UQh!tORq5im2~}dXJKrLA}3Vmr+PY+>7_VJTjX?+ktbsN$}N}jrT2U}uCqM^8xVeT4l7uCnI5 zaX+)t^122!#5KWbgPq}Uw~_Vt5w3r%_71E(14r{Hv5oaf-rl72s7BYt6AjJF23 zj`4N`chX+>a5;WIVLyfnaOH6+>-2hXy0QKQ9yr+9hx0wb{#8_Won#C&rh-7ujhBRE#rO!95n6^WDjodKTzXL;ErdgxUsGRXKLPa<%|Ss z#8-%_d6vdFk^8rdDdX)&GWsRmW1oW$8T)T%C12Sqo}=VD_5jJs#y%UIGE_oe@d@j5 z5=^CqUC$#A)!XYvaGJ5+eSzK>%0mwHTFIK!SRm>Q)xCBd+`$;TUSzCw0MEAdA$@{vqiPVm%Bu&RA>z$tL)cr1xQK1ZEDEyc{mz{waCN`Q&AK zcBn+h5D1w2l4K9U2n^}`?j-47i;51r!eU@T9s!?zY5FYk{Ke!k#sP9m85csW94h$< zsDCr>UY7KmoRR=@w9&KSZ^?X!vXieeolMBK;Dnd;kd6lDGDhnC>|bA%l-hXD!W|jv zyadIY{tp9Vyeq)xwAWo;me!^M6R$CujCC)#g|Wu{%c3yM3Cp{T8a<5lFjVX?J@oO{ z8Jd?R^WlW#2w+)FyEA2va_)kvG)y0Z#ob^aOwbp=Er#h!M>}swpbmAdcauoQI~ts6 zygR^Sw3oB^i**S5=`EH`O?ivDqFjq!mi#XCKXAFOfM<_Of{zgOL3fmE%`iRtLf{+| zwS*_iwa-+xx0I|))NN2lhDl~Mc9n&qT!*yNJwk?{dX5&7P+e8c!cn|xT(Z+}0rO3~ zxQHlM!f?r1&a|&lk7#=#cp0~|Kdb7Eaz(zPhv^+~W%9F#crJS-ryeo87Kw7D8Si>< zit(0Sr=j2q{)FW>lo?ZfEDOC)VSel1!_B*uNll)%f|%T6er>QpaM3y$9^eA5xFJ{-)A>ggXdLG=uSi4B0G^~4Lqg(-FeJU=>m1nH` z!GlIPqu_2Xdz5ume3UDb+u+mzNELsS>#DKN2G7vEySQ{|teT$?3cD&OpKCrW-}n$@i|b8dv>)nd8;D;sCyGE`ef@N6t2!AG$+Eld4O1-=HS8Sj1N zqFkp<1!hRe$EZM&Bxatez<6*6V=b1sbO%6upD&s|n=%BM2N2D+zjBgh>A?WlV zd-obmaPBQnrv`QNAFIHGFxC~|I^0plRw3(^aY{w1rt^B^D$x-=#QEX^u!GLeTNc_h z#X00|IzOnV;05qX6SC_))Px8tSWxegyr#6h(Y=gEP;aIiz`4fySY-x9^PU}*C8HVM zr|x4u2B$Y-?(GJi?jb2Jv+>{0hVHPQP4`c4u3}apj*0md*ws^y(!Ev5MDgmn^=DNj zQ+caZLm%mI-fVD!@jh4`JW|p|@GEI`Noj$#Tn#!3tD2}&6gJkVRA%2ur?q^nX=w{O z;1*Pek-AlH)iTzSN$r*pDWzM+r#Nq;$Zu-h#Ix&F@iOCBEFozn@(79vS3o3 zyuMuuhUG0Jb6dq%^woQqehsUBU)hh4xBwyhJG)&6VN&V36EE=q-fuc#m3B!nJI$vh zBI`H_OHPCd$g(HnlYQw5?zBUXlqFBbS1kV#LRy%x7RD7)R&`4r4 z-q|`*x^+CaTaBx1OtOV3G7lkf zF+%DbTUZa1Gn?nG6XMFn9?}V`*=Os@U2SQcryddK+8KQ?At#h-+yWWdoR3rAf1505 zTs?WKZG6Sp*AOzpCcuJvl1=2;uTk>ewIgq=C%>X3{D_kAp{<;S3GS1;9i@_dh3hM9 z-$v<|w(V$q2PHgY-+MYm-ciCngtXeWP*T<+B(!b7v<(v`!bHC&+0XEC^Pe1SXRFwd zK(FezKgSNx39HXmHI%?p%-N_$ROD4V<5M#2DMn!yLQa@)940`-tmopBN~Jm23izhD z+tY_@5kg_vZlp<__Vi)f#%xT5?ULp;mVPMypOg}oC+1O(w`4&3_~gVV6$}$c!{iMp zA$vyi$ntufuqtxpQHg$I8e&KyOJ}LH72ixk2$7Cq^e92ANjc3@( zv$E`IdgKj+(3kd5PlgHR7I8k55j$5WteSkz|=2cQ>UaVG(P<tG$uI@_I_iWacayHq5_S|q z-h8{fnK02NZ0zScVdY!VRCYg03-_Vqd}C)kuR@su6K?2)m9a=OHq{)N^h|t`?;Z!+ znHx#}4ovwr2>D^H>1rubSl=TXa^1P%IR)GT~`8l@u zbqLWF?B_!wT{2nFAt>er29(=+{ zSY^K?dkCL68zJ|S{eJH~Fwy6t2}|A&lgPd&OJP*slPIPi_gwzzf$sfp3gz~495Y~@XTC?j-R#w&I*PI<1@`g?GEb3L$>tXJcNv^ zws086bv4S_CHnkrorKkFzAHt(^6w&K{$uA`50mFay0b@2ymp%`XkCqVbY!KXGNNsK zx!9pPVTIq=PExzD-T#9Ueaeo1-&6G7DPAVP*UPCQ$HQgabNZ$t8HqnVH|Z zJ>wp>cN`CsF7LIAPxfzDFl@{MkWPc4ZD9*_O{Uj|SSpSlNt_xD6px%$~AEI#F!pqIzwsrxRAc z^^}_3)E18rsBGuk0h3aY@0Lzj`Krlmm2bcctP~~fd`n@{O}@lmbi&FP)0xpgR=Yo6 zQ=PEn*Q8N*!Y)Ke4Xe(6nB1FeMlUft61zAFE8nwN+R@S`~pOkpR z!FHAF1?aSbruNqfEAwo5@+InY0wFEI&X?Skp(@DtlulUrM#?Jk`8Fd&7qasel8Y+f z!!I)7@3n=OV4?}=?D#&=2`k{17p2q7OuAy-=;9)F#>XY=Wg-qk$PbJ7IZWm?-EF>0 zI$=euDL2Sh=9TU=Eo^rpFgf9$Wr$b+mn%nmabfiBa-UCD;2?d1&U?Mr_u$0*U8pfo4Y&vjTr^Vu_L2+E>?vu7xf;`^ zC%(Eb6UAIE=nr0QjElgF%sKywmnE+!wJH4ydQW{}6_{(R-N8A;i#?^);NM3TxgSC%2UK;T}=0lg8Q+e43k#S93W6m~WhuWpZzv^P#RA=PGdeDCcFv z-re9x9uJ+&1uibT^r4>ao>8vYUi!*PGB|Rywl)E$^pcG6RCH+{Vh)C=3K8IXKCs7V zeF6Swh455;F&`NiWGR%0)Ban9;gPzk<_^^`D-StE|O)MY%c^6c3(Z!ae}* zp?Tir-K8HD=m0gam%dUA+=`P+K;DtyU@zwymRwZ6We^ig$Q|Hwqn)eY-c#TirubXE zB-o$g{k@}H^XZTTMjjYFMp7SViU6}s;a#L;20>>)tU!(4=KL;mlH^ts z_wU{k${=pZK3p`_ocCUEi?Mo2H3sLI$j?iS0Ysh+bwnV4^YD{J1frN898N>yVr zqFl9%_j&M8wdXv0;z$=Y)m^69=>m;a6y(M=Vzuy4I8D};)S35l$ zUYFcA=!6q+M@&@r8#K#!OMy?Ds1>Eln?$Vzb=g>(Dr~IJfO)SxdMafjgQ zIk>|+x~40^37Yq8<0hj)l>a+iCF6~HlWA$ZrNOD1=VkRJ-y-Z2Q1$!hO$L}UPDdRI zZqdj2@l)n1-x7%SCgd*g7-KvJ=4I>Zq9;Edr4FWa*B~xpYHL&sc*3~bQ=lfvL8bz2 zW&L0RzX&y^kEDE6DmfB(`Hp!S$xLnbe9a9eLx{Z{ZkDOWQE-Rxy1rH3VtqA%-;(1) z2)qSqxv|C#W`-MUOK^^{j*$LCv95*MX{`T(hmP0Nu*DEoSYw?gx0LlKsFTK8ekhF_ zujf_(oX;!bnH@a2k~xgJ9)h}VtTDrA+Iab597_iEoNFGkm%}}wL@)jA+ zjC@zGu<76wWBovuD(h~js>WJq1XJQY$x-VOu#R!|l}00Qu7+w-5H!eE{hn@AdvLnu zJ@dGBKZ2?rhU;X!F(a7~?@3yS`!Ik#`bzW>w-AR>3v%dD#3)YB{_~t^)H|72WUTy;V$FRIo4!=1{$x#^R zL9F4?c&1q-uX*roC0;O zzzM!OK~E?DJ78n&DC?DV7F1zgkgx7WI1YAA)NQIhjX{`_T0f_s-S0}qSd4YvV`0_Cs1e|liMP98 zAIT0{;>#|##!`je6IfVH*d^d`6ZPPq2WJ>-HJSW2)&Ucl@FwsI@T@z5|0X%kxF3<^ zcW@7%#M){CZv=Omq}z5C95U8wvQ$}LoXkw_r++#Eb~nzQ;FZSdmPX@nHp^sb?WYeM zfLkX?^jjRY0CTm`b0t%9$I%P-XR)$s&f5i?Yl2P%pEllYSrQnJ_pbNZ=IBKA!!@wh zWL?v7U>BbfU?4qf-LR)!j@Z9(4fZb5-H5FB8IvZW)?ZIt9GSFYI z#5E@1{T8B+@%|0Yz2j{tEUzZ=SXr;!YoNwxDx$=G7eAu7_t78f0|$KEqFX{Gd1_*O za*;o=g&vNSnloa`d5g|q&VDD+Jrj~1z8j2S9go+C$p~Yff=LTw-jz!e}z6kkgGR>&^A!D2EcADXPfkb}DzFt03YGzWc z&pwpwOk$kC&?-y)#vL!IjbaLCr55%k&SVwRaougDOjdkF_Yi5sKkp|fIa=}Tohjq8 zh~S#Vwv#0p<5}w&*_aHT}p*Sn@1cHkDJzKM;aj?68l1jP+aHyx1W+VdeYcV@aCE zg_m1}?O7od8+vV64F1)eTN)utK8x_jZS-V0ZrO!3u9nX<%JpX z$+4>y%(2BY3#97w_zK)U)Mh%l+kZk^cG!k7Fga3VI@5V2(3Qi>xuW9qFTB1Bnz7oJ zB*%&4Yrl{I4v!;o!svX9koJvTz_o?aN;pNYvxqJ4J6qvLW|ieLg!GNJaBPvRR9O-} zr9)QQN-H@}mh$73u-X=KVA3}$MqNrOC41BPi0zHrWWlARTGDX_)$jEg?y!FPP$nZJ zor+?~tWI#SMy|YeO{V^3Lg_*8jyr&bEe3#VxfF|}|OxP86eYY=`9v{%e zN=q2A|JcePnN60&V(Wc7Gvh zAF`!HEoI9K>)3`cIc(7GLtIQ6q!U)g#W1dwT&^z3&jF`(!jhBtk}}=eDVt#l+h(VV zeW2$OC~ie07?R!OIq$?BQ(Thf=bV7=XMt>q#S{bLZK z!-VB9LFqD!MdhM`b@i+8Jn->lwv3)$rfF0vHzbIhYJbjGd}rn7DO?gl02ph5o~shbeVnvQ1t5 zuj+(Vmrr1F#66pq|Ds@6eM(E?IaKuNui0&d?HS&M$&_Vt$hA|!uw0R{gj|U&S5lQQ z;cb|}`l8d8#q!YwjjftohRIpysJ`l}9BipCN}IWCC9@DR!nVrXRr2;+T3&oLYkpX9 zkHWZoC1ly;Qsok+>Vy?B4~91>cb>u3&G>H=wx>!nnAELBrG$^)%b;8QHdW~!+qp!?bS{T-lH{@1`Zp%f8-e6ay(mJZbF34Fw z0y<$uoG!iRF+G1k$Pe2E6_t5PXu6*4o9uvt&=lPa`VL89pB!T&K*=dxFur4dRnGItDM-KJ)!LpN1SWTD?lj=nE z?Nu-=s#n|#sA$@E^ifz{2EwH1x-3;NEZ52Jq~8MSlC*`A!|KuwCS>Z8I9VsGx_k$d z$1zab>AaxZz12xra&0O32{UsLLPprkTn-Z?tXk(1|I!I7-vis24cqnh-bZ6g4Z%cf zwakwiTk2ig**?_J@}c#ZGQJiCNms#cdZ?6JNTpUHWQSGi0!&K5W}mjhNmzj=z~s!7 z(5IYicqH|K2*>3&^Ceu`};%q$(uyN8P|ypn;FzKAq% zNE=5;%x4(a!OYjj8^9D}te?v{hBgk7dCIsNX0bM21=caf+I#7i0%Oh3G3LN5*T$Q` z^n!@rbMC8+AIb)0yb7~M8{7QAiJvik0_M{#pK|vfXrN(B@8djKn>zx7hMoc5s_BEk z35Jf}&s8l=KMkB==&9gbO@9wm?;cUT5`BP+CYo*zgWXVKbJ_$XIav?=0ca8T15fZYvU z_88Ylbh#aY8HSz?o}lS{KwePc^joRpYFF;Gw>5B_q2C41(DZje-bdlMJ$Y)TI&Es8 zprHqW=WBWekXKJQ?mxhbG+pxq^UTm0;KiC=0^DTiGvI7Z-~BT)!q5Tma))-$kqyh~ zjw3KDwbAzrS6Pg)C3uZCj+C}5Fs_8j(ZlIk3Vf)tpsraQBuI%J&J(R;jsy zxeZF-H4fwXJnAVmSshzP8So!$Q(yzYAO_)~;M&==8=31wUaGe#Sa19=06o?=(j zChZuXlmY88j)9q=jX6N>eQ=D|!I|3lu()$DzWSHiGqqjM+y-qmzBAw%+IP2PDPQ1k zwQEvEc;^B0jPYl1NE?%+{05BAT~*trJ`AcC6=m#0%gIZT=9Lr_JYqLp7@|SMoyMZV44- z=O!)&rpftDEZBV2b#r{hB3o}Vw~rQ+uCq8*j=tq2tYeUNFzE|C`kK=RI$_B_!lZ20 zxfAYn6;%mK?gx`STLQB<#$DrJ`~0J@l=zOD6WX|oy3%s&Y*S%URUm0wC$>!DiGt+q zBdW@tqOQ;^kHoa$UZH_HVHLaDBiY|^bXl0YGJ;3#$Sq(3Yl}G_Oh|lRC#;MIVA7SW zZeB?#>?AC?yR_ZHf!s2LjIat{g~{GZH*iCv?}-Q}Vda}4YgN9}2%)WZbspgPtlT-K zcSq}lm2Wpp{vr<_vgYJGv51qfeCm-l(OlnnTqmr26J!VZ zd_N)tXW98Gh~!7Flk1PtySDfSn?;uC3-u~e}|BJ#I9*^`3)hqBey!aj@d$}q$KT7XH6(MKiSIt(NyA8F&X(RZ}0D= z6ILbW!vucTvhSo$SaOoA-$9?f7(<_(w8MsAqE8g$(+MkI1*x)=^T{5i=#x`+zC|#> zpCxrCXQ>w)Y^&9M%pPh}@*uZr56}rK>K8uQy_1W)mr!!UhOl}pTfr~Va2K~~zu{mz z?8;cFyNjN7#nFsBTX|Ia@1lL9l<=!9tbvLC)og;-b;7Di?RdKFHzN<$2}@oHlTPk= zm;L1u|J4aguH#4EUd&mpVu$L4C9n3&@ZAjNEtJ5=_SA34jbHg}!Rq|bAJhpe;~JP$ zshP`Fq+1Hkv-8%M9;=E|E71un;~|)! zDb`o6oRhHRPO>ML`4>V+59`5WFuC)cwLY;DH%sTvxBI9&Ogc-FTCo!s>x32c0!%8h z+LnB^x#yRJB@dE?d)YeIA>{mM_wdbRIkuNpK9PbFwnV%S6JRE&H8AmjPFN9R%d?`< z%C>`9(K_mcCC`u%-!r6#5dvW~iLF5AF+H72$L)2($~Q^QlFyfm;0o*X;!^$x0zO%h zdWP)+#=!)4=o#zZsS{SfqLtXrW#n$|sBNQQSeH+NaWR3^b(_S!I$`C#>u%=EJlcrt zYo`;IoGCT-sk$O$p0+!+sJw)b*zO)0AGQ`ug^Av+w@u$sov;F?$X@cr_PCcW+Gz*; z>|Tl7&nj^dC3T0bRF?+(nN2e)v&Y$P3)f-z=3M4QKE>4YK80;H7bfKhA2ys^Dyh`{ z4z}viL5>r&%%=#MTkLF?VX{@t_>M)4Z~7mlB7JqM80z-1#b9~j0Ns*<5FNG?bje7B z#HLm0^e|xzOo(n7Fou5Kt`k;uipqKNCA6$YNx#|E83Pm8JMBn9QsNE=+G6qQ%oKu- zIL_uhNGGhI$Er)_K^E+LYtVCHn?x^|-2IYvj$^K$9BhYeCjTC!bzh~@h&{GYT529* z@Osu{IaFKbGVLk!*xl+@j}@~F%vOPO~cVBOng3p-(gs;RQ!VUFJ_JZO@)`}kGG z6!h3Gov<2LK^h&V$9mSH$HD@C29tJJCU_E(d{-Q77h6|8SJ{R>#Doaz=#?;m+-Vu) za@SVS&ecTxKhp3_gv`UXaGCuljkehsw+57A=J3Ydz`#}OfF?hKSw$+C6{7-7|>av!GWvd`r zN|;`c$?$`nqp)m2h<&3z6%G@At}i!#V*UggP=&DBd-e{~AhqSbbW`B_hTy zXhxTXt(e!EN#)~YY22LY8nz=DB`+N3diz#{lx_CNM7AJ^-cvlOVA!5w0!%Ku0_O`? zxjJFh@GiMU(AZ9o)3UHLiTRI9?L79c=TK5UvUkbVThdn_d7L3gd{ZZ^h^rMtfmyFH zLhdJ=ge5;J2lFWK9fbU_u-`o)cb%ZXlC4m}n$Qj=gX0}F=83a(!ity&lg$p@DX{XB zPQsFV$m;mvvtY70=XDx*PA4q6wsiT0 zC1p%IDjimxoiM2(Idg*Zf(lP5Y*+SGm{7;aB$e&op32U(^R0u)CSTXX zjBm`-PQuF9S^BDcUm>J~x8JLrU!ZxKu$edjdtx=vVfODTDZQJnQG<%NYk z{j4-Q#rE=G2j=+#yP|_+2w8la5rPYCflEIs*7F@%N*39|{El*3#X64?2#b{}<$k4) zhdf6weqv|Ifyw_wf~V-?;?FB=tLUcb(z;2|4Ml+IGYCk3PBTR6ES{BrvX|VGQlD~K70@8)!=7)iTM)7^*_-QnshB73!>-31W!uZV=+m-#1|E|gLIPq zr|HB62!Ru}a2h6WqXet*ZPA?5@sSBncTLi;{eXW-oe$?hdQAKeRM^fo z2`2g^XFp9ipE{ru)|5+-YG;WW=tXCQowa`ilk*Ru4Toj> zl3V-Fax_t*4`UKm%@<)(e|C=JeQO zRJq3YqxNBI`F0rY(R{yDazcatz!moWi=V;dFPHq>Qb`F(84BC#1ejnaiJnsG-H1Kl z)6SJxw_k3Y=UQnODSv^>#ES+L`t480%sZH6>ukQY$+#{ac+=G zXyawza;HAYg+~_UO1#SMo+bmX(3>YWuGbo~e86c~PPS4Hmw4m8HNcj+@{lJGP5 zC5+y=F#EU{Ts?#K3wVNY-uqrr*Et=skBq!V$Yn73I^^HL`Nr5_f|~kH*+Gf<7vn~l ztJ+v(A}uh+C&1UWF-ztt<3Sjg#9XJ6Nt39?8v}jAP+UwN*MnTLKI7mR!|Elfki?KBydqPR?TU)bvY0^{Qg!{#;>A z=L0Jn`l0tZ&eHTyU@b#$1XprsUd=V&CM|nyKfV_6tso=fS)e@-+aQB>6-d{1|bBGz* zcTQ>A=dLzwqQ9a$W7;w-UkRf&EsKxTTmkV?VkgqWGt{(oA`O+sZhRYHvUR8;A26|u z@k#J?*gW59)Tzkfin*( zpegUY^H^A?OWrviYyzrx_NrQb1#Y4PTm$lgUWab{ky=EZxTAn$480ND-l2J6URy7H z`qam2ZFJg`1Ds`y)#kJCY2%x60;6{WOonOFg9{iM<6Hn9=mc>4WIz#|BR^rEJKed( zWiN22F_vHGOd*=e$3fkZl)VaOmae2{5rbfiPk`rZ`XgYzq5lChaa315{V79Z=w;yL zx&i+HBY8os>X*i!sg=udPXxvq`Y?E_u5DRa7DXkxe9lUsjh_Om8snefBM!|EtBs3d zoVb`O$_B4LB?8pM_$n?@>(g4k(IVhLLzl}|YlNcNfG?3LB5Ijh2OQ&Y-~?^-{JBgz7iZGFEF+8KI{c-xM^@oF zd_@+IZ&?aDLRORQv8YI8^6IaA36D`n1I{tDiUa954>kyWfLGVdZ0mKBGsh%z_QxtIlo%gm89Vh$qD5e_KliHPBn9YwM@7|Yt(+z zY4~$8AR6N`m~0)c#9B6x!Onx)g@G$IyA0UDWd8@u>)})-)7H^qL%##wr0HG2jKLE4 zkUm+j=9Oda032$}v%xzxeGWKou=9vijyec*wvREusm8kteA4l9c)F|<)$O`L9s4=$ z`V`2!e$_*Ug@KnHmWP8H`&9eCRr|FQiPUrpaFY(`j*%s(?oP5-nHFwTJEXSCln*>& zN_}LLnp(?z%nt4YiN&}Drjm|UdNV~CV_$GB$LQSvbPdsC7WbW+bWYe;fW-~H3e5d8 zDr}UDj3aEvEo#y^mHZr7$rx{dJ7{CN#KdF#c&l2GoQRi!^^LLVHnk!-5vR&LW&8!E zkB(S(JL}pI2`us@7X}X1_52+eFxeaLP;<+PD!@L5J`bLtqc)Zeexgp>sdj))JyXGq%wj2B_%>xfNuGXah918}x3{~T};uN%(cC}EFUrJUm5Q&5{d2lq(p zL?-gxG9ZzVujQ)g;{NQ;AzC=3kh?0E{B>~|kg3xyN47jVMR>38D=Woq&! zkXIKw%gmEU)uD^yodulF8>1KH>l|!AU6ALS-*~7rRg4&)?I~S)01Ax4f*omnt4^vlU_*I^ zC+-xRGbYs{U|G#>0H&EjVt!TYfMf0oY-Q+W;HsMb2iU>Tjek?i!+?r}UIFZ`X{y(^ zBIVDKEdDu9ScYW4TRdTT6ekA^H=su}{hbAIlRj-P#1$@=>kXLbr|gSui(xX`*~}@J zjCbr@rOx~>(+DOr%+oiF>C$Cjx0hvZC4Wr)nFxU}>sFXx81t9%JZ(StdDmG+b&K;@ z=!pBl;p(F>sbT)-V4~CQX1og%+@!Cb=*Iu^e@xGFloHlK^TQb3jPZB-V@Bj5WQX-r z(s{PY*7oI@`v1o~2a^`&83YpuW2V7mmUg++BT2fV8(}iSJSRp#g~CkH7pVIQ`tRLXx5Q!e5!5>2$jd6xOXKRK+?k=z-w6o150 zs21813ME8EkPI0|4JmU!Ys8Dvh=1PcmpRhWO2l?>rX=6bdkSs>`4F+HgeroUrR>37 zq{kI{b6*MdWO2EOH%PR<GcTZr^ z4fi)teLj@vCwQImA7IyTr{7sGhaj_F&Q-41f7mq}hv1vF{Z>VHznl(e}#zCa9b@;(OdMp z_LQs&)@use8qZpce5F(z=T=J}po;y`W@(={3!Kqfz9^KK_LC|B7Z@$%&6N|=}Ok_l?s~9JbcdGUv>E${cUq{^YASJvC<(lbyP{lh1oMURf z+$HsE`73z#xg@}U?-exOO3!<5=H#6#77+ zVyyp?IiAxwb%S!YzCn3-ZGVdU6`5O`={gfj-dX)V0`E2w>E|SUFz@oc;b41DQANr< z?5~*cLg8Yr+_SbY9wz6EWcK2s|7r)@>M59Pt@`346t>mIvYw!cuOkF5+QP>$xfk71 z{%>EBUt{aHl?X32z33F_d)UEtUf%Cohnh}BNV{MQ>tRwa=xq58w$(DSi){X;Md(St zy^HP%lP+B!@h2C_0_G&K&2{ndR#ly_>UF$`bbf^KDk38vp;@&eX~Yrxo8QmFoHQ_K;>U4ZkcYvxPEa=2_+u- z-vXKzr!yu;wnfd3P0;wE9f{QY9GeiH<9wql0bNhcK?=lKLS#-Qy)>9XS#r z?xM%o2JdwH-7qQNOWq-_O+F6J{YjUa_a9xd*M{)!ELK*;1o;g0au{|!KP%K!FHxfnJl zKR3O$_LcKB*9j{`Z^@P&*1-Q8 zpuNiTb5W-P{wq3RRlw(CE0CDkaml{t6nxJvW~MA_#J2M@f@`8JRE(v*ZqusAb;1hT zQ_7{$s$~eFpX_{p!UTVGT9sHYPGMUerkG!KReig3!iwsb^+Zj4C7vD)8;4~uDQDcy zW7z&Yov`vnv4Vu8W@`qwj)Ldym4@f|8WVIpLf%jI2Ku?OvK%|lb|2LVJE-hZ`5Gip z^f^0VZ!orEPnA~BCKATJ`Mg)M?(VY0VMMn5*+c@DM*l5w$%rvL=%qOT1id*CBA~5Gv3yR!bI=mbu9f@#zQ(`)qGtUnbU+7 z^kRtS2be=DkXbVpoh!RjQMu`o`Ff-C3)BR^4nYBypQ$FzI%>N zSTWYZWFPiAj6Sa^Cj*+%T`gG?(r*>AtOH`A8=$xz!Y%-*tPRuq#RO zo3Wr?#hX*#USi56GZpL0&gT9kUkeA@YF~N2IqjN(kk`N#*1}{q*V#@x*j7u(7P9&3 zq%b(mY~cmDfsi;3A-jbwEP-*A;DEJ*uUtZ|PFO8E50kk`QeR=M&Ym6@>Ap)QwjfZ= z@?F)!%nqBWn8-+e7UJa? zD|N!k_ajWuEIz(s6`h17^Mf&A6J9~cIBTyH@52PnN!p^gq}a6%w$-02O2d|nT1+K| z`*&NZ3zKrz$(PXE!L~YG`OoO6TO4ewe^in@q9&HVn`sqx@YfP1_`93mpJ?PDov>OF zf=Mlqck6^D{{@o~XNEBG9w%YRwP9SF?+js)XO*Rt_WK6wgyk2BX~j?+LJ0Wmq43=c z6K#gDy-ry9Cd)9D?`tK*+W8JECdLe*yRwt8@>PU!T`+5Md!4Z45t95QLzs<_A9f7; z6HMMkJrv&i6t+9N3QYQWNA*4DU|St68&uHc2%)f`$CdSh&K7;Y!gjWLQmr*j?1hjU zwjY}U<2r8!aDz@*ZTKA~`<#}2{whwwk{ih$6}AsTK0Et6i|iDbU^Gu2M5#B!=!7Nz z1`~?oQGiY?vT;?Nge5nS0c|*p?~Rbkk%tvlS!Hh>e{$?v1=+pc5l>W=V{MqFcU5Di zv+Und9)ii{V9Ke@i#lP+<6&~k>e|G9trM1fyqW~liCdyN6M+4t6&EJgoJu5g(Fsc) z4HLX9DV^ED?R2oc11l-z+tSDmHHaE^kTw%0N3z;-+)+FgxIi!P`qf2m%0zM{Tt-L> z6MENVB3;&p%F7*W7xp(y=!&jN+5-yP>S(Faj>UH;LNH7yDK8b2N?g(*{HFIoIY5L|!Rg(N>j1*P#*G^>e%Tq(NKlij4jQ#5NFLNH8N2$S=d zq%Dg}O4#XOJKI^9?1K{QN)H#Qt*~8UIXO;H@52Z=`?TpP2ivBe@<@A{I9ui3ZwotW zOGbN^(pxIa_qI~)VY~EoLJ^M%WS6Z!n>P zBe9q|PQvP-hh&(_*AXE_jX-6ZZ@gg4JnyC|3zEv=pMvgtE6PA3Vj-))p+^+Np zv+%gxwM}7MM>tH1<|h9>I$>p;DDOSPfUQ7?=4X~WBY6-e`>13-<4^M6a-ZCU3zmMMY2OgcbC0 z*+bC8uQ`NCdEY)zPv+<(ElcN1oTw94zAG@<1#-8BPQsFRzywUG33VGe2}}MMCPkm# z`p!7mo&;6oXa^elY8sot1Y7tDCPz+mU>munV3=4>9`DFZoz|GClWVu+_r?wHIYfrvE3Y2N;O;gQ!zY{wUTYQYEy-6wToizchuM!4z|@DO(petqUNKd z*RYk6&0wm?brrRigKhOG7=GIeJ{yyi@V0~P-Qrg;DMtO(!M5sa&Ro-~?+FLn>M&{0 ziGEv(kpHJG`~(yIw^L-Iw}ryCS_LNOFSm4kl3R|S)(LAgc(JsKst$G2F5CG|z@+{y z=`V29UE*-;ZFnpS;}wN=cV*^SZL zjNl5pw&Qz_ZI^uNDsMtJov`vPfl1#Yfu3BM*ydon>c?R+Hf!}?2it1Q^9;^+j_P~B z!M6IOlx5OK<1pz)_Cls5glQIvS(vla*-hl=JIyg-fTo4>4X(xV`u67GJCGGD4AhbX-afqM89WR z@QRVdhjhZq_$*A&T>Ys(L?ElaE%yY1<7V1jh&)1XES6L^lS~r)PJ&5`uLhd+w zgx-V+z2nTd*!LZ5s|&lzoE~hTn@}>t^8Ex8cxQU)*rdd(4z#nCe35bER|4k|{rWm# zRi>LX>dCB_fRJ9Ouq7;o$@6gc5%W0V2c59wOE4jGRj+tAh3!Ji%L$?;G)G8VYIn^m zFuA)VcVk>qk#S(xVqQzzpDpDJov=#S4U?B`%Yv<$J@$s#mLBQ zamfk4E7;QxnD7cylyAOJobL$-+v*@G--lC|DF`Wiw0R7_T`X26K2M-BRaF@(g z8Sd}F9N_!OWNb6#`8aV!55{W+;^ z(U+d*{Pj-rhs#KWgyRUQVV}*c+mA?t~xMcqU1v}VzZo=d`VnXWcz%a2BOlC(3zNUWfbFiKD zKd(#c*I2@SQ%WaWDfI@$Jn!U7=;vTt-2{{VoTK_u-c;CD-;j&1F%DlKWIkgHd5YG?X_@InOFzxG19Z-|6mXU^0aO7*wc2L#h)KUsY4VPsin3olEtH~hTs z10lfC+MNyJSD4)Iu}YUc{xY%6hnwW>-vT}wE`#2nuwy8Bf7{iFl_kXVrH^2-xM~Y; z%P&gUh2Zko_vhUuiEr`~@_@jx7_mk8~$<$jYm2OtJTu@@N8W@XDotuiQP;b;62TJ@tR9adWh^8pJ_L zuQ7~WSdZqyq#lTHUOtjgZLE{9LXCk*-z&j`d{gn5gYDsXK+X?hMofO2uKU3jeuc@& zkv@ZYr%Stc6t>lsFd3#yU)(q+VU^iOCcj10?+~*0+WAV4XS4rS(g$%}=4}Vt>Nyxb z!akU@y2sxI95k5 z+WAU(!h;hF$b!2PCctEvVt;k89lfqJ8p8N~I*DSp+Cr(x9F*;kkQ1rgA(1)69~s+U zGgdEsH(3@BVM0HY$(Zf5bI*|zgnjs5gxvkMu=xMx#eFsZcc!$HdPC`oBU!XK)t+74?=vA1ZK1s^RKor#2#xLH(&Z>Z;)bd8!E{@wI*lrS%ncw%)(NX+k<;nM zDUv_T&wI!mY-c_;U4p}y%3Xv>_q?tA2opVDhmCz=hLfb4{-|0E>@(3E;b1oHn-BwP*&tOtcW=i+*kY~h3z5+N`oM+xuS%gwvh2L)6|shKcN#=*{$YNj$9nZ zmB7^shV^*`IZn`oxeJ&zqwS#apTLA9eI%p*j)QIWk58o4NcOVb7BZ=3+RAR2yxBTm zqeTka>SuhJgM6`7K4k#P*wgouPvwGADu2dSIMi0=ewY+<-;R>D<;e4j1!k$;tN_6wG*BwOe%HAgF9DMMb~7W&95 zO87M!p_DB=C$p8XZyB8(cIBmo{Gfz&UosyX**U69)EI;XUlFR7EyPPBg!{)YN2qTL zf5C*p?p3a|0#9Lm$oV)pS7V-i+d~NNDyZlpS}yz_YUb6r0ytG;cW>!37VC1Td=u#a zIM-NHzNT-CwU=B})^SkLnu=Ng&it79Ej7PR@X3W#U!->(TyUmj{t?T4RbNZ+Z4T63 zE7jI9J=K>KRT>zYRCEl1Y^! z5>`_s9W+hWkK-oT9x%L8mSQ3@fi9^r-ksM5~c>AflIin%Jy)Q`G84L&*Cc}B(iF1WJhJ?qy=$^!2}G@6KY0#tot-2kp? ztbc*iW==28r&#wWU#AVlTuo+9|CYPS6*8_Ia0{K=^T!4WOycI>O5Yaa>DjqiJn9MR zWSoP+>BhO>Tgk`i&4p`k%DxF6XuMT77ISr&DS>r7{WM}Sg^z>iWQv_V4yAiUeW~uL} znz42Q?=#jJ{#Je8p7JGqhCI9~^MH$guHubC-% z-t@065j1igP(G1sPopx~iF35_NwaHpm{Cw57;vPSNvFO9V=cxpjZ@DbzvWw)eF z$6Iv|8wXS3O*V1hVq@J6KBuj2ChBzRnvq+~b=gE!Z>Za3thwOp#_EzTf;Dw7-9AhA zRY&j@zrq!sEh(G%1n5EL znF(4MTzs~(G`d^Mtyu&e2o=qN%N3sD2kvy7rS)rH`px#IcybO(=4?XVbEudrVYc%X zJ?}&?AGlU`@_R3XE6wqIi>4EJI&Y11YBX_1WnoHOn89xT{F+=pCk}cH8{dP#nd(x%tyAJsns65QuFTVaxp~MLr}TKTKXuBG1gAt)5bbh zM$E(d1(a)!?t_Ei;3&x$#x{G5UgYvNpD%VlASFM-*&V9v90|np#Yf-_6LTv#WscJU zp3BE1^bu7}IZj{Ck&M3>EMT^=2EnPu`X#q>e~k4cTpi7MaGI&WAX)!0 z6<7q-#8?l4^NiJdf~`RFJlNi5zN#x!d(*0M;H$>E7~Dtmo?Pzlo=*)f!;LZC+CMYP zM(chZ1fFHQtACb^1$eK+EjQk~f1#1a+Zw!6^L)7Y)&i;!f;ve9&e8|KG~+CMk|8kd zsx6a0!Px`qoN3ooa0g?}0biaYc{%KkPD;u`)v>2o$mU3HV@3#=FPfNb??uMH>S8}si zC4i@m_5RUtDlDf|KCW#_E%jpJRRW3~NhBzxM-}V4O3+ zks%4(V83-nLZ4H7)wA?fNcYtn;8bJH0Y``Qw*7$ASWM9Q=ZK^!Z-w(502yltoT5W` z&YYK=#e}VOfkoYf9S#l{?^bYS&GRY4HcJTG=_0!a6LvLtkg+D@vyU(}7$e7(H6N;e zNJ3|rSC{C@F?tFB(@goFU6PD1C_fjji7Edt@FEkm>>t!SB$?Cv$#UxpLiT{*WHLI3 zXOqT)bBysLa1YIU*8d@yO9^@eE@-?lf3m#t3Hu*8Fa*xfG@m$4&L(O$RJL*M0q2{j z7r{&+GK2TSU^?h(1V_gY$&2uKUC+~^`z9ekqU#xDL^QMB+jkg21j^=rr*~Kpj`x#Vw zWBmc#!&t9_Gv?_vv%HM>3Tv~!*$C!2N6w(2F&+R9GR7n+xg6umSJ^krbEcYiKX`_* zHu;CeN%Nks{*lmfs#@V1M})?k1Yj4Y`vqX=2%Dv4}EcvP0LMb@$JTuCTp^jDU|D3ywgq$tb(`=0k`-qZB?`_FT} z&+mQS^}Odj%RMJ;Gxcfhj^m; zpT#b?(2}}m%hWBD;7d>$jeOAsqFtTG>4Az_d!giPWK!!VNn24)S6+>LTd>pYpr^4% zF4X;5T-GRQ^McXb2i8S>4ST#TU5!0QsLBm8$}Izaof@-u`_MyIP6K9d)9d+ zTWL?jGHh*OU$kqBt*wncLvsq-eLE#s44Q3Ak6>rp(p%VbY-xSDq@*uLkt;2r-Wc`{ z_IX>n0eg#E24gj@UtmO0k^;od^0@*HkI}DETgv zw=msm3x~^mCHx3$Kjz!v@6*TIS%`%o%!J+lDvz|{dYyXj%()YhuzZFMzBxW zQ4?hME~560j^-`9x&wA%r`pouG10Db3nhGu)5dnY5$*t-w}ml9qg}&n;j`Em7E0zp zda9`8>?ZqMP_8X~uoyjIOJB$SLvzp9#Uw3)wpwho>l*o}Q>+Ep%WSPbj#gWw4;548 zc7zi6ibuN&Y2+J&9kHc1uw!lMaGAOX>7Vhmq%G~AKx5d_bJ)Q}dIa7lNgpA7wM4Y5 zl19Eyv2)+DzIf#=$$n!iUzRmW`3b1Htt_2LS;p&5O~X#s+_NuHLVKxJDL;FKt$hhQ zI9?yuG3zhVd*BH__w14W2}{w;7azb+STzDL`)bVZZM%O=0S1G@wsIDBid}#$*s~Yu zoh8777X&R?iqUK5-x9m8Eqx6;Q#XufTPX?eL;E*unXN5Tnk;PX!`LeqStmp8E>i3h zN-zu*v8DU4XWP=^Wf;VE7d$HSEh*^GB1v1t)tgN0EL(a2`@H6!+%l59pAz`XGTSWH zgRlwq0bBbbb|KAq0oCsPlwb!ada+d~-&yP&EsgS(qZ6JeWc}2e)Ax1<(6)zN7_ZM( zhGJJ*Y!?Unnoj3ASWa>dP=w!M1t;hZEu9qY>S}8r#g5gSgTTOpgnbuO#+L5Ip0QX` zu5rGFS#^S>*5XBex0UYRAY;JRwZP6=tXBj*u|syqbeZ}o(z&2Ewsbo-pSiI1h!fbI zHTV1#l;CHS^zQP}u3i%)qaLRXn5Xz6hB}eQOtY0s%S)D09)gWT$*Y=_`@G$3F%_6d z?fmbN#)rs11vJCXe<-$piFGjd&BM;LqwcF9*@uXF5w_CSmZ-=mw6%?}w@lD4GVK02 zK_>t{wuP&(!%K9f&R}P2&YPhwDe2HkRK%8ki=DYdvSJuGUGJvYntQ&vTf$$Ee_Ul| z5nI~=JF-M#?`KZLbiJ)!w&SiWv4;_!gG9eAxlQSiPKQ-3t5CDItv=@R!hD5(0#(w; z*P?2)D}i?`TUUFqlWl2~)XYZO^qy!}LmQ>bP=$7YT59CEevd@5$+b?kXjccAdYuhs znvBTiO*E@9Q{T2;@5ATcQjQ>OdvCO>pH*Nl)($)4xav%;Z(DCSlQT!iVf&-K4NRfV&~f0 zv$Z5kX&=6yd||vt$%|Qisl+y*u$YA=>JEyL#$Qp`eh<(o8u>oMZfFOsR+~xHmQIkv zO1c|V-IiX(ZevTItizQ% z?6jr&HLUZn`)ckkAnC^_!od2`uEDnS8|+E8H0eQx|3pc-RU%1>9Y?qiFv%8Hd5A8u z^Y4W{TXWBXha~ej`JaX@wzZ`ju#+vdR$IQF*jcuAMFUAbf%fi(45f*ZJ(G0@<{!57 zC+q_gCDYHYu=@o0f7pmsgB`Qt!;JN1dRa3TJ7=Ob+T1))bdr!A8Z($|>0a!VWqJfA zhnPh*ch8kGCyDwGsNf_$i9X$gmRdHe1O>t32kX|vIPe=}{U2d)*s{;CGwg`YzuRdWe` zOVmOwm_jF6-QmT|vGdQyPP2nHk~QBF^!=7hp?3b)v0WePzJIzEbEqA4YbyzzCTc=! zCQ;1_55)F==yLJ0gE!*hW!}!>g?wjVnUf^#OafO|PZNCAW6Y#>@VnYjp${eeP|0$> z5!hQM>B*vvq@E#mtG3Lgwsa|WuMc%6-2XT=wac;damiKM2JM(kZS7X))b<)DSWomwhbj4Hb&$jfwP7IReS~?%Qr7ew<-AWqn z%&a_p8@ou3($?$B zQ`w(w zVeCRH^iXNv2YZTS72(afeI)b~(x;wha-E|0*Av+FSLj)wYhRjJ zbI+N+lC88IUSM{$wFj~LqE**7TE9p-Tl?9Il6oF(^Ou-iZS5ZHj1|^9CY$tQ_OPXU z`bn;mw(8I1YDq8!q)B|AmN|UJ~EKm)zRX!-3N9OsvA@!(5L+lGoecU!1NtjAs@8 z2g&_Sf88=ZIK4r4Fn%3xl^!w}cc_6IEk!>tX& z-A%qx>6YV2=1N~)y33H9-}MJA1I=EuHVpSPNH%Wkb24Z3hT*97?fAh6_8w+dWoN({HaWbvq3s@PLXKqeKQH;^oEi4vvjGE z%TuXM!%Sn2j@$@|m0G!pNs0H3!E`w1L-^4j&iE_JbU2&H;ar}8nfW@^aX7w*WdADR zPt|84-cYt#jaQ_>WggksjUzY892s62gv0;DSbEqo^xuVK`()SOJY;y*vdv@_DEG0NvD2MEi#u6LzGlB}e{X*bbS5gKNKe!*)HyCFOnor1)#fTx;$N^`y~No`)SinO5QA zb6%>Aket8xa5p3;OMl8TzCebxVYr*fm_I4-TR1WtVfRB^Ywi>{{;p~E=D!7QB^OB< z$iR{5m=BIXf@^h-{*u$J4I{^nklZZmW0eW-TDDo6W78$$FX~zL9l|;a)D05cYJbLZ ziQX{6{seL1wmxH7bB48HxCcqCYdp!f8Arrxj)1>rNZ)IWfMzq<8yvg+M43yHz+oI2 zju8+ui>{)A>TO+tC-jDq)igyYiTa*t{Fi#eaC7>0ov>|%$tm6}$y<=D)gD=UJ+W;3 zLA_z5^U4a+#W$Z#^KoY+Z)lB?vp5p>;fQd%A_G`Ui1Psif zU;omdmG$?~8-{xkB<-q1e^s(v;(5z9t5{_&Z6@v;{2*kSG9CSNb*|j{hq3hBJVw34 za}W}WVy>A=7sbxEHjF&m%L_LcEDLdDayKilMK8{m%o|KI4`k9t+=I#UyaGwRAt_(; z8LF+8ZF;XmQrNkz?~*;dz}hepkCG-gY16$pa=0Ut7qx&4RgR_$aTGV(bd;>ZQT}5b zncR8FOW|F_$mdRue!lcU>pAFzLI1)#511ZXB&BXK>Vu1EUB~{=Q`+648;{~pcTn;o zH(o+BUDsd5j9;lY40pV2C!PPf4;W95bb>Q z6*TMkz;e2#IOF0($+8JU^o9|1?edxZ{CrFhM<#c}^4g}+%mx062@_V(W{!A=SIj(4 zg1}1p&yk>;#JK$x%P+wZayWj1WEW6nQqKqL?^_0Ht-1s6^xqIj%5A>F_!|TGyxuU% z(^1wCK5%d~1>(k9UP0@vp(M9>QQ<*<+4z-u!*G|D(jJO6HH$&SJ-57cHzBDOQNNJ7Ve+`Lgz@x*&KQ71>Ux0RU%=#O`C1RZKajNeX#FX|##^inqj;mFze;xiN2()T%vLi0Q-9Dh&{1y~=>(E}^)BnX zmGP(bhT-O7n3u3Uwh_cJ%g%*_RdG(2EbG6bH;i;mx6^)qO5}9Oa^>e)w%LnUAhGJ0 zZVj%1a`|HM67di1xC8I>)d=~C%;WdqNO2q*+)~y@shaO3h2voICM3K@pUfp5)Eh>r zqIS`2GUhjy-5r(bI5C+kyH(I1aAaF$yHkuRy9vt5#ro=Gn%*#iu7_lhr}e$Uzx9UU zZXi9P7z5!5sw{Jbu{$EOqZk8)_TX{U;xYN0B!QVYk{wHr6Oa@R_$sSF`H!p(BdeZ} z&^nKtd5SsgL%m_RfBs0)3NiE>>}5)FoUFbDNm*gn@TA@_5?1+`&RlM1J4|mF?!Ayy zQddA)NBggRGP*G3Y4r)kc9dr(B$G2atDZmT4I^UB{S=q- zSoIvGHw^c_{Squf+%gBqah2KR{UK?qJhJ;Zv(;X`VI+)~iA8Alz6TirE6sG9A*n1y ztS?;_`PAAl(sh!*NSCk@hs%-fpHHR6U6iE#XXNYfEPzC4Gi%UX)f+~{rt^Nv_K;+&h}AzQuMK7y2SGA6d1TZ#)NPmEFd}-TK{WePhc76}W;5Mf8KfLP;s~ub z9rwsm90`LD)A^2^wjP$#(UifPjc22oDUVtk zhWm3!gmX&ePH6m@i6$M%>4bGk|#{DzCg7A>li5uj>uNUGD^A&W;-xp*IZoR!A_;u5HvwYr}B2 zgSd*?wVkUs4EGNw<>6R=h4S^kp-0{@+xJaKmesE6XgkN6rvq31g?A>%E~jW;Rrp_M z%>{bHh=2AJUl^m-RlcR2qs@ce^N?hENhJ)d(;G&@zaX*nl5)pCa@yK3+;7R4ICj^= zI6}qDuyJQ-0b1+u8|(^C>kT8_`*KmG`woYC4kE7;D(0}`bLQXvYl`!t-Z0!NAYoNn z`aa%w*4i-KU1Vx;!fwKm8e@jN>pPnNPVYRUH;iQU1_Dhu^;;*-ECjJ?TlS@ z<;>*xB=?V!o#3zF`vp?nR^I;;cdKmWYuL#v^-l*!4Ac zyW~;{e??!LpSi0LGG9rjU!Z)pGzUA?me#&VrnYpv)bt}g0cvAQtNq3mZ(BMN zyR+t=FMgAVpK6!7#BCp2+Xs8FUD)l|X?ECHX%`^uGr8QgnyMcX#|+z1uV9b2m5<07 zrJQn^dscSPli1@|S`Vjrf9DW6RkAG#{)m0eme#z*)m^APk}br(x5BGRn?B#8#|)8XSqv~%hUR~utT=Ct~_XG5 zKK1-qKysA!-hwf%1kHSD*ez}CX6&G?y;V@sDxz)bjd4}Cwd1i~FJ!X1D~wy;Q%7}o)We4)~dIol37LmF2`c@nhPRtE2i zab;V%CwVcmbm4g~cy?u~{sU--t*jhP=h*%K0`>vTJu9OnwF=tbU`Jucant?h^HU#-XLChV%ytp{*r{ykK`Ra}g#wk@2FUEdZS#|}-m z9@dkZ)euf79^+~=T{5fl$bm9f>z02mo}RTc&yJT!H8S@n#JGCdF;lU-uC{JauER{z zn5RzL-AmBNO2oKE-pL(%n4S9x?D4iVC})(kPste93|qPqd#o+Jf}LqgACiI9k&Z}= zajl%L#}noZTUpQ_it1rzQ&WBm#w+(T?xRN4 zOU1ZOO_xv*FXjfj^3kQ~T08I8B&h~5KL!0^$1GKbL11Uz2ix_I-tX3xk*pd-{RbAU znXg${c5PexKDOW1{$5r>HPJp^F2+^K)-K2X!!E+_*vXo^ACkj0DZ;p<7*|7E`XzRu zHM*-x1lhH1X=mx4jC3KWgDt&)U1p6QCJ&ZpH?*bW1 zY;B8s*&S`|7xzj^ZM0>pGp*X%e%Om`?N;nUGxVX-CueF?+$Zj1R-K{84Ca#Mh8Z;(fN>)Ei!Hle-2ADP37wv!@EUzWOdQ`}FKQpSWeGdDYtzC{Cwza?CFIh_a z-~&vmwl<7iFiThI6YSZV^LC@g^(jL8+O&-=orN83OMk%5vZb}>qH1qYr?qF-TVOQ0hhqUK6 zpaiK6m{x7+I_zGy)YFh@)s{XXH5(#b3~FOb|HSTROItN!Z?L6vWVe!D1og6|4?oP* zX-g+#r)lmv#e-#yC~WP<_-*YZ?D1K8*ZyAFcG!pHOe4Z(gqS34>5tfRvh?qDnlQ84 z$|*ANVU*`UD{bXNkI=<-0j6PZ(cE+Xky(w&zfn^rS6ezAdxI_g0Xy4{T3@C%ChFK` z%&xXH8+(Uc)N+q9c5Nv?eh4Am0s6z1MmJ|4r>N>VnWwN_e6?70S7vj`3Q>X!uxQPE z^;-}MZ8P>POusGtvW0}2Ag$7p+0~Yg#QwuB>=Eo_&3W$ia1%-}vK6zdE&UQZcCCI= zr*dlsk1c&ox<7(6`Z31HEIk8Y)?TZ7Ag&FQE0~|c$t9)x3((IF`C?mk^0m5BH?fD= zAu}YsDbkaVGqcXJe#O#`;bBJ{fSsX*o-OSpwi#8boI*$1L1$q1v$ZF%m(7yYoWvl_ zfv{(LI>#0+!yai1|H6*UvKA&%^HK7i`2_843(sLsS}T!O{H*Iqrc{mHlVrD2{sTH^ zD_`uu9&d+Si=C^v=UN9zX-@WyJ2Io%+Hu&Cwbqlh1u+ZB*~k2elHEF?u$*b`ujqa8 zDW+5nbI;xSW3VYeiUCRNuWKzMWnPjymr(Hr}_tTQm(qF+_^ckkwyeI|PbjcXL8!M>; z_*B_8w)@)gC@|lUOKL?n&vaqZ&BNa1Y{weOerG$Z{lQjLW{pa;x+_hdm&jM48?(_m zYX|sQ6*MlBghq=yo)CFA=%Qt5l_#g+vqn#%Ja9WBv+JM|C9YBYM8y*r=oh z-oo7(3967u?n=_XjlUw#z)s_j_h}qEEQf@DiSx?0ZIBF>oA~?_@ue*>3q22#dd7N( zZeU|R?*T|?iCOAj+EVIoRH9>EtJI!r-6i>PIgsJR7-Jql{L+ z1qtu9DiH7Q@n3HZIn&O+fR`kWNnuawg+FAs-<#MMth_uQ^pM|D*m*tzHM8Aku&?Rb z+`x=njj~G1+1RM|v~?ZsxA|K{J@FhFZq#L~Hi?bwP3HTW{|5=bX_CKHf)B0FzO<^+ z^S|E5At?_15J<#v$?6kGnu8RUxli~<(Z!{o^jGw3=p~^ism#@0>;Y6qlW!BVXr z^A&iW&ed*rE%~eiO*39D@yC~gCuDo-OTCVuF@4!l*IB>L_k7k@!X5n;ij{bQDqD@F zF077_xVPd;_{IUpYN78Mc4r+&!i^cv@lP=*UVM@0(JraAGrny4t88#V-5M1712^L! zuA(NH1xa;~HIN(!*$qi6W~Mp}$#szLAfZ@Ob0r;=;XnmnBKtT~R2&j2Zj!Q)Ob4m1 zNL89a-3#QO%k>Z>JHbrV5|UEFBrm?iQ8nT~uObSSG)3=1ViQfWSZT_cWc^Drr<1>S z`d&Pd`^{qHKwNc9ZLZSXYibJjqwsZ2O#&pXo=K`eQW}_~Atd4;ZPG!>4NXxeMIJFp zA4qmnlMGjZ-Z05Hh>Nems`**B=5$DSl1UapLK!C6)sLyo^^S>7Aqvhi$puKRgWQ0m z&Nek=`_mqCHPPSns1C`Q=Tb+2z~<&p`$xN@S}U|Y#`-X*uQMB28?4!%c`~Mp|5((k z3f=L)!NvyLKTYoI%JefI6#OhkF1HL+kTc`_&wEz)7hgB_{=Im%Y|y*fiT?6DAp5 zoZufRExY@JUiJ0Yh^*Qdm*k!xle;r*&6c(5PdWLDKfZP(IJH57)BWYVW3c;5To-?m zXZ=8VB$ej<33S7Dmq}C059M~ZmsP367$isdU@p9f)*t4~_w_L{SodQXbCOtSxZoyov<9;_to_)@5ea7-R zMEAX{)&y2jo|J_;G1wN~r(LMdmCAO!(V1caN zG1l_tp8H>6jPEvEwJ9X$Qk_MD2!>%u(v+A!!aW783f-T5oY5^sX0Ja%>$c$uIaT6h4P5WjRL$ zsdb=aybO53KR7CWnAODkQ`7gcu~?=JVi32)yr%n==i6SSyIzMZ)6RvM1*QDU4A)4L z_(HPlMSsxq(J(H`u=@BO=Sr>f4p%FEbV~D ze}7r;Mm9EB0X*5mXYu%0)UOblUAv3C#?-0fSHrArMR2#4sr`sK1hPXr7hv)%Cz*Rb ze@$)>$8+s93HGOml}2z8LYFHAGxJReR!c1BO~?LNXS`;FWGUqtP=?&@M~f64sn*X{ z<2;PnOXoX48V?}fNsvR@xdJmy2me%=eXZc0iz6j_01@LxanfnI^>V57Kw{Sc=FVJO zA}M_kR?Zvdw7UnAy3u@d_^RIR# z>O1S+%YgG%0DkM%;}uTNdc0|Ml6vsHgk-+rFXWvGxuA#Nrp?b$m; zro3jX3KR3M3V%W#k)$PYN%0k?V(v4Kd7Y%m2o9l>ab!9iJ0YP-<_vQT5{@z#h<_?l z$|U{_8rqSnu_6vlS4f(JM3>CBC>@1}ci>ZK{~BekF$?_-B$fM8FZj#F=U?H*NRN?R zBxyE{A>vqv4uM2;vV{E0;FZ(li;?~c_nt--c4RmG%zxLxMW$1!4Q}gu%k`S*4P*K7 zG9>qyxpK|Fl%6L8M^VZXNHZLzEcyn&MB5|Zj+hCeYUnx`S5T4sxng9II9-8-{J z`zzdi4u@->nfOmg>H(7!krt!bznaKPqy6jMuSillqkYW`uCS^BnaJ-Y;|qCzWjjTU z^F#^ONGM!zrdsp;>*k{08kK4|xP#ss-os=i$v)!QK2yqsIizyMI>cXZ$ysVKr(E7< zm|b<)oO}5^_fWQ%<;C?ZpC#EU$#?J#dE8e@II1%G`Gv2yEp|lvQW|khu=^NFvITg^ zg0mWPQBq{t7^a_lXS2TFWUb3NFS~@$w+J-ej&uh5TwX3LKD)e5%kZQQf4nL0s(Dcr zn>YCGSB^L2SM_I(6nlfE)5dqD_8XM-FuFr>>2+2zzhD-cYhAc;du2W@;nA$6$wKZQT+{o(=Cw@>oiH0u;90M8G1a8?qmXTBDeNq)R zhr+{9I+UK#}E^J)0lJPM8)VKUCyh9-TeyeO?V$=j>?$Bq%-bHNOu#}!% zyi#&J6Wj?Ny;^BpoWhVGD-5%LFfhH|2XZho+GnYxuZohVN&)axjlD6v4cp3CI zXU$6x1jp%%b{^i8c=~OBg|6;-7Bu$7>X2N=^0*TuXOB6bY=UHNF-g*VG}}y)IbXU? zWF#NqEqfFFQz&h*Nfh&eOb(u#^>2B5V|Ud>juLFLwXQaLcvV{FBzpC4U|+jV)#WGB zyQj%rlNmsNEs*5N9B{hHlWckqEmSMkVv`w14Hq#IbQ%w@#)+WvKCoCVOfC0z%t_j< z7m78fFhrV4yD7}-gO{+wJ7(hiT(##aCfW$hI9fX7(j(w#rPt}9s^YEM);Hr=EidoCflcNH(}1sv5OJO@@v?mJxay$I7i$El*b zx4z_Cd==~4&3a)|AG@H$y~lWbR?=sXM>^!34&z;b9cy`gdogn#m8_?Wm-GC(N@8a+ z#1mGl^_)r^)d-WWRX^Y31MRB5eIVDY`f|l${!D+xV%s3PuT^0N%9xJDOZa{Uat@e0 zjw3~2joPEE!nBf_v)ISN5Pk;zE{CEmm?526E+zv)zto8rmMP_fS!#E)D-tDC4^c0J zB#TLoLLv^$El9|rxo;hLJw-ck*eKwtF}U}z!P0Fu7gXBH#o2WDTN3v!wfYEIFRNCb zo9pD6cbR?a$tXPTmt_HeJge5rCs6NC>(!~KYA9a18}lB5Zc>Xsz8M=hnA`1p2z$J4 zqk=M5iR#K8{&-*5sIK!^9XSV+!poo+7*;9o#TD`#+9);NCySeSGPS72CaXSqB5zMf zmehKmj(Qh!rKR&7#?0<4sq^AWN^ZlrLcS}2%%|kxq(C{VFM_%+Qs!`>sFVzv!+h9! zGiiP=V6^!NNW?)FL2@1BGf0+$jo|F0WxEVG=%FbsDt;Nq0P>q1|m|OHnN!o7p zouo$PQ)MD6X{k1e-f_j6yrq+Q{0U>q(DHGI$QcI#OjY z1@n~U^laN9Ut}^mFMvMQ-lU!Cyw)1cPhirU#y|~24rtvP%s+IL(>vvZ1x)P!fDUbu z*vE>O;|aQp3)n^KN!&vAqYk^67PZIwGB$Ty7qGKs$SCDq1-Y?BpErMo?YF$XpD}sS zbL?eaZsU`fMTDy)wbY+Sq$7WP-FFjdtCgR36n3(X`o8SJ>)i&aByo$V@kz{vmece1 zZmF@Di6BwhFGf@+qE2g7VSG4@E58fi;2&IC>f41&ps5F)Tl9Lieujx2#Ix&>5yax*$m0JT0kzR z`G>}yVS~`@-Rc>?wg?UJ4?3TGW-8E#7(sVs&T{WX=y>DY?N|XI1 zc$h?0dL!G+2P*kl%yU-qsF+W6MrW6Eq4*&-B38vYQ`xzSQ-@iKysr<<{_~XmM;VLV)vi#+I|HBTKvuw{_hvngQ6pF9Kt|Qad z*|@Cqg$HBi)Zna9rZtKy?S4}}N5DJhFZ0K4gnz-Bgll&!)u+Qu=C;Mbb@<-OCn)>bYdHX?fcbfXQ6xm^tB}ZiR z2LDLU-Xn5jgSwP(M1mV>s-j=AyNjEqimHuCwleiJ%kYkDT-avKm;9c3%|@E(T~O{$ zYp(Qd!~R3Ny{EA2TOmBRzLd}=_LvI)ql35UJBBT=n^|tF+fwv`;>%6`psydUT)uNN zJFZ;dP3-Viv&bJnQrh@rL33W*b6js2i;jZQeKRKyb&t~5ZTYqxd$apFac`ldV_;>r z>m};~Y<>?#1wDI?%787D?mVdKcIyb>91%m=o4+}iCXQ@lIF**G>Q5~RY-jYfJf>~~s)D+^OAm-|0fcF3$~J!~$#^}k zp!XbLww6?p&yl!$$z_#x;c<1V$!dd~cUV~#+lr}^ zsw2vXY2{1!&Vj1h%Ghtz@!qOfLz%maLOmyY_~V^`2Ga~hfTjnvr9xIKoG zwZ?8rd=oQAn@Oi=5-DGWR~omKox6!OTF&lfu3Cd5d_W&0c;{o=2+u)vl1mY?S^F*f zmbgFjC(erF*cE+RMYD?YymZ;a{=Db3g!hnTnKSCTzw+p3$v)e|PBRpk#s{O-(Z~I+ z6#K|O%JbD3neq_{ZsKbu<@Zv?$~o#>OQnr!hncCqUfqxN`{<@c3vu|P3T6h}ds zMnNR_7e5T_yO%Zh!*cts5*1lWtU}@+bCzNAirEW4KyvHKfa%4{C3N^s*`{~rcT(zO zeoS8Zds>S#&Aij33DWLkewKIzN5*i|(disb*eph-cILUhPxOY7uI3MFebVHsl1cvA z%H)GOc|reyxIUANONr%5KmVh$P4DNB?86X=I~W%~>-XY?5+3}?M*lv1G5;rdb|1eA zO*l_09Wj%?0m(S5U-04oO>Y=^KlwB6W0Lv}Z^8P+vdzT2L3JPPx8xW4`k3j6`<3b8 zYdJ(R|Lc}*dM`qkp90;+ zk>Uv2{}O?|(#d|cY%^I;8BVhJL%B@Vj+g1wlr=a4?_cI{=Ww`xNBZ|&QfyT5vI+h5 zhS6;Q`(4T$@K-3`@(RP=@iL0dknI1wswGh2k2^4EJ>tR((jjS{XesaEl^uWU4I}>Z zvh#qyV)+wSDTT+J-5>pv1CLt~H7n>>b_6#43-5$4{}-)ZAX*0HQv7Lp!wCP+Uy^#z zU%@}{8s&1t{}z(zmh6N6atZCPE8EO{_jNg>(mn7u?Nz|^EP!OWtaSdQf0S){1rm<8 z7B#+~u{-S4Psw(;LH*Reo8;MjLvDS_3|mvmf97vdc>Yb+#yiyuMfdnilvejMKVw>Y zMb`4id-|5To}!X@TisU6Hm0E@?^eu^MY##tAM0y zV~^LuZgN=(v%N)G8e77qzM`%&yR09{csF8aYGD-_^991$QAJseTEfDGin@|_N!I9u zq=J|{OQ7<(f?40rr*Gk+>Ola7zr_p@m5;gNQ+8R8 zvwLes7ge`yRi)mQTGY3O`g6N|bI@Wnj!#8z>CQFW*3BvE4Iri!8t@o9SX+=@ef)JrIW z1@*!4o^foXJ!qaUErPh}npc3gLAWmRwLhuaSNWV5Adx3cdBFhj_gkyiyMx$HZ+%GC zHS>9f4jf+|kg%h;uRu~ArJ4xIb&y4nwCZLhcX&ZLpIWU_??gWL?~oKng1bsH*y@>ut013$ z?XTFdQ9efph|3{;36kP?Xyi>u>=#z{4HxC}?t}y#`eRD-lUak`A*n~K2LX0{PV3hT-g9i+u)?~dWY9O9eN_uud!%-^WWyyra+vp? z$K>v@3O!ETr-->2QcyehVjj1gp6`M(;1o;c+aMk}`^(<)>I8cquuViuAnXDC<~ zDSMiT!=(v-yt8p6SPswT3i9@83iUN8S@wMI4;Hins8mrUD_T3I#9ijnTOBqy^`+RH zNi{k{v?0=iKi=s$Lb|qDmPV!Zd{I%pI78rHL7Wn++7_;)Oe=B~O!iT$E!{1oTMps+ z${7AcO~A$OsH^*-(&^NnVs_Q3e^vA+yQ8A-Rx1OmCu(5!)fG;WQD=!cNEYzN`wou5 zy22apmS4_t0{Ye6QuI5@_a`o{bg1ekR{BY&NfK~og-r7s%pSm4VsF1Ks(3Cx5~K~!l|fg?E{!cEoamP zO!hUSVzKwAg^1Oeb!6HPq*MpWu)bb#>IY87o{^hi-%5m$^422IbL$?-{E=%4PgP^U z@7C88)?i=IMJOb9{X~hD+`5coQZxmbJ)ve;_#?^PKtKT6Ce~ z>7nQNT*j|lZd+GNYFuEC`X37J4ycB{idkE?=LmWC0u4PucB()8%1-@B6z@d_S;PC; zg(Lb#$8*va&V}isP(5H9`jRKUd7DR$%4{5my7qITm~jrnpK-juB%QMRN7)6V+O0L z)>Y?)QPSfv?m?HT$AH$2;T?p%#nO5YU}jj4{P1v4kIS@Lt@>)vNzMiiZ))!)OZCLh zk;@Egp1wko_%f1=+U7nsNfD{_OshcUQ-BI$J|x z9m}3xGWCkT;yvT@ITk`P9nu{TF1FEDZFBND|5gF2nTw?o4gO1#Az6<0Yz4`*LRRaS z&-o@Kd%YQQ0VJ#&yW0MI-tQIp(bT&dLbN`;in1NvW{{M&W><92M_z*@KW1vC=OfD@ zL5F5vK9Z9T%5*%G^G`lfvJs=jp{bRRw1MP0GJ779;vnhyh%`#49*)p!5jn|ckPJtl zA5@_B<_TfZhiSz=<}s-eB-KH>Led;$#KT3?UC9nK3sKlXHbWu~auSl|_|e6m`AG4` z6zB!BKt1x2EJ%9nOQz^kkdvH);V)+6+ggQVmm10g96%@jz;QJ@w1 z$N?2+keQdisYTL_D|dZCk(W);8~MmQNTx%x6_V{BU*{uNAg;k?HlW`5hya$6rIjT{)S{aG$or8+A$dG zLV}J#{X{-80Fu&A<&}P?_B;PYcSv*#GINaT%K1nL5_V{wfn+<1I6NPj4RH;(s+w+J zGyWwH*`#4h%J`bu9#7{ZuR@X?ns*?n4zfNU`5z=>gpS-)|M;|Wt30I1a7d10r;>bR zBP24Cr`5U981+9Dq7RGqJ)D~S!$v{bbBl#crPk^k!diB@22UQK(hZSs8OIuB5jO7Yq03M^}Q_E@^+8Wl%`&yG6KEY0n?;7#zIX5{GAD8+q>* zXMvxzkzM@t{))?QxuRm*G7WVoB=c`k-DEaqSk>h>o^5Xv>tz|lAMbP=b96hb$4u5? zkG7T5w^?Cc1ueFVllZt=4y#iolphI_NV}}ksZ058;Mc-^d_IjCjiwl|Cus_z} zzs2lerFV0?&mE}ft=LXoaIpHI1tzsqb$v-D@+!o)VmIHPUm?PlXD=|jDM!c!vzBB z>7O125IxvlHHz|hyI}GNdBH#uPgi}8ljjyL^T!v#k@A=%t6#gG#x5hZq5|C5#N42B zEF)tI60G49YPcLJfU_HBL_0^zMVthS^P<^}&&J*&Cm!cGtQFz>qWr6xLQ1TmKYdwLWyMq*o zBBOY@FNz%MNPGT7b?Rsx-mU9Z-qCE#vC?@y=qS5TM|}a}V6Xjuv5~3cmVb&akUdcW z`^IldA#!+31{EUv{`eNl7%yeZz^txh{1o{qIbDeSxr9_0(X*Y@Wf|p(+JMP1UV2RD z`bGGzKq1f3PBNe{^}dRynI&?Ul#MD`-Oko^Db@6yFjJ&QOdu%bi{P5Wc8)IH9?Y&f z+aEj2lp%Qng5wF)<9!hTYiP?5v-|W)D@~@p2Kb zcLk)Y9EqmY4r3nB*ia(IC3dm8VUN__(Xt9JQ_d0ocz5F%uLI{`W)GDC@ie&id9@R% zzAtF!g=Rr|hGnJ#i!2}eW1cD4(#S6W`rCw=AFk^$bV1{!O( zM9d57dVosotA&~Rn$Elv_9UJ8Xo*WC<`PK82%Y&Y?8Q3s&M&H?vPvJd4wGeoF(ki+ z?6Ax65B4ct%AmyfseUu5#UJkrFR8naDuQ**AxmEi%k(pAP2sLD-8~mYc$59OPxedF zD?lZF03P^Q%5CS^_7CS55-Qi0}C zyYQy9)VJ^Azhfh(jd_vFBj1(^R18$^|6fOQNLCxZ`l5cLF{5-K7}W=&B3UnB%3veB z&l-@P?fvCeX=dynbr9B84u8CZUs2b-E+?Dh{EU7MP*xLc%nfkAM2AY70mz?U+ZN*?giB<%t@oQZFPrZwiVZ z%|>LQ8EUeWtsH3KSv+KOpUQ!>0#R8gLW^`^Jdq)CE(IZz?}QxwT-%qZVNQXJ$0 zB-26M!$_57rYZ-CI7nTHYptni1qnOI)5TRX2YPk$m|B4=o~YSMyxwY$fXt{JD4D(( zlFSIpyPCfSlC@rEp}Rf;NpUpXr;uES<~$_4!A#{D&H>AjDjJgG&{R!VXro!5hasU& zCV2{y;UK*rnGW&_B;p`rAlVKw6_Vp13x=oD-J8wK)*uQx$YDsbgZu~yIY`0RXdwqF z4M}y7`ypu#^7v~-TewoTnA!J5lQqigFy4{PEJ)^_JK2!d zl{rElYRXb*^9XsiDJ`%cMR2b*odh=bX%?vK_Ix=)<~-8pbn zoh)?b{CeSN@jV?l?^!c?bMDis3-*te*e-#;qmGg&`$>Ls%>lIDX*Ocx%|pwtkf4KH zgJgCvOI}2JcMVibPh?ukbnF`CArZ&Ea33VMqgks5A*oN9qy;3llS$e`LJraulGgc- zCaumZtVpA}1>(|Q!Vzp~4#Xjl+^6qI)$aGYBF~s)5+u~cBm#+aHOT@isLeQn-SyAd>+ew;sdrQ=|IZ;g4srsL+{4tIPv898vw^M^qpso#_0s** zB|1zGJ9;A#lG013w096ls)IZV$#RgckX)PS!8LI6!Pf)V69cc~$*E-?S*Jk4$643z zjOQisefXU9jrRhRq88d%y|>Ae6_(ZSa}u!|n6*Z~+42kQY|^RayIyIRofDYY`Wuz* zb=^Ta>)Vjj_e^r{7)AgyrmB$E42DEfOtNo`{5~g8p-V2F>?cf5?Cb2=b|dN3sgch z1qpXF2|uwR@!h4ylC{GTf-Ga%nOD5Fatvwu3plbJrA&u}_nT2?DALI!s~|ZJ%}0>X zAX9VKn_N?1nVgqp01`fIYHG{y`4plhj;!{kqcjg{HcoHvTTMRh(jOHmsVaSZGyAfb__<`tD{nMvlQgK~zO zXtPS@Xx~pEnY&EQRfx;6Biub6!hg4K-)V%WAUTeqF%Xj7+Ke-KJkwrkTNABE6n@4e zM^!RMpoF9zn>7Xr+AutgVaWvg& zNK5u9{%21{zd*vTnW68RND=X?^Gw}ziICi`rse_2HOG)_GLe2tsbaQxKSVADX5K6$ zkj$wj*$xTrH%T@m%@OBENMyRHDKLr1WUq?nadm&D!&6W8a>>t&0>!$P!j<{23%~1G zNY-O!^3jlpV=tbf$N*Eb4wCDL^VcNlusBdVy~$(-)*v z7BOln1BiHek%N#l$NXMr>NB+Ozo$wn`!STkE?^}DVRaqIa(?JNqN=OG*e`ZN#1~Dmp7}k7!n?AYPLW!Pn+b=bWr55iQ=X) zMoXK4>Oe9ao!K0c>6p0sLqd)rH4UQv)3dg+7D2*}p|oWhyHTd2?fynoKg!%^3r(kp z!^|R9goGVypGP2}FHKEXNM@=@GF2+a!1;Z8(WiMitSKt?4#{3ONgYV)<0csmNp>t5 zW+=_Krsjip|Ob%SIw!RPH(Bhx`4 zM~y#F$sFV7kV^KA8R#q|&2gl-2>}>~)Z(+Kv16~U0!eeUcdJ>9v5c?H&@Uj03^mD{ zkXT2Tehvvby7UYrG|)^{P#EG%Owtq*bPVw)g$J%O9HC!Cl=^|0ECUjmW|HlYkfW&! z&Sum(W~Tro_=cJ45lGIPcS!%<{a@)#C(G>RfuiXH@u}B{=S|y_Adv$m*$hc@>_*2S zYP!oigr0*W?=n*rdzZ24Xokljsl83j=yXt3$Enu@hZ z5yu=-{{5m-ab=)$1$jC0~g$;^0j`CkYT%AqL4M=#Z zNrJL>B`ddjbEuVLM5aSj7w7fzOi0AB_br3?9TW3rNUmcNISdIq)|i(RajfNH(&uue z(9vJzAjyuIrY2jw9%4i25(DYfH`}o};9dAz6-+h9D6~V?G7RO*hN_f+A;3GBO<$UTUHp5SQcZ zm;S~@7(QQ#JkkR#bkkX%P* zvmsR--Mbu;9vs-O-Cp7N=7p$6V9{QRoY^j8h<)(@nA*a=_81+m*(# z%KZ@%u41;w4ahP_p$jkJ_?r2i8M@9A_M4t2=>o}ioYGBz1eqA}n)(nV*Rg>984~Jb z#_@bWCkD+_T;d?K*p{QRH*kCo@~e5pRkmS(#^1yAz?=oJSX3hQTppR66}yFGneZ< zNXT&jS`EoqZHD_s5yzhDS;puYU}`Euk{xaQ0z{q7kU+32c@kj_%tH3C=V_ z7ygje*=gRmDFX>_Gc_Sd=oOPZ1BrEHKk~z;>2=4xGYe6QV_+_axE#s$t3ce;%Uim9 z3kf-zx1e;|$P`ghM(`)S%5nxbZIM^=+K_Oj8KWa4YoAG8fP}s?$!n0{Vv}rvBs+GJ z>yTVW4T`i}!4(V#Dhwg*K*K<> z70hHarQ%kG$yyxAt4--CNX{UWR9;KdIj%i7faH`m!*y30N7KEbh-2W)f`rT6N%d-< zw3lCyeOm)@o(*f|_*PE!4b?h5y5Wi#2839qxE9A{fnGn|* zlbnWx90$waA;JHbbtYg=RmmQ|D6Kv~IWi%>ktK*P2I`07v5WuBX7{emM zH!KkW0l@@jRGd+X>jedksL&{C>l>vNfv}1#Vi1vL4QvP^_hwOwN88!%dtobWw|i&fG$~b2LSm8>FFKhMtn=qU5-lxR1Br`4J0b2B zc(GYE-wVsh7Joh{bAeTKnIluIi7`lagC%_-@th^ELOcn{{Z5bU`K9j?$k$1#bO1$1 zT19b4T2^s9B=xkFne1OWk4RohLuQL@D0&aK$cEM&;yxPZmjBlfh(dBN*5I zNonJ}la-r?i~NV?DXnZT!uAQL1#H$xJuZLcG9+hgMpi@MCC7V+bN zb&f^CUmzig*-A)U-j>`q&;K^d;lIIrmQ8N0+CUOA!OoDpB;{ZI>ld&T!)d6L>ijSy zv(cJY1IdaDw?V>8JDB+)NKC>zlx0Yn=GBm>OksQy6c?vvA#P_2vSKqNCy!jdf+U0# zEx=!=ScA@n#O1`&5fT=IhPaQYL?uF}A(WE2RzcD-vn7!1>()d2U9SU{oVbwClw4{I z87cX8_CiYTB*}xeu3Jy5s68Yk57>u6(v?=`c}Q-7CA%Rh@oVcv_(P2D21$m8+HO-o zk%gAL1F0Hr$w!caoK1H^s>NsCVq7h^!u26J*J-kd#!fgNywUi+NA8d*UI*Q#AJ2ugm`ybnbDAh>|(!?&;(Cl}mU4+K!g295eevQsU;(jwFuuraXDRBT|{RLcG3Krol2wh*)tG#LHNj zkx5X#vqeukGTM@Ar)ZERt0AGAEZGf-iit%Z5^ERR_$h_NH`rd6e@N={`FV40>WENg zx+S+kyup?vA<+*lc?A-ZJ!lc6N+z}gl9$yD)im@k`=I2~jm6BUP5fp#i<<3a zQHzgx&Mo;^4skgfcxWsnE;02mq)IBTG59L%gw; zoSviCZ6{mQ&R<`{5vLO^QL(EZBqhE7330C=ZWlT7yj8aml9Nz60EsNOGG!}Srzb5L zlmvN?TQmt0idpiSBP%Rf42iyA$sVVNS3NH0KF{0lh&Zazr#MrJTB}be25YF?k=N3nW>!*$&?uf*BkoZe>u-734@yE{)Z=sdxum%&QMD&B?Mb9WmtdDoG*<$B`QZoDHko3n^ z^^P@u95|g9VU`V;7?HGuA1tBmOl9w7-n*?QL zhNWv!B!}9|AvvjLqah(Vk-Y|~lJomoNPMn+cK(%<>0zDFd|esCPqV1qI@VX-((CVk z`3aBZ?xi7n?1bkgHW8ANvOgUX|GQPU9^y%~dh3yqa?-*dkfVSOqak{a?VN#xdRwyH zbw1BV=srkxqLpc~fvr#Wp7S6HS-%*h>PFkEe-adx1bGvZl|WeFNDDjs7D%qOC1o2i zagtTt8FIV?LJvqmqIk&0TL|?rw%fx9<)5*n8WNpi$tp-ubnblfFOY;7yt0(}Q5YCJ650J3Tx!o3$f=CDo z<3AxOiG&Xz+1~cE;wxP*iKymVF~0LrEBf>rIBt}f9xNUToLe~tEx!)?h z7Lt(n+xkPok`*%{Q8^2(aC*dp1xQLFv^e<%isX0{f#l@#*jGXNOPXE}iApW*3GpP< zCqUwI9L_*8GSH^8WvwH!zDFQ=3I4JjESV&F1QL=bFzq49XvPlKAC!}FGYaBu zuriNA631d3H+X9t5re*kL}d6QPUZ%yr(`Ea-y}iQ0~D9z;&e#*ecSB-BqGB%*#+5V zWm@{3)=&|zp&>uQHgtzH6T9M&jOA}v z@VPbU5=cgtpgSbo(w3rrkcfoja7bPbWcNd2-L2*~b`#s}S)Cx~7a){*)Cz5aghln& zka#OQeEA+CKw`TaL?2V$1*tkV{P4lQJRkDEt}Q9P;yIcMQs>@;L}k$Bt~<*Tl;4nl z=~}*2)#^*4X1uld3P&Uz{>#4?(c~R8L|?X|FG2FMk*$HaS8!t62T2v#o#baHL#+&C zntsKzZCToLAu-vbZfp-q$$P=09Fenr4J0o$;UFX{TV#Fzj&;oD{I6LUd5^Rc#2pfY zQ|m2|YS|s`alJNKAG{6mr0A@LWaOB)7m`ieUhR^5v0c{uR!C%=6`BkQm)b>p2U3tj z*J?;c4h4H5A<3@B`*7wetGVqyLN_nBmK_jkBf)$dBqxD76ryi`q#*8q7sS=akb(@q z7ZQKe4&S8E@UOrA|G*f~b@jZn3)m?0D2MzY&W}MtQY9XP)Joty2g!eG2b*8;6C2ov zL*Ed-(`?J-5O;0~jPC|+%%Yui9>>#)gB2*=hY>U5R zuHx}aAnp~UYDY*aZwKoMai6!T$e#60JF zes!+cTKWe_bgAup6Qou=J_IsJY#$HtO6}@C@ANFQdTJp3#ZlV^I-$p{P{aL9SL8JR zfg{tcOgD%-NCgo-$`M}mxPA?m2}w|1gjPf1a@;r!iO#U9uQ@=k$(9U&RJ~@&i;(a= zmV5$<%D#H?4@72orWLyK2b?LXl7z&M?S9VwnUJ(Z-CT$#MsJ2>WZ@1%Qc{S|I>-qz zBaerA9AtRk8Z->jM#618Bs|s1d8U7s1%h)APop;{{0pelOQqi=3GdB3HoJ8 zr$~-=TOr;Hb~?xZgr_PjDRqQYt#fR!u8@exB%F*y*RzmROFPv!e z+XV?_Eh##Tj6~O2kc`xh%OKS<*J~lEo>tGzhl!ksoPGv7p)poyB1B8-R7hs2m3bRd zE`u$AWT#u1I!DkWr} z1--U7J;a$QEd@|Ux}EhiHA2?49V9Dmyb+R?Bpu?2tn`DBuw>GEkbEEcrRBvScdHlJ zxDpZ_Z{2u`SL{{gEUAEGo7-vJ3-MN3nT3$BY`HsKujjl!nmxB}o#J0UBoqwa*pc2= zQ3WI~d&_Wt$acP#@CXgz^;UE$Bzm^BYYt@B#g;6CAdwMPrd3_mvb8nwPDotN-A~pnPI^&MJF4Y3AY1u4i4${i3tv$N!q#zXn9=>OQdnDn>rGVXvmMXYL+=7 z8|xQE{)M~P5w17^uZRzNL*nA_@s13$`X)p2k|_%y1@TnH}8bVUprb68By9Kdd2`R{Cw9u)O)LRQl$LyGgAt{kL ztsa{1vNCOxptMAKdq|e(42FLgl9Gt1c0|rqUpPJ0R&~AlM2ooP0*JTH%5 zSWwyG2t_2TpYRXw;itu3q#+~c>9--_2duvB_5F%3S?m)U6nmAj>z)aTi+egi+Kawh zAScON69XYxnbkv({JnO}SDeh#mdv{ql#|=Ib&klf=tsyhDqJx0Q%@#GKe37~hNNpO z>EU<(ilFIFLte%l1Ib8OE`ns`T)Q3;mry&dA-&ev0m>jD$-6&7CLJ^M_F)6>zTMyN zjOa;2L9%Zs#FGIgKq_Q?pN6zQrq0#9mmzsMC2xa7TiXyUDrT&ktfA#eP-?EdH~cds z)W&w32#JV^uR)^X(ppGd9x5DwWF;~hgxFXlo?3+bQ}^=m)@x|VkFj|@0VOJ zNrWAcRNtd|c=*R>!*1DEa!Sk78xej>jyAZZx&%@+&XNj$;=Yoy@)0zowqyz<`#Y<82E>y(xeAgH5AJa?Qr=E#ivJ6;BDeade?x*j z(v+o|W5;|G5=~q3Ib@``Za2g^KA7@_r{V-j%NrqiIhG8CB*cj4lAy4}&RdY|qjvaD zAeome*$ml*1wmaq1c{VdgPNX(W+`76K?+hQet#M#w^%!?`UZsJvY`!z#N?iAHY6vR zx&o4yB-;UTU%v@VENVtC(NorplUrCy<8=uAo+Jpm^@hYGOGiWW`STNyjKtgPkgyb` z<&fwwJJoHFq?<>uipQ0pnpcqA%^``KZMRDyc^RxLBrCh{U`XcgwiiDkGB{vWA|rUjGPP{{O`;@b^9xs_$QZsN|ZuzjQ_HT)*;A$r;D~JkS5} zP|2Cc{yf+J%R`|?=FiiP{yF>2pGqpm06@T&=iT&wgZ9o8A5X7yX-R!2kdN diff --git a/src/main/resources/library/x86/jniplatform.dll b/src/main/resources/library/x86/jniplatform.dll index 3f7f047c9af8bfc031b3669a92e0338a2d289572..df9ddebf8e2115151117248a47d0db292ad02e4f 100644 GIT binary patch delta 139098 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 delta 138945 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 JY((es{2y_t4|f0n diff --git a/src/test/java/ColorChooserDemo.java b/src/test/java/ColorChooserDemo.java index 80fbe94a..4c8d9000 100644 --- a/src/test/java/ColorChooserDemo.java +++ b/src/test/java/ColorChooserDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/ComboDemo.java b/src/test/java/ComboDemo.java index f1fcbc9e..8658bfa0 100644 --- a/src/test/java/ComboDemo.java +++ b/src/test/java/ComboDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/DarklafDemo.java b/src/test/java/DarklafDemo.java index 5b58e734..83a033a8 100644 --- a/src/test/java/DarklafDemo.java +++ b/src/test/java/DarklafDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; diff --git a/src/test/java/DnDTest.java b/src/test/java/DnDTest.java index 962887ad..1bb137d1 100644 --- a/src/test/java/DnDTest.java +++ b/src/test/java/DnDTest.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.icons.IconLoader; +import com.github.weisj.darklaf.icons.IconLoader; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/FileChooserDemo.java b/src/test/java/FileChooserDemo.java index 12dac4e7..c4d11e48 100644 --- a/src/test/java/FileChooserDemo.java +++ b/src/test/java/FileChooserDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import javax.swing.filechooser.FileFilter; diff --git a/src/test/java/GenerateColors.java b/src/test/java/GenerateColors.java index 3e6a266a..cd20611c 100644 --- a/src/test/java/GenerateColors.java +++ b/src/test/java/GenerateColors.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.color.DarkColorModelHSL; +import com.github.weisj.darklaf.color.DarkColorModelHSL; import java.awt.*; diff --git a/src/test/java/InternalFrameDemo.java b/src/test/java/InternalFrameDemo.java index b7d2bab9..cc0113eb 100644 --- a/src/test/java/InternalFrameDemo.java +++ b/src/test/java/InternalFrameDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; diff --git a/src/test/java/ListDemo.java b/src/test/java/ListDemo.java index ce5cc3d6..7f5259ee 100644 --- a/src/test/java/ListDemo.java +++ b/src/test/java/ListDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; diff --git a/src/test/java/SVGTest.java b/src/test/java/SVGTest.java index 16ba500c..42b47c43 100644 --- a/src/test/java/SVGTest.java +++ b/src/test/java/SVGTest.java @@ -1,3 +1,4 @@ +import com.github.weisj.darklaf.LafManager; import com.kitfox.svg.Defs; import com.kitfox.svg.LinearGradient; import com.kitfox.svg.SVGDiagram; @@ -5,7 +6,6 @@ import com.kitfox.svg.SVGElementException; import com.kitfox.svg.SVGUniverse; import com.kitfox.svg.animation.AnimationElement; import com.kitfox.svg.app.beans.SVGPanel; -import com.weis.darklaf.LafManager; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -25,7 +25,7 @@ public class SVGTest { svgPanel.setAntiAlias(true); svgPanel.setScaleToFit(true); svgPanel.setSvgURI(SVGTest.class.getClassLoader() - .getResource("com/weis/darklaf/icons/control/checkBox.svg") + .getResource("com/github/weisj/darklaf/icons/control/checkBox.svg") .toURI()); SVGUniverse svgUniverse = svgPanel.getSvgUniverse(); SVGDiagram diagram = svgUniverse.getDiagram(svgPanel.getSvgURI()); diff --git a/src/test/java/ScrollPaneDemo.java b/src/test/java/ScrollPaneDemo.java index a066fcfe..78255321 100644 --- a/src/test/java/ScrollPaneDemo.java +++ b/src/test/java/ScrollPaneDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import org.jdesktop.swingx.MultiSplitLayout; import javax.swing.*; diff --git a/src/test/java/SplitPaneDemo.java b/src/test/java/SplitPaneDemo.java index 2211ef07..f894743d 100644 --- a/src/test/java/SplitPaneDemo.java +++ b/src/test/java/SplitPaneDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/TabFrameDemo.java b/src/test/java/TabFrameDemo.java index 1670021f..96a4eba0 100644 --- a/src/test/java/TabFrameDemo.java +++ b/src/test/java/TabFrameDemo.java @@ -1,10 +1,10 @@ -import com.weis.darklaf.LafManager; -import com.weis.darklaf.components.OverlayScrollPane; -import com.weis.darklaf.components.SelectableTreeNode; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tabframe.JTabFrame; -import com.weis.darklaf.components.tabframe.TabbedPopup; -import com.weis.darklaf.icons.IconLoader; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.components.OverlayScrollPane; +import com.github.weisj.darklaf.components.SelectableTreeNode; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tabframe.JTabFrame; +import com.github.weisj.darklaf.components.tabframe.TabbedPopup; +import com.github.weisj.darklaf.icons.IconLoader; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; diff --git a/src/test/java/TabbedPaneDemo.java b/src/test/java/TabbedPaneDemo.java index 5b18cc76..9cac6526 100644 --- a/src/test/java/TabbedPaneDemo.java +++ b/src/test/java/TabbedPaneDemo.java @@ -1,5 +1,5 @@ -import com.weis.darklaf.LafManager; -import com.weis.darklaf.components.ClosableTabbedPane; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.components.ClosableTabbedPane; import javax.swing.*; import javax.swing.border.EmptyBorder; diff --git a/src/test/java/TabbedPaneKeyboardShortcut.java b/src/test/java/TabbedPaneKeyboardShortcut.java index 34205de8..edc2cf68 100644 --- a/src/test/java/TabbedPaneKeyboardShortcut.java +++ b/src/test/java/TabbedPaneKeyboardShortcut.java @@ -22,7 +22,7 @@ * SOFTWARE. */ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/TextDemo.java b/src/test/java/TextDemo.java index f5f9ef23..359cb6d5 100644 --- a/src/test/java/TextDemo.java +++ b/src/test/java/TextDemo.java @@ -1,4 +1,4 @@ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; diff --git a/src/test/java/ToolBarDemo.java b/src/test/java/ToolBarDemo.java index 3581b472..0af59e9f 100644 --- a/src/test/java/ToolBarDemo.java +++ b/src/test/java/ToolBarDemo.java @@ -36,7 +36,7 @@ * images/Up24.gif */ -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import org.jetbrains.annotations.NotNull; import javax.swing.*; diff --git a/src/test/java/ToolTipDemo.java b/src/test/java/ToolTipDemo.java index 02c37a97..8b4e3e57 100644 --- a/src/test/java/ToolTipDemo.java +++ b/src/test/java/ToolTipDemo.java @@ -1,6 +1,6 @@ -import com.weis.darklaf.LafManager; -import com.weis.darklaf.components.alignment.Alignment; -import com.weis.darklaf.components.tooltip.ToolTipContext; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.components.alignment.Alignment; +import com.github.weisj.darklaf.components.tooltip.ToolTipContext; import javax.swing.*; import java.awt.*; diff --git a/src/test/java/TreeDemo.java b/src/test/java/TreeDemo.java index 07e29f40..20a05846 100644 --- a/src/test/java/TreeDemo.java +++ b/src/test/java/TreeDemo.java @@ -1,5 +1,5 @@ -import com.weis.darklaf.LafManager; -import com.weis.darklaf.components.SelectableTreeNode; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.components.SelectableTreeNode; import javax.swing.*; import javax.swing.tree.DefaultMutableTreeNode; diff --git a/src/test/java/UIDemo.java b/src/test/java/UIDemo.java index 9f1db0a8..518dbfaf 100644 --- a/src/test/java/UIDemo.java +++ b/src/test/java/UIDemo.java @@ -1,8 +1,8 @@ -import com.weis.darklaf.LafManager; -import com.weis.darklaf.components.text.SearchTextField; -import com.weis.darklaf.components.text.SearchTextFieldWithHistory; -import com.weis.darklaf.components.tristate.TristateCheckBox; -import com.weis.darklaf.icons.IconLoader; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.components.text.SearchTextField; +import com.github.weisj.darklaf.components.text.SearchTextFieldWithHistory; +import com.github.weisj.darklaf.components.tristate.TristateCheckBox; +import com.github.weisj.darklaf.icons.IconLoader; import org.jdesktop.swingx.JXStatusBar; import org.jdesktop.swingx.JXTaskPane; import org.jdesktop.swingx.JXTaskPaneContainer; diff --git a/src/test/java/UIManagerDefaults.java b/src/test/java/UIManagerDefaults.java index 07d0202a..61430624 100644 --- a/src/test/java/UIManagerDefaults.java +++ b/src/test/java/UIManagerDefaults.java @@ -3,10 +3,10 @@ * to create a table of key/value pairs for each Swing component. */ -import com.weis.darklaf.DarkLafInfo; -import com.weis.darklaf.LafManager; -import com.weis.darklaf.ui.cell.DarkCellRendererToggleButton; -import com.weis.darklaf.ui.table.DarkColorTableCellRendererEditor; +import com.github.weisj.darklaf.DarkLafInfo; +import com.github.weisj.darklaf.LafManager; +import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; +import com.github.weisj.darklaf.ui.table.DarkColorTableCellRendererEditor; import org.jdesktop.swingx.JXTaskPane; import org.jdesktop.swingx.JXTaskPaneContainer; import org.jetbrains.annotations.Contract; diff --git a/src/test/java/dialog/DialogDemo.java b/src/test/java/dialog/DialogDemo.java index f850e93d..f952870b 100644 --- a/src/test/java/dialog/DialogDemo.java +++ b/src/test/java/dialog/DialogDemo.java @@ -24,7 +24,7 @@ package dialog; -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import javax.swing.border.Border; diff --git a/src/test/java/formattedTextField/FormattedTextFieldDemo.java b/src/test/java/formattedTextField/FormattedTextFieldDemo.java index 9abfcc71..7e82dc2a 100644 --- a/src/test/java/formattedTextField/FormattedTextFieldDemo.java +++ b/src/test/java/formattedTextField/FormattedTextFieldDemo.java @@ -24,7 +24,7 @@ package formattedTextField; -import com.weis.darklaf.LafManager; +import com.github.weisj.darklaf.LafManager; import javax.swing.*; import java.awt.*;