McLaren が言うように、FBReaderはページネーションを実装していません。FBReaderと同じWeb サイトから入手できるZLibraryを使用します。
元のコードはこれを使用して現在のページ番号を計算します。
size_t ZLTextView::pageNumber() const {
if (textArea().isEmpty()) {
return 0;
}
std::vector<size_t>::const_iterator i = nextBreakIterator();
const size_t startIndex = (i != myTextBreaks.begin()) ? *(i - 1) : 0;
const size_t endIndex = (i != myTextBreaks.end()) ? *i :
textArea().model()->paragraphsNumber();
return (myTextSize[endIndex] - myTextSize[startIndex]) / 2048 + 1;
}
Java バージョンは、この関数を使用してページ番号を計算します。
private synchronized int computeTextPageNumber(int textSize) {
if (myModel == null || myModel.getParagraphsNumber() == 0) {
return 1;
}
final float factor = 1.0f / computeCharsPerPage();
final float pages = textSize * factor;
return Math.max((int)(pages + 1.0f - 0.5f * factor), 1);
}
これはにありますorg.geometerplus.zlibrary.text.view.TextView
ただし、これは非常に単純化されているため、独自に実装することもできます。