2025-12-03 22:00:29 +11:00
|
|
|
#pragma once
|
2025-12-28 13:59:44 +09:00
|
|
|
#include <functional>
|
2025-12-12 22:13:34 +11:00
|
|
|
#include <memory>
|
|
|
|
|
|
2025-12-03 22:00:29 +11:00
|
|
|
#include "Epub.h"
|
|
|
|
|
|
|
|
|
|
class Page;
|
2025-12-08 22:06:09 +11:00
|
|
|
class GfxRenderer;
|
2025-12-03 22:00:29 +11:00
|
|
|
|
|
|
|
|
class Section {
|
2025-12-12 22:13:34 +11:00
|
|
|
std::shared_ptr<Epub> epub;
|
2025-12-03 22:00:29 +11:00
|
|
|
const int spineIndex;
|
2025-12-08 22:06:09 +11:00
|
|
|
GfxRenderer& renderer;
|
2025-12-29 12:19:54 +10:00
|
|
|
std::string filePath;
|
2025-12-30 15:09:30 +10:00
|
|
|
FsFile file;
|
2025-12-03 22:00:29 +11:00
|
|
|
|
2026-01-02 01:21:48 -06:00
|
|
|
void writeSectionFileHeader(int fontId, float lineCompression, bool extraParagraphSpacing, uint8_t paragraphAlignment,
|
2026-02-06 02:49:04 -05:00
|
|
|
uint16_t viewportWidth, uint16_t viewportHeight, bool hyphenationEnabled,
|
|
|
|
|
bool embeddedStyle);
|
2025-12-30 15:09:30 +10:00
|
|
|
uint32_t onPageComplete(std::unique_ptr<Page> page);
|
2025-12-03 22:00:29 +11:00
|
|
|
|
|
|
|
|
public:
|
2025-12-31 12:11:36 +10:00
|
|
|
uint16_t pageCount = 0;
|
2025-12-03 22:00:29 +11:00
|
|
|
int currentPage = 0;
|
|
|
|
|
|
2025-12-12 22:13:34 +11:00
|
|
|
explicit Section(const std::shared_ptr<Epub>& epub, const int spineIndex, GfxRenderer& renderer)
|
2025-12-21 15:43:53 +11:00
|
|
|
: epub(epub),
|
|
|
|
|
spineIndex(spineIndex),
|
|
|
|
|
renderer(renderer),
|
2025-12-29 12:19:54 +10:00
|
|
|
filePath(epub->getCachePath() + "/sections/" + std::to_string(spineIndex) + ".bin") {}
|
2025-12-03 22:00:29 +11:00
|
|
|
~Section() = default;
|
2026-01-02 01:21:48 -06:00
|
|
|
bool loadSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, uint8_t paragraphAlignment,
|
2026-02-06 02:49:04 -05:00
|
|
|
uint16_t viewportWidth, uint16_t viewportHeight, bool hyphenationEnabled, bool embeddedStyle);
|
2025-12-12 22:13:34 +11:00
|
|
|
bool clearCache() const;
|
2026-01-02 01:21:48 -06:00
|
|
|
bool createSectionFile(int fontId, float lineCompression, bool extraParagraphSpacing, uint8_t paragraphAlignment,
|
2026-02-06 02:49:04 -05:00
|
|
|
uint16_t viewportWidth, uint16_t viewportHeight, bool hyphenationEnabled, bool embeddedStyle,
|
2026-02-01 12:41:24 +05:00
|
|
|
const std::function<void()>& popupFn = nullptr);
|
2025-12-29 12:19:54 +10:00
|
|
|
std::unique_ptr<Page> loadPageFromSectionFile();
|
2025-12-03 22:00:29 +11:00
|
|
|
};
|