void BrushPreview::generateBoundaries() { Brush* brush = getCurrentBrush(); if (m_brushBoundaries && m_brushGen == brush->gen()) return; bool isFloodfill = m_editor->getCurrentEditorTool()->getPointShape(0)->isFloodFill(); Image* brushImage = brush->image(); int w = (isFloodfill ? 1: brushImage->width()); int h = (isFloodfill ? 1: brushImage->height()); m_brushGen = brush->gen(); m_brushWidth = w; m_brushHeight = h; ImageRef mask; if (isFloodfill) { mask.reset(Image::create(IMAGE_BITMAP, w, w)); mask->putPixel(0, 0, (color_t)1); } else if (brushImage->pixelFormat() != IMAGE_BITMAP) { mask.reset(Image::create(IMAGE_BITMAP, w, h)); LockImageBits<BitmapTraits> bits(mask.get()); auto pos = bits.begin(); for (int v=0; v<h; ++v) { for (int u=0; u<w; ++u) { *pos = get_pixel(brushImage, u, v); ++pos; } } } m_brushBoundaries.reset( new MaskBoundaries( (mask ? mask.get(): brushImage))); }
DocRangeOps() { black = rgba(0, 0, 0, 0); white = rgba(255, 255, 255, 255); doc.reset(static_cast<app::Document*>(ctx.documents().add(4, 4))); sprite = doc->sprite(); layer1 = dynamic_cast<LayerImage*>(sprite->folder()->getFirstLayer()); layer2 = new LayerImage(sprite); layer3 = new LayerImage(sprite); layer4 = new LayerImage(sprite); sprite->folder()->addLayer(layer2); sprite->folder()->addLayer(layer3); sprite->folder()->addLayer(layer4); EXPECT_LAYER_ORDER(layer1, layer2, layer3, layer4); layer1->setName("layer1"); layer2->setName("layer2"); layer3->setName("layer3"); layer4->setName("layer4"); sprite->setTotalFrames(frame_t(4)); sprite->setFrameDuration(frame_t(0), 1); // These durations can be used to identify sprite->setFrameDuration(frame_t(1), 2); // frames after a move operation sprite->setFrameDuration(frame_t(2), 3); sprite->setFrameDuration(frame_t(3), 4); for (int i=0; i<4; i++) { LayerImage* layer = static_cast<LayerImage*>(sprite->indexToLayer(LayerIndex(i))); for (int j=0; j<4; j++) { Cel* cel = layer->cel(frame_t(j)); ImageRef image; if (cel) image = cel->imageRef(); else { image.reset(Image::create(IMAGE_RGB, 4, 4)); cel = new Cel(frame_t(j), image); layer->addCel(cel); } clear_image(image.get(), black); put_pixel(image.get(), i, j, white); } } }