#include <layeroperations.hh>
|
| | Operations1bpp (ColormapProvider::Ptr colormapProvider) |
| |
| int | getBpp () override |
| |
| Scroom::Utils::Stuff | cache (const ConstTile::Ptr &tile) override |
| |
| void | reduce (Tile::Ptr target, ConstTile::Ptr source, int x, int y) override |
| |
| void | draw (cairo_t *cr, const ConstTile::Ptr &tile, Scroom::Utils::Rectangle< double > tileArea, Scroom::Utils::Rectangle< double > viewArea, int zoom, Scroom::Utils::Stuff cache) override |
| |
| void | initializeCairo (cairo_t *cr) override |
| |
| void | drawState (cairo_t *cr, TileState s, Scroom::Utils::Rectangle< double > viewArea) override |
| |
| Scroom::Utils::Stuff | cacheZoom (const ConstTile::Ptr &tile, int zoom, Scroom::Utils::Stuff &cache) override |
| |
◆ Operations1bpp()
◆ cache()
Cache data for use during later cacheZoom() calls.
This function is called for a given tile, and then the results are passed to the cacheZoom() function. Because draw() is called relatively frequently (i.e. when scrolling), it is recommended to do cpu-intensive work in the cache() and cacheZoom() functions, and then re-use the data to make the draw() faster.
The default implementation returns an empty reference, meaning nothing is cached. As a result, the draw() function will receive an empty reference.
- Parameters
-
| tile | the Tile for which caching is requested |
Reimplemented from LayerOperations.
276 const int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, tile->width);
277 boost::shared_ptr<unsigned char>
const data =
shared_malloc(stride * tile->height);
280 unsigned char* row = data.get();
281 for(
int j = 0; j < tile->height; j++, row += stride)
284 auto* pixel =
reinterpret_cast<uint32_t*
>(row);
285 for(
int i = 0; i < tile->width; i++)
287 *pixel =
colormap->colors[*bit].getARGB32();
Referenced by draw().
◆ create()
◆ draw()
Draw the given tileArea into the given viewArea at the requested zoom level
- Parameters
-
| cr | The canvas on which to draw |
| tile | The tile to take data from |
| tileArea | Area of the tile that needs to be drawn |
| viewArea | Area of the canvas that the tile needs to be drawn in |
| zoom | The requested zoom level. One pixel of your presentation should have size 2**zoom when drawn. zoom will be negative for all but the first layer. |
| cache | Depending on whether the cacheZoom() function finished already, this may either be an empty reference, or a reference to the value returned by cacheZoom() |
Reimplemented from CommonOperations.
346 const int multiplier = 1 << zoom;
347 const int stride = tile->width / 8;
348 cairo_select_font_face(cr,
"Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
349 cairo_set_font_size(cr, 12.0);
354 auto offset = tileAreaInt.getTopLeft() - tileArea.
getTopLeft();
355 viewArea += offset * multiplier;
357 for(
int y = 0; y < tileAreaInt.getHeight(); y++)
359 const byte*
const data = tile->data.get();
362 for(
int x = 0; x < tileAreaInt.getWidth(); x++, ++
current)
368 cr, viewArea.
x() + multiplier * x, viewArea.
y() + multiplier * y, multiplier, value,
colormap->colors[value]);
◆ getBpp()
| int Operations1bpp::getBpp |
( |
| ) |
|
|
overridevirtual |
Return the number of bits per pixel that the layer will use.
This number will be used to compute the amount of memory required to store one tile
Implements LayerOperations.
◆ reduce()
Reduce the source tile by a factor of 8
The target tile will contain data for 8*8 source tiles. Offsets x and y indicate which of those 64 source tiles is currently being processed
- Parameters
-
| target | Tile that will contain the reduced bitmap |
| source | Tile that is to be reduced |
| x | x-offset (0..7) of the source tile in the target tile |
| y | y-offset (0..7) of the source tile in the target tile |
- Note
- The
target tile belongs to a different layer, and hence possibly has a different bpp than the current one, depending on the LayerSpec given to createTiledBitmap()
Implements LayerOperations.
299 const int sourceStride = source->width / 8;
300 const byte* sourceBase = source->data.get();
302 const int targetStride = target->width;
303 byte* targetBase = target->data.get() + target->height * y * targetStride / 8 + target->width * x / 8;
305 for(
int j = 0; j < source->height / 8; j++, targetBase += targetStride, sourceBase += sourceStride * 8)
308 const byte* sourcePtr = sourceBase;
309 byte* targetPtr = targetBase;
311 for(
int i = 0; i < source->width / 8; i++, sourcePtr++, targetPtr++)
320 const byte*
current = sourcePtr;
322 for(
int k = 0; k < 8; k++,
current += sourceStride)
327 *targetPtr = sum * 255 / 64;
◆ colormapProvider
The documentation for this class was generated from the following files:
xy_type getTopLeft() const
Definition: rectangle.hh:133
value_type x() const
Definition: rectangle.hh:125
byte lookup(byte index)
Definition: layeroperations.cc:61
Definition: bitmap-helpers.hh:61
void draw(cairo_t *cr, const ConstTile::Ptr &tile, Scroom::Utils::Rectangle< double > tileArea, Scroom::Utils::Rectangle< double > viewArea, int zoom, Scroom::Utils::Stuff cache) override
Definition: layeroperations.cc:161
Operations1bpp(ColormapProvider::Ptr colormapProvider)
Definition: layeroperations.cc:267
static unsigned int current
Definition: measure-framerate-callbacks.cc:17
ColormapProvider::Ptr colormapProvider
Definition: layeroperations.hh:70
boost::shared_ptr< Colormap > Ptr
Definition: colormappable.hh:31
const Colormap::Ptr colormap
Definition: colormaphelpers_test.cc:54
Scroom::Utils::Stuff cache(const ConstTile::Ptr &tile) override
Definition: layeroperations.cc:274
static void drawPixelValue(cairo_t *cr, int x, int y, int size, int value)
Definition: layeroperations.cc:96
boost::shared_ptr< LayerOperations > Ptr
Definition: tiledbitmapinterface.hh:53
value_type y() const
Definition: rectangle.hh:127
boost::shared_ptr< unsigned char > shared_malloc(size_t size)
Definition: layeroperations.cc:28
BitCountLut bcl
Definition: layeroperations.cc:45
Segment< double > roundOutward(Segment< double > s)
Definition: linearsegment.hh:240
void create(NewPresentationInterface *interface)
Definition: loader.cc:175