Hallo Zusammen,
Ich möchte gerne von Swing wissen, welche Bereiche meiner Komponenten neu gezeichnet werden müssen.
Einige kennen bestimmt "Swogl" von Marco13... Von dort her weiß, dass das mit einem RepaintManager gehen sollte...
Iwie so:
Ich arbeite an einer etwas anderen Variante, um Swing auf eine OpenGL TExture zu bringen (Für LWJGL).
Ich bin soweit fertig, alles klappt und Input wird korrekt bearbeitet..
Ich bin nun bei der Optimierungsphase angelangt...
Ich möchte mit Hilfe des RepaintManagers wissen, welche Bereiche "dreckig" sind, damit ich nur diese mit meiner
OpenGL Texture update. Problem ist, dass addDirtyRegion(JComponent c, int x, int y, int w, int h) vom RepaintManager
nicht sooo schöne Werte liefert, wie ich gehofft hatte... Sprich eine JTextArea die megaviel Text hat ist z.B. 60000 pixel "breit".
Natürlich sind die nicht komplett sichtbar, da ein JScrollpane das schön limitiert.....
Ich kann also nicht einfach die "dreckigen" Bereiche an meine OpenGL Texture übergeben. Wie bereits oben gepostet, hatte ich
gehofft mit einem Mix aus SwingUtilities und getVisibleRect() ein wenig rum zu rechnen... DAs klappt zum Teil ganz gut aber ist
nicht perfekt... Das sagt mir nur eins: Ich habe noch nicht die richtige "Formel" um das korrekt zu berechnen...
Habt ihr Ideen oder Erfahrung mit dem RepaintMaanger von Swing ???
Wäre für jeden Hinweiß dankbar!
Gruß,
Chris
Ich möchte gerne von Swing wissen, welche Bereiche meiner Komponenten neu gezeichnet werden müssen.
Einige kennen bestimmt "Swogl" von Marco13... Von dort her weiß, dass das mit einem RepaintManager gehen sollte...
Iwie so:
Java:
RepaintManager.setCurrentManager(new RepaintManager() {
/**
* {@inheritDoc}
*/
@Override
public void addDirtyRegion(JComponent c,
int x, int y, int w, int h) {
super.addDirtyRegion(c, x, y, w, h);
for (JOffscreen offscreen : dialogs.keySet()) {
//Check...
if (offscreen.isAncestorOf(c)) {
//We need to convert the coordinates
Rectangle dirty = new Rectangle(x, y, w, h);
SwingUtilities.convertRectangle(
c, c.getVisibleRect().intersection(
new Rectangle(x, y, w, h)), offscreen);
//Note the local bounds of the offscreen!
dirty = SwingUtilities.computeIntersection(0, 0,
offscreen.getWidth(), offscreen.getHeight(),
dirty);
if (dirty.width * dirty.height > 0) {
//Add the dirty region to the dialog
offscreen.addDirtyRegion(dirty);
}
//Finally add the dirty region
offscreen.addDirtyRegion(dirty);
}
}
}
@Override
public void paintDirtyRegions() {
super.paintDirtyRegions();
//Set the repaint-flag to true for all dialogs
for (JOffscreen dialog : dialogs.keySet()) {
dialog.refreshBuffer();
}
}
});
}
Ich arbeite an einer etwas anderen Variante, um Swing auf eine OpenGL TExture zu bringen (Für LWJGL).
Ich bin soweit fertig, alles klappt und Input wird korrekt bearbeitet..
Ich bin nun bei der Optimierungsphase angelangt...
Ich möchte mit Hilfe des RepaintManagers wissen, welche Bereiche "dreckig" sind, damit ich nur diese mit meiner
OpenGL Texture update. Problem ist, dass addDirtyRegion(JComponent c, int x, int y, int w, int h) vom RepaintManager
nicht sooo schöne Werte liefert, wie ich gehofft hatte... Sprich eine JTextArea die megaviel Text hat ist z.B. 60000 pixel "breit".
Natürlich sind die nicht komplett sichtbar, da ein JScrollpane das schön limitiert.....
Ich kann also nicht einfach die "dreckigen" Bereiche an meine OpenGL Texture übergeben. Wie bereits oben gepostet, hatte ich
gehofft mit einem Mix aus SwingUtilities und getVisibleRect() ein wenig rum zu rechnen... DAs klappt zum Teil ganz gut aber ist
nicht perfekt... Das sagt mir nur eins: Ich habe noch nicht die richtige "Formel" um das korrekt zu berechnen...
Habt ihr Ideen oder Erfahrung mit dem RepaintMaanger von Swing ???
Wäre für jeden Hinweiß dankbar!
Gruß,
Chris