Font rendering (on OS-X)

Tom Schindl tom.schindl at bestsolution.at
Fri Jan 9 16:27:10 UTC 2015


Hi,

I know font rendering has been discussed a lot already on this forum but
I don't want to talk about sharpness of text but very strange effects of
glyph positioning.

The program below switches between 1 and 2 text-nodes which results in
strange effects at least on my OS-X box.

With a font size 15 you see the 2nd text shifting a bit to the right now
you could explain this with rounding but it gets even more interesting
if you make the font size 25 suddenly the F is changing its position!

I recorded a video showing the behavior on my system at
http://efxclipse.bestsolution.at/ScreenFlow.mp4

My questions are:
a) does that happen on other OSes as well
b) does anyone have an idea where I could start searching
c) do you think this can be fixed?


> package application;
> 
> 
> import javafx.application.Application;
> import javafx.scene.Node;
> import javafx.scene.Scene;
> import javafx.scene.control.Button;
> import javafx.scene.control.TextField;
> import javafx.scene.layout.VBox;
> import javafx.scene.text.Font;
> import javafx.scene.text.Text;
> import javafx.scene.text.TextFlow;
> import javafx.stage.Stage;
> 
> public class TestMe extends Application {
> 
> 	private TextField fontSize;
> 	private TextField text;
> 
> 	@Override
> 	public void start(Stage primaryStage) throws Exception {
> 		VBox b = new VBox();
> 
> 		text = new TextField("ABCDEF");
> 		b.getChildren().add(text);
> 
> 		fontSize = new TextField("15");
> 		b.getChildren().add(fontSize);
> 
> 		TextFlow f = new TextFlow(createText(text.getText()));
> 
> 		b.getChildren().add(f);
> 		Button bu = new Button("Split text");
> 		bu.setOnAction((e) -> {
> 			if( f.getChildren().size() == 1 ) {
> 				int l = text.getText().length() / 2;
> 
> 				f.getChildren().setAll(createText(text.getText().substring(0, l)),createText(text.getText().substring(l)));
> 				bu.setText("One Text");
> 			} else {
> 				f.getChildren().setAll(createText(text.getText()));
> 				bu.setText("Split text");
> 			}
> 		});
> 		b.getChildren().add(bu);
> 
> 		Scene s = new Scene(b);
> 		s.getStylesheets().add(TestMe.class.getResource("application.css").toExternalForm());
> 		primaryStage.setScene(s);
> 		primaryStage.show();
> 	}
> 
> 	private Node createText(String text) {
> 		Text t = new Text(text);
> //		t.setSmooth(false);
> 		t.setFont(Font.font(Integer.parseInt(fontSize.getText())));
> 		return t;
> 	}
> 
> 	public static void main(String[] args) {
> 		Application.launch(args);
> 	}
> }


Tom

-- 
Thomas Schindl, CTO
BestSolution.at EDV Systemhaus GmbH
Eduard-Bodem-Gasse 5-7, A-6020 Innsbruck
http://www.bestsolution.at/
Reg. Nr. FN 222302s am Firmenbuchgericht Innsbruck


More information about the openjfx-dev mailing list