• Willkommen im Geoclub - dem größten deutschsprachigen Geocaching-Forum. Registriere dich kostenlos, um alle Inhalte zu sehen und neue Beiträge zu erstellen.

CW und Freerunner

jennergruhle

Geoguru
Das wäre natürlich die beste Variante, aber das Problem ist, dass (zumindest unter Java bzw. Ewe, das muss ich noch testen) die Font-Größen generell viel zu groß interpretiert werden. Eine Schrift mit 10p ist am PC (egal ob Linux oder Windows) je nach dpi-Wert so ca. 2-3 mm groß, auf dem Freerunner aber 5-6, und nimmt damit schon ein Zehntel der Bildschirmhöhe ein. Im Goto-Panel bleibt dann von der Rose nichts über, und gelb, blau und rot übermalen sich dauernd gegenseitig. Die normale Schriftgröße für ordentliche Bedienung muss ich im Cachewolf auf 5 stellen, im GotoPanel ist 7 gerade noch ok. Berechnet werden so ca. 15-20, das ist viel zu viel.
Hier braucht man wohl einen generellen Korrekturfaktor, spezifisch für den Freerunner.
 

pfeffer

Geowizard
ja, dann machen wir einen.
Ich vermute wir brauchen den für alle Linux-mobilen Geräte.

Oder wie sieht das auf dem Zaurus aus?

Hängt es vielleicht mit dem verwendeten GTK zusammen?

Gruß,
Pfeffer.
 

pfeffer

Geowizard
das sieht doch gut aus.
Hast Du die Schriftgröße in den Einstellungen verändert?
Falls ja: welche Größe hast Du eingestellt?
Und wie sieht's aus, wenn man die Schriftgröße nicht manuell verändert?

Gruß,
Pfeffer.
 

MiK

Geoguru
Ich glaube wir haben da schon eine Unterscheidung drin, so dass unter Linux eine andere Standardschriftgröße gewählt wird. Ich weiß aber gerade nicht genau, wie die verschiedenen Fälle unterschieden werden.

Generell bin ich auch dafür die Automatik zu verbessern anstatt dafür einen Parameter einzuführen. Dies sollte auch ohne Unterscheidung des Systems möglich sein, da man die Höhe eines Fonts ausgelesen werden kann. Daraus kann man automatisch einen Korrekturfaktor berechnen. Zumindest für die Kompassrose, wo einfach der vorhandene Platz ausgenutzt werden soll.
 

jennergruhle

Geoguru
Ich habe mal nachgesehen, ewe.fx.Font hat nicht die selben Methoden wie z.B. java.awt.Font.
Es gibt nur die Setter und Getter für String name, int style, int size. Außerdem die Bit-Konstanten für den Stil und die public static String [] listFonts(ISurface s).
 

MiK

Geoguru
Direkt nach der Berechnung der Fontgröße (Breite/17) siehst Du im Code, wie man die Zeilenhöhe abfragen kann.
 

jennergruhle

Geoguru
*Tomate von Auge nehm und in den Kühlschrank leg*
Ja klar, das mit den FontMetrics hatte ich übersehen. In java.awt.Font gab es noch andere Methoden, z.B. für einen String die resultierende Größe zu berechnen.

OK, das werde ich mir mal vorknöpfen und den Unterschied zwischen WinXP, Linux (PC) und Linux (Freerunner) untersuchen.
 

MiK

Geoguru
Es gibt auch noch Funktionen, um die Länge eines Strings in Pixeln heraus zu bekommen. Das wird auch irgendwo verwendet. Aber an der Stelle sollte es mit der Zeilenhöhe ausreichen. Man stellt mit der Schriftgröße auch hauptsächlich die Höhe ein. Am Ende muss eben für die funktionierenden Plattformen wieder das gleiche rauskommen.
 

jennergruhle

Geoguru
So, ich habe es jetzt ausprobiert und mir fontSize und lineHeight gleich über "Sats:" ausgeben lassen.

Ergebnis auf dem PC (WinXP oder Linux):
fontSize = location.width / 17 = 46
lineHeight = fm.getHeight() + 1 = 46

Ergebnis auf dem Freerunner:
fontSize = 27
lineHeight = 126

Und 126 ist definitiv viel zu groß, das ist ca. ein Fünftel der Höhe des Panels. Da ist vor lauter Eckentext nichts mehr zu sehen.
Schriftgröße in pt == Zeilenhöhe + 1 gilt wohl nur auf dem PC, auf dem Freerunner kommt etwas anderes heraus. Das hat sicher mit der dpi-Zahl zu tun.

Man könnte jetzt aber nachträglich korrigieren - so hab ich es erst mal gemacht:
Code:
		...
		int fontSize = location.width / 17; 
		mainFont = new Font("Verdana", Font.BOLD, fontSize);
		g.setFont(mainFont);
		fm = g.getFontMetrics(mainFont);
		lineHeight = fm.getHeight() + 1;

		// Neu
		float ratio = lineHeight / fontSize;
		if(ratio < 0.9 || ratio > 1.1){
			fontSize = (int) (fontSize / ratio + 0.5);
			if(fontSize<5)
				fontSize=5;
			mainFont = new Font("Verdana", Font.BOLD, fontSize);
			g.setFont(mainFont);
			fm = g.getFontMetrics(mainFont);
			lineHeight = fm.getHeight() + 1;
		}

		roseRadius = java.lang.Math.min((location.width * 3) / 4, location.height) / 2;
		...
So klappt es gut.
Eigentlich wollte ich das schon gestern nacht schreiben, aber dann wurde ja der Server kaputtopti^Hverschlimmbessert^Humgezogen :)
 

pfeffer

Geowizard
was ist hier eigentlich genau die Ursache des Problems?
Ist die Schriftgröße in CW falsch eingestellt?
Reagiert die Schriftgröße in CW falsch auf den kleinen(?) (hochaufgelösten?) Bildschirm?
Beeinträchtigt der Patch die Anzeige auf dem PC / Windows Mobile Geräten mit Standardauflösung 320x240?

EDIT: EIn Bildschirmfoto ohne/mit Fix würde die Sache vermutlich leichter verständlich machen.

Gruß,
Pfeffer.
 

jennergruhle

Geoguru
Die Ursache ist wohl, dass Ewe die Fontgröße komplett falsch interpretiert. Eine 4p-Schrift ist so groß, wie normalerweise eine 14p- oder 16p-Schrift wäre.
Hier mal der Vergleich:

Ewe-4.pngFreerunner, Ewe, 4p

Ewe-16.pngFreerunner, Ewe, 16p

Wie white_rabbit auch bemerkte (siehe hier den Thread zu Ewe unter Linux), stellt Ewe offenbar die Fontgrößen falsch dar (4p unter Ewe-VM wie 16p unter Sun-VM)
Mit der Sun-JVM (egal ob unter Linux oder Windows) sind die Fontgrößen so wie unter dem jeweiliges Betriebssystem üblich. Nur mit Ewe-VM auf dem Freerunner nicht. 16p ist dort als Systemschriftart aber auch normal groß (2-3mm) und nicht ein Viertel des Bildschirms. Toll wäre, wenn man das irgendwo anpassen könnte. Aber die Ewe-VM ist ja ein monolithischer Block - ich glaube nicht, dass man da eingreifen kann. Ich habe sie ja auch fertig kompiliert hier aus dem Thread.

Achso, obiger Kompassrosen-Patch läuft auf normaler Java-VM unter Linux und Windows ok. Windows Mobile kann ich nicht testen.
Es wird nur nachberechnet, wie groß denn die Schrift wirklich geworden ist, und ggf. angepasst.

Besser wäre allerdings, dass Ewe alles korrekt interpretiert. Auf dem Freerunner kann ich auch den Einstellungsdialog nicht nutzen, weil er (a) zu klein ist (proportional zur Schriftgröße - also höchstens 1/4 des Bildschirms in Höhe und Breite - es sei denn, ich patche auch das, wie in obigem Bild), und (b) sofort die Schriftgröße auf 11 setzt. Dann ist alles zu spät, ich kann nur noch killen und die pref.xml mit dem Editor anpassen.
 

jennergruhle

Geoguru
Nachtrag: Ich habe jetzt mal Ewe für Linux x86 heruntergeladen und auf dem PC getestet; lasse ich damit die Cachewolf.ewe laufen, so sind die Fonts ca. 1,5 ... 1,8 mal so groß (10p unter Ewe wie 16p unter Sun-VM), aber nicht 4* wie auf dem Freerunner.
Ich habe die ewe-Version für GTK2 genommen, den Versionen für GTK 1.2 oder Qt 2 fehlen Bibliotheken, die so alt sind, dass sie nicht mehr installierbar sind (libgtk-1.2.so.0 bzw. libqt.so.2).
 
Oben