2016-05-17 03:04:11 +12:00
|
|
|
#pragma once
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
#ifndef TTILESET_HEADER
|
|
|
|
#define TTILESET_HEADER
|
|
|
|
|
|
|
|
#include "trastercm.h"
|
2016-03-27 13:30:32 +13:00
|
|
|
#include <QString>
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
#undef DVAPI
|
|
|
|
#undef DVVAR
|
|
|
|
#ifdef TOONZLIB_EXPORTS
|
|
|
|
#define DVAPI DV_EXPORT_API
|
|
|
|
#define DVVAR DV_EXPORT_VAR
|
|
|
|
#else
|
|
|
|
#define DVAPI DV_IMPORT_API
|
|
|
|
#define DVVAR DV_IMPORT_VAR
|
|
|
|
#endif
|
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
class DVAPI TTileSet {
|
2016-03-19 06:57:51 +13:00
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
// per adesso, facciamo che comprime sempre,
|
|
|
|
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
|
|
|
|
// anche per decidere se farlo subito o meno.
|
|
|
|
class DVAPI Tile {
|
|
|
|
TDimension m_dim;
|
|
|
|
int m_pixelSize;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
public:
|
|
|
|
TRect m_rasterBounds;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
Tile();
|
|
|
|
Tile(const TRasterP &ras, const TPoint &p);
|
|
|
|
virtual ~Tile();
|
|
|
|
virtual QString id() const = 0;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
virtual Tile *clone() const = 0;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
// expressed in byte
|
|
|
|
int getSize() { return m_dim.lx * m_dim.ly * m_pixelSize; }
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
private:
|
|
|
|
Tile(const Tile &tile);
|
|
|
|
Tile &operator=(const Tile &tile);
|
|
|
|
};
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
protected:
|
2016-06-15 18:43:10 +12:00
|
|
|
TDimension m_srcImageSize;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
typedef std::vector<Tile *> Tiles;
|
|
|
|
Tiles m_tiles;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
TTileSet(const TDimension &dim) : m_srcImageSize(dim) {}
|
2016-07-01 03:16:25 +12:00
|
|
|
virtual ~TTileSet();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
int getMemorySize() const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void add(Tile *tile);
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
// crea un tile estraendo rect*ras->getBounds() da ras.
|
|
|
|
// Nota: se rect e' completamente fuori non fa nulla
|
|
|
|
// Nota: clona il raster!
|
|
|
|
virtual void add(const TRasterP &ras, TRect rect) = 0;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void getRects(std::vector<TRect> &rects) const;
|
|
|
|
TRect getBBox() const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
int getTileCount() const { return (int)m_tiles.size(); }
|
|
|
|
TDimension getSrcImageSize() const { return m_srcImageSize; }
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
virtual TTileSet *clone() const = 0;
|
2016-03-19 06:57:51 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
//********************************************************************************
|
|
|
|
|
2016-06-29 18:17:12 +12:00
|
|
|
class DVAPI TTileSetCM32 final : public TTileSet {
|
2016-03-19 06:57:51 +13:00
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
// per adesso, facciamo che comprime sempre,
|
|
|
|
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
|
|
|
|
// anche per decidere se farlo subito o meno.
|
2016-06-29 18:17:12 +12:00
|
|
|
class DVAPI Tile final : public TTileSet::Tile {
|
2016-06-15 18:43:10 +12:00
|
|
|
public:
|
|
|
|
Tile();
|
|
|
|
Tile(const TRasterCM32P &ras, const TPoint &p);
|
|
|
|
~Tile();
|
2016-06-20 14:23:05 +12:00
|
|
|
QString id() const override {
|
2019-12-24 00:24:44 +13:00
|
|
|
return "TileCM" + QString::number((uintptr_t) this);
|
2016-06-20 14:23:05 +12:00
|
|
|
}
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-19 20:06:29 +12:00
|
|
|
Tile *clone() const override;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void getRaster(TRasterCM32P &ras) const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
private:
|
|
|
|
Tile(const Tile &tile);
|
|
|
|
Tile &operator=(const Tile &tile);
|
|
|
|
};
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
TTileSetCM32(const TDimension &dim) : TTileSet(dim) {}
|
|
|
|
~TTileSetCM32();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
// crea un tile estraendo rect*ras->getBounds() da ras.
|
|
|
|
// Nota: se rect e' completamente fuori non fa nulla
|
|
|
|
// Nota: clona il raster!
|
2016-06-19 20:06:29 +12:00
|
|
|
void add(const TRasterP &ras, TRect rect) override;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
const Tile *getTile(int index) const;
|
|
|
|
Tile *editTile(int index) const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-19 20:06:29 +12:00
|
|
|
TTileSetCM32 *clone() const override;
|
2016-03-19 06:57:51 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
//********************************************************************************
|
|
|
|
|
2016-06-29 18:17:12 +12:00
|
|
|
class DVAPI TTileSetFullColor final : public TTileSet {
|
2016-03-19 06:57:51 +13:00
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
// per adesso, facciamo che comprime sempre,
|
|
|
|
// appena costruisce l'oggetto. Poi potremmo dare la scelta,
|
|
|
|
// anche per decidere se farlo subito o meno.
|
2016-06-29 18:17:12 +12:00
|
|
|
class DVAPI Tile final : public TTileSet::Tile {
|
2016-06-15 18:43:10 +12:00
|
|
|
public:
|
|
|
|
Tile();
|
|
|
|
Tile(const TRasterP &ras, const TPoint &p);
|
|
|
|
~Tile();
|
2016-06-19 20:06:29 +12:00
|
|
|
QString id() const override {
|
2019-12-24 00:24:44 +13:00
|
|
|
return "TTileSet32::Tile" + QString::number((uintptr_t) this);
|
2016-06-15 18:43:10 +12:00
|
|
|
}
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-19 20:06:29 +12:00
|
|
|
Tile *clone() const override;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
void getRaster(TRasterP &ras) const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
private:
|
|
|
|
Tile(const Tile &tile);
|
|
|
|
Tile &operator=(const Tile &tile);
|
|
|
|
};
|
2016-03-19 06:57:51 +13:00
|
|
|
|
|
|
|
public:
|
2016-06-15 18:43:10 +12:00
|
|
|
TTileSetFullColor(const TDimension &dim) : TTileSet(dim) {}
|
|
|
|
~TTileSetFullColor();
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
// crea un tile estraendo rect*ras->getBounds() da ras.
|
|
|
|
// Nota: se rect e' completamente fuori non fa nulla
|
|
|
|
// Nota: clona il raster!
|
2016-06-19 20:06:29 +12:00
|
|
|
void add(const TRasterP &ras, TRect rect) override;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-15 18:43:10 +12:00
|
|
|
const Tile *getTile(int index) const;
|
2019-06-23 04:13:38 +12:00
|
|
|
Tile *editTile(int index) const;
|
2016-03-19 06:57:51 +13:00
|
|
|
|
2016-06-19 20:06:29 +12:00
|
|
|
TTileSetFullColor *clone() const override;
|
2016-03-19 06:57:51 +13:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|