Scroom 0.14-49-gb7ae7a6d
Loading...
Searching...
No Matches
tileviewstate.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 <memory>
11
12#include <fmt/format.h>
13
14#include <boost/thread.hpp>
15
16#include <scroom/observable.hh>
17#include <scroom/stuff.hh>
18#include <scroom/threadpool.hh>
21
23
25 : public Scroom::Utils::Observable<TileLoadingObserver>
26 , public TileLoadingObserver
27{
28public:
29 using Ptr = std::shared_ptr<TileViewState>;
30 using WeakPtr = std::weak_ptr<TileViewState>;
31
42
43private:
44 std::shared_ptr<CompressedTile> parent;
45 boost::mutex mut;
52 std::weak_ptr<TiledBitmapViewData> tbvd;
54 int zoom{0};
59
60public:
61 ~TileViewState() override;
62 TileViewState(const TileViewState&) = delete;
66
67 static Ptr create(const std::shared_ptr<CompressedTile>& parent);
68
70 void setViewData(const std::shared_ptr<TiledBitmapViewData>& tbvd);
72
73 // TileLoadingObserver /////////////////////////////////////////////////
74 void tileLoaded(ConstTile::Ptr tile) override;
75
76private:
77 explicit TileViewState(std::shared_ptr<CompressedTile> parent);
78
82 void kick();
83
87 void process(const ThreadPool::WeakQueue::Ptr& wq);
88
89 void computeBase(const ThreadPool::WeakQueue::Ptr& wq, const ConstTile::Ptr& tile_, const LayerOperations::Ptr& lo_);
90 void computeZoom(
92 const ConstTile::Ptr& tile,
95 int zoom
96 );
98 void clear();
99};
100
101template <>
102struct fmt::formatter<TileViewState::State>
103{
104 static constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); }
105 template <typename Context>
106 constexpr auto format(TileViewState::State const& state, Context& ctx) const
107 {
108 switch(state)
109 {
111 return format_to(ctx.out(), "INIT");
113 return format_to(ctx.out(), "LOADED");
115 return format_to(ctx.out(), "COMPUTING_BASE");
117 return format_to(ctx.out(), "BASE_COMPUTED");
119 return format_to(ctx.out(), "COMPUTING_ZOOM");
121 return format_to(ctx.out(), "ZOOM_COMPUTED");
123 return format_to(ctx.out(), "DONE");
124 }
125
126 return format_to(ctx.out(), "UNKNOWN");
127 }
128};
std::shared_ptr< ConstTile > Ptr
Definition tile.hh:45
std::shared_ptr< LayerOperations > Ptr
Definition tiledbitmapinterface.hh:52
Definition observable.hh:71
std::shared_ptr< Queue > Ptr
Definition threadpool.hh:78
std::shared_ptr< WeakQueue > Ptr
Definition threadpool.hh:133
std::shared_ptr< ThreadPool > Ptr
Definition threadpool.hh:165
Definition tiledbitmaplayer.hh:80
Definition tileviewstate.hh:27
boost::mutex mut
Definition tileviewstate.hh:45
void setZoom(LayerOperations::Ptr lo, int zoom)
Definition tileviewstate.cc:83
State state
Definition tileviewstate.hh:46
State
Definition tileviewstate.hh:33
@ INIT
Definition tileviewstate.hh:34
@ ZOOM_COMPUTED
Definition tileviewstate.hh:39
@ BASE_COMPUTED
Definition tileviewstate.hh:37
@ DONE
Definition tileviewstate.hh:40
@ LOADED
Definition tileviewstate.hh:35
@ COMPUTING_BASE
Definition tileviewstate.hh:36
@ COMPUTING_ZOOM
Definition tileviewstate.hh:38
void reportDone(const ThreadPool::WeakQueue::Ptr &wq, const ConstTile::Ptr &tile)
Definition tileviewstate.cc:225
std::weak_ptr< TiledBitmapViewData > tbvd
Definition tileviewstate.hh:52
ThreadPool::Queue::Ptr queue
Definition tileviewstate.hh:48
ThreadPool::WeakQueue::Ptr weakQueue
Definition tileviewstate.hh:49
State desiredState
Definition tileviewstate.hh:47
TileViewState operator=(TileViewState &&)=delete
Scroom::Utils::Stuff getCacheResult()
Definition tileviewstate.cc:59
TileViewState operator=(const TileViewState &)=delete
void clear()
Definition tileviewstate.cc:233
ThreadPool::Ptr cpuBound
Definition tileviewstate.hh:58
void tileLoaded(ConstTile::Ptr tile) override
Definition tileviewstate.cc:41
Scroom::Utils::StuffWeak lifeTimeManager
Definition tileviewstate.hh:55
TileViewState(const TileViewState &)=delete
void process(const ThreadPool::WeakQueue::Ptr &wq)
Definition tileviewstate.cc:131
ConstTile::Ptr tile
Definition tileviewstate.hh:51
Scroom::Utils::Stuff r
Definition tileviewstate.hh:50
Scroom::Utils::Stuff baseCache
Definition tileviewstate.hh:56
static Ptr create(const std::shared_ptr< CompressedTile > &parent)
Definition tileviewstate.cc:26
void computeZoom(const ThreadPool::WeakQueue::Ptr &wq, const ConstTile::Ptr &tile, const LayerOperations::Ptr &lo, Scroom::Utils::Stuff baseCache, int zoom)
Definition tileviewstate.cc:206
std::shared_ptr< TileViewState > Ptr
Definition tileviewstate.hh:29
std::weak_ptr< TileViewState > WeakPtr
Definition tileviewstate.hh:30
void setViewData(const std::shared_ptr< TiledBitmapViewData > &tbvd)
Definition tileviewstate.cc:65
std::shared_ptr< CompressedTile > parent
Definition tileviewstate.hh:44
void kick()
Definition tileviewstate.cc:111
Scroom::Utils::Stuff zoomCache
Definition tileviewstate.hh:57
~TileViewState() override
Definition tileviewstate.cc:24
LayerOperations::Ptr lo
Definition tileviewstate.hh:53
int zoom
Definition tileviewstate.hh:54
void computeBase(const ThreadPool::WeakQueue::Ptr &wq, const ConstTile::Ptr &tile_, const LayerOperations::Ptr &lo_)
Definition tileviewstate.cc:188
TileViewState(TileViewState &&)=delete
Definition tiledbitmapviewdata.hh:23
std::shared_ptr< void > Stuff
Definition stuff.hh:17
std::weak_ptr< void > StuffWeak
Definition stuff.hh:18
static constexpr auto parse(format_parse_context &ctx)
Definition tileviewstate.hh:104
constexpr auto format(TileViewState::State const &state, Context &ctx) const
Definition tileviewstate.hh:106