Scroom  0.14
tiledbitmaplayer.hh
Go to the documentation of this file.
1 /*
2  * Scroom - Generic viewer for 2D data
3  * Copyright (C) 2009-2022 Kees-Jan Dijkzeul
4  *
5  * SPDX-License-Identifier: LGPL-2.1
6  */
7 
8 #pragma once
9 
10 #include <map>
11 #include <vector>
12 
13 #include <boost/enable_shared_from_this.hpp>
14 #include <boost/shared_ptr.hpp>
15 #include <boost/thread.hpp>
16 #include <boost/weak_ptr.hpp>
17 
18 #include <scroom/interface.hh>
19 #include <scroom/memoryblobs.hh>
20 #include <scroom/observable.hh>
22 #include <scroom/rectangle.hh>
23 #include <scroom/stuff.hh>
24 #include <scroom/threadpool.hh>
25 #include <scroom/tile.hh>
27 
28 #define TILESIZE 4096
29 
35 {
41 };
42 
43 class TileViewState;
44 class CompressedTile;
45 
47 
50 {
51 public:
52  using Ptr = boost::shared_ptr<TileInitialisationObserver>;
53  using WeakPtr = boost::weak_ptr<TileInitialisationObserver>;
54 
64  virtual void tileCreated(const boost::shared_ptr<CompressedTile>& tile);
65 
74  virtual void tileFinished(const boost::shared_ptr<CompressedTile>& tile);
75 };
76 
78 
81 {
82 public:
83  using Ptr = boost::shared_ptr<TileLoadingObserver>;
84  using WeakPtr = boost::weak_ptr<TileLoadingObserver>;
85 
87  virtual void tileLoaded(ConstTile::Ptr tile) = 0;
88 };
89 
91 
103  : public Scroom::Utils::Observable<TileInitialisationObserver>
104  , public Scroom::Utils::Observable<TileLoadingObserver>
105  , public Viewable
106 {
107 public:
108  using Ptr = boost::shared_ptr<CompressedTile>;
109 
110 public:
111  const int depth;
112  const int x;
113  const int y;
114  const int bpp;
116 private:
122  boost::mutex stateData;
123  boost::mutex tileData;
127  std::map<ViewInterface::WeakPtr, boost::weak_ptr<TileViewState>> viewStates;
128 
129 private:
130  CompressedTile(int depth,
131  int x,
132  int y,
133  int bpp,
136 
137 public:
138  static Ptr create(int depth,
139  int x,
140  int y,
141  int bpp,
144 
151 
152 protected:
160  void observerAdded(TileInitialisationObserver::Ptr const& observer, Scroom::Bookkeeping::Token const& token) override;
161 
165  void observerAdded(TileLoadingObserver::Ptr const& observer, Scroom::Bookkeeping::Token const& token) override;
166 
167 public:
168  // To choose between overloaded functions, the compiler needs some extra convincing
170  {
172  }
174  {
176  }
178  {
180  }
182  {
184  }
185 
193 
201 
209 
215  void reportFinished();
216 
218 
219  boost::shared_ptr<TileViewState> getViewState(const ViewInterface::WeakPtr& vi);
220 
221 private:
227  void cleanupState();
229  void notifyObservers(const ConstTile::Ptr& tile);
230 
231  // Viewable ////////////////////////////////////////////////////////////
232 public:
233  void open(ViewInterface::WeakPtr vi) override;
234  void close(ViewInterface::WeakPtr vi) override;
235 };
236 
237 using CompressedTileLine = std::vector<CompressedTile::Ptr>;
238 using CompressedTileGrid = std::vector<CompressedTileLine>;
239 
241 
242 class Layer
243  : public Viewable
244  , public virtual Scroom::Utils::Base
245 {
246 public:
247  using Ptr = boost::shared_ptr<Layer>;
248 
249 private:
250  int depth;
251  int width;
252  int height;
259 
260 private:
261  Layer(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider);
262 
263 public:
264  static Ptr create(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider);
265  static Ptr create(int layerWidth, int layerHeight, int bpp);
266  int getHorTileCount() const;
267  int getVerTileCount() const;
268 
269  CompressedTile::Ptr getTile(int i, int j);
271  void fetchData(SourcePresentation::Ptr sp, const ThreadPool::WeakQueue::Ptr& queue, std::function<void()> on_finished);
272 
273 public:
274  int getWidth() const { return width; }
275 
276  int getHeight() const { return height; }
277 
278  int getDepth() const { return depth; }
279 
280  Scroom::Utils::Rectangle<int> getRect() const { return {0, 0, width, height}; }
281 
283 
285 
286 public:
287  // Viewable ////////////////////////////////////////////////////////////
288  void open(ViewInterface::WeakPtr vi) override;
289  void close(ViewInterface::WeakPtr vi) override;
290 };
CompressedTile::viewStates
std::map< ViewInterface::WeakPtr, boost::weak_ptr< TileViewState > > viewStates
Definition: tiledbitmaplayer.hh:127
Layer::getWidth
int getWidth() const
Definition: tiledbitmaplayer.hh:274
CompressedTile::getState
TileState getState()
Definition: compressedtile.cc:176
TileLoadingObserver::Ptr
boost::shared_ptr< TileLoadingObserver > Ptr
Definition: tiledbitmaplayer.hh:83
TileInitialisationObserver::Ptr
boost::shared_ptr< TileInitialisationObserver > Ptr
Definition: tiledbitmaplayer.hh:52
TileInitialisationObserver::tileFinished
virtual void tileFinished(const boost::shared_ptr< CompressedTile > &tile)
TileInitialisationObserver.
Definition: compressedtile.cc:289
CompressedTile::x
const int x
Definition: tiledbitmaplayer.hh:112
Layer::getRect
Scroom::Utils::Rectangle< int > getRect() const
Definition: tiledbitmaplayer.hh:280
Layer::getHorTileCount
int getHorTileCount() const
Definition: layer.cc:124
TileStateInternal
TileStateInternal
Definition: tiledbitmaplayer.hh:34
Scroom::MemoryBlobs::PageProvider::Ptr
boost::shared_ptr< PageProvider > Ptr
Definition: memoryblobs.hh:41
CompressedTile::close
void close(ViewInterface::WeakPtr vi) override
Definition: compressedtile.cc:284
Layer::width
int width
Definition: tiledbitmaplayer.hh:251
threadpool.hh
CompressedTile::tile
Tile::WeakPtr tile
Definition: tiledbitmaplayer.hh:118
Scroom::Utils::Observable::registerStrongObserver
Scroom::Bookkeeping::Token registerStrongObserver(Observer const &observer)
Definition: observable.hh:213
Layer::tiles
CompressedTileGrid tiles
Definition: tiledbitmaplayer.hh:255
Scroom::MemoryBlobs::Blob::Ptr
boost::shared_ptr< Blob > Ptr
Definition: memoryblobs.hh:78
Layer::verTileCount
int verTileCount
Definition: tiledbitmaplayer.hh:254
Layer::close
void close(ViewInterface::WeakPtr vi) override
Definition: layer.cc:173
CompressedTileGrid
std::vector< CompressedTileLine > CompressedTileGrid
Definition: tiledbitmaplayer.hh:238
ThreadPool::WeakQueue::Ptr
boost::shared_ptr< WeakQueue > Ptr
Definition: threadpool.hh:137
CompressedTile::constTile
ConstTile::WeakPtr constTile
Definition: tiledbitmaplayer.hh:119
CompressedTile::cleanupState
void cleanupState()
Definition: compressedtile.cc:261
CompressedTile::create
static Ptr create(int depth, int x, int y, int bpp, const Scroom::MemoryBlobs::PageProvider::Ptr &provider, TileStateInternal state=TSI_UNINITIALIZED)
Definition: compressedtile.cc:32
CompressedTile::registerStrongObserver
Scroom::Bookkeeping::Token registerStrongObserver(TileLoadingObserver::Ptr const &observer)
Definition: tiledbitmaplayer.hh:177
CompressedTile::getTileSync
Tile::Ptr getTileSync()
Definition: compressedtile.cc:55
Layer::fetchData
void fetchData(SourcePresentation::Ptr sp, const ThreadPool::WeakQueue::Ptr &queue, std::function< void()> on_finished)
Definition: layer.cc:148
presentationinterface.hh
CompressedTile::getConstTileAsync
ConstTile::Ptr getConstTileAsync()
Definition: compressedtile.cc:84
ConstTile::Ptr
boost::shared_ptr< ConstTile > Ptr
Definition: tile.hh:47
Layer::height
int height
Definition: tiledbitmaplayer.hh:252
CompressedTile::getConstTileSync
ConstTile::Ptr getConstTileSync()
Definition: compressedtile.cc:44
SourcePresentation::Ptr
boost::shared_ptr< SourcePresentation > Ptr
Definition: tiledbitmapinterface.hh:198
Layer::outOfBounds
CompressedTile::Ptr outOfBounds
Definition: tiledbitmaplayer.hh:256
Layer::getTileLine
CompressedTileLine & getTileLine(int j)
Definition: layer.cc:138
observable.hh
TSI_LOADING_SYNCHRONOUSLY
@ TSI_LOADING_SYNCHRONOUSLY
Definition: tiledbitmaplayer.hh:39
CompressedTile::do_load
ConstTile::Ptr do_load()
Definition: compressedtile.cc:130
CompressedTile::open
void open(ViewInterface::WeakPtr vi) override
Definition: compressedtile.cc:279
Layer::lineOutOfBounds
CompressedTileLine lineOutOfBounds
Definition: tiledbitmaplayer.hh:257
Layer::pageProvider
Scroom::MemoryBlobs::PageProvider::Ptr pageProvider
Definition: tiledbitmaplayer.hh:258
Layer
Definition: tiledbitmaplayer.hh:242
Layer::horTileCount
int horTileCount
Definition: tiledbitmaplayer.hh:253
Layer::depth
int depth
Definition: tiledbitmaplayer.hh:250
CompressedTile::stateData
boost::mutex stateData
Definition: tiledbitmaplayer.hh:122
Scroom::Utils::Observable::registerObserver
Scroom::Bookkeeping::Token registerObserver(ObserverWeak const &observer)
Definition: observable.hh:233
CompressedTile::depth
const int depth
Definition: tiledbitmaplayer.hh:111
TileState
TileState
Definition: tiledbitmapinterface.hh:32
Layer::getTile
CompressedTile::Ptr getTile(int i, int j)
Definition: layer.cc:128
CompressedTile::provider
Scroom::MemoryBlobs::PageProvider::Ptr provider
Definition: tiledbitmaplayer.hh:120
Layer::getPageProvider
Scroom::MemoryBlobs::PageProvider::Ptr getPageProvider()
Definition: tiledbitmaplayer.hh:284
Layer::registerObserver
Scroom::Bookkeeping::Token registerObserver(const TileInitialisationObserver::Ptr &observer)
Definition: layer.cc:110
memoryblobs.hh
ViewInterface::WeakPtr
boost::weak_ptr< ViewInterface > WeakPtr
Definition: viewinterface.hh:194
CompressedTile::CompressedTile
CompressedTile(int depth, int x, int y, int bpp, const Scroom::MemoryBlobs::PageProvider::Ptr &provider, TileStateInternal state)
CompressedTile.
Definition: compressedtile.cc:21
CompressedTile::notifyObservers
void notifyObservers(const ConstTile::Ptr &tile)
Definition: compressedtile.cc:271
TSI_UNINITIALIZED
@ TSI_UNINITIALIZED
Definition: tiledbitmaplayer.hh:36
tiledbitmapinterface.hh
Scroom::Utils::Base
Definition: utilities.hh:30
tile.hh
TileLoadingObserver::WeakPtr
boost::weak_ptr< TileLoadingObserver > WeakPtr
Definition: tiledbitmaplayer.hh:84
stuff.hh
CompressedTile::state
TileStateInternal state
Definition: tiledbitmaplayer.hh:117
Tile::Ptr
boost::shared_ptr< Tile > Ptr
Definition: tile.hh:21
CompressedTile::bpp
const int bpp
Definition: tiledbitmaplayer.hh:114
CompressedTile::observerAdded
void observerAdded(TileInitialisationObserver::Ptr const &observer, Scroom::Bookkeeping::Token const &token) override
Definition: compressedtile.cc:208
CompressedTile::registerObserver
Scroom::Bookkeeping::Token registerObserver(TileInitialisationObserver::WeakPtr const &observer)
Definition: tiledbitmaplayer.hh:173
CompressedTile::registerObserver
Scroom::Bookkeeping::Token registerObserver(TileLoadingObserver::WeakPtr const &observer)
Definition: tiledbitmaplayer.hh:181
Scroom::Utils::Observable
Definition: observable.hh:24
CompressedTile
Definition: tiledbitmaplayer.hh:102
Layer::open
void open(ViewInterface::WeakPtr vi) override
Definition: layer.cc:157
Layer::getVerTileCount
int getVerTileCount() const
Definition: layer.cc:126
Interface
Definition: interface.hh:10
TileInitialisationObserver::tileCreated
virtual void tileCreated(const boost::shared_ptr< CompressedTile > &tile)
Definition: compressedtile.cc:291
Layer::getDepth
int getDepth() const
Definition: tiledbitmaplayer.hh:278
TileInitialisationObserver::WeakPtr
boost::weak_ptr< TileInitialisationObserver > WeakPtr
Definition: tiledbitmaplayer.hh:53
TSI_OUT_OF_BOUNDS
@ TSI_OUT_OF_BOUNDS
Definition: tiledbitmaplayer.hh:38
CompressedTile::data
Scroom::MemoryBlobs::Blob::Ptr data
Definition: tiledbitmaplayer.hh:121
CompressedTile::Ptr
boost::shared_ptr< CompressedTile > Ptr
Definition: tiledbitmaplayer.hh:108
Layer::getHeight
int getHeight() const
Definition: tiledbitmaplayer.hh:276
Layer::create
static Ptr create(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider)
Definition: layer.cc:98
TileViewState
Definition: tileviewstate.hh:22
Viewable
Definition: presentationinterface.hh:32
CompressedTile::tileData
boost::mutex tileData
Definition: tiledbitmaplayer.hh:123
CompressedTileLine
std::vector< CompressedTile::Ptr > CompressedTileLine
Definition: tiledbitmaplayer.hh:237
TSI_LOADING_ASYNCHRONOUSLY
@ TSI_LOADING_ASYNCHRONOUSLY
Definition: tiledbitmaplayer.hh:40
ThreadPool::Queue::WeakPtr
boost::weak_ptr< Queue > WeakPtr
Definition: threadpool.hh:83
CompressedTile::y
const int y
Definition: tiledbitmaplayer.hh:113
Scroom::Bookkeeping::Token
Definition: bookkeeping.hh:37
TileInitialisationObserver
Definition: tiledbitmaplayer.hh:49
Scroom::Utils::Rectangle< int >
CompressedTile::getViewState
boost::shared_ptr< TileViewState > getViewState(const ViewInterface::WeakPtr &vi)
Definition: compressedtile.cc:163
TSI_NORMAL
@ TSI_NORMAL
Definition: tiledbitmaplayer.hh:37
Viewable::Ptr
boost::shared_ptr< Viewable > Ptr
Definition: presentationinterface.hh:35
interface.hh
CompressedTile::reportFinished
void reportFinished()
Definition: compressedtile.cc:116
CompressedTile::queue
ThreadPool::Queue::WeakPtr queue
Definition: tiledbitmaplayer.hh:125
TileLoadingObserver::tileLoaded
virtual void tileLoaded(ConstTile::Ptr tile)=0
rectangle.hh
ConstTile::WeakPtr
boost::weak_ptr< ConstTile > WeakPtr
Definition: tile.hh:48
CompressedTile::initialize
Tile::Ptr initialize()
Definition: compressedtile.cc:90
Tile::WeakPtr
boost::weak_ptr< Tile > WeakPtr
Definition: tile.hh:22
Layer::Layer
Layer(int depth, int layerWidth, int layerHeight, int bpp, Scroom::MemoryBlobs::PageProvider::Ptr provider)
Layer.
Definition: layer.cc:70
CompressedTile::registerStrongObserver
Scroom::Bookkeeping::Token registerStrongObserver(TileInitialisationObserver::Ptr const &observer)
Definition: tiledbitmaplayer.hh:169
TileLoadingObserver
Definition: tiledbitmaplayer.hh:80