提交 4732fa36 编写于 作者: S Skylot

fix(gui): improve code area performance and line numbers repaint (#1167)

上级 8dad158a
......@@ -66,11 +66,6 @@ public final class JavaClass implements JavaNode {
return cls.getSmali();
}
public synchronized void unload() {
cls.unload();
listsLoaded = false;
}
/**
* Internal API. Not Stable!
*/
......
......@@ -68,8 +68,6 @@ public class JadxWrapper {
decompiler.getArgs().setRootDir(dir);
decompiler.save(500, (done, total) -> progressMonitor.setProgress((int) (done * 100.0 / total)));
progressMonitor.close();
LOG.info("decompilation complete, freeing memory ...");
decompiler.getClasses().forEach(JavaClass::unload);
LOG.info("done");
};
new Thread(save).start();
......
......@@ -57,11 +57,11 @@ public class JClass extends JLoadableNode {
}
public synchronized void load() {
if (!loaded) {
cls.decompile();
cls.unload();
loaded = true;
if (loaded) {
return;
}
cls.decompile();
loaded = true;
update();
}
......@@ -69,7 +69,6 @@ public class JClass extends JLoadableNode {
cls.reload();
loaded = true;
update();
cls.unload();
}
public synchronized void update() {
......@@ -93,8 +92,7 @@ public class JClass extends JLoadableNode {
@Override
public @Nullable ICodeInfo getCodeInfo() {
load();
return cls.getClassNode().getCode();
return cls.getCodeInfo();
}
@Override
......
......@@ -120,9 +120,6 @@ public class CodePanel extends JPanel {
if (codeArea instanceof SmaliArea) {
return;
}
LineNumbers numbers = new LineNumbers(codeArea);
numbers.setUseSourceLines(isUseSourceLines());
codeScrollPane.setRowHeaderView(numbers);
initLineNumbers(isUseSourceLines());
}
......
......@@ -42,7 +42,8 @@ public class LineNumbers extends JPanel implements CaretListener {
private static final int NUM_HEIGHT = Integer.MAX_VALUE - 1000000;
private static final Map<?, ?> DESKTOP_HINTS = (Map<?, ?>) Toolkit.getDefaultToolkit().getDesktopProperty("awt.font.desktophints");
private final AbstractCodeArea codeArea;
private final transient AbstractCodeArea codeArea;
private final transient ICodeInfo codeInfo;
private boolean useSourceLines = true;
private transient int lastDigits;
......@@ -55,10 +56,11 @@ public class LineNumbers extends JPanel implements CaretListener {
private transient Insets textAreaInsets;
private transient Rectangle visibleRect = new Rectangle();
private transient ICodeInfo codeInfo;
public LineNumbers(AbstractCodeArea codeArea) {
this.codeArea = codeArea;
this.codeInfo = codeArea.getNode().getCodeInfo();
setFont(codeArea.getFont());
SyntaxScheme syntaxScheme = codeArea.getSyntaxScheme();
numberColor = syntaxScheme.getStyle(Token.LITERAL_NUMBER_DECIMAL_INT).foreground;
......@@ -110,8 +112,6 @@ public class LineNumbers extends JPanel implements CaretListener {
@SuppressWarnings("deprecation")
@Override
public void paintComponent(Graphics g) {
codeInfo = codeArea.getNode().getCodeInfo();
visibleRect = g.getClipBounds(visibleRect);
if (visibleRect == null) {
visibleRect = getVisibleRect();
......@@ -127,7 +127,7 @@ public class LineNumbers extends JPanel implements CaretListener {
Dimension size = getSize();
g.setColor(codeArea.getBackground());
g.fillRect(0, 0, size.width, size.height);
g.fillRect(0, visibleRect.y, size.width, visibleRect.height);
FontMetrics fontMetrics = codeArea.getFontMetrics(font);
Insets insets = getInsets();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册