From f3dd4983383de38c2071db47b1b130e8a4394e26 Mon Sep 17 00:00:00 2001 From: Sebastiano Poggi Date: Fri, 1 Sep 2023 17:10:42 +0200 Subject: [PATCH] Create IDE LaF bridge (#102) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [WIP] Start building the bridge * Update dependencies, remove unused ones * [WIP] Continue building the bridge * [WIP] Continue building the bridge (got to Chip) Includes tweaks on wrong values etc * [WIP] Fill out infra for IntUiBridge.kt Still not done! * [WIP] Fill out infra for IntUiBridge.kt Still not done! * [WIP] More work * [WIP] More progress (missing text fields & tabs) * Finish filling in the bridge, then 🤞 * Make default fallbacks explicit, fix some issues * Delete unused code * Implement New UI icon mapping support in Bridge Note: it doesn't work yet, since IconMapLoader.loadIconMapping() complains that the mapping isn't done (when it is, since it's done in the IDE pre-loading). I suspect this is a classloading issue. * More cleanup, stuff's still broken yey * More fixin' stuff, hopefully the CI too * Fix CI warning * Refactor UI Component Styling in Jewel to Support defaults (#104) * Refactor UI Component Styling in Jewel to Support defaults Retrieving text styles requires coroutines. This commit aims to allow the theme to start with text defaults and as soon as text styles get retrieved, the theme gets updated. * Fixes according to MR comments * Fix this thing --------- Co-authored-by: Sebastiano Poggi * More fixes to components/theme, cleanups * Improve showcase and simplify text area (bye hints) * Improve showcase and simplify text area (bye hints), fix more things * Avoid crashing on old UI --------- Co-authored-by: Lamberto Basti GitOrigin-RevId: b1d9fa9ec52c64833cd14a453c524195eb8932bd --- platform/jewel/.github/workflows/build.yml | 4 +- platform/jewel/.idea/codeStyles/Project.xml | 3 + .../.idea/inspectionProfiles/Lint_only.xml | 1085 +++++++++++++++++ .../inspectionProfiles/Project_Default.xml | 298 +---- .../.idea/runConfigurations/IDE_sample.xml | 2 + platform/jewel/README.md | 49 +- platform/jewel/build.gradle.kts | 1 - .../buildSrc/src/main/kotlin/jewel.gradle.kts | 1 + .../theme/IntelliJThemeGeneratorPlugin.kt | 6 +- platform/jewel/compose-utils/build.gradle.kts | 1 - platform/jewel/core/build.gradle.kts | 1 - .../main/kotlin/org/jetbrains/jewel/Button.kt | 38 +- .../kotlin/org/jetbrains/jewel/Checkbox.kt | 26 +- .../main/kotlin/org/jetbrains/jewel/Chip.kt | 138 ++- .../kotlin/org/jetbrains/jewel/ContextMenu.kt | 26 +- .../jetbrains/jewel/DisabledColorFilter.kt | 29 + .../kotlin/org/jetbrains/jewel/Divider.kt | 2 +- .../kotlin/org/jetbrains/jewel/Dropdown.kt | 73 +- .../jetbrains/jewel/ExperimentalJewelApi.kt | 4 +- .../org/jetbrains/jewel/GlobalColors.kt | 10 +- .../org/jetbrains/jewel/GlobalMetrics.kt | 2 - .../kotlin/org/jetbrains/jewel/GroupHeader.kt | 4 +- .../main/kotlin/org/jetbrains/jewel/Icon.kt | 75 +- .../kotlin/org/jetbrains/jewel/InputField.kt | 48 +- .../jewel/IntelliJComponentStyling.kt | 21 +- .../org/jetbrains/jewel}/IntelliJSvgLoader.kt | 35 +- .../org/jetbrains/jewel/IntelliJTheme.kt | 17 +- .../jewel/IntelliJThemeColorPalette.kt | 4 + .../jewel/IntelliJThemeDefinition.kt | 2 +- .../jetbrains/jewel/IntelliJThemeIconData.kt | 4 + .../jetbrains/jewel/JewelResourceLoader.kt | 6 + .../org/jetbrains/jewel/LabelledTextField.kt | 46 +- .../kotlin/org/jetbrains/jewel/LazyTree.kt | 23 +- .../org/jetbrains/jewel/LinearProgressBar.kt | 18 +- .../main/kotlin/org/jetbrains/jewel/Link.kt | 30 +- .../main/kotlin/org/jetbrains/jewel/Menu.kt | 197 ++- .../kotlin/org/jetbrains/jewel/MenuManager.kt | 51 + .../kotlin/org/jetbrains/jewel/Outline.kt | 32 +- .../main/kotlin/org/jetbrains/jewel/Popup.kt | 4 +- .../kotlin/org/jetbrains/jewel/RadioButton.kt | 16 +- .../org/jetbrains/jewel/ResourceLoader.kt | 8 + .../kotlin/org/jetbrains/jewel/Scrollbars.kt | 18 +- .../org/jetbrains/jewel/StateWithOutline.kt | 47 - .../kotlin/org/jetbrains/jewel/TabStrip.kt | 24 +- .../main/kotlin/org/jetbrains/jewel/Tabs.kt | 18 +- .../main/kotlin/org/jetbrains/jewel/Text.kt | 17 +- .../kotlin/org/jetbrains/jewel/TextArea.kt | 169 ++- .../kotlin/org/jetbrains/jewel/TextField.kt | 88 +- .../org/jetbrains/jewel/foundation/Border.kt | 99 +- .../jewel/foundation/PointerInput.kt | 0 .../jetbrains/jewel/foundation/RoundRect.kt | 6 +- .../org/jetbrains/jewel/foundation/Stroke.kt | 0 .../jewel/foundation/lazy/Keybindings.kt | 0 .../lazy/SelectableColumnOnKeyEvent.kt | 8 +- .../foundation/lazy/SelectableLazyColumn.kt | 4 +- .../lazy/SelectableLazyListScope.kt | 8 +- .../lazy/SelectableLazyListState.kt | 0 .../jewel/foundation/tree/BasicLazyTree.kt | 107 +- .../jewel/foundation/tree/BuildTree.kt | 9 +- .../tree/DefaultTreeViewKeybindings.kt | 0 .../tree/DefaultTreeViewOnKeyEvent.kt | 8 +- .../tree/KeyBindingScopedActions.kt | 0 .../jetbrains/jewel/foundation/tree/Tree.kt | 0 .../jewel/foundation/tree/TreeState.kt | 4 +- .../foundation/tree/TreeViewOnKeyEvent.kt | 0 .../jewel/foundation/utils/Logger.kt | 0 .../foundation/utils/ModifierExtensions.kt | 0 .../jetbrains/jewel/styling/ButtonStyling.kt | 22 +- .../jewel/styling/CheckboxStyling.kt | 17 +- .../jetbrains/jewel/styling/ChipStyling.kt | 94 +- .../jewel/styling/DropdownStyling.kt | 41 +- .../styling/HorizontalProgressBarStyling.kt | 1 + .../jewel/styling/InputFieldStyling.kt | 63 +- .../jewel/styling/LazyTreeStyling.kt | 25 +- .../jetbrains/jewel/styling/LinkStyling.kt | 11 +- .../jetbrains/jewel/styling/MenuStyling.kt | 27 +- .../jewel/styling/RadioButtonStyling.kt | 60 +- .../jewel/styling/ResourcePainterProvider.kt | 8 +- .../org/jetbrains/jewel/styling/TabStyling.kt | 18 +- .../jewel/styling/TextAreaStyling.kt | 12 - .../jewel/themes/PaletteMapperFactory.kt | 2 +- platform/jewel/detekt.yml | 4 +- platform/jewel/gradle/libs.versions.toml | 15 +- .../org/jetbrains/jewel/bridge/Bridge.kt | 48 +- .../jewel/bridge/BridgeGlobalColors.kt | 136 +++ .../jewel/bridge/BridgeGlobalMetrics.kt | 35 + .../jetbrains/jewel/bridge/BridgeIconData.kt | 38 + .../jewel/bridge/BridgeIntelliJTheme.kt | 115 -- .../jewel/bridge/BridgeThemeColorPalette.kt | 95 ++ .../org/jetbrains/jewel/bridge/BridgeUtils.kt | 169 +++ .../jetbrains/jewel/bridge/ComposePanel.kt | 28 + .../org/jetbrains/jewel/bridge/IntUiBridge.kt | 1025 +++++++++++++--- .../jewel/bridge/IntUiBridgeTheme.kt | 43 - .../bridge/IntelliJResourcePainterProvider.kt | 59 + .../jewel/bridge/JewelBridgeException.kt | 21 + .../jewel/bridge/ProjectLifecycle.kt | 13 - .../kotlin/org/jetbrains/jewel/bridge/Svg.kt | 36 - .../jewel/bridge/SwingBridgeService.kt | 92 ++ .../jewel/bridge/SwingBridgeTheme.kt | 19 + .../jetbrains/jewel/bridge}/SwingLafKey.kt | 4 +- .../jewel/samples/ide-plugin/build.gradle.kts | 13 +- .../samples/ideplugin/JewelDemoToolWindow.kt | 204 +--- .../jewel/samples/ideplugin/PKGSDemo.kt | 70 -- .../src/main/resources/META-INF/plugin.xml | 19 + .../main/resources/META-INF/pluginIcon.svg | 7 + .../src/resources/META-INF/plugin.xml | 17 - .../jewel/samples/standalone/build.gradle.kts | 2 - .../jewel/samples/standalone/Main.kt | 14 +- .../samples/standalone/components/Borders.kt | 28 +- .../samples/standalone/components/Buttons.kt | 39 +- .../standalone/components/Checkboxes.kt | 2 +- .../standalone/components/ChipsAndTree.kt | 54 +- .../standalone/components/Dropdowns.kt | 24 +- .../samples/standalone/components/Links.kt | 10 +- .../standalone/components/ProgressBar.kt | 6 +- .../standalone/components/RadioButtons.kt | 10 +- .../samples/standalone/components/Tabs.kt | 6 +- .../standalone/components/TextAreas.kt | 63 +- .../standalone/components/TextFields.kt | 52 +- platform/jewel/settings.gradle.kts | 4 +- .../int-ui/int-ui-core/build.gradle.kts | 1 - .../jewel/themes/intui/core/BaseIntUiTheme.kt | 17 +- .../intui/core/IntUiThemeColorPalette.kt | 2 + .../themes/intui/core/IntUiThemeDefinition.kt | 39 +- .../themes/intui/core/IntelliJSvgPatcher.kt | 8 +- .../standalone/IntUiDefaultResourceLoader.kt | 8 +- .../intui/standalone/IntUiGlobalColors.kt | 27 +- .../intui/standalone/IntUiGlobalMetrics.kt | 21 +- .../themes/intui/standalone/IntUiTheme.kt | 76 +- .../themes/intui/standalone/InterFont.kt | 39 +- .../standalone/styling/IntUiButtonStyling.kt | 66 +- .../styling/IntUiCheckboxStyling.kt | 19 +- .../standalone/styling/IntUiChipStyling.kt | 88 +- .../styling/IntUiDropdownStyling.kt | 51 +- .../IntUiHorizontalProgressBarStyling.kt | 15 +- .../styling/IntUiLabelledTextFieldStyling.kt | 104 +- .../styling/IntUiLazyTreeStyling.kt | 64 +- .../standalone/styling/IntUiLinkStyling.kt | 10 - .../standalone/styling/IntUiMenuStyling.kt | 57 +- .../styling/IntUiRadioButtonStyling.kt | 101 +- .../styling/IntUiScrollbarStyling.kt | 2 +- .../standalone/styling/IntUiTabStyling.kt | 12 +- .../styling/IntUiTextAreaStyling.kt | 112 +- .../styling/IntUiTextFieldStyling.kt | 98 +- 144 files changed, 4466 insertions(+), 2685 deletions(-) create mode 100644 platform/jewel/.idea/inspectionProfiles/Lint_only.xml create mode 100644 platform/jewel/core/src/main/kotlin/org/jetbrains/jewel/DisabledColorFilter.kt rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/ExperimentalJewelApi.kt (83%) rename platform/jewel/{themes/int-ui/int-ui-core/src/main/kotlin/org/jetbrains/jewel/themes/intui/core => core/src/main/kotlin/org/jetbrains/jewel}/IntelliJSvgLoader.kt (81%) create mode 100644 platform/jewel/core/src/main/kotlin/org/jetbrains/jewel/JewelResourceLoader.kt create mode 100644 platform/jewel/core/src/main/kotlin/org/jetbrains/jewel/MenuManager.kt create mode 100644 platform/jewel/core/src/main/kotlin/org/jetbrains/jewel/ResourceLoader.kt delete mode 100644 platform/jewel/core/src/main/kotlin/org/jetbrains/jewel/StateWithOutline.kt rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/Border.kt (80%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/PointerInput.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/RoundRect.kt (90%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/Stroke.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/Keybindings.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableColumnOnKeyEvent.kt (98%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyColumn.kt (98%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyListScope.kt (98%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/lazy/SelectableLazyListState.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BasicLazyTree.kt (78%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/BuildTree.kt (97%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewKeybindings.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/DefaultTreeViewOnKeyEvent.kt (97%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/KeyBindingScopedActions.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/Tree.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeState.kt (98%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/tree/TreeViewOnKeyEvent.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/utils/Logger.kt (100%) rename platform/jewel/{foundation => core}/src/main/kotlin/org/jetbrains/jewel/foundation/utils/ModifierExtensions.kt (100%) create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeGlobalColors.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeGlobalMetrics.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeIconData.kt delete mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeIntelliJTheme.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeThemeColorPalette.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/BridgeUtils.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/ComposePanel.kt delete mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/IntUiBridgeTheme.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/IntelliJResourcePainterProvider.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/JewelBridgeException.kt delete mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/ProjectLifecycle.kt delete mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/Svg.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/SwingBridgeService.kt create mode 100644 platform/jewel/ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge/SwingBridgeTheme.kt rename platform/jewel/{foundation/src/main/kotlin/org/jetbrains/jewel => ide-laf-bridge/src/main/kotlin/org/jetbrains/jewel/bridge}/SwingLafKey.kt (75%) delete mode 100644 platform/jewel/samples/ide-plugin/src/main/kotlin/org/jetbrains/jewel/samples/ideplugin/PKGSDemo.kt create mode 100644 platform/jewel/samples/ide-plugin/src/main/resources/META-INF/plugin.xml create mode 100644 platform/jewel/samples/ide-plugin/src/main/resources/META-INF/pluginIcon.svg delete mode 100644 platform/jewel/samples/ide-plugin/src/resources/META-INF/plugin.xml diff --git a/platform/jewel/.github/workflows/build.yml b/platform/jewel/.github/workflows/build.yml index 1700658a8275..dc763b0f1002 100644 --- a/platform/jewel/.github/workflows/build.yml +++ b/platform/jewel/.github/workflows/build.yml @@ -39,13 +39,15 @@ jobs: run: chmod +x gradlew - name: Run :check task - run: ./gradlew check + run: ./gradlew check --continue - name: Merge SARIF reports # Necessary because upload-sarif only takes up to 15 SARIF files and we have more run: ./gradlew :mergeSarifReports + if: ${{ always() }} - uses: github/codeql-action/upload-sarif@v2 + if: ${{ always() }} with: sarif_file: ${{ github.workspace }}/build/reports/static-analysis.sarif checkout_path: ${{ github.workspace }} diff --git a/platform/jewel/.idea/codeStyles/Project.xml b/platform/jewel/.idea/codeStyles/Project.xml index e5663699aa58..5383e2d02f00 100644 --- a/platform/jewel/.idea/codeStyles/Project.xml +++ b/platform/jewel/.idea/codeStyles/Project.xml @@ -19,6 +19,9 @@