mirror of
https://github.com/aseprite/aseprite.git
synced 2024-12-27 03:16:58 +00:00
187 lines
6.2 KiB
Lua
187 lines
6.2 KiB
Lua
-- Copyright (C) 2024 Igara Studio S.A.
|
|
--
|
|
-- This file is released under the terms of the MIT license.
|
|
-- Read LICENSE.txt for more information.
|
|
|
|
dofile('./test_utils.lua')
|
|
|
|
-- Enable experimental compose groups feature
|
|
app.preferences.experimental.compose_groups = true
|
|
|
|
function create_group_layer()
|
|
local s = Sprite(2, 2)
|
|
assert(#s.layers == 1)
|
|
|
|
-- create two layers and a group layer
|
|
local a = s.layers[1] a.name = "a"
|
|
assert(#s.layers == 1)
|
|
local b = s:newLayer() b.name = "b"
|
|
assert(#s.layers == 2)
|
|
local g = s:newGroup() g.name = "g"
|
|
assert(#s.layers == 3)
|
|
|
|
-- b is child of g
|
|
b.parent = g
|
|
assert(g.parent == s)
|
|
assert(b.parent == g)
|
|
|
|
assert(#s.layers == 2)
|
|
assert(s.layers[1] == a)
|
|
assert(s.layers[2] == g)
|
|
|
|
return s, a, b, g
|
|
end
|
|
|
|
-- Test groups opacity to impact on children layers
|
|
do
|
|
assert(app.preferences.experimental.compose_groups == true)
|
|
|
|
local s, a, b, g = create_group_layer()
|
|
|
|
-- draw in b layer
|
|
local cel = s:newCel(b, 1, Image(2, 2, ColorMode.RGB))
|
|
local img = cel.image
|
|
|
|
img:drawPixel(0, 0, Color(255, 0, 0, 255))
|
|
img:drawPixel(1, 0, Color(0, 255, 0, 255))
|
|
img:drawPixel(0, 1, Color(0, 0, 255, 255))
|
|
img:drawPixel(1, 1, Color(255, 255, 0, 255))
|
|
|
|
local r = Image(s.spec) -- render
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 255))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 255))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 255))
|
|
|
|
-- Set opacity to 50%
|
|
g.opacity = 128
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
print(g.opacity)
|
|
|
|
print(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 255))
|
|
|
|
-- Assert that the image is drawn with 50% opacity
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 128))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 128))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 128))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 128))
|
|
|
|
-- Set opacity to 100%
|
|
g.opacity = 255
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
expect_eq(g.opacity, 255)
|
|
|
|
-- Assert that the image is drawn with 100% opacity
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 255))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 255))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 255))
|
|
|
|
-- Set group opacity to 50% and layer opacity to 50%
|
|
g.opacity = 128
|
|
b.opacity = 128
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
assert(g.opacity == 128)
|
|
assert(b.opacity == 128)
|
|
|
|
-- Assert that the image is drawn with 25% opacity
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 64))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 64))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 64))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 64))
|
|
|
|
-- Create a new layer in front of the group and check that it's not affected by the group opacity
|
|
local c = s:newLayer()
|
|
c.name = "c"
|
|
|
|
-- draw in c layer
|
|
local cel = s:newCel(c, 1, Image(1, 1, ColorMode.RGB))
|
|
local img = cel.image
|
|
|
|
img:drawPixel(0, 0, Color(255, 0, 255, 255))
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
-- Assert that the first pixel is drawn with 100% opacity and the remaining ones with 25% opacity
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 255, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 64))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 64))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 64))
|
|
|
|
end
|
|
|
|
do -- test group blend to impact children layers
|
|
assert(app.preferences.experimental.compose_groups == true)
|
|
|
|
local s, a, b, g = create_group_layer()
|
|
|
|
-- draw all black in layer a
|
|
local cel = s:newCel(a, 1, Image(2, 2, ColorMode.RGB))
|
|
local img = cel.image
|
|
|
|
img:drawPixel(0, 0, Color(0, 0, 0, 255))
|
|
img:drawPixel(1, 0, Color(0, 0, 0, 255))
|
|
img:drawPixel(0, 1, Color(0, 0, 0, 255))
|
|
img:drawPixel(1, 1, Color(0, 0, 0, 255))
|
|
|
|
-- draw in b layer
|
|
local cel = s:newCel(b, 1, Image(2, 2, ColorMode.RGB))
|
|
local img = cel.image
|
|
|
|
img:drawPixel(0, 0, Color(255, 0, 0, 255))
|
|
img:drawPixel(1, 0, Color(0, 255, 0, 255))
|
|
img:drawPixel(0, 1, Color(0, 0, 255, 255))
|
|
img:drawPixel(1, 1, Color(255, 255, 0, 255))
|
|
|
|
local r = Image(s.spec) -- render
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 255, 0, 255))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 255, 255))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(255, 255, 0, 255))
|
|
|
|
-- Set blend to MULTIPLY
|
|
g.blendMode = BlendMode.MULTIPLY
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
-- Assert that the image is drawn with MULTIPLY blend mode
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(0, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 0, 0, 255))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(0, 0, 0, 255))
|
|
|
|
-- Create a new layer in front of the group and check that it's not affected by the group blend mode
|
|
local c = s:newLayer()
|
|
c.name = "c"
|
|
|
|
-- draw in c layer
|
|
local cel = s:newCel(c, 1, Image(1, 1, ColorMode.RGB))
|
|
local img = cel.image
|
|
|
|
img:drawPixel(0, 0, Color(255, 0, 255, 255))
|
|
|
|
r = Image(s.spec)
|
|
r:drawSprite(s, 1, 0, 0)
|
|
|
|
-- Assert that the first pixel is drawn with Normal blend mode and the remaining ones with Multiply blend mode
|
|
expect_clr(r:getPixel(0, 0), app.pixelColor.rgba(255, 0, 255, 255))
|
|
expect_clr(r:getPixel(1, 0), app.pixelColor.rgba(0, 0, 0, 255))
|
|
expect_clr(r:getPixel(0, 1), app.pixelColor.rgba(0, 0, 0, 255))
|
|
expect_clr(r:getPixel(1, 1), app.pixelColor.rgba(0, 0, 0, 255))
|
|
end
|