SWT Double Buffering

lumo

Top Contributor
Hallo

ich wollte heute per double buffering das flackern meiner komponente entfernen...
aber anscheinend mach ich da noch was falsch... (hab bis jetzt mit graphik noch ganz wenig gemacht...)

ich hab einen paintlistener draufgesetzt und die funktion so definiert...
cursorPos = die position des cursors als Point
zoom ist eine zoomstufe, also ein einfacher int als multiplikator
getRect(i) gibt ein Rectangle zurück (x,y,width,height)
mMouseIsDown zeigt an ob die maus gedrückt ist oder nicht...
all das sollte doch eigentich keine auswirkungen haben, da ich doch auf meinen backpuffer zeichne und nur einmal zum schluss den buffer auf meine e.gc male...??

Java:
@Override
	public void paintControl(PaintEvent e) {

		// double buffer
		Image image = (Image) getData("double-buffer-image");
		if (image == null || image.getBounds().width != getSize().x
				|| image.getBounds().height != getSize().y) {
			image = new Image(Display.getDefault(), getSize().x, getSize().y);
			setData("double-buffer-image", image);
		}

		// Initializes the graphics context of the image.
		GC imageGC = new GC(image);
		// end double buffer preparation

		Dimension imgDim = new Dimension(backgroundImage.getBounds().width,
				backgroundImage.getBounds().height);

		imageGC.drawImage(backgroundImage, 0, 0, imgDim.width, imgDim.height, 0, 0,
				imgDim.width * zoom, imgDim.height * zoom);

		for (int i = 0; i < rects.length; i++) {
			Rectangle r = new Rectangle(getRect(i).x * zoom, getRect(i).y
					* zoom, getRect(i).width * zoom, getRect(i).height * zoom);
			imageGC.setForeground(ColoR.get(i));
			imageGC.drawRectangle(r);
		}
		if (mMouseIsDown) {
			// draw the selection
			imageGC.setForeground(getCurColor());
			imageGC.drawRectangle(curRegion.x * zoom, curRegion.y * zoom,
					curRegion.width * zoom, curRegion.height * zoom);
		} else {
			// any case draw the crosshair
			imageGC.setForeground(Display.getDefault().getSystemColor(
					SWT.COLOR_WHITE));
			imageGC.drawLine((((cursorPos.x - zoom) / 3) * 3),
					(((cursorPos.y) / 3) * 3),
					(((cursorPos.x + zoom) / 3) * 3), (((cursorPos.y) / 3) * 3));
			imageGC.drawLine((((cursorPos.x) / 3) * 3),
					(((cursorPos.y - zoom) / 3) * 3),
					(((cursorPos.x) / 3) * 3), (((cursorPos.y + zoom) / 3) * 3));
		}
		// draw the backbuffer and clean up
		e.gc.drawImage(image, 0, 0);
		imageGC.dispose();
	}
 

Wildcard

Top Contributor
Auf den meisten Platformen sollte AFAIK schon native doppelt gepuffert werden, manuelles puffern führt dann zu triple buffering.
Du sagst flackert? Wie kann man sich das vorstellen? Was siehst du? Was hat sich mit manuellem Puffern geändert? Sind Threads im Spiel?
 

lumo

Top Contributor
Es sind keine threads im Spiel;
Flackern, dass ich nicht ein druchgehendes Bild sondern immer wieder den grauen Hintergrund der Komponente sehe;
Mit manuellem Buffer das selbe wie ohne...
 

lumo

Top Contributor
habs gefunden!!
Java:
super(parent, style | SWT.NO_BACKGROUND); // ohne no_background flackert's!
 

lumo

Top Contributor
ich wollte nur noch mal anmerken, dass es ohne mein manuelles puffern auch trotz SWT.NO_BACKGROUND flackert!
nur die kombination beider verhinderts!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
V Applet Double Buffering AWT, Swing, JavaFX & SWT 2
T 2D-Grafik Double Buffering AWT, Swing, JavaFX & SWT 7
K Flackern trotz Double-Buffering AWT, Swing, JavaFX & SWT 10
hdi Wie implementiere ich Double Buffering AWT, Swing, JavaFX & SWT 12
G Frage zu Double Buffering AWT, Swing, JavaFX & SWT 4
U Double Buffering AWT, Swing, JavaFX & SWT 6
J Double-Buffering zu langsam AWT, Swing, JavaFX & SWT 4
L Double-Buffering AWT, Swing, JavaFX & SWT 2
D double Buffering abschalten? AWT, Swing, JavaFX & SWT 4
L Double Buffering bei JTable AWT, Swing, JavaFX & SWT 4
CptK Point2D.Double Kurven - Beschriftung und richtiges Anklicken AWT, Swing, JavaFX & SWT 7
CptK Wie funktioniert contains() für Path2D.Double AWT, Swing, JavaFX & SWT 10
B AWT GUI nimmt nur 19 Ziffern an, obwohl Max Wert von Double größer ist AWT, Swing, JavaFX & SWT 7
T Swing Double Click bei Buttons in JTable AWT, Swing, JavaFX & SWT 9
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
S Polygon mit double-Koordinaten AWT, Swing, JavaFX & SWT 2
N Double Buffern von BILDERN AWT, Swing, JavaFX & SWT 6
B Graphics2d drawString mit double Werten? AWT, Swing, JavaFX & SWT 5
O 2D-Grafik Rectangle mit double Werten zeichnen AWT, Swing, JavaFX & SWT 3
M Object[][] in double[][] casten AWT, Swing, JavaFX & SWT 6
A aus einem Textfeld in double parsen AWT, Swing, JavaFX & SWT 10
J JSlider mit Double Werten AWT, Swing, JavaFX & SWT 5
T JTextField nur Double werte eingeben AWT, Swing, JavaFX & SWT 2
A Explicit casting Point2D.Double AWT, Swing, JavaFX & SWT 3
A TableRowSorter für double Werte mit Formatierung AWT, Swing, JavaFX & SWT 3
iLoveTheInternet AWT Rectangle2D.Double intersecs AWT, Swing, JavaFX & SWT 6
R drawString mit double Koordinaten AWT, Swing, JavaFX & SWT 5
L JTextField Umwandeln in double-Werte AWT, Swing, JavaFX & SWT 5
K double / int einlesen? AWT, Swing, JavaFX & SWT 12
L double in JTable formatieren AWT, Swing, JavaFX & SWT 7
P Integer, Double, etc mit getTableCellRendererComponent AWT, Swing, JavaFX & SWT 6
P Double-Werte sortieren mit TableRowSorter AWT, Swing, JavaFX & SWT 2
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
S double in String umwandeln AWT, Swing, JavaFX & SWT 6
R Double in der Tabelle statt String und Integer AWT, Swing, JavaFX & SWT 3
Student "Dicke" einer Linie - Line2D.Double AWT, Swing, JavaFX & SWT 12
G Double-Click f. alle Komps UNIX u. WIN verschieden ? AWT, Swing, JavaFX & SWT 5
G Ellipse2D.Double funktioniert nicht AWT, Swing, JavaFX & SWT 3
W SWT - Tree: Problem mit Double-Click expand AWT, Swing, JavaFX & SWT 5
K AWT flackern trotz buffering AWT, Swing, JavaFX & SWT 4

Ähnliche Java Themen

Neue Themen


Oben