mirror of
https://github.com/spiffcode/hostile-takeover.git
synced 2026-02-17 18:53:04 -07:00
102 lines
2.0 KiB
C++
102 lines
2.0 KiB
C++
#include "game/iphone/layerdib.h"
|
|
|
|
namespace wi {
|
|
|
|
LayerDib *CreateLayerDib(int cx, int cy) {
|
|
LayerDib *pbm = new LayerDib;
|
|
if (pbm == NULL) {
|
|
return NULL;
|
|
}
|
|
if (!pbm->Init(cx, cy)) {
|
|
delete pbm;
|
|
return NULL;
|
|
}
|
|
return pbm;
|
|
}
|
|
|
|
LayerDib::LayerDib() {
|
|
palette_ = NULL;
|
|
}
|
|
|
|
LayerDib::~LayerDib() {
|
|
if (palette_ != NULL) {
|
|
free(palette_);
|
|
}
|
|
}
|
|
|
|
bool LayerDib::Init(int cx, int cy) {
|
|
m_pb = NULL;
|
|
m_cbRow = 0;
|
|
m_siz.cx = cx;
|
|
m_siz.cy = cy;
|
|
m_wf |= kfDibWantScrolls;
|
|
return true;
|
|
}
|
|
|
|
bool LayerDib::InitLayerMap(int ilmap, const Rect *prc, const Size *psizMap) {
|
|
switch (ilmap) {
|
|
case 0:
|
|
return lmap0_.Init(prc, psizMap);
|
|
case 1:
|
|
return lmap1_.Init(prc, psizMap);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
void LayerDib::MarkUpdate() {
|
|
lmap0_.MarkUpdateAll();
|
|
lmap1_.MarkUpdateAll();
|
|
}
|
|
|
|
void LayerDib::SetPalette(void *palette, int cb) {
|
|
if (palette_ != NULL)
|
|
free(palette_);
|
|
palette_ = malloc(cb);
|
|
memcpy((byte *)palette_, (byte *)palette, cb);
|
|
}
|
|
|
|
void LayerDib::BltTiles(DibBitmap *pbmSrc, UpdateMap *pupd, int yTopDst) {
|
|
if (palette_ == NULL) {
|
|
return;
|
|
}
|
|
|
|
#ifdef UPDATE_ALL
|
|
changed_ = true;
|
|
#endif
|
|
|
|
// Which layer?
|
|
if (yTopDst == lmap0_.GetTop()) {
|
|
if (lmap0_.UpdateTiles(pbmSrc, pupd, palette_)) {
|
|
changed_ = true;
|
|
}
|
|
return;
|
|
}
|
|
if (yTopDst == lmap1_.GetTop()) {
|
|
if (lmap1_.UpdateTiles(pbmSrc, pupd, palette_)) {
|
|
changed_ = true;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
void LayerDib::Scroll(Rect *prcSrc, int xDst, int yDst) {
|
|
int dx = xDst - prcSrc->left;
|
|
int dy = yDst - prcSrc->top;
|
|
if (dx != 0 || dy != 0) {
|
|
lmap0_.Scroll(dx, dy);
|
|
changed_ = true;
|
|
}
|
|
}
|
|
|
|
void LayerDib::ResetScrollOffset() {
|
|
lmap0_.ResetScrollOffset();
|
|
changed_ = true;
|
|
}
|
|
|
|
void LayerDib::Draw(CGContextRef ctx, const CGRect& rcInvalid) {
|
|
lmap0_.Draw(ctx, m_siz.cy, rcInvalid);
|
|
lmap1_.Draw(ctx, m_siz.cy, rcInvalid);
|
|
}
|
|
|
|
} // namespace wi
|