Hallo,
ich übertrage derzeit einige ältere Programme, die ich mit Carbon gemacht habe, auf Cocoa. Dabei gibt es immer wider Probleme. Hier mein aktuelles.
ich zeichne verschiedene Dinge in einen View eines Fensters. Wenn ich zum Beispiel ein Rechteck zeichne, dann erscheint das in der korrekten Größe; zeichne ich aber einen Text, dann erscheint der um ein Vielfaches zu groß.
Ich rufe die "drawRect"-Methode des Views auf, die es im Beispiel des Kapitels "Graphices Context" des "Quartz 2D Programming Guide" aufgeführt ist. Zunächst eichne ich ein Quadrat mit der Kantenlänge 100, dann will ich den Text "Test" zeichnen mit der Textgröße 12. Während das Quadrat in der korrekten Größe erscheint, ist der Text um ein Vielfaches zu groß (ich füge einen Screenshot im Anhang bei)!
Nach dem Zeichnen des Quadrats rufe ich die Funktion zur Auswahl des Fonts und der Font Size auf:
CGContextSelectFont (cgContext, "Arial", 12, kCGEncodingMacRoman);
dann wird der Text gezeichnet:
CGContextShowTextAtPoint (cgContext, 10.0, 150.0, "Test", strlen("Test"));
Ich habe herausgefunden, dass der Text in der richtigen Größe gezeichnet wird, wenn ich die Font Size in "CGContextSelectFont" mit dem Faktor 0.08 multipliziere, also:
CGContextSelectFont (cgContext, "Arial", 12.0 * 0.08, kCGEncodingMacRoman);
Das kann aber doch nicht sein. Woran kann das liegen? Kennt sich da jemand aus?
Hier mein kompletter Code:
-(void) drawRect: (NSRect) rect
{
CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort];
// Quadrat zeichnen
CGContextSetRGBFillColor (cgContext, 0, 0, 1, 1);
CGContextFillRect (cgContext, CGRectMake (50, 50, 100, 100));
// Text zeichnen
CGContextSetAllowsAntialiasing (cgContext, true);
CGContextSetRGBFillColor (cgContext, 0, 0, 0, 1);
CGContextSelectFont (cgContext, "Arial", 12, kCGEncodingMacRoman); // so erscheint der Text viel zu groß
//CGContextSelectFont (cgContext, "Arial", 12.0 * 0.08, kCGEncodingMacRoman); // so erscheint der Text in der richtigen Größe
CGContextShowTextAtPoint (cgContext, 10.0, 150.0, "Test", strlen("Test"));
}
ich übertrage derzeit einige ältere Programme, die ich mit Carbon gemacht habe, auf Cocoa. Dabei gibt es immer wider Probleme. Hier mein aktuelles.
ich zeichne verschiedene Dinge in einen View eines Fensters. Wenn ich zum Beispiel ein Rechteck zeichne, dann erscheint das in der korrekten Größe; zeichne ich aber einen Text, dann erscheint der um ein Vielfaches zu groß.
Ich rufe die "drawRect"-Methode des Views auf, die es im Beispiel des Kapitels "Graphices Context" des "Quartz 2D Programming Guide" aufgeführt ist. Zunächst eichne ich ein Quadrat mit der Kantenlänge 100, dann will ich den Text "Test" zeichnen mit der Textgröße 12. Während das Quadrat in der korrekten Größe erscheint, ist der Text um ein Vielfaches zu groß (ich füge einen Screenshot im Anhang bei)!
Nach dem Zeichnen des Quadrats rufe ich die Funktion zur Auswahl des Fonts und der Font Size auf:
CGContextSelectFont (cgContext, "Arial", 12, kCGEncodingMacRoman);
dann wird der Text gezeichnet:
CGContextShowTextAtPoint (cgContext, 10.0, 150.0, "Test", strlen("Test"));
Ich habe herausgefunden, dass der Text in der richtigen Größe gezeichnet wird, wenn ich die Font Size in "CGContextSelectFont" mit dem Faktor 0.08 multipliziere, also:
CGContextSelectFont (cgContext, "Arial", 12.0 * 0.08, kCGEncodingMacRoman);
Das kann aber doch nicht sein. Woran kann das liegen? Kennt sich da jemand aus?
Hier mein kompletter Code:
-(void) drawRect: (NSRect) rect
{
CGContextRef cgContext = [[NSGraphicsContext currentContext] graphicsPort];
// Quadrat zeichnen
CGContextSetRGBFillColor (cgContext, 0, 0, 1, 1);
CGContextFillRect (cgContext, CGRectMake (50, 50, 100, 100));
// Text zeichnen
CGContextSetAllowsAntialiasing (cgContext, true);
CGContextSetRGBFillColor (cgContext, 0, 0, 0, 1);
CGContextSelectFont (cgContext, "Arial", 12, kCGEncodingMacRoman); // so erscheint der Text viel zu groß
//CGContextSelectFont (cgContext, "Arial", 12.0 * 0.08, kCGEncodingMacRoman); // so erscheint der Text in der richtigen Größe
CGContextShowTextAtPoint (cgContext, 10.0, 150.0, "Test", strlen("Test"));
}