From 4bfb1c154940684a51ab251cdd8d9914f3305329 Mon Sep 17 00:00:00 2001 From: weisj Date: Sun, 14 Jun 2020 22:52:29 +0200 Subject: [PATCH] Added option to supply custom scrollpane for OverlayScrollPane. --- core/build.gradle.kts | 1 + .../darklaf/components/OverlayScrollPane.java | 12 ++-- .../scrollPane/OverlayRSyntaxScrollPane.java | 59 +++++++++++++++++++ 3 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 core/src/test/java/ui/scrollPane/OverlayRSyntaxScrollPane.java diff --git a/core/build.gradle.kts b/core/build.gradle.kts index d0cc8151..5bb2aa6a 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -21,6 +21,7 @@ dependencies { testImplementation("com.miglayout:miglayout-swing") testImplementation("org.swinglabs:swingx") testImplementation("org.junit.jupiter:junit-jupiter-api") + testImplementation("com.fifesoft:rsyntaxtextarea:3.1.1") testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine") } diff --git a/core/src/main/java/com/github/weisj/darklaf/components/OverlayScrollPane.java b/core/src/main/java/com/github/weisj/darklaf/components/OverlayScrollPane.java index 1ec1af22..c02c9b5d 100644 --- a/core/src/main/java/com/github/weisj/darklaf/components/OverlayScrollPane.java +++ b/core/src/main/java/com/github/weisj/darklaf/components/OverlayScrollPane.java @@ -95,12 +95,10 @@ public class OverlayScrollPane extends JLayeredPane implements PropertyChangeLis * be controlled * with a pair of scrollbars. The scrollbars appear over the viewport. * - * @param view the view of the component. - * @param scrollPane the scrollpane to use. + * @param scrollPane the scroll pane to use. */ - public OverlayScrollPane(final JComponent view, final JScrollPane scrollPane) { + public OverlayScrollPane(final JScrollPane scrollPane) { this.scrollPane = scrollPane; - this.scrollPane.setViewportView(view); setupScrollPane(scrollPane); add(scrollPane, JLayeredPane.DEFAULT_LAYER); @@ -117,10 +115,12 @@ public class OverlayScrollPane extends JLayeredPane implements PropertyChangeLis verticalScrollBar.putClientProperty(ScrollBarConstants.KEY_SCROLL_PANE_PARENT, this); JScrollBar horizontalScrollBar = createScrollBar(JScrollBar.HORIZONTAL); horizontalScrollBar.putClientProperty(ScrollBarConstants.KEY_SCROLL_PANE_PARENT, this); - scrollPane.setVerticalScrollBar(verticalScrollBar); - scrollPane.setHorizontalScrollBar(horizontalScrollBar); scrollPane.addPropertyChangeListener(this); updateScrollPaneUI(); + scrollPane.setVerticalScrollBar(verticalScrollBar); + scrollPane.setHorizontalScrollBar(horizontalScrollBar); + scrollPane.setColumnHeader(scrollPane.getColumnHeader()); + scrollPane.setRowHeader(scrollPane.getRowHeader()); } protected JScrollBar createScrollBar(final int orientation) { diff --git a/core/src/test/java/ui/scrollPane/OverlayRSyntaxScrollPane.java b/core/src/test/java/ui/scrollPane/OverlayRSyntaxScrollPane.java new file mode 100644 index 00000000..a73ae6fb --- /dev/null +++ b/core/src/test/java/ui/scrollPane/OverlayRSyntaxScrollPane.java @@ -0,0 +1,59 @@ +/* + * MIT License + * + * Copyright (c) 2020 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 ui.scrollPane; + +import java.awt.*; + +import javax.swing.*; + +import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rtextarea.RTextScrollPane; + +import ui.ComponentDemo; +import ui.DemoPanel; +import ui.DemoResources; + +import com.github.weisj.darklaf.components.OverlayScrollPane; +import com.github.weisj.darklaf.util.StringUtil; + +public class OverlayRSyntaxScrollPane implements ComponentDemo { + + public static void main(final String[] args) { + ComponentDemo.showDemo(new OverlayRSyntaxScrollPane()); + } + + @Override + public JComponent createComponent() { + RSyntaxTextArea textArea = new RSyntaxTextArea(StringUtil.repeat(DemoResources.LOREM_IPSUM, 5)); + RTextScrollPane sp = new RTextScrollPane(textArea); + OverlayScrollPane scrollPane = new OverlayScrollPane(sp); + return new DemoPanel(scrollPane, new BorderLayout(), 0); + } + + @Override + public String getTitle() { + return "OverlayRSyntaxScrollPane Demo"; + } +}