Skip to content

Commit 3b93ea6

Browse files
committed
feat: gui rework
1 parent ab5c4bf commit 3b93ea6

File tree

14 files changed

+181
-37
lines changed

14 files changed

+181
-37
lines changed

dev.skidfuscator.client.standalone/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ dependencies {
2525
implementation 'org.jline:jline:3.21.0'
2626
implementation 'com.jgoodies:jgoodies-forms:1.9.0'
2727
implementation 'com.github.vlsi.mxgraph:jgraphx:4.2.2'
28+
implementation 'com.formdev:flatlaf:3.5.4'
29+
implementation 'com.formdev:flatlaf-intellij-themes:3.5.4'
2830

2931
implementation project(':obfuscator')
3032

dev.skidfuscator.client.standalone/src/main/java/dev/skidfuscator/obfuscator/SkidfuscatorMain.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.skidfuscator.obfuscator;
22

3+
import com.formdev.flatlaf.intellijthemes.FlatDarkPurpleIJTheme;
34
import dev.skidfuscator.obfuscator.command.HelpCommand;
45
import dev.skidfuscator.obfuscator.command.MappingsCommand;
56
import dev.skidfuscator.obfuscator.command.ObfuscateCommand;
@@ -25,7 +26,7 @@ public static void main(String[] args) {
2526
if (args.length == 0) {
2627
SwingUtilities.invokeLater(() -> {
2728
try {
28-
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
29+
FlatDarkPurpleIJTheme.setup();
2930
} catch (Exception e) {
3031
e.printStackTrace();
3132
}

dev.skidfuscator.client.standalone/src/main/java/dev/skidfuscator/obfuscator/gui/MainFrame.java

Lines changed: 88 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
// MainFrame.java
22
package dev.skidfuscator.obfuscator.gui;
33

4+
import com.formdev.flatlaf.ui.FlatTabbedPaneUI;
45
import dev.skidfuscator.obfuscator.Skidfuscator;
56
import dev.skidfuscator.obfuscator.SkidfuscatorSession;
67
import lombok.Getter;
78

9+
import javax.imageio.ImageIO;
810
import javax.swing.*;
911
import java.awt.*;
12+
import java.awt.event.ActionEvent;
1013
import java.awt.event.KeyEvent;
1114
import java.io.File;
15+
import java.io.InputStream;
1216

1317
@Getter
1418
public class MainFrame extends JFrame {
@@ -17,29 +21,81 @@ public class MainFrame extends JFrame {
1721
private TransformerPanel transformerPanel;
1822
private ConsolePanel consolePanel;
1923
private JButton startButton;
24+
private JPanel headerPanel;
2025

2126
public MainFrame() {
22-
setTitle("Skidfuscator Obfuscator");
27+
setTitle("Skidfuscator");
2328
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
24-
setPreferredSize(new Dimension(800, 600));
29+
setPreferredSize(new Dimension(900, 700));
2530

26-
// Create main layout
27-
setLayout(new BorderLayout(10, 10));
31+
// Create main layout with increased padding
32+
setLayout(new BorderLayout(15, 5));
2833

29-
// Initialize tabbed pane
30-
tabbedPane = new JTabbedPane();
34+
// Add header with logo
35+
36+
JPanel tabbedPanel = new JPanel(new BorderLayout());
37+
tabbedPane = new JTabbedPane(JTabbedPane.LEFT) {
38+
@Override
39+
public void updateUI() {
40+
super.updateUI();
41+
setUI(new FlatTabbedPaneUI() {
42+
@Override
43+
protected Insets getTabAreaInsets(int tabPlacement) {
44+
Insets insets = super.getTabAreaInsets(tabPlacement);
45+
return new Insets(140, insets.left, insets.bottom, insets.right);
46+
}
47+
48+
@Override
49+
protected int calculateTabAreaWidth(int tabPlacement, int horizRunCount, int maxTabWidth) {
50+
return 150;
51+
}
52+
53+
@Override
54+
protected int calculateTabWidth(int tabPlacement, int tabIndex, FontMetrics metrics) {
55+
// Make tabs fill the entire width of the tab area
56+
return 150;
57+
}
58+
59+
@Override
60+
protected void paintTabArea(Graphics g, int tabPlacement, int selectedIndex) {
61+
try {
62+
InputStream logoStream = getClass().getResourceAsStream("/images/logo.png");
63+
if (logoStream != null) {
64+
Image logo = ImageIO.read(logoStream);
65+
Image scaledLogo = logo.getScaledInstance(150, 150, Image.SCALE_SMOOTH);
66+
g.drawImage(scaledLogo, 5, 0, null);
67+
}
68+
} catch (Exception e) {
69+
e.printStackTrace();
70+
}
71+
super.paintTabArea(g, tabPlacement, selectedIndex);
72+
}
73+
});
74+
}
75+
};
76+
tabbedPane.setFont(new Font("Segoe UI", Font.PLAIN, 12));
3177
initializeTabs();
78+
tabbedPanel.add(tabbedPane);
79+
add(tabbedPanel, BorderLayout.CENTER);
3280

33-
// Initialize action panel
34-
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
81+
// Create a more polished button panel
82+
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 15, 10));
3583
startButton = new JButton("Start Obfuscation");
36-
startButton.addActionListener(e -> startObfuscation());
84+
startButton.setFont(new Font("Segoe UI", Font.PLAIN, 12));
85+
startButton.setBackground(new Color(70, 130, 180));
86+
startButton.setForeground(Color.WHITE);
87+
startButton.setFocusPainted(false);
88+
startButton.addActionListener(new AbstractAction() {
89+
@Override
90+
public void actionPerformed(ActionEvent e) {
91+
if (e.getSource() == startButton) {
92+
startObfuscation();
93+
}
94+
}
95+
});
3796
buttonPanel.add(startButton);
3897
add(buttonPanel, BorderLayout.SOUTH);
3998

40-
// Add components to frame
41-
add(tabbedPane, BorderLayout.CENTER);
42-
4399
// Set keyboard mnemonics
44100
setupKeyboardShortcuts();
45101

@@ -194,4 +250,24 @@ protected void done() {
194250
};
195251
worker.execute();
196252
}
253+
254+
private JPanel createHeaderPanel() {
255+
JPanel header = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 10));
256+
257+
try {
258+
// Load logo from resources
259+
InputStream logoStream = getClass().getResourceAsStream("/images/logo.png");
260+
if (logoStream != null) {
261+
Image logo = ImageIO.read(logoStream);
262+
Image scaledLogo = logo.getScaledInstance(120, 120, Image.SCALE_DEFAULT);
263+
JLabel logoLabel = new JLabel(new ImageIcon(scaledLogo));
264+
header.add(logoLabel);
265+
}
266+
// Add title label
267+
} catch (Exception e) {
268+
e.printStackTrace();
269+
}
270+
271+
return header;
272+
}
197273
}
127 KB
Loading

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/Skidfuscator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ protected void _importExempt() {
461461

462462
try(final ProgressWrapper progressBar = ProgressUtil.progressCheck(
463463
config.getExemptionsv2().size(),
464-
"Imported " + config.getExemptions().size() + " exclusions v2"
464+
"Imported " + config.getExemptionsv2().size() + " exclusions v2"
465465
)) {
466466
for (String s : config.getExemptionsv2()) {
467467
exemptAnalysis.add(ExclusionParser.parsePatternExclusion(s));

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/exempt/Exclusion.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
@Builder
1515
public class Exclusion {
1616
private final ExclusionMap testers;
17-
private final boolean include;
1817

1918
/**
2019
* Test if a class is to be excluded
@@ -25,8 +24,7 @@ public class Exclusion {
2524
public boolean test(final ClassNode classNode) {
2625
assert testers.containsKey(ExclusionType.CLASS) : "Trying to test with null class tester";
2726

28-
boolean result = testers.poll(ExclusionType.CLASS).test(classNode);
29-
return include ? !result : result;
27+
return testers.poll(ExclusionType.CLASS).test(classNode);
3028
}
3129

3230
/**
@@ -36,12 +34,11 @@ public boolean test(final ClassNode classNode) {
3634
* @return the boolean
3735
*/
3836
public boolean test(final MethodNode methodNode) {
39-
if (test(methodNode.getOwnerClass()) != include)
37+
if (test(methodNode.getOwnerClass()))
4038
return true;
4139

4240
assert testers.containsKey(ExclusionType.METHOD) : "Trying to test with null method tester";
43-
boolean result = testers.poll(ExclusionType.METHOD).test(methodNode);
44-
return include != result;
41+
return testers.poll(ExclusionType.METHOD).test(methodNode);
4542
}
4643

4744
/**
@@ -51,12 +48,11 @@ public boolean test(final MethodNode methodNode) {
5148
* @return the boolean
5249
*/
5350
public boolean test(final FieldNode fieldNode) {
54-
if (test(fieldNode.getOwnerClass()) != include)
51+
if (test(fieldNode.getOwnerClass()))
5552
return true;
5653

5754
assert testers.containsKey(ExclusionType.FIELD) : "Trying to test with null field tester";
58-
boolean result = testers.poll(ExclusionType.FIELD).test(fieldNode);
59-
return include != result;
55+
return testers.poll(ExclusionType.FIELD).test(fieldNode);
6056
}
6157

6258
@Override

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/exempt/ExclusionHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,6 @@ public String toString() {
223223
});
224224
}
225225

226-
return new Exclusion(map, false);
226+
return new Exclusion(map);
227227
}
228228
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/exempt/v2/ExclusionParser.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ private static class ParsedClass {
6363
private final String extendsClass; // extended class
6464
private final Set<String> interfaces; // implemented interfaces
6565
private final List<ParsedMember> members; // class members
66-
private final boolean isInclude; // whether this class is an inclusion
66+
private final boolean include; // whether this class is an inclusion
6767
}
6868

6969
/**
@@ -102,8 +102,9 @@ private ParsedClass parseClass(String input) {
102102
}
103103

104104
// Check for inclusion prefix
105-
boolean isInclusion = header.startsWith("!");
106-
if (isInclusion) {
105+
boolean include = header.startsWith("!");
106+
if (include) {
107+
System.out.println("include: " + include);
107108
header = header.substring(1);
108109
}
109110

@@ -181,7 +182,7 @@ private ParsedClass parseClass(String input) {
181182
}
182183
}
183184

184-
return new ParsedClass(classType, modifiers, className, extendsClass, interfaces, members, isInclusion);
185+
return new ParsedClass(classType, modifiers, className, extendsClass, interfaces, members, include);
185186
}
186187

187188
private static class MemberParserState {
@@ -653,7 +654,6 @@ public boolean test(ClassNode var) {
653654
.matcher(var.getName())
654655
.find();
655656

656-
657657
if (match) {
658658
initialNameMatch = match != member.isInclusion();
659659
}

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/predicate/renderer/IntegerBlockPredicateRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ void handle(final InitSkidTransformEvent event) {
106106
*
107107
* @param event Method initializer event
108108
*/
109-
@Listen(EventPriority.HIGHEST)
109+
@Listen(EventPriority.LOWEST)
110110
void handle(final InitMethodTransformEvent event) {
111111
final SkidMethodNode methodNode = event.getMethodNode();
112112
final BlockOpaquePredicate flowPredicate = methodNode.getFlowPredicate();

dev.skidfuscator.obfuscator/src/main/java/dev/skidfuscator/obfuscator/transform/impl/flow/interprocedural/InterproceduralTransformer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ void handle(final InitGroupTransformEvent event) {
7373
* If the skid group is an entry point (it has no direct invocation)
7474
* or in the future when we support reflection calls
7575
*/
76-
if (entryPoint) {
76+
if (entryPoint || skidGroup.isStatical()) {
7777
stackHeight = OpcodeUtil.getArgumentsSizes(skidGroup.getDesc());
7878

7979
if (skidGroup.isStatical())

0 commit comments

Comments
 (0)