Example #1
0
void DocumentApi::cropSprite(Sprite* sprite, const gfx::Rect& bounds, int bgcolor)
{
  setSpriteSize(sprite, bounds.w, bounds.h);
  displaceLayers(sprite->getFolder(), -bounds.x, -bounds.y);

  Layer *background_layer = sprite->getBackgroundLayer();
  if (background_layer)
    cropLayer(background_layer, 0, 0, sprite->getWidth(), sprite->getHeight(), bgcolor);

  if (!m_document->getMask()->isEmpty())
    setMaskPosition(m_document->getMask()->getBounds().x-bounds.x,
                    m_document->getMask()->getBounds().y-bounds.y);
}
Example #2
0
/**
 * Moves every frame in @a layer with the offset (@a dx, @a dy).
 */
void UndoTransaction::displaceLayers(Layer* layer, int dx, int dy)
{
  switch (layer->getType()) {

    case GFXOBJ_LAYER_IMAGE: {
      CelIterator it = ((LayerImage*)layer)->getCelBegin();
      CelIterator end = ((LayerImage*)layer)->getCelEnd();
      for (; it != end; ++it) {
        Cel* cel = *it;
        setCelPosition(cel, cel->getX()+dx, cel->getY()+dy);
      }
      break;
    }

    case GFXOBJ_LAYER_FOLDER: {
      LayerIterator it = ((LayerFolder*)layer)->get_layer_begin();
      LayerIterator end = ((LayerFolder*)layer)->get_layer_end();
      for (; it != end; ++it)
        displaceLayers(*it, dx, dy);
      break;
    }

  }
}