#include <layeroperations.hh>
|
| | Operations8bpp (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 |
| |
◆ Operations8bpp()
◆ 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.
392 const int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, tile->width);
393 boost::shared_ptr<unsigned char>
const data =
shared_malloc(stride * tile->height);
398 unsigned char* row = data.get();
399 for(
int j = 0; j < tile->height; j++, row += stride)
401 const byte* cur = tile->data.get() + j * tile->width;
403 auto* pixel =
reinterpret_cast<uint32_t*
>(row);
404 for(
int i = 0; i < tile->width; i++)
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.
466 const int multiplier = 1 << zoom;
467 const int stride = tile->width;
468 cairo_select_font_face(cr,
"Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
469 cairo_set_font_size(cr, 12.0);
474 const byte*
const data = tile->data.get();
477 auto offset = tileAreaInt.getTopLeft() - tileArea.
getTopLeft();
478 viewArea += offset * multiplier;
480 for(
int x = 0; x < tileAreaInt.width(); x++)
482 for(
int y = 0; y < tileAreaInt.height(); y++)
484 const int value = data[(tileAreaInt.y() + y) * stride + tileAreaInt.x() + x];
485 Color const c =
mix(c2, c1, 1.0 * value / 255);
488 drawPixelValue(cr, viewArea.
x() + multiplier * x, viewArea.
y() + multiplier * y, multiplier, value, c);
◆ getBpp()
| int Operations8bpp::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.
419 const int sourceStride = source->width;
420 const byte* sourceBase = source->data.get();
422 const int targetStride = target->width;
423 byte* targetBase = target->data.get() + target->height * y * targetStride / 8 + target->width * x / 8;
425 for(
int j = 0; j < source->height / 8; j++, targetBase += targetStride, sourceBase += sourceStride * 8)
428 const byte* sourcePtr = sourceBase;
429 byte* targetPtr = targetBase;
431 for(
int i = 0; i < source->width / 8; i++, sourcePtr += 8, targetPtr++)
436 const byte* base = sourcePtr;
438 for(
int k = 0; k < 8; k++, base += sourceStride)
441 for(
int l = 0; l < 8; l++,
current++)
447 *targetPtr = sum / 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
Operations8bpp(ColormapProvider::Ptr colormapProvider)
Definition: layeroperations.cc:383
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
ColormapProvider::Ptr colormapProvider
Definition: layeroperations.hh:91
Color mix(const Color &a, const Color &b, double alpha)
Definition: color.hh:133
static unsigned int current
Definition: measure-framerate-callbacks.cc:17
uint32_t getARGB32() const
Definition: color.hh:112
Scroom::Utils::Stuff cache(const ConstTile::Ptr &tile) override
Definition: layeroperations.cc:390
boost::shared_ptr< Colormap > Ptr
Definition: colormappable.hh:31
const Colormap::Ptr colormap
Definition: colormaphelpers_test.cc:54
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
Segment< double > roundOutward(Segment< double > s)
Definition: linearsegment.hh:240
void create(NewPresentationInterface *interface)
Definition: loader.cc:175