View Single Post
Old 09-06-2013, 01:11 PM   #4
MartinZ
Zealot
MartinZ doesn't litterMartinZ doesn't litter
 
Posts: 110
Karma: 138
Join Date: Mar 2011
Device: PB903, PB603
SDK

Quote:
a) OpenFont() scheint wider Erwarten niemals NULL zurückzuliefern, selbst wenn man einen nicht-existierenden Fontnamen übergibt. Der falsche Name steht dann sogar im 'name' Feld der ifont structure, tatsächlich wird aber anscheinend ein Default-Font verwendet.
Ja, das stimmt. Habe ich auch festgestellt. Bei nicht existierendem Fontnamen sucht Openfont wohl selbst einen Default-Font. Ob es aber wirklich niemals NULL zurückgibt, ist nicht erwiesen...

Ich habe normalerweise so etwas eingebaut:

Code:
if(pFont!=NULL)
			{
				CloseFont(pFont);
				pFont=NULL;
			}
			pFont = OpenFont(DEFAULTFONT, 15, 0);
Irgendwie erinnere ich mich, dass wegen falschem Umgang mit Fonts ich erst viele Abstürze hatte. Hier ein entsprechender Kommentar aus meinem PBChord-Programm:

Code:
//ifont *vorher = GetFont();   //I wanted to save actual font during examining width
			//But storing the result of GetFont() crashes on real device (not in Emulator)
Versuche also niemals, den Rückgabewert von GetFont abzuspeichern! Das Gibt sofortigen Absturz auf PB903/603 aber nicht auf dem Emulator...



Quote:
b) Ich habe mal mit OpenDirectorySelector() herumprobiert und musste feststellen, dass da zwar was wenig bedienbares auf dem Display erschien, jede Interaktion damit aber zum sofortigen Absturz des Programm führte. Ein auf die Dauer sinnvolles Projekt könnte vielleicht sein einen funktionierenden File- und Directory-Selector zu schreiben.
Den gibt es schon. Ich habe ihn bei PBChord benutzt. Er stammt aus der PBTK-Bibliothek, die der Autor von "Pi", dem Texteditor zur Verfügung gestellt hat. Es hat mich zwar einige graue Haare gekostet, die "from source" zu builden, da er Smart-Pointer aus der Boost-Bibliothek verwendet - aber sie lief dann doch irgendwann.

Quote:
c) Bei der imenu structure hat das 'text' Feld den Type 'char *'. Ich hoffe sehr, dass das eigentlich ''char const *' sein sollte, denn anderenfalls dürfte man dafür keine string literals verwenden (was aber bei allen Beispielprogrammen, die ich gesehen habe, gemacht wird)...
Es ist aber wohl als char * deklariert:

Code:
typedef struct imenu_s {

	short type;
	short index;
	char *text;
	struct imenu_s *submenu;
} imenu;
Im PBTK nutzt der Autor es folgendermaßen:

Code:
std::vector<std::string>::iterator it=items.begin();
    for(int i=0;i<(int)items.size();++i,++it){
      menu[ms-i-1].type=ITEM_ACTIVE;
      menu[ms-i-1].index=i;
      menu[ms-i-1].text=(char*)it->c_str();
    }
Quote:
Ich wäre auch neugierig, wo der 'inkview.h' File, der bei eurem Dokumentationsprojekt steht, herstammt - meiner sieht etwas anders aus (einige Sachen fehlen). Habt ihr den ergänzt oder gibt es vielleicht eine neuere Version der SDk, die ich noch nicht gefunden habe?
Ich meine, das wäre von Sergej's PBSDK
Ich hatte aber auch noch inkinternal.h dazu genommen - auch wenn man das wahrscheinlich kaum brauchen wird.

Quote:
Am besten wäre natürlich eine vollständige Dokumentation durch die Autoren der Library - Ratespiele sind natürlich ganz nett und leider manchmal auch der einzige Weg, aber man läuft immer in die Gefahr, dass man nur das tatsächliche Verhalten dokumentiert, nicht aber das vom Autor der Library intendierte - und dass dann nach dem nächsten Bug-Fix wieder einiges nicht mehr stimmt...
Natürlich. Aber ich glaube kaum, dass wir die jemals bekommen werden

Gruß,
Martin
MartinZ is offline   Reply With Quote