View Single Post
Old 09-12-2013, 09:43 AM   #8
jtt
Connoisseur
jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.jtt composes epic poetry in binary.
 
Posts: 97
Karma: 90350
Join Date: Aug 2013
Location: Berlin, Germany
Device: PB 622, PB 623
Keyboard Funktionen

Hallo Martin,

ich habe vielleicht eine Information für euer Dokumentationsprojekt:

a) Das der Funktion OpenKeyboard() übergebene Argument 'maxlen' ist nicht, wie man eigentlich erwarten würde, die Länge des per Argument 'buffer' übergebenen Buffers, sondern es scheint sich um die Maimalzahl der Zeichen, die eingegeben werden kann, zu handeln. Darüber hinaus scheint die Funktion einen Bug zu haben, da man nämlich einen Buchstaben mehr als über 'maxlen' angegeben eingeben kann (und dieser "überschüssige" Buchstabe wird auch in den Buffer geschrieben). Da intern anscheinend UTF-8 verwendet wird, und jedes Zeichen also bis zu 4 Bytes erfordern kann, muss man den Buffer so dimensionieren, dass er Platz für '4+(maxlen+1)+1' Bytes hat, wenn man sicherstellen will, dass es keine buffer overruns geben kann.

Interessanterweise beschneidet die Funktion den Inhalt des ihr übergebenen Buffers, wenn man ihn mit zuvielen Zeichen initialsiert hat, auf maxlen-1 Zeichen...

b) Es gibt (zumindestens in meiner Version) in der Library eine Funkton namens DrawCircleLine() (die im Header-File allerdings nicht auftaucht). Sie hat, soweit ich durch Ausprobieren herausfinden konnte, die Signatur

Code:
void DrawCircleLine(int x1, int y1, int x2, int y2, int width, int color);
und zeichnet eine Linie von (x1,y1) nach (x2,y2) mit einer Breite von 'width'. Die Enden der Linie sollen anscheinend Halbkreise (am den jeweiligen Punkt zentriert) sein - sieht bei nicht zu breiten Linien auch ha;bwegs brauchbar aus, bei breiteren Linien scheinen es eher Dreiecke am Ende zu sein...

c) Wenn man den Finger über den Bildschirm zieht bekomt man zusätzlich zu den dokumentierten Events zwei weitere Typen, nämich gelegentlich einen 'EVT_POINTERDRAG' (Wert 44), der als 'par1' und 'par2' die gleichen Koordiaten anzeigt, wie der vorher gesendete 'EVT_POINTERMOVE', sowie, häufiger, einen 'EVT_MTSYNC' (Wert 39), dessen 'par1' immer 2 zu sein scheint, während 'par2' 1 ist, wenn man nur einen Finger verwendet, aber 2, wenn man zwei (oder mehr) Finger gleichzeitig auf dem Touchscreen hat. Die spannende Frage ist dann natürlich, wie man herausfindet, wo sich der zweite Finger befindet, so dass man multi-touch guestures in seinen Programmen verwenden kann.

Weisst du übrigens, wer für die originale SDK von pocketbook-free.sourceforge.net verantwortlich ist bzw. wer die Ansprechpartner sind? Ich kann da auf der Seite nichts finden (und Russisch, das im Forum benutzt wird, kann ich keider nicht).

Freundliche Grüße, Jens

Last edited by jtt; 09-16-2013 at 08:22 AM.
jtt is offline   Reply With Quote