Komisches draw2d Problem

Cayla

Grünschnabel
Hallo zusammen!

Ich hab hier ein sehr komisches Problem mit draw2d. (Genau gesagt: org.eclipse.draw2d.Graphics)

[Edit: Ich sehe grade, ich hab das selbe Problem nochmal an einer anderen Stelle mit fillRoundRectangle und drawRoundRectangle]

Ich definiere einen Kreis, wende dann zuerst fillOval und dann drawOval an. Eigentlich müsste ich dann einen schlichten Kreis haben. Aber es besteht eine komische Lücke zwischen dem Rand und der Füllung.

Erst mal ein Code-Schnipsel:
Code:
	public void paintFigure(Graphics graphics) {
		super.paintFigure(graphics);
		
		graphics.pushState();

		...

		Rectangle circle = new Rectangle(0, 0, w, h);
		circle.performTranslate(x, y);
		
		graphics.setBackgroundColor(ColorConstants.lightGray);
		graphics.fillOval(circle);
		graphics.setForegroundColor(ColorConstants.lightGreen);
		graphics.drawOval(circle);
		
		graphics.popState();
	}

Und hier die komische Lücke: (Ich hab den Rand mal grün gemacht, dass man sieht, wo der Unterschied zwischen Rand und Füllung liegt. Normalerweise wär der Rand auch grau)
Die Lücke ist evtl nicht so eindeutig zu erkennen: rechts unten sieht man im Kreis einen sichelförmigen dunklen Bereich (das ist das dunkelgrau vom Untergrund) zwischen der hellgrauen Füllung und dem hellgrünen Rand.
 

Anhänge

Zuletzt bearbeitet:
Komische Lösung....

Also ich hab jetzt zumindest eine komische Lösung für mein komisches Problem...

Ich mache einfach einen zweiten Kreis der um 1 Pixel höher und breiter ist als der erste Kreis. Der zweite Kreis wird dann gefüllt. Also so:

Code:
public void paintFigure(Graphics graphics) {
		super.paintFigure(graphics);
		
		graphics.pushState();

		...

		Rectangle circle = new Rectangle(0, 0, w, h);
		circle.performTranslate(x, y);
		graphics.setForegroundColor(ColorConstants.lightGray);
		graphics.drawOval(circle);

		Rectangle circle2 = new Rectangle(0, 0, w+1, h+1);
		circle2.performTranslate(x, y);
		graphics.setBackgroundColor(ColorConstants.lightGray);
		graphics.fillOval(circle2);
		
		graphics.popState();
	}

Die Lösung ist alles andere als schön :(, aber immerhin funktioniert sie.

Ich wäre trotzdem froh, wenn mir jemand erklären könnte, warum die fill-Methode den Kreis nicht ganz ausfüllt...
 
Zurück