More commands transformed from Lua code to C

This commit is contained in:
David Capello 2007-11-09 04:10:19 +00:00
parent 36f861ddd7
commit 89e2452ed0
31 changed files with 632 additions and 875 deletions

View File

@ -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>
* 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_convolution_matrix.c: Done. Removed src/dialogs/effect/dconvmtr.c

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -143,6 +143,7 @@ ASE_SOURCES = \
src/raster/stock.c \
src/raster/undo.c \
src/script/bindings.c \
src/script/functions.c \
src/script/script.c \
src/util/autocrop.c \
src/util/boundary.c \

View File

@ -23,11 +23,82 @@
#include "jinete.h"
#include "core/app.h"
#include "core/cfg.h"
#include "modules/gui.h"
#include "modules/palette.h"
#include "modules/sprites.h"
#include "raster/image.h"
#include "raster/quant.h"
#include "raster/sprite.h"
#endif
bool command_enabled_change_image_type(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -22,12 +22,64 @@
#include "jinete.h"
#include "console/console.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#include "raster/undo.h"
#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)
{
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;
}

View File

@ -20,14 +20,67 @@
#ifndef USE_PRECOMPILED_HEADER
#include <allegro.h>
#include "jinete.h"
#include "core/app.h"
#include "core/cfg.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/sprite.h"
#endif
bool command_enabled_duplicate_sprite(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -20,14 +20,17 @@
#ifndef USE_PRECOMPILED_HEADER
#include "jinete.h"
#include "core/app.h"
#include "modules/sprites.h"
#include "raster/sprite.h"
#include "script/functions.h"
#endif
bool command_enabled_flatten_layers(const char *argument)
{
return current_sprite != NULL;
}
void command_execute_flatten_layers(const char *argument)
{
FlattenLayers();
}

View File

@ -23,11 +23,110 @@
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/frame.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#include "raster/undo.h"
#endif
bool command_enabled_frame_properties(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -23,11 +23,99 @@
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#endif
bool command_enabled_layer_properties(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -23,11 +23,123 @@
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/frame.h"
#include "raster/image.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#include "raster/stock.h"
#include "raster/undo.h"
#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)
{
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);
}

View File

@ -23,11 +23,55 @@
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#endif
bool command_enabled_new_layer(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -23,11 +23,39 @@
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#endif
bool command_enabled_new_layer_set(const char *argument)
{
return current_sprite != NULL;
}
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);
}

View File

@ -20,14 +20,26 @@
#ifndef USE_PRECOMPILED_HEADER
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/frame.h"
#include "raster/layer.h"
#include "raster/sprite.h"
#include "script/functions.h"
#endif
bool command_enabled_remove_frame(const char *argument)
{
return current_sprite != NULL;
}
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);
}
}

View File

@ -20,14 +20,19 @@
#ifndef USE_PRECOMPILED_HEADER
#include "jinete.h"
#include "core/app.h"
#include "modules/gui.h"
#include "modules/sprites.h"
#include "raster/sprite.h"
#endif
bool command_enabled_remove_layer(const char *argument)
{
return current_sprite != NULL;
}
void command_execute_remove_layer(const char *argument)
{
RemoveLayer();
GUI_Refresh(current_sprite);
}

View File

@ -85,24 +85,35 @@ void command_execute_preview_tiled(const char *argument);
/* sprite */
bool command_enabled_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);
bool command_enabled_change_image_type(const char *argument);
void command_execute_change_image_type(const char *argument);
bool command_enabled_crop_sprite(const char *argument);
void command_execute_crop_sprite(const char *argument);
bool command_enabled_autocrop_sprite(const char *argument);
void command_execute_autocrop_sprite(const char *argument);
/* layer */
bool command_enabled_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);
bool command_enabled_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);
bool command_enabled_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);
bool command_enabled_flatten_layers(const char *argument);
void command_execute_flatten_layers(const char *argument);
bool command_enabled_crop_layer(const char *argument);
void command_execute_crop_layer(const char *argument);
/* frame */
bool command_enabled_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);
bool command_enabled_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_fit_to_screen, preview),
CMD_EXE_ENA(sprite_properties),
{ CMD_DUPLICATE_SPRITE, NULL, NULL, NULL, NULL },
{ CMD_CHANGE_IMAGE_TYPE, NULL, NULL, NULL, NULL },
CMD_EXE_ENA(duplicate_sprite),
CMD_EXE_ENA(change_image_type),
CMD_EXE_ENA(crop_sprite),
CMD_EXE_ENA(autocrop_sprite),
{ CMD_LAYER_PROPERTIES, NULL, NULL, NULL, NULL },
{ CMD_NEW_LAYER, NULL, NULL, NULL, NULL },
{ CMD_NEW_LAYER_SET, NULL, NULL, NULL, NULL },
{ CMD_REMOVE_LAYER, NULL, NULL, NULL, NULL },
{ CMD_DUPLICATE_LAYER, NULL, NULL, NULL, NULL },
{ CMD_MERGE_DOWN_LAYER, NULL, NULL, NULL, NULL },
{ CMD_FLATTEN_LAYERS, NULL, NULL, NULL, NULL },
CMD_EXE_ENA(layer_properties),
CMD_EXE_ENA(new_layer),
CMD_EXE_ENA(new_layer_set),
CMD_EXE_ENA(remove_layer),
CMD_EXE_ENA(duplicate_layer),
CMD_EXE_ENA(merge_down_layer),
CMD_EXE_ENA(flatten_layers),
CMD_EXE_ENA(crop_layer),
{ CMD_FRAME_PROPERTIES, NULL, NULL, NULL, NULL },
{ CMD_REMOVE_FRAME, NULL, NULL, NULL, NULL },
CMD_EXE_ENA(frame_properties),
CMD_EXE_ENA(remove_frame),
CMD_EXE_ENA(new_frame),
CMD_EXE_ENA(move_frame),
CMD_EXE_ENA(copy_frame),

View File

@ -305,6 +305,8 @@ void gui_feedback(void)
/* jmanager_dispatch_draw_messages(); */
}
rest(0); /* don't eat CPU... rest some time */
}
void gui_setup_screen(void)
@ -686,7 +688,6 @@ static bool manager_msg_proc(JWidget widget, JMessage msg)
case JM_IDLE:
gui_feedback();
rest(1); /* don't eat CPU... rest some time */
break;
case JM_CHAR: {

View File

@ -1,5 +1,5 @@
/* 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
* it under the terms of the GNU General Public License as published by
@ -29,14 +29,14 @@ enum {
struct Image;
struct Image *image_set_imgtype (struct Image *image, int imgtype,
int dithering_method,
RGB_MAP *rgb_map,
RGB *palette);
struct Image *image_set_imgtype(struct Image *image, int imgtype,
int dithering_method,
RGB_MAP *rgb_map,
RGB *palette);
struct Image *image_rgb_to_indexed (struct Image *src_image,
int offsetx, int offsety,
RGB_MAP *rgb_map,
RGB *palette);
struct Image *image_rgb_to_indexed(struct Image *src_image,
int offsetx, int offsety,
RGB_MAP *rgb_map,
RGB *palette);
#endif /* RASTER_QUANT_H */

View File

@ -42,7 +42,7 @@ void stock_free(Stock *stock);
int stock_add_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);

View File

@ -6284,66 +6284,6 @@ void register_bindings(lua_State *L)
/* 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)
{
lua_State *L = get_lua_state();

View File

@ -10,16 +10,6 @@
#include "raster/layer.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 */
void MaskAll(void);
void DeselectMask(void);

View File

@ -32,7 +32,7 @@
#include "raster/sprite.h"
#include "raster/stock.h"
#include "raster/undo.h"
#include "script/import.h"
#include "script/functions.h"
#include "util/frmove.h"
#include "widgets/colbar.h"