Scroom 0.14-48-ga0fee447
Loading...
Searching...
No Matches
tiledbitmaplayer.hh
Go to the documentation of this file.
1/*
2 * Scroom - Generic viewer for 2D data
3 * Copyright (C) 2009-2026 Kees-Jan Dijkzeul
4 *
5 * SPDX-License-Identifier: LGPL-2.1
6 */
7
8#pragma once
9
10#include <map>
11#include <memory>
12#include <vector>
13
14#include <boost/thread.hpp>
15
16#include <scroom/interface.hh>
17#include <scroom/logger.hh>
18#include <scroom/memoryblobs.hh>
19#include <scroom/observable.hh>
21#include <scroom/rectangle.hh>
22#include <scroom/stuff.hh>
23#include <scroom/threadpool.hh>
24#include <scroom/tile.hh>
26
27#define TILESIZE 4096
28
41
42class TileViewState;
43class CompressedTile;
44
46
49{
50public:
51 using Ptr = std::shared_ptr<TileInitialisationObserver>;
52 using WeakPtr = std::weak_ptr<TileInitialisationObserver>;
53
63 virtual void tileCreated(const std::shared_ptr<CompressedTile>& tile);
64
73 virtual void tileFinished(const std::shared_ptr<CompressedTile>& tile);
74};
75
77
80{
81public:
82 using Ptr = std::shared_ptr<TileLoadingObserver>;
83 using WeakPtr = std::weak_ptr<TileLoadingObserver>;
84
86 virtual void tileLoaded(ConstTile::Ptr tile) = 0;
87};
88
90
102 : public Scroom::Utils::Observable<TileInitialisationObserver>
103 , public Scroom::Utils::Observable<TileLoadingObserver>
104 , public Viewable
105{
106public:
107 using Ptr = std::shared_ptr<CompressedTile>;
108
109public:
110 const int depth;
111 const int x;
112 const int y;
113 const int bpp;
115private:
121 boost::mutex stateData;
122 boost::mutex tileData;
127
128private:
130 int depth,
131 int x,
132 int y,
133 int bpp,
136 );
137
138public:
139 static Ptr create(
140 int depth,
141 int x,
142 int y,
143 int bpp,
146 );
147
154
155protected:
164
169
170public:
171 // To choose between overloaded functions, the compiler needs some extra convincing
188
196
204
212
218 void reportFinished();
219
221
222 std::shared_ptr<TileViewState> getViewState(const ViewInterface::WeakPtr& vi);
223
224private:
230 void cleanupState();
233
234 // Viewable ////////////////////////////////////////////////////////////
235public:
236 void open(ViewInterface::WeakPtr vi) override;
237 void close(ViewInterface::WeakPtr vi) override;
238};
239
240using CompressedTileLine = std::vector<CompressedTile::Ptr>;
241using CompressedTileGrid = std::vector<CompressedTileLine>;
242
244
245class Layer
246 : public Viewable
247 , public virtual Scroom::Utils::Base
248{
249public:
250 using Ptr = std::shared_ptr<Layer>;
251
252private:
253 int depth;
254 int width;
263
264private:
265 Layer(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider);
266
267public:
268 static Ptr create(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider);
269 static Ptr create(int layerWidth, int layerHeight, int bpp);
270 int getHorTileCount() const;
271 int getVerTileCount() const;
272
273 CompressedTile::Ptr getTile(int i, int j);
275 void fetchData(SourcePresentation::Ptr sp, const ThreadPool::WeakQueue::Ptr& queue, std::function<void()> on_finished);
276
277public:
278 int getWidth() const { return width; }
279
280 int getHeight() const { return height; }
281
282 int getDepth() const { return depth; }
283
285
287
289
290public:
291 // Viewable ////////////////////////////////////////////////////////////
292 void open(ViewInterface::WeakPtr vi) override;
293 void close(ViewInterface::WeakPtr vi) override;
294};
PageProvider::Ptr provider
Definition blob-tests.cc:26
Definition tiledbitmaplayer.hh:105
TileState getState()
Definition compressedtile.cc:179
ConstTile::Ptr getConstTileSync()
Definition compressedtile.cc:47
void close(ViewInterface::WeakPtr vi) override
Definition compressedtile.cc:287
Scroom::MemoryBlobs::PageProvider::Ptr provider
Definition tiledbitmaplayer.hh:119
TileStateInternal state
Definition tiledbitmaplayer.hh:116
const int depth
Definition tiledbitmaplayer.hh:110
const int y
Definition tiledbitmaplayer.hh:112
const int x
Definition tiledbitmaplayer.hh:111
void notifyObservers(const ConstTile::Ptr &tile)
Definition compressedtile.cc:274
ConstTile::Ptr do_load()
Definition compressedtile.cc:133
Tile::WeakPtr tile
Definition tiledbitmaplayer.hh:117
void observerAdded(TileInitialisationObserver::Ptr const &observer, Scroom::Bookkeeping::Token const &token) override
Definition compressedtile.cc:211
Scroom::Utils::WeakKeyMap< ViewInterface::WeakPtr, std::weak_ptr< TileViewState > > viewStates
Definition tiledbitmaplayer.hh:126
static Ptr create(int depth, int x, int y, int bpp, const Scroom::MemoryBlobs::PageProvider::Ptr &provider, TileStateInternal state=TSI_UNINITIALIZED)
Definition compressedtile.cc:33
Tile::Ptr getTileSync()
Definition compressedtile.cc:58
ConstTile::Ptr getConstTileAsync()
Definition compressedtile.cc:87
Scroom::Bookkeeping::Token registerStrongObserver(TileLoadingObserver::Ptr const &observer)
Definition tiledbitmaplayer.hh:180
Scroom::Bookkeeping::Token registerObserver(TileLoadingObserver::WeakPtr const &observer)
Definition tiledbitmaplayer.hh:184
void open(ViewInterface::WeakPtr vi) override
Definition compressedtile.cc:282
ThreadPool::Queue::WeakPtr queue
Definition tiledbitmaplayer.hh:124
std::shared_ptr< TileViewState > getViewState(const ViewInterface::WeakPtr &vi)
Definition compressedtile.cc:166
Tile::Ptr initialize()
Definition compressedtile.cc:93
Scroom::Bookkeeping::Token registerStrongObserver(TileInitialisationObserver::Ptr const &observer)
Definition tiledbitmaplayer.hh:172
Scroom::MemoryBlobs::Blob::Ptr data
Definition tiledbitmaplayer.hh:120
boost::mutex tileData
Definition tiledbitmaplayer.hh:122
void reportFinished()
Definition compressedtile.cc:119
void cleanupState()
Definition compressedtile.cc:264
boost::mutex stateData
Definition tiledbitmaplayer.hh:121
std::shared_ptr< CompressedTile > Ptr
Definition tiledbitmaplayer.hh:107
Scroom::Bookkeeping::Token registerObserver(TileInitialisationObserver::WeakPtr const &observer)
Definition tiledbitmaplayer.hh:176
const int bpp
Definition tiledbitmaplayer.hh:113
ConstTile::WeakPtr constTile
Definition tiledbitmaplayer.hh:118
std::weak_ptr< ConstTile > WeakPtr
Definition tile.hh:46
std::shared_ptr< ConstTile > Ptr
Definition tile.hh:45
Definition interface.hh:11
Definition tiledbitmaplayer.hh:248
int horTileCount
Definition tiledbitmaplayer.hh:256
void close(ViewInterface::WeakPtr vi) override
Definition layer.cc:177
Scroom::MemoryBlobs::PageProvider::Ptr getPageProvider()
Definition tiledbitmaplayer.hh:288
int depth
Definition tiledbitmaplayer.hh:253
CompressedTileLine lineOutOfBounds
Definition tiledbitmaplayer.hh:260
void fetchData(SourcePresentation::Ptr sp, const ThreadPool::WeakQueue::Ptr &queue, std::function< void()> on_finished)
Definition layer.cc:151
Scroom::Bookkeeping::Token registerObserver(const TileInitialisationObserver::Ptr &observer)
Definition layer.cc:113
std::shared_ptr< Layer > Ptr
Definition tiledbitmaplayer.hh:250
CompressedTile::Ptr outOfBounds
Definition tiledbitmaplayer.hh:259
Scroom::Utils::Rectangle< int > getRect() const
Definition tiledbitmaplayer.hh:284
int height
Definition tiledbitmaplayer.hh:255
int width
Definition tiledbitmaplayer.hh:254
CompressedTile::Ptr getTile(int i, int j)
Definition layer.cc:131
int getDepth() const
Definition tiledbitmaplayer.hh:282
int verTileCount
Definition tiledbitmaplayer.hh:257
static Ptr create(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider)
Definition layer.cc:101
int getHeight() const
Definition tiledbitmaplayer.hh:280
int getHorTileCount() const
Definition layer.cc:127
Scroom::Logger logger
Definition tiledbitmaplayer.hh:262
int getWidth() const
Definition tiledbitmaplayer.hh:278
CompressedTileGrid tiles
Definition tiledbitmaplayer.hh:258
int getVerTileCount() const
Definition layer.cc:129
Scroom::MemoryBlobs::PageProvider::Ptr pageProvider
Definition tiledbitmaplayer.hh:261
CompressedTileLine & getTileLine(int j)
Definition layer.cc:141
void open(ViewInterface::WeakPtr vi) override
Definition layer.cc:161
Definition bookkeeping.hh:50
Definition logger.hh:49
std::shared_ptr< Blob > Ptr
Definition memoryblobs.hh:77
std::shared_ptr< PageProvider > Ptr
Definition memoryblobs.hh:40
Definition utilities.hh:34
Definition observable.hh:71
Scroom::Bookkeeping::Token registerStrongObserver(Observer const &observer)
Definition observable.hh:212
Scroom::Bookkeeping::Token registerObserver(ObserverWeak const &observer)
Definition observable.hh:232
Definition rectangle.hh:29
std::shared_ptr< SourcePresentation > Ptr
Definition tiledbitmapinterface.hh:191
std::weak_ptr< Queue > WeakPtr
Definition threadpool.hh:79
std::shared_ptr< WeakQueue > Ptr
Definition threadpool.hh:133
Definition tiledbitmaplayer.hh:49
virtual void tileFinished(const std::shared_ptr< CompressedTile > &tile)
TileInitialisationObserver.
Definition compressedtile.cc:292
std::shared_ptr< TileInitialisationObserver > Ptr
Definition tiledbitmaplayer.hh:51
std::weak_ptr< TileInitialisationObserver > WeakPtr
Definition tiledbitmaplayer.hh:52
virtual void tileCreated(const std::shared_ptr< CompressedTile > &tile)
Definition compressedtile.cc:294
Definition tiledbitmaplayer.hh:80
std::shared_ptr< TileLoadingObserver > Ptr
Definition tiledbitmaplayer.hh:82
std::weak_ptr< TileLoadingObserver > WeakPtr
Definition tiledbitmaplayer.hh:83
virtual void tileLoaded(ConstTile::Ptr tile)=0
Definition tileviewstate.hh:27
std::shared_ptr< Tile > Ptr
Definition tile.hh:19
std::weak_ptr< Tile > WeakPtr
Definition tile.hh:20
std::weak_ptr< ViewInterface > WeakPtr
Definition viewinterface.hh:194
Definition presentationinterface.hh:32
std::map< K, V, std::owner_less< K > > WeakKeyMap
Definition utilities.hh:118
TestObserver::Ptr observer
Definition observable-tests.cc:91
ViewInterface::Ptr const vi
Definition pipette-tests.cc:186
Scroom::Bookkeeping::Token const token
Definition pipette-tests.cc:269
TileState
Definition tiledbitmapinterface.hh:31
std::vector< CompressedTile::Ptr > CompressedTileLine
Definition tiledbitmaplayer.hh:240
TileStateInternal
Definition tiledbitmaplayer.hh:34
@ TSI_NORMAL
Definition tiledbitmaplayer.hh:36
@ TSI_OUT_OF_BOUNDS
Definition tiledbitmaplayer.hh:37
@ TSI_LOADING_ASYNCHRONOUSLY
Definition tiledbitmaplayer.hh:39
@ TSI_LOADING_SYNCHRONOUSLY
Definition tiledbitmaplayer.hh:38
@ TSI_UNINITIALIZED
Definition tiledbitmaplayer.hh:35
std::vector< CompressedTileLine > CompressedTileGrid
Definition tiledbitmaplayer.hh:241