Files
DocumentServer-v-9.2.0/core/DesktopEditor/cximage/CxImage/ximalyr.cpp
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

117 lines
2.9 KiB
C++

// xImaLyr.cpp : Layers functions
/* 21/04/2003 v1.00 - Davide Pizzolato - www.xdp.it
* CxImage version 7.0.2 07/Feb/2011
*/
#include "ximage.h"
#if CXIMAGE_SUPPORT_LAYERS
////////////////////////////////////////////////////////////////////////////////
/**
* If the object is an internal layer, GetParent return its parent in the hierarchy.
*/
CxImage* CxImage::GetParent() const
{
return info.pParent;
}
////////////////////////////////////////////////////////////////////////////////
/**
* Number of layers allocated directly by the object.
*/
int32_t CxImage::GetNumLayers() const
{
return info.nNumLayers;
}
////////////////////////////////////////////////////////////////////////////////
/**
* Creates an empty layer. If position is less than 0, the new layer will be placed in the last position
*/
bool CxImage::LayerCreate(int32_t position)
{
if ( position < 0 || position > info.nNumLayers ) position = info.nNumLayers;
CxImage** ptmp = new CxImage*[info.nNumLayers + 1];
if (ptmp==0) return false;
int32_t i=0;
for (int32_t n=0; n<info.nNumLayers; n++){
if (position == n){
ptmp[n] = new CxImage();
i=1;
}
ptmp[n+i]=ppLayers[n];
}
if (i==0) ptmp[info.nNumLayers] = new CxImage();
if (ptmp[position]){
ptmp[position]->info.pParent = this;
} else {
delete [] ptmp;
return false;
}
info.nNumLayers++;
delete [] ppLayers;
ppLayers = ptmp;
return true;
}
////////////////////////////////////////////////////////////////////////////////
/**
* Deletes a layer. If position is less than 0, the last layer will be deleted
*/
bool CxImage::LayerDelete(int32_t position)
{
if ( position >= info.nNumLayers ) return false;
if ( position < 0) position = info.nNumLayers - 1;
if ( position < 0) return false;
if (info.nNumLayers>1){
CxImage** ptmp = new CxImage*[info.nNumLayers - 1];
if (ptmp==0) return false;
int32_t i=0;
for (int32_t n=0; n<info.nNumLayers; n++){
if (position == n){
delete ppLayers[n];
i=1;
}
ptmp[n]=ppLayers[n+i];
}
info.nNumLayers--;
delete [] ppLayers;
ppLayers = ptmp;
} else {
delete ppLayers[0];
delete [] ppLayers;
ppLayers = 0;
info.nNumLayers = 0;
}
return true;
}
////////////////////////////////////////////////////////////////////////////////
void CxImage::LayerDeleteAll()
{
if (ppLayers) {
for(int32_t n=0; n<info.nNumLayers;n++){ delete ppLayers[n]; }
delete [] ppLayers; ppLayers=0; info.nNumLayers = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
/**
* Returns a pointer to a layer. If position is less than 0, the last layer will be returned
*/
CxImage* CxImage::GetLayer(int32_t position)
{
if ( ppLayers == NULL) return NULL;
if ( info.nNumLayers == 0) return NULL;
if ( position >= info.nNumLayers ) return NULL;
if ( position < 0) position = info.nNumLayers - 1;
return ppLayers[position];
}
////////////////////////////////////////////////////////////////////////////////
#endif //CXIMAGE_SUPPORT_LAYERS