]> code.delx.au - gnu-emacs/blobdiff - test/manual/etags/lua-src/allegro.lua
Rename all test files to reflect source layout.
[gnu-emacs] / test / manual / etags / lua-src / allegro.lua
diff --git a/test/manual/etags/lua-src/allegro.lua b/test/manual/etags/lua-src/allegro.lua
new file mode 100644 (file)
index 0000000..c316b6f
--- /dev/null
@@ -0,0 +1,282 @@
+-- ase -- allegro-sprite-editor: the ultimate sprites factory
+-- Copyright (C) 2001-2004 by David A. Capello
+--
+-- Read "LEGAL.txt" for more information.
+
+-- internal routine
+local function get_layer_by_name (sprite, layer, name)
+  if layer.readable == false then
+    return nil;
+  end
+
+  if layer.name and strcmp (layer.name, name) == 0 then
+    return layer;
+  end
+
+  if layer_is_set (layer) then
+    local it, sub;
+
+    it = layer.layers;
+    while it do
+      sub = get_layer_by_name (sprite, it, name)
+      if sub then
+       return sub;
+      end
+      it = it.next
+    end
+  end
+
+  return nil;
+end
+
+-- 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
+
+-- Layer *GetLayerByName (const char *name);
+function GetLayerByName (name)
+  local sprite = current_sprite;
+
+  if sprite and name then
+    return get_layer_by_name (sprite, sprite.set, name);
+  else
+    return nil;
+  end
+end
+
+-- const char *GetUniqueLayerName (void);
+function GetUniqueLayerName ()
+  local sprite = current_sprite;
+
+  if sprite then
+    return _("Layer") .. " " .. count_layers (sprite.set);
+  else
+    return nil;
+  end
+end
+
+-- void SelectLayer (Layer *layer);
+function SelectLayer (layer)
+  if current_sprite then
+    sprite_set_layer (current_sprite, layer);
+  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_image_new (sprite.imgtype, w, h);
+    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 frame (XXX in the current frpos? --dacap)
+    frame = frame_new (sprite.frpos, index, x, y, 255);
+
+    -- 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
+
+-- void RemoveLayer (void);
+-- 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
+
+-- void MoveLayerTop (void);
+-- moves the current layer in the top of the main set
+function MoveLayerTop ()
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+
+    layer_remove_layer (layer.parent, layer);
+
+    layer_add_layer (current_sprite.set, layer);
+  end
+end
+
+-- void MoveLayerBottom (void);
+-- moves the current layer in the bottom of the main set
+function MoveLayerBottom ()
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+
+    layer_remove_layer (layer.parent, layer);
+
+    layer_add_layer (current_sprite.set, layer);
+    layer_move_layer (current_sprite.set, layer, nil);
+  end
+end
+
+-- void MoveLayerBefore (Layer *this_one);
+-- moves the current layer above the layer "this_one"
+function MoveLayerBefore (this_one)
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+    local layer_dest;
+
+    if not this_one then
+      layer_dest = current_sprite.set;
+    else
+      layer_dest = this_one;
+    end
+
+    if layer_dest then
+      layer_remove_layer (layer.parent, layer);
+      layer_add_layer (layer_dest.parent, layer);
+      layer_move_layer (layer_dest.parent, layer, layer_dest);
+    end
+  end
+end
+
+-- void MoveLayerAfter (Layer *this_one);
+-- moves the current layer below the layer "this_one" (if that layer
+-- is a set, the layer is put in the top of the layer set)
+function MoveLayerAfter (this_one)
+  if current_sprite and current_sprite.layer then
+    local layer = current_sprite.layer;
+    local layer_dest;
+
+    if not this_one then
+      layer_dest = current_sprite.set;
+    else
+      layer_dest = this_one;
+    end
+
+    if layer_dest then
+      layer_remove_layer (layer.parent, layer);
+
+      -- insert in the first position of the set
+      if layer_is_set (layer_dest) then
+       layer_add_layer (layer_dest, layer);
+      -- insert below the layer
+      else
+       layer_add_layer (layer_dest.parent, layer);
+       layer_move_layer (layer_dest.parent, layer, layer_dest.prev);
+      end
+    end
+  end
+end