diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/gui/theme/LAFTheme.java b/src/main/java/the/bytecode/club/bytecodeviewer/gui/theme/LAFTheme.java index ac23509d..b8d24c36 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/gui/theme/LAFTheme.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/gui/theme/LAFTheme.java @@ -8,7 +8,8 @@ import com.github.weisj.darklaf.theme.IntelliJTheme; import com.github.weisj.darklaf.theme.OneDarkTheme; import com.github.weisj.darklaf.theme.SolarizedDarkTheme; import com.github.weisj.darklaf.theme.SolarizedLightTheme; -import java.awt.Dialog; + +import java.awt.*; import javax.swing.JInternalFrame; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -175,4 +176,14 @@ public enum LAFTheme UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } } + + /** + * Make sure that theme changes also affect components that are not in the UI tree. + */ + public static void registerThemeUpdate(Component... components) { + LafManager.registerInitTask((t, p) -> SwingUtilities.invokeLater(() -> { + for (Component component : components) + SwingUtilities.updateComponentTreeUI(component); + })); + } } diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/LDCSearch.java b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/LDCSearch.java index 42e7b62e..8c8db122 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/LDCSearch.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/LDCSearch.java @@ -11,6 +11,7 @@ import org.objectweb.asm.tree.InsnList; import org.objectweb.asm.tree.LdcInsnNode; import org.objectweb.asm.tree.MethodNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.gui.theme.LAFTheme; import the.bytecode.club.bytecodeviewer.resources.ResourceContainer; import the.bytecode.club.bytecodeviewer.searching.EnterKeyEvent; import the.bytecode.club.bytecodeviewer.searching.LDCSearchTreeNodeResult; @@ -53,6 +54,7 @@ public class LDCSearch implements SearchPanel { searchText = new JTextField(""); searchText.addKeyListener(EnterKeyEvent.SINGLETON); + LAFTheme.registerThemeUpdate(searchText); } @Override @@ -63,6 +65,7 @@ public class LDCSearch implements SearchPanel myPanel = new JPanel(new GridLayout(1, 2)); myPanel.add(new TranslatedJLabel("Search String: ", TranslatedComponents.SEARCH_STRING)); myPanel.add(searchText); + LAFTheme.registerThemeUpdate(myPanel); } return myPanel; diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MemberWithAnnotationSearch.java b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MemberWithAnnotationSearch.java index 2b1b19c7..56c7efab 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MemberWithAnnotationSearch.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MemberWithAnnotationSearch.java @@ -4,6 +4,7 @@ import org.objectweb.asm.Type; import org.objectweb.asm.tree.AnnotationNode; import org.objectweb.asm.tree.ClassNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.gui.theme.LAFTheme; import the.bytecode.club.bytecodeviewer.resources.ResourceContainer; import the.bytecode.club.bytecodeviewer.searching.EnterKeyEvent; import the.bytecode.club.bytecodeviewer.searching.LDCSearchTreeNodeResult; @@ -46,6 +47,7 @@ public class MemberWithAnnotationSearch implements SearchPanel { public MemberWithAnnotationSearch() { annotation = new JTextField(""); annotation.addKeyListener(EnterKeyEvent.SINGLETON); + LAFTheme.registerThemeUpdate(annotation); } @Override @@ -54,6 +56,7 @@ public class MemberWithAnnotationSearch implements SearchPanel { myPanel = new JPanel(new GridLayout(1, 2)); myPanel.add(new TranslatedJLabel("Annotation name: ", TranslatedComponents.ANNOTATION_NAME)); myPanel.add(annotation); + LAFTheme.registerThemeUpdate(myPanel); } return myPanel; diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MethodCallSearch.java b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MethodCallSearch.java index 81286178..5b0a0f67 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MethodCallSearch.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/MethodCallSearch.java @@ -1,16 +1,18 @@ package the.bytecode.club.bytecodeviewer.searching.impl; +import com.github.weisj.darklaf.LafManager; import eu.bibl.banalysis.asm.desc.OpcodeInfo; import java.awt.GridLayout; import java.util.Iterator; -import javax.swing.JPanel; -import javax.swing.JTextField; +import javax.swing.*; + import org.objectweb.asm.tree.AbstractInsnNode; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.InsnList; import org.objectweb.asm.tree.MethodInsnNode; import org.objectweb.asm.tree.MethodNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.gui.theme.LAFTheme; import the.bytecode.club.bytecodeviewer.resources.ResourceContainer; import the.bytecode.club.bytecodeviewer.searching.EnterKeyEvent; import the.bytecode.club.bytecodeviewer.searching.LDCSearchTreeNodeResult; @@ -59,6 +61,8 @@ public class MethodCallSearch implements SearchPanel mName.addKeyListener(EnterKeyEvent.SINGLETON); mDesc = new JTextField(""); mDesc.addKeyListener(EnterKeyEvent.SINGLETON); + + LAFTheme.registerThemeUpdate(mOwner, mName, mDesc); } public JPanel getPanel() @@ -72,24 +76,25 @@ public class MethodCallSearch implements SearchPanel myPanel.add(mName); myPanel.add(new TranslatedJLabel("Desc: ", TranslatedComponents.DESC)); myPanel.add(mDesc); + LAFTheme.registerThemeUpdate(myPanel); } return myPanel; } - + @Override public void search(ResourceContainer container, String resourceWorkingName, ClassNode node, boolean exact) { final Iterator methods = node.methods.iterator(); - + String searchOwner = mOwner.getText(); if (searchOwner.isEmpty()) searchOwner = null; - + String searchName = mName.getText(); if (searchName.isEmpty()) searchName = null; - + String searchDesc = mDesc.getText(); if (searchDesc.isEmpty()) searchDesc = null; @@ -104,10 +109,10 @@ public class MethodCallSearch implements SearchPanel if (insnNode instanceof MethodInsnNode) { final MethodInsnNode min = (MethodInsnNode) insnNode; - + if (searchName == null && searchOwner == null && searchDesc == null) continue; - + if (exact) { if (searchName != null && !searchName.equals(min.name)) @@ -126,13 +131,13 @@ public class MethodCallSearch implements SearchPanel if (searchDesc != null && !min.desc.contains(searchDesc)) continue; } - + found(container, resourceWorkingName, node, method, insnNode); } } } } - + public void found(final ResourceContainer container, final String resourceWorkingName, final ClassNode node, final MethodNode method, final AbstractInsnNode insnNode) { BytecodeViewer.viewer.searchBoxPane.treeRoot.add(new LDCSearchTreeNodeResult( diff --git a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/RegexSearch.java b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/RegexSearch.java index 389ef5d7..951ec6f9 100644 --- a/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/RegexSearch.java +++ b/src/main/java/the/bytecode/club/bytecodeviewer/searching/impl/RegexSearch.java @@ -9,6 +9,7 @@ import org.objectweb.asm.Type; import org.objectweb.asm.tree.ClassNode; import org.objectweb.asm.tree.MethodNode; import the.bytecode.club.bytecodeviewer.BytecodeViewer; +import the.bytecode.club.bytecodeviewer.gui.theme.LAFTheme; import the.bytecode.club.bytecodeviewer.resources.ResourceContainer; import the.bytecode.club.bytecodeviewer.searching.EnterKeyEvent; import the.bytecode.club.bytecodeviewer.searching.LDCSearchTreeNodeResult; @@ -54,6 +55,8 @@ public class RegexSearch implements SearchPanel { searchText = new JTextField(""); searchText.addKeyListener(EnterKeyEvent.SINGLETON); + + LAFTheme.registerThemeUpdate(searchText); } @Override @@ -64,6 +67,7 @@ public class RegexSearch implements SearchPanel myPanel = new JPanel(new GridLayout(1, 2)); myPanel.add(new TranslatedJLabel("Search Regex: ", TranslatedComponents.SEARCH_REGEX)); myPanel.add(searchText); + LAFTheme.registerThemeUpdate(myPanel); } return myPanel;