mirror of
https://github.com/aseprite/aseprite.git
synced 2024-09-03 13:39:02 +00:00
More commands transformed from Lua code to C
This commit is contained in:
parent
36f861ddd7
commit
89e2452ed0
19
ChangeLog
19
ChangeLog
@ -1,5 +1,24 @@
|
|||||||
|
2007-11-09 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/script/functions.c: Added: NewLayer(Set), RemoveLayer,
|
||||||
|
FlattenLayers, RemoveFrame.
|
||||||
|
|
||||||
|
2007-11-08 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/commands/cmd_merge_down_layer.c: Done.
|
||||||
|
|
||||||
|
* src/commands/cmd_remove_layer.c: Done.
|
||||||
|
|
||||||
|
* src/commands/cmd_new_layer_set.c: Done.
|
||||||
|
|
||||||
|
* src/commands/cmd_new_layer.c: Done.
|
||||||
|
|
||||||
2007-11-07 David A. Capello <dacap@users.sourceforge.net>
|
2007-11-07 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/commands/cmd_duplicate_sprite.c: Done.
|
||||||
|
|
||||||
|
* src/commands/cmd_change_image_type.c: Done.
|
||||||
|
|
||||||
* src/commands/cmd_color_curve.c: Done. Removed src/dialogs/effect/dcolcurv.c
|
* src/commands/cmd_color_curve.c: Done. Removed src/dialogs/effect/dcolcurv.c
|
||||||
|
|
||||||
* src/commands/cmd_convolution_matrix.c: Done. Removed src/dialogs/effect/dconvmtr.c
|
* src/commands/cmd_convolution_matrix.c: Done. Removed src/dialogs/effect/dconvmtr.c
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function DuplicateLayer()
|
|
||||||
local sprite = current_sprite
|
|
||||||
|
|
||||||
if not sprite or not sprite.layer then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
local layer_copy = layer_new_copy(sprite.layer)
|
|
||||||
if not layer_copy then
|
|
||||||
print("Not enough memory")
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_set_name(layer_copy, layer_copy.name .. " Copy")
|
|
||||||
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
undo_add_layer(sprite.undo, sprite.layer.parent, layer_copy)
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_add_layer(sprite.layer.parent, layer_copy)
|
|
||||||
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_move_layer(sprite.undo, layer_copy)
|
|
||||||
undo_set_layer(sprite.undo, sprite)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_move_layer(sprite.layer.parent, layer_copy, sprite.layer)
|
|
||||||
sprite_set_layer(sprite, layer_copy)
|
|
||||||
|
|
||||||
return layer_copy
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_DuplicateLayer()
|
|
||||||
if DuplicateLayer() then
|
|
||||||
GUI_Refresh(current_sprite)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,49 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_DuplicateSprite()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- load the window widget
|
|
||||||
local window = ji_load_widget("dupspr.jid", "duplicate_sprite")
|
|
||||||
if not window then return end
|
|
||||||
|
|
||||||
local src_name, dst_name, flatten
|
|
||||||
= jwidget_find_name(window, "src_name"),
|
|
||||||
jwidget_find_name(window, "dst_name"),
|
|
||||||
jwidget_find_name(window, "flatten")
|
|
||||||
|
|
||||||
jwidget_set_text(src_name, get_filename(sprite.filename))
|
|
||||||
jwidget_set_text(dst_name, sprite.filename .. " Copy")
|
|
||||||
|
|
||||||
if get_config_bool("DuplicateSprite", "Flatten", false) then
|
|
||||||
jwidget_select(flatten)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- open the window
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == jwidget_find_name(window, "ok") then
|
|
||||||
set_config_bool("DuplicateSprite", "Flatten",
|
|
||||||
jwidget_is_selected(flatten))
|
|
||||||
|
|
||||||
local sprite_copy
|
|
||||||
|
|
||||||
if jwidget_is_selected(flatten) then
|
|
||||||
sprite_copy = sprite_new_flatten_copy(sprite)
|
|
||||||
else
|
|
||||||
sprite_copy = sprite_new_copy(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
if sprite_copy then
|
|
||||||
sprite_set_filename(sprite_copy, jwidget_get_text(dst_name))
|
|
||||||
|
|
||||||
sprite_mount(sprite_copy)
|
|
||||||
set_current_sprite(sprite_copy)
|
|
||||||
sprite_show(sprite_copy)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
@ -1,63 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function FlattenLayers()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- generate the flat_layer
|
|
||||||
local flat_layer = layer_flatten(sprite.set,
|
|
||||||
sprite.imgtype, 0, 0, sprite.w, sprite.h,
|
|
||||||
0, sprite.frames-1)
|
|
||||||
if not flat_layer then
|
|
||||||
print("Not enough memory")
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- open undo, and add the new layer
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
undo_add_layer(sprite.undo, sprite.set, flat_layer)
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_add_layer(sprite.set, flat_layer)
|
|
||||||
|
|
||||||
-- select the new layer
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_layer(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
sprite_set_layer(sprite, flat_layer)
|
|
||||||
|
|
||||||
-- remove old layers
|
|
||||||
local it = sprite.set.layers
|
|
||||||
local next
|
|
||||||
|
|
||||||
while it do
|
|
||||||
next = it.next
|
|
||||||
|
|
||||||
if it.id != flat_layer.id then
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_remove_layer(sprite.undo, it)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- remove and destroy "it" layer
|
|
||||||
layer_remove_layer(sprite.set, it)
|
|
||||||
layer_free(it)
|
|
||||||
end
|
|
||||||
|
|
||||||
it = next
|
|
||||||
end
|
|
||||||
|
|
||||||
-- close the undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
|
|
||||||
return flat_layer
|
|
||||||
end
|
|
@ -1,16 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_FlipHorizontal()
|
|
||||||
if current_sprite then
|
|
||||||
flip_horizontal()
|
|
||||||
GUI_Refresh(current_sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_FlipVertical()
|
|
||||||
if current_sprite then
|
|
||||||
flip_vertical()
|
|
||||||
GUI_Refresh(current_sprite)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,77 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_FrameProperties()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- get selected layer
|
|
||||||
local layer = sprite.layer
|
|
||||||
if not layer then return end
|
|
||||||
|
|
||||||
-- get current frame
|
|
||||||
local frame = layer_get_frame(layer, sprite.frpos)
|
|
||||||
if not frame then return end
|
|
||||||
|
|
||||||
local window = ji_load_widget("frmprop.jid", "frame_properties")
|
|
||||||
if not window then return end
|
|
||||||
|
|
||||||
local entry_frpos = jwidget_find_name(window, "frpos")
|
|
||||||
local entry_xpos = jwidget_find_name(window, "xpos")
|
|
||||||
local entry_ypos = jwidget_find_name(window, "ypos")
|
|
||||||
local slider_opacity = jwidget_find_name(window, "opacity")
|
|
||||||
local button_ok = jwidget_find_name(window, "ok")
|
|
||||||
|
|
||||||
jwidget_set_text(entry_frpos, tostring(frame.frpos))
|
|
||||||
jwidget_set_text(entry_xpos, tostring(frame.x))
|
|
||||||
jwidget_set_text(entry_ypos, tostring(frame.y))
|
|
||||||
jslider_set_value(slider_opacity, frame.opacity)
|
|
||||||
|
|
||||||
repeat
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == button_ok then
|
|
||||||
local new_frpos = MID(0, tonumber(jwidget_get_text (entry_frpos)),
|
|
||||||
sprite.frames-1)
|
|
||||||
local existent_frame = layer_get_frame(layer, new_frpos)
|
|
||||||
|
|
||||||
if new_frpos != frame.frpos and existent_frame then
|
|
||||||
jalert("Error<<You can't change frpos to " .. new_frpos ..
|
|
||||||
"<<Already there is a frame in that pos.||&OK")
|
|
||||||
else
|
|
||||||
-- WE MUST REMOVE THE FRAME BEFORE CALL frame_set_frpos()
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
undo_remove_frame(sprite.undo, layer, frame)
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_remove_frame(layer, frame)
|
|
||||||
|
|
||||||
-- change frame properties
|
|
||||||
frame_set_frpos(frame, new_frpos)
|
|
||||||
frame_set_position(frame,
|
|
||||||
MID(-9999, tonumber(jwidget_get_text(entry_xpos)), 9999),
|
|
||||||
MID(-9999, tonumber(jwidget_get_text(entry_ypos)), 9999))
|
|
||||||
frame_set_opacity(frame, jslider_get_value(slider_opacity))
|
|
||||||
|
|
||||||
-- add again the same frame
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_add_frame(sprite.undo, layer, frame)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
layer_add_frame(layer, frame)
|
|
||||||
|
|
||||||
-- set the sprite position, refresh and break the loop
|
|
||||||
sprite_set_frpos(sprite, new_frpos)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
break
|
|
||||||
end
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
until false
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
@ -1,69 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_ImageType()
|
|
||||||
if not current_sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- load the window widget
|
|
||||||
local window = ji_load_widget("imgtype.jid", "image_type")
|
|
||||||
if not window then return end
|
|
||||||
|
|
||||||
local from, radio1, radio2, radio3, dither1, dither2 =
|
|
||||||
jwidget_find_name(window, "from"),
|
|
||||||
jwidget_find_name(window, "imgtype1"),
|
|
||||||
jwidget_find_name(window, "imgtype2"),
|
|
||||||
jwidget_find_name(window, "imgtype3"),
|
|
||||||
jwidget_find_name(window, "dither1"),
|
|
||||||
jwidget_find_name(window, "dither2")
|
|
||||||
|
|
||||||
if current_sprite.imgtype == IMAGE_RGB then
|
|
||||||
jwidget_set_text(from, _("RGB"))
|
|
||||||
jwidget_disable(radio1)
|
|
||||||
jwidget_select(radio3) -- to Indexed by default
|
|
||||||
elseif current_sprite.imgtype == IMAGE_GRAYSCALE then
|
|
||||||
jwidget_set_text(from, _("Grayscale"))
|
|
||||||
jwidget_disable(radio2)
|
|
||||||
jwidget_select(radio1) -- to RGB by default
|
|
||||||
elseif current_sprite.imgtype == IMAGE_INDEXED then
|
|
||||||
jwidget_set_text(from, _("Indexed"))
|
|
||||||
jwidget_disable(radio3)
|
|
||||||
jwidget_select(radio1) -- to RGB by default
|
|
||||||
end
|
|
||||||
|
|
||||||
if get_config_bool("Options", "Dither", false) then
|
|
||||||
jwidget_select(dither2)
|
|
||||||
else
|
|
||||||
jwidget_select(dither1)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- open the window
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == jwidget_find_name(window, "ok") then
|
|
||||||
local destimgtype, dithermethod
|
|
||||||
|
|
||||||
if jwidget_is_selected(radio1) then
|
|
||||||
destimgtype = IMAGE_RGB
|
|
||||||
elseif jwidget_is_selected(radio2) then
|
|
||||||
destimgtype = IMAGE_GRAYSCALE
|
|
||||||
elseif jwidget_is_selected(radio3) then
|
|
||||||
destimgtype = IMAGE_INDEXED
|
|
||||||
end
|
|
||||||
|
|
||||||
if jwidget_is_selected(dither1) then
|
|
||||||
dithermethod = DITHERING_NONE
|
|
||||||
elseif jwidget_is_selected(dither2) then
|
|
||||||
dithermethod = DITHERING_ORDERED
|
|
||||||
end
|
|
||||||
|
|
||||||
use_current_sprite_rgb_map()
|
|
||||||
sprite_set_imgtype(current_sprite, destimgtype, dithermethod)
|
|
||||||
restore_rgb_map()
|
|
||||||
|
|
||||||
app_refresh_screen()
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
@ -1,166 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
-- internal routine
|
|
||||||
local function count_layers(layer)
|
|
||||||
local count
|
|
||||||
|
|
||||||
if layer.parent.type == GFXOBJ_SPRITE then
|
|
||||||
count = 0
|
|
||||||
else
|
|
||||||
count = 1
|
|
||||||
end
|
|
||||||
|
|
||||||
if layer_is_set(layer) then
|
|
||||||
local it = layer.layers
|
|
||||||
while it do
|
|
||||||
count = count + count_layers(it)
|
|
||||||
it = it.next
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
return count
|
|
||||||
end
|
|
||||||
|
|
||||||
-- const char *GetUniqueLayerName()
|
|
||||||
function GetUniqueLayerName()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if sprite then
|
|
||||||
return _("Layer") .. " " .. count_layers(sprite.set)
|
|
||||||
else
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Layer *NewLayer(const char *name, int x, int y, int w, int h)
|
|
||||||
-- creates a new layer with the "name" in the current sprite(in the
|
|
||||||
-- current frame) with the specified position and size(if w=h=0 the
|
|
||||||
-- routine will use the sprite dimension)
|
|
||||||
function NewLayer(name, x, y, w, h)
|
|
||||||
local sprite = current_sprite
|
|
||||||
local layer = nil
|
|
||||||
local image, frame, index
|
|
||||||
|
|
||||||
if sprite and name then
|
|
||||||
if not w or w == 0 then w = sprite.w end
|
|
||||||
if not h or h == 0 then h = sprite.h end
|
|
||||||
|
|
||||||
-- new image
|
|
||||||
image = image_new(sprite.imgtype, w, h)
|
|
||||||
if not image then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- new layer
|
|
||||||
layer = layer_new(sprite.imgtype)
|
|
||||||
if not layer then
|
|
||||||
image_free(image)
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- clear with mask color
|
|
||||||
image_clear(image, 0)
|
|
||||||
|
|
||||||
-- configure layer name and blend mode
|
|
||||||
layer_set_name(layer, name)
|
|
||||||
layer_set_blend_mode(layer, BLEND_MODE_NORMAL)
|
|
||||||
|
|
||||||
-- add image in the layer stock
|
|
||||||
index = stock_add_image(layer.stock, image)
|
|
||||||
|
|
||||||
-- create a new frame in the current frpos
|
|
||||||
frame = frame_new(sprite.frpos, index)
|
|
||||||
frame_set_position(frame, x, y)
|
|
||||||
|
|
||||||
-- add frame
|
|
||||||
layer_add_frame(layer, frame)
|
|
||||||
|
|
||||||
-- undo stuff
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
undo_add_layer(sprite.undo, sprite.set, layer)
|
|
||||||
undo_set_layer(sprite.undo, sprite)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- add the layer in the sprite set
|
|
||||||
layer_add_layer(sprite.set, layer)
|
|
||||||
|
|
||||||
-- select the new layer
|
|
||||||
sprite_set_layer(sprite, layer)
|
|
||||||
end
|
|
||||||
|
|
||||||
return layer
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Layer *NewLayerSet(const char *name)
|
|
||||||
-- creates a new layer set with the "name" in the current sprite
|
|
||||||
function NewLayerSet(name)
|
|
||||||
local sprite = current_sprite
|
|
||||||
local layer = nil
|
|
||||||
|
|
||||||
if sprite and name then
|
|
||||||
-- new layer
|
|
||||||
layer = layer_set_new()
|
|
||||||
if not layer then
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- configure layer name and blend mode
|
|
||||||
layer_set_name(layer, name)
|
|
||||||
|
|
||||||
-- add the layer in the sprite set
|
|
||||||
layer_add_layer(sprite.set, layer)
|
|
||||||
|
|
||||||
-- select the new layer
|
|
||||||
sprite_set_layer(sprite, layer)
|
|
||||||
end
|
|
||||||
|
|
||||||
return layer
|
|
||||||
end
|
|
||||||
|
|
||||||
-- removes the current selected layer
|
|
||||||
function RemoveLayer()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if sprite and sprite.layer then
|
|
||||||
local layer = sprite.layer
|
|
||||||
local parent = layer.parent
|
|
||||||
local layer_select
|
|
||||||
|
|
||||||
-- select: previous layer, or next layer, or parent(if it is not
|
|
||||||
-- the main layer of sprite set)
|
|
||||||
if layer.prev then
|
|
||||||
layer_select = layer.prev
|
|
||||||
elseif layer.next then
|
|
||||||
layer_select = layer.next
|
|
||||||
elseif parent != sprite.set then
|
|
||||||
layer_select = parent
|
|
||||||
else
|
|
||||||
layer_select = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- undo stuff
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
undo_set_layer(sprite.undo, sprite)
|
|
||||||
undo_remove_layer(sprite.undo, layer)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- select other layer
|
|
||||||
sprite_set_layer(sprite, layer_select)
|
|
||||||
|
|
||||||
-- remove the layer
|
|
||||||
layer_remove_layer(parent, layer)
|
|
||||||
|
|
||||||
-- destroy the layer
|
|
||||||
layer_free(layer)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_RemoveLayer()
|
|
||||||
if current_sprite then
|
|
||||||
RemoveLayer()
|
|
||||||
GUI_Refresh(current_sprite)
|
|
||||||
end
|
|
||||||
end
|
|
@ -1,85 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_LayerProperties()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- get selected layer
|
|
||||||
local layer = sprite.layer
|
|
||||||
if not layer then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local window = jwindow_new(_("Layer Properties"))
|
|
||||||
local box1 = jbox_new(JI_VERTICAL)
|
|
||||||
local box2 = jbox_new(JI_HORIZONTAL)
|
|
||||||
local box3 = jbox_new(JI_HORIZONTAL + JI_HOMOGENEOUS)
|
|
||||||
local label_name = jlabel_new(_("Name:"))
|
|
||||||
local entry_name = jentry_new(256, layer.name)
|
|
||||||
local button_ok = jbutton_new(_("&OK"))
|
|
||||||
local button_cancel = jbutton_new(_("&Cancel"))
|
|
||||||
local label_bm, view_bm, list_bm
|
|
||||||
|
|
||||||
if layer.type == GFXOBJ_LAYER_IMAGE then
|
|
||||||
label_bm = jlabel_new(_("Blend mode:"))
|
|
||||||
view_bm = jview_new()
|
|
||||||
list_bm = jlistbox_new()
|
|
||||||
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Normal")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Dissolve")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Multiply")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Screen")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Overlay")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Hard Light")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Dodge")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Burn")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Darken")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Lighten")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Addition")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Subtract")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Difference")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Hue")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Saturation")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Color")))
|
|
||||||
jwidget_add_child(list_bm, jlistitem_new(_("Luminosity")))
|
|
||||||
|
|
||||||
jlistbox_select_index(list_bm, layer.blend_mode)
|
|
||||||
|
|
||||||
jview_attach(view_bm, list_bm)
|
|
||||||
jwidget_set_static_size(view_bm, 128, 64)
|
|
||||||
jwidget_expansive(view_bm, true)
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_expansive(entry_name, true)
|
|
||||||
|
|
||||||
jwidget_add_child(box2, label_name)
|
|
||||||
jwidget_add_child(box2, entry_name)
|
|
||||||
jwidget_add_child(box1, box2)
|
|
||||||
if layer.type == GFXOBJ_LAYER_IMAGE then
|
|
||||||
jwidget_add_child(box1, label_bm)
|
|
||||||
jwidget_add_child(box1, view_bm)
|
|
||||||
end
|
|
||||||
jwidget_add_child(box3, button_ok)
|
|
||||||
jwidget_add_child(box3, button_cancel)
|
|
||||||
jwidget_add_child(box1, box3)
|
|
||||||
jwidget_add_child(window, box1)
|
|
||||||
|
|
||||||
jwidget_magnetic(button_ok, true)
|
|
||||||
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == button_ok then
|
|
||||||
layer_set_name(layer, jwidget_get_text(entry_name))
|
|
||||||
if layer.type == GFXOBJ_LAYER_IMAGE then
|
|
||||||
layer_set_blend_mode(layer, jlistbox_get_selected_index(list_bm))
|
|
||||||
end
|
|
||||||
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
@ -1,98 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_MergeDown()
|
|
||||||
local sprite, frpos, index
|
|
||||||
local src_layer, dst_layer
|
|
||||||
local src_frame, dst_frame
|
|
||||||
local src_image, dst_image
|
|
||||||
local old_id
|
|
||||||
|
|
||||||
sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
src_layer = sprite.layer
|
|
||||||
if not src_layer or not layer_is_image(src_layer) then return end
|
|
||||||
|
|
||||||
dst_layer = sprite.layer.prev
|
|
||||||
if not dst_layer or not layer_is_image(dst_layer) then return end
|
|
||||||
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
for frpos = 0, sprite.frames-1 do
|
|
||||||
-- get frames
|
|
||||||
src_frame = layer_get_frame(src_layer, frpos)
|
|
||||||
dst_frame = layer_get_frame(dst_layer, frpos)
|
|
||||||
|
|
||||||
-- get images
|
|
||||||
if src_frame then
|
|
||||||
src_image = stock_get_image(src_layer.stock, src_frame.image)
|
|
||||||
else
|
|
||||||
src_image = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
if dst_frame then
|
|
||||||
dst_image = stock_get_image(dst_layer.stock, dst_frame.image)
|
|
||||||
else
|
|
||||||
dst_image = nil
|
|
||||||
end
|
|
||||||
|
|
||||||
-- with source image?
|
|
||||||
if src_image then
|
|
||||||
-- no destination image
|
|
||||||
if not dst_image then
|
|
||||||
-- copy this frame to the destination layer
|
|
||||||
dst_image = image_new_copy(src_image)
|
|
||||||
index = stock_add_image(dst_layer.stock, dst_image)
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_add_image(sprite.undo, dst_layer.stock, dst_image)
|
|
||||||
end
|
|
||||||
dst_frame = frame_new(frpos, index)
|
|
||||||
frame_set_position(dst_frame, src_frame.x, src_frame.y)
|
|
||||||
frame_set_opacity(dst_frame, src_frame.opacity)
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_add_frame(sprite.undo, dst_layer, dst_frame)
|
|
||||||
end
|
|
||||||
layer_add_frame(dst_layer, dst_frame)
|
|
||||||
-- with destination
|
|
||||||
else
|
|
||||||
local x1 = MIN(src_frame.x, dst_frame.x)
|
|
||||||
local y1 = MIN(src_frame.y, dst_frame.y)
|
|
||||||
local x2 = MAX(src_frame.x+src_image.w-1, dst_frame.x+dst_image.w-1)
|
|
||||||
local y2 = MAX(src_frame.y+src_image.h-1, dst_frame.y+dst_image.h-1)
|
|
||||||
local new_image = image_crop(dst_image,
|
|
||||||
x1-dst_frame.x,
|
|
||||||
y1-dst_frame.y,
|
|
||||||
x2-x1+1, y2-y1+1)
|
|
||||||
|
|
||||||
-- merge src_image in new_image
|
|
||||||
image_merge(new_image, src_image,
|
|
||||||
src_frame.x-x1,
|
|
||||||
src_frame.y-y1,
|
|
||||||
src_frame.opacity, src_layer.blend_mode)
|
|
||||||
|
|
||||||
frame_set_position(dst_frame, x1, y1)
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_replace_image(sprite.undo, dst_layer.stock, dst_frame.image)
|
|
||||||
end
|
|
||||||
stock_replace_image(dst_layer.stock, dst_frame.image, new_image)
|
|
||||||
|
|
||||||
image_free(dst_image)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_layer(sprite.undo, sprite)
|
|
||||||
undo_remove_layer(sprite.undo, src_layer)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
end
|
|
||||||
|
|
||||||
sprite_set_layer(sprite, dst_layer)
|
|
||||||
layer_remove_layer(src_layer.parent, src_layer)
|
|
||||||
layer_free(src_layer)
|
|
||||||
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
@ -1,60 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_NewLayer()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- load the window widget
|
|
||||||
local window = ji_load_widget("newlay.jid", "new_layer")
|
|
||||||
if not window then return end
|
|
||||||
|
|
||||||
jwidget_set_text(jwidget_find_name(window, "name"), GetUniqueLayerName())
|
|
||||||
jwidget_set_text(jwidget_find_name(window, "width"), tostring(sprite.w))
|
|
||||||
jwidget_set_text(jwidget_find_name(window, "height"), tostring(sprite.h))
|
|
||||||
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == jwidget_find_name(window, "ok") then
|
|
||||||
local name = jwidget_get_text(jwidget_find_name(window, "name"))
|
|
||||||
local w = MID(1, tonumber(jwidget_get_text(jwidget_find_name(window, "width"))), 9999)
|
|
||||||
local h = MID(1, tonumber(jwidget_get_text(jwidget_find_name(window, "height"))), 9999)
|
|
||||||
local layer = NewLayer(name, 0, 0, w, h)
|
|
||||||
if not layer then
|
|
||||||
jalert(_("Error<<Not enough memory||&Close"))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_NewLayerSet()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- load the window widget
|
|
||||||
local window = ji_load_widget("newlay.jid", "new_layer_set")
|
|
||||||
if not window then return end
|
|
||||||
|
|
||||||
jwindow_open_fg(window)
|
|
||||||
|
|
||||||
if jwindow_get_killer(window) == jwidget_find_name(window, "ok") then
|
|
||||||
local name = jwidget_get_text(jwidget_find_name(window, "name"))
|
|
||||||
local layer = NewLayerSet(name)
|
|
||||||
if not layer then
|
|
||||||
jalert(_("Error<<Not enough memory||&Close"))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
jwidget_free(window)
|
|
||||||
end
|
|
@ -1,47 +0,0 @@
|
|||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function RemoveFrame(layer, frame)
|
|
||||||
local sprite = current_sprite
|
|
||||||
local frpos, it, used, image
|
|
||||||
|
|
||||||
if sprite and layer_is_image(layer) and frame then
|
|
||||||
-- find if the image that use the frame to remove, is used by
|
|
||||||
-- another frames
|
|
||||||
used = false
|
|
||||||
for frpos = 0, sprite.frames-1 do
|
|
||||||
it = layer_get_frame(layer, frpos)
|
|
||||||
if it and it.id != frame.id and it.image == frame.image then
|
|
||||||
used = true
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
undo_open(sprite.undo)
|
|
||||||
if not used then
|
|
||||||
-- if the image is only used by this frame, we can remove the
|
|
||||||
-- image from the stock
|
|
||||||
image = stock_get_image(layer.stock, frame.image)
|
|
||||||
undo_remove_image(sprite.undo, layer.stock, image)
|
|
||||||
stock_remove_image(layer.stock, image)
|
|
||||||
image_free(image)
|
|
||||||
end
|
|
||||||
undo_remove_frame(sprite.undo, layer, frame)
|
|
||||||
undo_close(sprite.undo)
|
|
||||||
|
|
||||||
-- remove the frame
|
|
||||||
layer_remove_frame(layer, frame)
|
|
||||||
frame_free(frame)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_RemoveFrame()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if sprite then
|
|
||||||
local frame = layer_get_frame(sprite.layer, sprite.frpos)
|
|
||||||
if frame then
|
|
||||||
RemoveFrame(sprite.layer, frame)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
@ -143,6 +143,7 @@ ASE_SOURCES = \
|
|||||||
src/raster/stock.c \
|
src/raster/stock.c \
|
||||||
src/raster/undo.c \
|
src/raster/undo.c \
|
||||||
src/script/bindings.c \
|
src/script/bindings.c \
|
||||||
|
src/script/functions.c \
|
||||||
src/script/script.c \
|
src/script/script.c \
|
||||||
src/util/autocrop.c \
|
src/util/autocrop.c \
|
||||||
src/util/boundary.c \
|
src/util/boundary.c \
|
||||||
|
@ -23,11 +23,82 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "core/cfg.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
|
#include "modules/palette.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/image.h"
|
||||||
|
#include "raster/quant.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_change_image_type(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_change_image_type(const char *argument)
|
void command_execute_change_image_type(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window, from, radio1, radio2, radio3, dither1, dither2;
|
||||||
|
|
||||||
|
/* load the window widget */
|
||||||
|
window = load_widget("imgtype.jid", "image_type");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
from = jwidget_find_name(window, "from");
|
||||||
|
radio1 = jwidget_find_name(window, "imgtype1");
|
||||||
|
radio2 = jwidget_find_name(window, "imgtype2");
|
||||||
|
radio3 = jwidget_find_name(window, "imgtype3");
|
||||||
|
dither1 = jwidget_find_name(window, "dither1");
|
||||||
|
dither2 = jwidget_find_name(window, "dither2");
|
||||||
|
|
||||||
|
if (current_sprite->imgtype == IMAGE_RGB) {
|
||||||
|
jwidget_set_text(from, _("RGB"));
|
||||||
|
jwidget_disable(radio1);
|
||||||
|
jwidget_select(radio3); /* to Indexed by default */
|
||||||
|
}
|
||||||
|
else if (current_sprite->imgtype == IMAGE_GRAYSCALE) {
|
||||||
|
jwidget_set_text(from, _("Grayscale"));
|
||||||
|
jwidget_disable(radio2);
|
||||||
|
jwidget_select(radio1); /* to RGB by default */
|
||||||
|
}
|
||||||
|
else if (current_sprite->imgtype == IMAGE_INDEXED) {
|
||||||
|
jwidget_set_text(from, _("Indexed"));
|
||||||
|
jwidget_disable(radio3);
|
||||||
|
jwidget_select(radio1); /* to RGB by default */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (get_config_bool("Options", "Dither", FALSE))
|
||||||
|
jwidget_select(dither2);
|
||||||
|
else
|
||||||
|
jwidget_select(dither1);
|
||||||
|
|
||||||
|
/* open the window */
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == jwidget_find_name(window, "ok")) {
|
||||||
|
int destimgtype, dithermethod;
|
||||||
|
|
||||||
|
if (jwidget_is_selected(radio1))
|
||||||
|
destimgtype = IMAGE_RGB;
|
||||||
|
else if (jwidget_is_selected(radio2))
|
||||||
|
destimgtype = IMAGE_GRAYSCALE;
|
||||||
|
else if (jwidget_is_selected(radio3))
|
||||||
|
destimgtype = IMAGE_INDEXED;
|
||||||
|
|
||||||
|
if (jwidget_is_selected(dither1))
|
||||||
|
dithermethod = DITHERING_NONE;
|
||||||
|
else if (jwidget_is_selected(dither2))
|
||||||
|
dithermethod = DITHERING_ORDERED;
|
||||||
|
|
||||||
|
use_current_sprite_rgb_map();
|
||||||
|
sprite_set_imgtype(current_sprite, destimgtype, dithermethod);
|
||||||
|
restore_rgb_map();
|
||||||
|
|
||||||
|
app_refresh_screen();
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -22,12 +22,64 @@
|
|||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
|
#include "console/console.h"
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static Layer *DuplicateLayer(void);
|
||||||
|
|
||||||
|
bool command_enabled_duplicate_layer(const char *argument)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
current_sprite != NULL &&
|
||||||
|
current_sprite->layer != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_duplicate_layer(const char *argument)
|
void command_execute_duplicate_layer(const char *argument)
|
||||||
{
|
{
|
||||||
|
if (DuplicateLayer() != NULL)
|
||||||
|
GUI_Refresh(current_sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Layer *DuplicateLayer(void)
|
||||||
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Layer *layer_copy;
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
if (!sprite || !sprite->layer)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
layer_copy = layer_new_copy(sprite->layer);
|
||||||
|
if (!layer_copy) {
|
||||||
|
console_printf("Not enough memory");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(buf, "%s %s", layer_copy->name, _("Copy"));
|
||||||
|
layer_set_name(layer_copy, buf);
|
||||||
|
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_open(sprite->undo);
|
||||||
|
undo_add_layer(sprite->undo, (Layer *)sprite->layer->parent, layer_copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer_add_layer((Layer *)sprite->layer->parent, layer_copy);
|
||||||
|
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_move_layer(sprite->undo, layer_copy);
|
||||||
|
undo_set_layer(sprite->undo, sprite);
|
||||||
|
undo_close(sprite->undo);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer_move_layer((Layer *)sprite->layer->parent, layer_copy, sprite->layer);
|
||||||
|
sprite_set_layer(sprite, layer_copy);
|
||||||
|
|
||||||
|
return layer_copy;
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,67 @@
|
|||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
|
#include <allegro.h>
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "core/cfg.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_duplicate_sprite(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_duplicate_sprite(const char *argument)
|
void command_execute_duplicate_sprite(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window, src_name, dst_name, flatten;
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Sprite *sprite_copy;
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
/* load the window widget */
|
||||||
|
window = load_widget("dupspr.jid", "duplicate_sprite");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
src_name = jwidget_find_name(window, "src_name");
|
||||||
|
dst_name = jwidget_find_name(window, "dst_name");
|
||||||
|
flatten = jwidget_find_name(window, "flatten");
|
||||||
|
|
||||||
|
jwidget_set_text(src_name, get_filename(sprite->filename));
|
||||||
|
|
||||||
|
sprintf(buf, "%s %s", sprite->filename, _("Copy"));
|
||||||
|
jwidget_set_text(dst_name, buf);
|
||||||
|
|
||||||
|
if (get_config_bool("DuplicateSprite", "Flatten", FALSE))
|
||||||
|
jwidget_select(flatten);
|
||||||
|
|
||||||
|
/* open the window */
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == jwidget_find_name(window, "ok")) {
|
||||||
|
set_config_bool("DuplicateSprite", "Flatten",
|
||||||
|
jwidget_is_selected(flatten));
|
||||||
|
|
||||||
|
if (jwidget_is_selected(flatten))
|
||||||
|
sprite_copy = sprite_new_flatten_copy(sprite);
|
||||||
|
else
|
||||||
|
sprite_copy = sprite_new_copy(sprite);
|
||||||
|
|
||||||
|
if (sprite_copy != NULL) {
|
||||||
|
sprite_set_filename(sprite_copy, jwidget_get_text(dst_name));
|
||||||
|
|
||||||
|
sprite_mount(sprite_copy);
|
||||||
|
set_current_sprite(sprite_copy);
|
||||||
|
sprite_show(sprite_copy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,17 @@
|
|||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/sprite.h"
|
#include "script/functions.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_flatten_layers(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_flatten_layers(const char *argument)
|
void command_execute_flatten_layers(const char *argument)
|
||||||
{
|
{
|
||||||
|
FlattenLayers();
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,110 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/frame.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_frame_properties(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_frame_properties(const char *argument)
|
void command_execute_frame_properties(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window, entry_frpos, entry_xpos, entry_ypos, slider_opacity, button_ok;
|
||||||
|
Sprite *sprite;
|
||||||
|
Layer *layer;
|
||||||
|
Frame *frame;
|
||||||
|
char buf[1024];
|
||||||
|
|
||||||
|
/* get current sprite */
|
||||||
|
sprite = current_sprite;
|
||||||
|
if (!sprite)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* get selected layer */
|
||||||
|
layer = sprite->layer;
|
||||||
|
if (!layer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* get current frame */
|
||||||
|
frame = layer_get_frame(layer, sprite->frpos);
|
||||||
|
if (!frame)
|
||||||
|
return;
|
||||||
|
|
||||||
|
window = load_widget("frmprop.jid", "frame_properties");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
entry_frpos = jwidget_find_name(window, "frpos");
|
||||||
|
entry_xpos = jwidget_find_name(window, "xpos");
|
||||||
|
entry_ypos = jwidget_find_name(window, "ypos");
|
||||||
|
slider_opacity = jwidget_find_name(window, "opacity");
|
||||||
|
button_ok = jwidget_find_name(window, "ok");
|
||||||
|
|
||||||
|
sprintf(buf, "%d", frame->frpos); jwidget_set_text(entry_frpos, buf);
|
||||||
|
sprintf(buf, "%d", frame->x); jwidget_set_text(entry_xpos, buf);
|
||||||
|
sprintf(buf, "%d", frame->y); jwidget_set_text(entry_ypos, buf);
|
||||||
|
jslider_set_value(slider_opacity, frame->opacity);
|
||||||
|
|
||||||
|
while (TRUE) {
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == button_ok) {
|
||||||
|
int new_frpos, new_xpos, new_ypos;
|
||||||
|
Frame *existent_frame;
|
||||||
|
|
||||||
|
new_frpos = strtol(jwidget_get_text(entry_frpos), NULL, 10);
|
||||||
|
new_frpos = MID(0, new_frpos, sprite->frames-1);
|
||||||
|
existent_frame = layer_get_frame(layer, new_frpos);
|
||||||
|
|
||||||
|
if (new_frpos != frame->frpos && existent_frame) {
|
||||||
|
jalert("Error<<You can't change frpos to %d"
|
||||||
|
"<<Already there is a frame in that pos.||&OK",
|
||||||
|
new_frpos);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* WE MUST REMOVE THE FRAME BEFORE CALL frame_set_frpos() */
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_open(sprite->undo);
|
||||||
|
undo_remove_frame(sprite->undo, layer, frame);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer_remove_frame(layer, frame);
|
||||||
|
|
||||||
|
/* change frame properties */
|
||||||
|
new_xpos = strtol(jwidget_get_text(entry_xpos), NULL, 10);
|
||||||
|
new_ypos = strtol(jwidget_get_text(entry_ypos), NULL, 10);
|
||||||
|
|
||||||
|
frame_set_frpos(frame, new_frpos);
|
||||||
|
frame_set_position(frame,
|
||||||
|
MID(-9999, new_xpos, 9999),
|
||||||
|
MID(-9999, new_ypos, 9999));
|
||||||
|
frame_set_opacity(frame, jslider_get_value(slider_opacity));
|
||||||
|
|
||||||
|
/* add again the same frame */
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_add_frame(sprite->undo, layer, frame);
|
||||||
|
undo_close(sprite->undo);
|
||||||
|
}
|
||||||
|
|
||||||
|
layer_add_frame(layer, frame);
|
||||||
|
|
||||||
|
/* set the sprite position, refresh and break the loop */
|
||||||
|
sprite_set_frpos(sprite, new_frpos);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,99 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_layer_properties(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_layer_properties(const char *argument)
|
void command_execute_layer_properties(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window, box1, box2, box3, label_name, entry_name;
|
||||||
|
JWidget button_ok, button_cancel, label_bm, view_bm, list_bm;
|
||||||
|
Sprite *sprite;
|
||||||
|
Layer *layer;
|
||||||
|
|
||||||
|
/* get current sprite */
|
||||||
|
sprite = current_sprite;
|
||||||
|
if (!sprite)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* get selected layer */
|
||||||
|
layer = sprite->layer;
|
||||||
|
if (!layer)
|
||||||
|
return;
|
||||||
|
|
||||||
|
window = jwindow_new(_("Layer Properties"));
|
||||||
|
box1 = jbox_new(JI_VERTICAL);
|
||||||
|
box2 = jbox_new(JI_HORIZONTAL);
|
||||||
|
box3 = jbox_new(JI_HORIZONTAL + JI_HOMOGENEOUS);
|
||||||
|
label_name = jlabel_new(_("Name:"));
|
||||||
|
entry_name = jentry_new(256, layer->name);
|
||||||
|
button_ok = jbutton_new(_("&OK"));
|
||||||
|
button_cancel = jbutton_new(_("&Cancel"));
|
||||||
|
|
||||||
|
if (layer->gfxobj.type == GFXOBJ_LAYER_IMAGE) {
|
||||||
|
label_bm = jlabel_new(_("Blend mode:"));
|
||||||
|
view_bm = jview_new();
|
||||||
|
list_bm = jlistbox_new();
|
||||||
|
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Normal")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Dissolve")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Multiply")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Screen")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Overlay")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Hard Light")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Dodge")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Burn")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Darken")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Lighten")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Addition")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Subtract")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Difference")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Hue")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Saturation")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Color")));
|
||||||
|
jwidget_add_child(list_bm, jlistitem_new(_("Luminosity")));
|
||||||
|
|
||||||
|
jlistbox_select_index(list_bm, layer->blend_mode);
|
||||||
|
|
||||||
|
jview_attach(view_bm, list_bm);
|
||||||
|
jwidget_set_static_size(view_bm, 128, 64);
|
||||||
|
jwidget_expansive(view_bm, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_expansive(entry_name, TRUE);
|
||||||
|
|
||||||
|
jwidget_add_child(box2, label_name);
|
||||||
|
jwidget_add_child(box2, entry_name);
|
||||||
|
jwidget_add_child(box1, box2);
|
||||||
|
if (layer->gfxobj.type == GFXOBJ_LAYER_IMAGE) {
|
||||||
|
jwidget_add_child(box1, label_bm);
|
||||||
|
jwidget_add_child(box1, view_bm);
|
||||||
|
}
|
||||||
|
jwidget_add_child(box3, button_ok);
|
||||||
|
jwidget_add_child(box3, button_cancel);
|
||||||
|
jwidget_add_child(box1, box3);
|
||||||
|
jwidget_add_child(window, box1);
|
||||||
|
|
||||||
|
jwidget_magnetic(button_ok, TRUE);
|
||||||
|
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == button_ok) {
|
||||||
|
layer_set_name(layer, jwidget_get_text(entry_name));
|
||||||
|
if (layer->gfxobj.type == GFXOBJ_LAYER_IMAGE)
|
||||||
|
layer_set_blend_mode(layer, jlistbox_get_selected_index(list_bm));
|
||||||
|
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,123 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/frame.h"
|
||||||
|
#include "raster/image.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/stock.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_merge_down_layer(const char *argument)
|
||||||
|
{
|
||||||
|
Layer *src_layer, *dst_layer;
|
||||||
|
Sprite *sprite;
|
||||||
|
|
||||||
|
sprite = current_sprite;
|
||||||
|
if (!sprite)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
src_layer = sprite->layer;
|
||||||
|
if (!src_layer || !layer_is_image(src_layer))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
dst_layer = layer_get_prev(sprite->layer);
|
||||||
|
if (!dst_layer || !layer_is_image(dst_layer))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_merge_down_layer(const char *argument)
|
void command_execute_merge_down_layer(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Layer *src_layer, *dst_layer;
|
||||||
|
Frame *src_frame, *dst_frame;
|
||||||
|
Image *src_image, *dst_image;
|
||||||
|
int frpos, index;
|
||||||
|
|
||||||
|
src_layer = sprite->layer;
|
||||||
|
dst_layer = layer_get_prev(sprite->layer);
|
||||||
|
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_open(sprite->undo);
|
||||||
|
|
||||||
|
for (frpos=0; frpos<sprite->frames; ++frpos) {
|
||||||
|
/* get frames */
|
||||||
|
src_frame = layer_get_frame(src_layer, frpos);
|
||||||
|
dst_frame = layer_get_frame(dst_layer, frpos);
|
||||||
|
|
||||||
|
/* get images */
|
||||||
|
if (src_frame)
|
||||||
|
src_image = stock_get_image(src_layer->stock, src_frame->image);
|
||||||
|
else
|
||||||
|
src_image = NULL;
|
||||||
|
|
||||||
|
if (dst_frame)
|
||||||
|
dst_image = stock_get_image(dst_layer->stock, dst_frame->image);
|
||||||
|
else
|
||||||
|
dst_image = NULL;
|
||||||
|
|
||||||
|
/* with source image? */
|
||||||
|
if (src_image) {
|
||||||
|
/* no destination image */
|
||||||
|
if (!dst_image) {
|
||||||
|
/* copy this frame to the destination layer */
|
||||||
|
dst_image = image_new_copy(src_image);
|
||||||
|
index = stock_add_image(dst_layer->stock, dst_image);
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_add_image(sprite->undo, dst_layer->stock, dst_image);
|
||||||
|
}
|
||||||
|
dst_frame = frame_new(frpos, index);
|
||||||
|
frame_set_position(dst_frame, src_frame->x, src_frame->y);
|
||||||
|
frame_set_opacity(dst_frame, src_frame->opacity);
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_add_frame(sprite->undo, dst_layer, dst_frame);
|
||||||
|
}
|
||||||
|
layer_add_frame(dst_layer, dst_frame);
|
||||||
|
}
|
||||||
|
/* with destination */
|
||||||
|
else {
|
||||||
|
int x1 = MIN(src_frame->x, dst_frame->x);
|
||||||
|
int y1 = MIN(src_frame->y, dst_frame->y);
|
||||||
|
int x2 = MAX(src_frame->x+src_image->w-1, dst_frame->x+dst_image->w-1);
|
||||||
|
int y2 = MAX(src_frame->y+src_image->h-1, dst_frame->y+dst_image->h-1);
|
||||||
|
Image *new_image = image_crop(dst_image,
|
||||||
|
x1-dst_frame->x,
|
||||||
|
y1-dst_frame->y,
|
||||||
|
x2-x1+1, y2-y1+1);
|
||||||
|
|
||||||
|
/* merge src_image in new_image */
|
||||||
|
image_merge(new_image, src_image,
|
||||||
|
src_frame->x-x1,
|
||||||
|
src_frame->y-y1,
|
||||||
|
src_frame->opacity,
|
||||||
|
src_layer->blend_mode);
|
||||||
|
|
||||||
|
frame_set_position(dst_frame, x1, y1);
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_replace_image(sprite->undo, dst_layer->stock, dst_frame->image);
|
||||||
|
}
|
||||||
|
stock_replace_image(dst_layer->stock, dst_frame->image, new_image);
|
||||||
|
|
||||||
|
image_free(dst_image);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (undo_is_enabled(sprite->undo)) {
|
||||||
|
undo_set_layer(sprite->undo, sprite);
|
||||||
|
undo_remove_layer(sprite->undo, src_layer);
|
||||||
|
undo_close(sprite->undo);
|
||||||
|
}
|
||||||
|
|
||||||
|
sprite_set_layer(sprite, dst_layer);
|
||||||
|
layer_remove_layer((Layer *)src_layer->parent, src_layer);
|
||||||
|
layer_free(src_layer);
|
||||||
|
|
||||||
|
GUI_Refresh(sprite);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,55 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_new_layer(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_new_layer(const char *argument)
|
void command_execute_new_layer(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window;
|
||||||
|
Sprite *sprite = current_sprite; /* get current sprite */
|
||||||
|
char buf[512];
|
||||||
|
|
||||||
|
/* load the window widget */
|
||||||
|
window = load_widget("newlay.jid", "new_layer");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
jwidget_set_text(jwidget_find_name(window, "name"), GetUniqueLayerName());
|
||||||
|
|
||||||
|
sprintf(buf, "%d", sprite->w);
|
||||||
|
jwidget_set_text(jwidget_find_name(window, "width"), buf);
|
||||||
|
|
||||||
|
sprintf(buf, "%d", sprite->h);
|
||||||
|
jwidget_set_text(jwidget_find_name(window, "height"), buf);
|
||||||
|
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == jwidget_find_name(window, "ok")) {
|
||||||
|
const char *name = jwidget_get_text(jwidget_find_name(window, "name"));
|
||||||
|
Layer *layer;
|
||||||
|
int w, h;
|
||||||
|
|
||||||
|
w = strtol(jwidget_get_text(jwidget_find_name(window, "width")), NULL, 10);
|
||||||
|
h = strtol(jwidget_get_text(jwidget_find_name(window, "height")), NULL, 10);
|
||||||
|
w = MID(1, w, 9999);
|
||||||
|
h = MID(1, h, 9999);
|
||||||
|
layer = NewLayer(name, 0, 0, w, h);
|
||||||
|
if (!layer) {
|
||||||
|
jalert(_("Error<<Not enough memory||&Close"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -23,11 +23,39 @@
|
|||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_new_layer_set(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_new_layer_set(const char *argument)
|
void command_execute_new_layer_set(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget window;
|
||||||
|
Sprite *sprite = current_sprite; /* get current sprite */
|
||||||
|
|
||||||
|
/* load the window widget */
|
||||||
|
window = load_widget("newlay.jid", "new_layer_set");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
jwindow_open_fg(window);
|
||||||
|
|
||||||
|
if (jwindow_get_killer(window) == jwidget_find_name(window, "ok")) {
|
||||||
|
const char *name = jwidget_get_text(jwidget_find_name(window, "name"));
|
||||||
|
Layer *layer = NewLayerSet(name);
|
||||||
|
if (!layer) {
|
||||||
|
jalert(_("Error<<Not enough memory||&Close"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
}
|
||||||
|
|
||||||
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,26 @@
|
|||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "modules/gui.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/frame.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "script/functions.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_remove_frame(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_remove_frame(const char *argument)
|
void command_execute_remove_frame(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Frame *frame = layer_get_frame(sprite->layer, sprite->frpos);
|
||||||
|
if (frame) {
|
||||||
|
RemoveFrame(sprite->layer, frame);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -20,14 +20,19 @@
|
|||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "modules/gui.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_remove_layer(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_remove_layer(const char *argument)
|
void command_execute_remove_layer(const char *argument)
|
||||||
{
|
{
|
||||||
|
RemoveLayer();
|
||||||
|
GUI_Refresh(current_sprite);
|
||||||
}
|
}
|
||||||
|
@ -85,24 +85,35 @@ void command_execute_preview_tiled(const char *argument);
|
|||||||
/* sprite */
|
/* sprite */
|
||||||
bool command_enabled_sprite_properties(const char *argument);
|
bool command_enabled_sprite_properties(const char *argument);
|
||||||
void command_execute_sprite_properties(const char *argument);
|
void command_execute_sprite_properties(const char *argument);
|
||||||
|
bool command_enabled_duplicate_sprite(const char *argument);
|
||||||
void command_execute_duplicate_sprite(const char *argument);
|
void command_execute_duplicate_sprite(const char *argument);
|
||||||
|
bool command_enabled_change_image_type(const char *argument);
|
||||||
void command_execute_change_image_type(const char *argument);
|
void command_execute_change_image_type(const char *argument);
|
||||||
bool command_enabled_crop_sprite(const char *argument);
|
bool command_enabled_crop_sprite(const char *argument);
|
||||||
void command_execute_crop_sprite(const char *argument);
|
void command_execute_crop_sprite(const char *argument);
|
||||||
bool command_enabled_autocrop_sprite(const char *argument);
|
bool command_enabled_autocrop_sprite(const char *argument);
|
||||||
void command_execute_autocrop_sprite(const char *argument);
|
void command_execute_autocrop_sprite(const char *argument);
|
||||||
/* layer */
|
/* layer */
|
||||||
|
bool command_enabled_layer_properties(const char *argument);
|
||||||
void command_execute_layer_properties(const char *argument);
|
void command_execute_layer_properties(const char *argument);
|
||||||
|
bool command_enabled_new_layer(const char *argument);
|
||||||
void command_execute_new_layer(const char *argument);
|
void command_execute_new_layer(const char *argument);
|
||||||
|
bool command_enabled_new_layer_set(const char *argument);
|
||||||
void command_execute_new_layer_set(const char *argument);
|
void command_execute_new_layer_set(const char *argument);
|
||||||
|
bool command_enabled_remove_layer(const char *argument);
|
||||||
void command_execute_remove_layer(const char *argument);
|
void command_execute_remove_layer(const char *argument);
|
||||||
|
bool command_enabled_duplicate_layer(const char *argument);
|
||||||
void command_execute_duplicate_layer(const char *argument);
|
void command_execute_duplicate_layer(const char *argument);
|
||||||
|
bool command_enabled_merge_down_layer(const char *argument);
|
||||||
void command_execute_merge_down_layer(const char *argument);
|
void command_execute_merge_down_layer(const char *argument);
|
||||||
|
bool command_enabled_flatten_layers(const char *argument);
|
||||||
void command_execute_flatten_layers(const char *argument);
|
void command_execute_flatten_layers(const char *argument);
|
||||||
bool command_enabled_crop_layer(const char *argument);
|
bool command_enabled_crop_layer(const char *argument);
|
||||||
void command_execute_crop_layer(const char *argument);
|
void command_execute_crop_layer(const char *argument);
|
||||||
/* frame */
|
/* frame */
|
||||||
|
bool command_enabled_frame_properties(const char *argument);
|
||||||
void command_execute_frame_properties(const char *argument);
|
void command_execute_frame_properties(const char *argument);
|
||||||
|
bool command_enabled_remove_frame(const char *argument);
|
||||||
void command_execute_remove_frame(const char *argument);
|
void command_execute_remove_frame(const char *argument);
|
||||||
bool command_enabled_new_frame(const char *argument);
|
bool command_enabled_new_frame(const char *argument);
|
||||||
void command_execute_new_frame(const char *argument);
|
void command_execute_new_frame(const char *argument);
|
||||||
@ -208,20 +219,20 @@ static Command commands[] = {
|
|||||||
CMD_EXE_ENA2(preview_normal, preview),
|
CMD_EXE_ENA2(preview_normal, preview),
|
||||||
CMD_EXE_ENA2(preview_fit_to_screen, preview),
|
CMD_EXE_ENA2(preview_fit_to_screen, preview),
|
||||||
CMD_EXE_ENA(sprite_properties),
|
CMD_EXE_ENA(sprite_properties),
|
||||||
{ CMD_DUPLICATE_SPRITE, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(duplicate_sprite),
|
||||||
{ CMD_CHANGE_IMAGE_TYPE, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(change_image_type),
|
||||||
CMD_EXE_ENA(crop_sprite),
|
CMD_EXE_ENA(crop_sprite),
|
||||||
CMD_EXE_ENA(autocrop_sprite),
|
CMD_EXE_ENA(autocrop_sprite),
|
||||||
{ CMD_LAYER_PROPERTIES, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(layer_properties),
|
||||||
{ CMD_NEW_LAYER, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(new_layer),
|
||||||
{ CMD_NEW_LAYER_SET, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(new_layer_set),
|
||||||
{ CMD_REMOVE_LAYER, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(remove_layer),
|
||||||
{ CMD_DUPLICATE_LAYER, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(duplicate_layer),
|
||||||
{ CMD_MERGE_DOWN_LAYER, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(merge_down_layer),
|
||||||
{ CMD_FLATTEN_LAYERS, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(flatten_layers),
|
||||||
CMD_EXE_ENA(crop_layer),
|
CMD_EXE_ENA(crop_layer),
|
||||||
{ CMD_FRAME_PROPERTIES, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(frame_properties),
|
||||||
{ CMD_REMOVE_FRAME, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(remove_frame),
|
||||||
CMD_EXE_ENA(new_frame),
|
CMD_EXE_ENA(new_frame),
|
||||||
CMD_EXE_ENA(move_frame),
|
CMD_EXE_ENA(move_frame),
|
||||||
CMD_EXE_ENA(copy_frame),
|
CMD_EXE_ENA(copy_frame),
|
||||||
|
@ -305,6 +305,8 @@ void gui_feedback(void)
|
|||||||
|
|
||||||
/* jmanager_dispatch_draw_messages(); */
|
/* jmanager_dispatch_draw_messages(); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rest(0); /* don't eat CPU... rest some time */
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_setup_screen(void)
|
void gui_setup_screen(void)
|
||||||
@ -686,7 +688,6 @@ static bool manager_msg_proc(JWidget widget, JMessage msg)
|
|||||||
|
|
||||||
case JM_IDLE:
|
case JM_IDLE:
|
||||||
gui_feedback();
|
gui_feedback();
|
||||||
rest(1); /* don't eat CPU... rest some time */
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case JM_CHAR: {
|
case JM_CHAR: {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
||||||
* Copyright (C) 2001-2005 David A. Capello
|
* Copyright (C) 2001-2005, 2007 David A. Capello
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
@ -42,7 +42,7 @@ void stock_free(Stock *stock);
|
|||||||
|
|
||||||
int stock_add_image(Stock *stock, struct Image *image);
|
int stock_add_image(Stock *stock, struct Image *image);
|
||||||
void stock_remove_image(Stock *stock, struct Image *image);
|
void stock_remove_image(Stock *stock, struct Image *image);
|
||||||
void stock_replace_image(Stock *stock, int index, Image *image);
|
void stock_replace_image(Stock *stock, int index, struct Image *image);
|
||||||
|
|
||||||
struct Image *stock_get_image(Stock *stock, int index);
|
struct Image *stock_get_image(Stock *stock, int index);
|
||||||
|
|
||||||
|
@ -6284,66 +6284,6 @@ void register_bindings(lua_State *L)
|
|||||||
/* Lua -> C */
|
/* Lua -> C */
|
||||||
/*======================================================================*/
|
/*======================================================================*/
|
||||||
|
|
||||||
const char *GetUniqueLayerName(void)
|
|
||||||
{
|
|
||||||
lua_State *L = get_lua_state();
|
|
||||||
const char *return_value;
|
|
||||||
lua_pushstring(L, "GetUniqueLayerName");
|
|
||||||
lua_gettable(L, LUA_GLOBALSINDEX);
|
|
||||||
do_script_raw(L, 0, 1);
|
|
||||||
return_value = lua_tostring(L, -1);
|
|
||||||
lua_pop(L, 1);
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Layer *NewLayer(const char *name, int x, int y, int w, int h)
|
|
||||||
{
|
|
||||||
lua_State *L = get_lua_state();
|
|
||||||
Layer *return_value;
|
|
||||||
lua_pushstring(L, "NewLayer");
|
|
||||||
lua_gettable(L, LUA_GLOBALSINDEX);
|
|
||||||
lua_pushstring(L, name);
|
|
||||||
lua_pushnumber(L, x);
|
|
||||||
lua_pushnumber(L, y);
|
|
||||||
lua_pushnumber(L, w);
|
|
||||||
lua_pushnumber(L, h);
|
|
||||||
do_script_raw(L, 5, 1);
|
|
||||||
return_value = to_userdata(L, Type_Layer, -1);
|
|
||||||
lua_pop(L, 1);
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
Layer *NewLayerSet(const char *name)
|
|
||||||
{
|
|
||||||
lua_State *L = get_lua_state();
|
|
||||||
Layer *return_value;
|
|
||||||
lua_pushstring(L, "NewLayerSet");
|
|
||||||
lua_gettable(L, LUA_GLOBALSINDEX);
|
|
||||||
lua_pushstring(L, name);
|
|
||||||
do_script_raw(L, 1, 1);
|
|
||||||
return_value = to_userdata(L, Type_Layer, -1);
|
|
||||||
lua_pop(L, 1);
|
|
||||||
return return_value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveLayer(void)
|
|
||||||
{
|
|
||||||
lua_State *L = get_lua_state();
|
|
||||||
lua_pushstring(L, "RemoveLayer");
|
|
||||||
lua_gettable(L, LUA_GLOBALSINDEX);
|
|
||||||
do_script_raw(L, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RemoveFrame(Layer *layer, Frame *frame)
|
|
||||||
{
|
|
||||||
lua_State *L = get_lua_state();
|
|
||||||
lua_pushstring(L, "RemoveFrame");
|
|
||||||
lua_gettable(L, LUA_GLOBALSINDEX);
|
|
||||||
push_userdata(L, Type_Layer, layer);
|
|
||||||
push_userdata(L, Type_Frame, frame);
|
|
||||||
do_script_raw(L, 2, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void MaskAll(void)
|
void MaskAll(void)
|
||||||
{
|
{
|
||||||
lua_State *L = get_lua_state();
|
lua_State *L = get_lua_state();
|
||||||
|
@ -10,16 +10,6 @@
|
|||||||
#include "raster/layer.h"
|
#include "raster/layer.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
/* layer.lua */
|
|
||||||
const char *GetUniqueLayerName(void);
|
|
||||||
|
|
||||||
Layer *NewLayer(const char *name, int x, int y, int w, int h);
|
|
||||||
Layer *NewLayerSet(const char *name);
|
|
||||||
void RemoveLayer(void);
|
|
||||||
|
|
||||||
/* remfrm.lua */
|
|
||||||
void RemoveFrame(Layer *layer, Frame *frame);
|
|
||||||
|
|
||||||
/* mask.lua */
|
/* mask.lua */
|
||||||
void MaskAll(void);
|
void MaskAll(void);
|
||||||
void DeselectMask(void);
|
void DeselectMask(void);
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
#include "raster/stock.h"
|
#include "raster/stock.h"
|
||||||
#include "raster/undo.h"
|
#include "raster/undo.h"
|
||||||
#include "script/import.h"
|
#include "script/functions.h"
|
||||||
#include "util/frmove.h"
|
#include "util/frmove.h"
|
||||||
#include "widgets/colbar.h"
|
#include "widgets/colbar.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user