mirror of https://github.com/aseprite/aseprite.git
Added all mask/selection commands.
Added all commands to select a tool. Fixed a bug when setting the grid. The about dialog shows AUTHORS.txt
This commit is contained in:
parent
5097767564
commit
ce25bfaac4
|
@ -3,8 +3,7 @@ AUTHOR
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
David A. Capello <dacap@users.sourceforge.net>
|
David A. Capello <dacap@users.sourceforge.net>
|
||||||
Programmer, design, graphics, tester, and the maintainer of the package.
|
Programmer, design, graphics, tester and the maintainer.
|
||||||
Releases the DOS, Windows, and source distributions.
|
|
||||||
|
|
||||||
===================================
|
===================================
|
||||||
THANKFULNESS
|
THANKFULNESS
|
||||||
|
@ -135,7 +134,7 @@ THANKFULNESS
|
||||||
Jorge Ramírez Flores
|
Jorge Ramírez Flores
|
||||||
Juraj Michalek
|
Juraj Michalek
|
||||||
Manuel De Miguel Moreno
|
Manuel De Miguel Moreno
|
||||||
Manuel Quiñones
|
Manuel Quiñones (manuq)
|
||||||
Mateusz Czaplinski
|
Mateusz Czaplinski
|
||||||
Nathan Smith (whitedoor)
|
Nathan Smith (whitedoor)
|
||||||
Peter Wang (tjaden)
|
Peter Wang (tjaden)
|
||||||
|
|
64
ChangeLog
64
ChangeLog
|
@ -1,5 +1,69 @@
|
||||||
|
2007-09-30 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* data/scripts/edit.lua: Removed.
|
||||||
|
|
||||||
|
* src/commands/cmd_refresh.c (command_execute_refresh): Added.
|
||||||
|
|
||||||
|
2007-09-29 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/dialogs/toolconf.c (dialogs_tools_configuration):
|
||||||
|
Removed (now all the code is in cmd_configure_tools.c).
|
||||||
|
|
||||||
|
* src/commands/cmd_about.c (command_execute_about): Now it show
|
||||||
|
the AUTHORS.txt file.
|
||||||
|
|
||||||
|
* data/scripts/selspr.lua: Removed.
|
||||||
|
|
||||||
|
* data/scripts/rootmenu.lua: Removed.
|
||||||
|
|
||||||
|
* src/util/scrshot.c: Removed.
|
||||||
|
|
||||||
|
* src/commands/cmd_screen_shot.c (command_execute_screen_shot): Done.
|
||||||
|
|
||||||
|
* src/commands/cmd_clear.c (command_execute_clear): Done.
|
||||||
|
|
||||||
|
* data/scripts/mask.lua: Removed.
|
||||||
|
|
||||||
|
* src/commands/cmd_invert_mask.c (command_execute_invert_mask): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_reselect_mask.c (command_execute_reselect_mask): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_deselect_mask.c (command_execute_deselect_mask): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_mask_all.c (command_execute_mask_all): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_mask_by_color.c (command_execute_mask_by_color): Added.
|
||||||
|
|
||||||
|
* src/dialogs/toolconf.c (set_grid_button_select_hook): Fixed a
|
||||||
|
bug using an invalid rectangle for set_grid().
|
||||||
|
|
||||||
|
* src/commands/cmd_drawing_tools.c: Added all commands to select
|
||||||
|
each tool.
|
||||||
|
|
||||||
|
2007-09-28 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/commands/cmd_load_mask.c (command_execute_load_mask): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_save_mask.c (command_execute_save_mask): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_copy.c (command_execute_copy): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_cut.c (command_execute_cut): Added.
|
||||||
|
|
||||||
|
* src/file/gif.c (save_GIF): Better progress bar.
|
||||||
|
|
||||||
|
* src/core/shutdown.c: Removed (it was only for sessions).
|
||||||
|
|
||||||
|
* src/util/session.c: Removed all session stuff.
|
||||||
|
|
||||||
|
* src/commands/cmd_save_file.c (command_execute_save_file): Added.
|
||||||
|
|
||||||
2007-09-27 David A. Capello <dacap@users.sourceforge.net>
|
2007-09-27 David A. Capello <dacap@users.sourceforge.net>
|
||||||
|
|
||||||
|
* src/commands/cmd_undo.c (command_execute_undo): Added.
|
||||||
|
|
||||||
|
* src/commands/cmd_redo.c (command_execute_redo): Added.
|
||||||
|
|
||||||
* jinete/src/jsystem.c (jmouse_poll): Now (in Windows) we continue
|
* jinete/src/jsystem.c (jmouse_poll): Now (in Windows) we continue
|
||||||
getting mouse feedback even when the cursor is outside of the
|
getting mouse feedback even when the cursor is outside of the
|
||||||
window.
|
window.
|
||||||
|
|
6
NEWS.txt
6
NEWS.txt
|
@ -2,13 +2,17 @@
|
||||||
NEWS
|
NEWS
|
||||||
===================================
|
===================================
|
||||||
|
|
||||||
0.9
|
0.6
|
||||||
---
|
---
|
||||||
|
|
||||||
+ Restructured all the menus (more user friendly options).
|
+ Restructured all the menus (more user friendly options).
|
||||||
|
- Temporaly removed a lot of complex functionality:
|
||||||
|
Mask-Repository (but you can use .msk files yet), Draw-Text,
|
||||||
|
Play-FLI/FLC.
|
||||||
+ New XML format for the menus.
|
+ New XML format for the menus.
|
||||||
- Removed menu scripting customization.
|
- Removed menu scripting customization.
|
||||||
- Removed screen saver.
|
- Removed screen saver.
|
||||||
|
- Removed sessions.
|
||||||
+ GUI enhanced:
|
+ GUI enhanced:
|
||||||
+ more borders for windows and more spacing between widgets.
|
+ more borders for windows and more spacing between widgets.
|
||||||
+ better mouse behavior (in Windows).
|
+ better mouse behavior (in Windows).
|
||||||
|
|
|
@ -71,8 +71,6 @@ FEATURES
|
||||||
|
|
||||||
- Unique tiled drawing mode to draw patterns and textures in seconds.
|
- Unique tiled drawing mode to draw patterns and textures in seconds.
|
||||||
|
|
||||||
- Save and load entire work's sessions (in `.ses' files).
|
|
||||||
|
|
||||||
- Scripting capabilities with Lua language (http://www.lua.org).
|
- Scripting capabilities with Lua language (http://www.lua.org).
|
||||||
|
|
||||||
|
|
||||||
|
|
1
all.h
1
all.h
|
@ -121,7 +121,6 @@
|
||||||
#include "util/quantize.h"
|
#include "util/quantize.h"
|
||||||
#include "util/recscr.h"
|
#include "util/recscr.h"
|
||||||
#include "util/scrshot.h"
|
#include "util/scrshot.h"
|
||||||
#include "util/session.h"
|
|
||||||
#include "util/setgfx.h"
|
#include "util/setgfx.h"
|
||||||
#include "util/thmbnail.h"
|
#include "util/thmbnail.h"
|
||||||
#include "widgets/colbar.h"
|
#include "widgets/colbar.h"
|
||||||
|
|
2
config.h
2
config.h
|
@ -24,7 +24,7 @@
|
||||||
|
|
||||||
/* general information */
|
/* general information */
|
||||||
#define PACKAGE "ase"
|
#define PACKAGE "ase"
|
||||||
#define VERSION "0.9"
|
#define VERSION "0.6"
|
||||||
#define WEBSITE "http://ase.sourceforge.net/"
|
#define WEBSITE "http://ase.sourceforge.net/"
|
||||||
#define BUGREPORT "ase-help@lists.sourceforge.net"
|
#define BUGREPORT "ase-help@lists.sourceforge.net"
|
||||||
#define COPYRIGHT "Copyright (C) 2001-2005, 2007 David A. Capello"
|
#define COPYRIGHT "Copyright (C) 2001-2005, 2007 David A. Capello"
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
<key command="spray_tool" shortcut="S" />
|
<key command="spray_tool" shortcut="S" />
|
||||||
<key command="floodfill_tool" shortcut="F" />
|
<key command="floodfill_tool" shortcut="F" />
|
||||||
<key command="line_tool" shortcut="L" />
|
<key command="line_tool" shortcut="L" />
|
||||||
|
<key command="bezier_tool" shortcut="V" />
|
||||||
<key command="rectangle_tool" shortcut="R" />
|
<key command="rectangle_tool" shortcut="R" />
|
||||||
<key command="ellipse_tool" shortcut="E" />
|
<key command="ellipse_tool" shortcut="E" />
|
||||||
<key command="film_editor" shortcut="Tab" />
|
<key command="film_editor" shortcut="Tab" />
|
||||||
|
@ -85,10 +86,6 @@
|
||||||
<item command="screen_shot" name="Screen Shot" />
|
<item command="screen_shot" name="Screen Shot" />
|
||||||
<item command="record_screen" name="Record Screen" />
|
<item command="record_screen" name="Record Screen" />
|
||||||
</menu>
|
</menu>
|
||||||
<menu name="Sessions">
|
|
||||||
<item command="load_session" name="Load Session" />
|
|
||||||
<item command="save_session" name="Save Session" />
|
|
||||||
</menu>
|
|
||||||
<separator />
|
<separator />
|
||||||
<item command="about" name="About" />
|
<item command="about" name="About" />
|
||||||
<item command="exit" name="E&xit" />
|
<item command="exit" name="E&xit" />
|
||||||
|
@ -170,9 +167,8 @@
|
||||||
<separator />
|
<separator />
|
||||||
<item command="mask_by_color" name="&Color Range" />
|
<item command="mask_by_color" name="&Color Range" />
|
||||||
<separator />
|
<separator />
|
||||||
<item command="mask_repository" name="Repositor&y" />
|
<item command="load_mask" name="&Load from MSK file" />
|
||||||
<item command="load_mask" name="&Load" />
|
<item command="save_mask" name="&Save to MSK file" />
|
||||||
<item command="save_mask" name="&Save" />
|
|
||||||
</menu>
|
</menu>
|
||||||
<menu name="&Tools">
|
<menu name="&Tools">
|
||||||
<menu name="&Drawing Tool">
|
<menu name="&Drawing Tool">
|
||||||
|
@ -186,10 +182,10 @@
|
||||||
<item command="floodfill_tool" name="&Floodfill" />
|
<item command="floodfill_tool" name="&Floodfill" />
|
||||||
<separator />
|
<separator />
|
||||||
<item command="line_tool" name="&Line" />
|
<item command="line_tool" name="&Line" />
|
||||||
|
<!-- <item command="bezier_tool" name="&Bezier" /> -->
|
||||||
<item command="rectangle_tool" name="&Rectangle" />
|
<item command="rectangle_tool" name="&Rectangle" />
|
||||||
<item command="ellipse_tool" name="&Ellipse" />
|
<item command="ellipse_tool" name="&Ellipse" />
|
||||||
<!-- <item name=# "&Oval" command=# "oval_tool" /> -->
|
<!-- <item command="oval_tool" name="&Oval" /> -->
|
||||||
<!-- <item name=# "&Bezier" command=# "bezier_tool" /> -->
|
|
||||||
</menu>
|
</menu>
|
||||||
<item command="film_editor" name="&Film Editor" />
|
<item command="film_editor" name="&Film Editor" />
|
||||||
<item command="palette_editor" name="&Palette Editor" />
|
<item command="palette_editor" name="&Palette Editor" />
|
||||||
|
@ -200,13 +196,14 @@
|
||||||
<separator />
|
<separator />
|
||||||
<item command="despeckle" name="&Despeckle (median filter)" />
|
<item command="despeckle" name="&Despeckle (median filter)" />
|
||||||
</menu>
|
</menu>
|
||||||
<item command="draw_text" name="Draw &Text" />
|
<!-- <item command="draw_text" name="Draw &Text" /> -->
|
||||||
<item command="play_flic" name="Pla&y FLI/FLC File" />
|
<!-- <item command="play_flic" name="Pla&y FLI/FLC File" /> -->
|
||||||
<item command="mapgen" name="&MapGen" />
|
<!-- <item command="mapgen" name="&MapGen" /> -->
|
||||||
<item command="run_script" name="Run &Script" />
|
<menu name="Scripting">
|
||||||
|
<item command="run_script" name="Run &Script" />
|
||||||
|
</menu>
|
||||||
<separator />
|
<separator />
|
||||||
<item command="tips" name="T&ips" />
|
<item command="tips" name="T&ips" />
|
||||||
<item command="customize" name="&Customize" />
|
|
||||||
<item command="options" name="&Options" />
|
<item command="options" name="&Options" />
|
||||||
</menu>
|
</menu>
|
||||||
<item id="sprite_list" name="L&ist" />
|
<item id="sprite_list" name="L&ist" />
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<!-- ase -- allegro-sprite-editor: the ultimate sprites factory -->
|
<!-- ase -- allegro-sprite-editor: the ultimate sprites factory -->
|
||||||
<!-- Copyright (C) 2001-2005 by David A. Capello -->
|
<!-- Copyright (C) 2001-2005, 2007 by David A. Capello -->
|
||||||
|
|
||||||
<!-- Read "LEGAL.txt" for more information. -->
|
<!-- Read "LEGAL.txt" for more information. -->
|
||||||
|
|
||||||
|
@ -42,9 +42,6 @@
|
||||||
</box>
|
</box>
|
||||||
</box>
|
</box>
|
||||||
|
|
||||||
<separator horizontal />
|
|
||||||
<check text=_("Ask to load backed up sessions") name="askbkpses" />
|
|
||||||
|
|
||||||
<box horizontal homogeneous>
|
<box horizontal homogeneous>
|
||||||
<button text=_("&OK") name="button_ok" magnetic />
|
<button text=_("&OK") name="button_ok" magnetic />
|
||||||
<button text=_("&Save") name="button_save" />
|
<button text=_("&Save") name="button_save" />
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function GUI_EditClear()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- clear the mask
|
|
||||||
ClearMask()
|
|
||||||
|
|
||||||
-- refresh the sprite
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
|
@ -1,229 +0,0 @@
|
||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
function MaskAll()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- change the selection
|
|
||||||
mask_replace(sprite.mask, 0, 0, sprite.w, sprite.h)
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
function DeselectMask()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite or mask_is_empty(sprite.mask) then return end
|
|
||||||
|
|
||||||
-- destroy the *deselected* mask
|
|
||||||
local mask = sprite_request_mask(sprite, "*deselected*")
|
|
||||||
if mask then
|
|
||||||
sprite_remove_mask(sprite, mask)
|
|
||||||
mask_free(mask)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- save the selection in the repository
|
|
||||||
local mask = mask_new_copy(sprite.mask)
|
|
||||||
mask_set_name(mask, "*deselected*")
|
|
||||||
sprite_add_mask(sprite, mask)
|
|
||||||
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- deselect the mask
|
|
||||||
mask_none(sprite.mask)
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
function ReselectMask()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- request *deselected* mask
|
|
||||||
local mask = sprite_request_mask(sprite, "*deselected*")
|
|
||||||
if mask then
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- set the mask
|
|
||||||
sprite_set_mask(sprite, mask)
|
|
||||||
|
|
||||||
-- remove the *deselected* mask
|
|
||||||
sprite_remove_mask(sprite, mask)
|
|
||||||
mask_free(mask)
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function InvertMask()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then return end
|
|
||||||
|
|
||||||
-- change the selection
|
|
||||||
|
|
||||||
if not sprite.mask.bitmap then
|
|
||||||
MaskAll()
|
|
||||||
else
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- create a new mask
|
|
||||||
local mask = mask_new()
|
|
||||||
|
|
||||||
-- select all the sprite area
|
|
||||||
mask_replace(mask, 0, 0, sprite.w, sprite.h)
|
|
||||||
|
|
||||||
-- remove in the new mask the current sprite marked region
|
|
||||||
image_rectfill(mask.bitmap,
|
|
||||||
sprite.mask.x, sprite.mask.y,
|
|
||||||
sprite.mask.x + sprite.mask.w-1,
|
|
||||||
sprite.mask.y + sprite.mask.h-1, 0)
|
|
||||||
|
|
||||||
-- invert the current mask in the sprite
|
|
||||||
mask_invert(sprite.mask)
|
|
||||||
if sprite.mask.bitmap then
|
|
||||||
-- copy the inverted region in the new mask
|
|
||||||
image_copy(mask.bitmap, sprite.mask.bitmap,
|
|
||||||
sprite.mask.x, sprite.mask.y)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- we need only need the area inside the sprite
|
|
||||||
mask_intersect(mask, 0, 0, sprite.w, sprite.h)
|
|
||||||
|
|
||||||
-- set the new mask
|
|
||||||
sprite_set_mask(sprite, mask)
|
|
||||||
mask_free(mask)
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function StretchMaskBottom()
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite or not sprite.mask.bitmap then return end
|
|
||||||
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
local x, y, bitmap, modified
|
|
||||||
|
|
||||||
bitmap = sprite.mask.bitmap
|
|
||||||
|
|
||||||
for y = 0, bitmap.h-2 do
|
|
||||||
modified = false
|
|
||||||
|
|
||||||
for x = 0, bitmap.w-1 do
|
|
||||||
if image_getpixel(bitmap, x, y) == 1 and
|
|
||||||
image_getpixel(bitmap, x, y+1) == 0 then
|
|
||||||
image_putpixel(bitmap, x, y+1, 1)
|
|
||||||
modified = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
if modified then
|
|
||||||
y = y+1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
mask_union(sprite.mask,
|
|
||||||
sprite.mask.x, sprite.mask.y+sprite.mask.h, sprite.mask.w, 1)
|
|
||||||
|
|
||||||
bitmap = sprite.mask.bitmap -- the bitmap could change in the union operation
|
|
||||||
y = bitmap.h-2
|
|
||||||
for x = 0, bitmap.w-1 do
|
|
||||||
if image_getpixel(bitmap, x, y) == 0 then
|
|
||||||
image_putpixel(bitmap, x, y+1, 0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_LoadMask()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local filename = ji_file_select(_("Load .msk File"), "", "msk")
|
|
||||||
if filename then
|
|
||||||
local mask = load_msk_file(filename)
|
|
||||||
if not mask then
|
|
||||||
jalert(_("Error<<Error loading .msk file").."<<"
|
|
||||||
..filename.."||".._("&Close"))
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- undo
|
|
||||||
if undo_is_enabled(sprite.undo) then
|
|
||||||
undo_set_mask(sprite.undo, sprite)
|
|
||||||
end
|
|
||||||
|
|
||||||
sprite_set_mask(sprite, mask)
|
|
||||||
mask_free(mask)
|
|
||||||
|
|
||||||
sprite_generate_mask_boundaries(sprite)
|
|
||||||
GUI_Refresh(sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI_SaveMask()
|
|
||||||
-- get current sprite
|
|
||||||
local sprite = current_sprite
|
|
||||||
if not sprite then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local filename = "default.msk"
|
|
||||||
local ret
|
|
||||||
|
|
||||||
while true do
|
|
||||||
filename = ji_file_select(_("Save .msk File"), filename, "msk")
|
|
||||||
if not filename then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
-- does the file exist?
|
|
||||||
if file_exists(filename) then
|
|
||||||
-- ask if the user wants overwrite the file?
|
|
||||||
ret = jalert(_("Warning").."<<".._("File exists, overwrite it?")
|
|
||||||
.."<<"..get_filename(filename)
|
|
||||||
.."||".._("&Yes||&No||&Cancel"))
|
|
||||||
else
|
|
||||||
break
|
|
||||||
end
|
|
||||||
|
|
||||||
-- "yes": we must continue with the operation...
|
|
||||||
if ret == 1 then
|
|
||||||
break
|
|
||||||
-- "cancel" or <esc> per example: we back doing nothing
|
|
||||||
elseif ret != 2 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
-- "no": we must back to select other file-name */
|
|
||||||
end
|
|
||||||
|
|
||||||
if save_msk_file(sprite.mask, filename) != 0 then
|
|
||||||
jalert("Error<<Error saving .msk file<<"..filename.."||&Close")
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,9 +0,0 @@
|
||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005, 2007 by David A. Capello
|
|
||||||
|
|
||||||
function rebuild_root_menu_with_alert()
|
|
||||||
if jalert(_("Warning<<If you try to reload the root-menu<<you will lost the current one.<<Do you want continue?||&Load||&Cancel"))
|
|
||||||
== 1 then
|
|
||||||
rebuild_root_menu()
|
|
||||||
end
|
|
||||||
end
|
|
|
@ -1,29 +0,0 @@
|
||||||
-- ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
-- Copyright (C) 2001-2005 by David A. Capello
|
|
||||||
|
|
||||||
-- shows a sprite by its ID
|
|
||||||
function ShowSpriteByID(sprite_id)
|
|
||||||
local sprite = nil
|
|
||||||
|
|
||||||
-- is not the null sprite?
|
|
||||||
if sprite_id != 0 then
|
|
||||||
local clipboard = get_clipboard_sprite()
|
|
||||||
|
|
||||||
-- the clipboard?
|
|
||||||
if clipboard and sprite_id == clipboard.id then
|
|
||||||
sprite = clipboard
|
|
||||||
-- some sprite in the list?
|
|
||||||
else
|
|
||||||
sprite = get_first_sprite()
|
|
||||||
|
|
||||||
while sprite do
|
|
||||||
if sprite.id == sprite_id then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
sprite = get_next_sprite(sprite)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
set_sprite_in_current_editor(sprite)
|
|
||||||
end
|
|
|
@ -687,7 +687,9 @@ Sprite
|
||||||
|
|
||||||
@@bool @sprite_is_modified (Sprite *sprite);
|
@@bool @sprite_is_modified (Sprite *sprite);
|
||||||
|
|
||||||
@@void @sprite_was_saved (Sprite *sprite);
|
@@bool @sprite_is_associated_to_file (Sprite *sprite);
|
||||||
|
|
||||||
|
@@void @sprite_mark_as_saved (Sprite *sprite);
|
||||||
|
|
||||||
@@void @sprite_set_filename (Sprite *sprite, const char *filename);
|
@@void @sprite_set_filename (Sprite *sprite, const char *filename);
|
||||||
|
|
||||||
|
|
|
@ -417,7 +417,7 @@ static void update_mouse_position(void)
|
||||||
#ifdef ALLEGRO_WINDOWS
|
#ifdef ALLEGRO_WINDOWS
|
||||||
/* this help us (in windows) to get mouse feedback when we capture
|
/* this help us (in windows) to get mouse feedback when we capture
|
||||||
the mouse but we are outside the Allegro window */
|
the mouse but we are outside the Allegro window */
|
||||||
{
|
if (is_windowed_mode()) {
|
||||||
POINT pt;
|
POINT pt;
|
||||||
RECT rc;
|
RECT rc;
|
||||||
|
|
||||||
|
|
|
@ -1184,9 +1184,9 @@ static void theme_draw_slider (JWidget widget)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void theme_draw_textbox (JWidget widget)
|
static void theme_draw_textbox(JWidget widget)
|
||||||
{
|
{
|
||||||
_ji_theme_textbox_draw (ji_screen, widget, NULL, NULL);
|
_ji_theme_textbox_draw(ji_screen, widget, NULL, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void theme_draw_view(JWidget widget)
|
static void theme_draw_view(JWidget widget)
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Copyright (C) 2001-2005 by David A. Capello -*-Makefile-*-
|
# Copyright (C) 2001-2005, 2007 by David A. Capello -*-Makefile-*-
|
||||||
|
|
||||||
ifndef CONFIGURED
|
ifndef CONFIGURED
|
||||||
include makefile.cfg
|
include makefile.cfg
|
||||||
|
@ -49,6 +49,7 @@ distclean: clean
|
||||||
install:
|
install:
|
||||||
cp ase $(DEFAULT_PREFIX)/bin
|
cp ase $(DEFAULT_PREFIX)/bin
|
||||||
cp -r data $(DEFAULT_PREFIX)/share/ase
|
cp -r data $(DEFAULT_PREFIX)/share/ase
|
||||||
|
cp AUTHORS.txt $(DEFAULT_PREFIX)/share/ase
|
||||||
|
|
||||||
uninstall:
|
uninstall:
|
||||||
-rm -vf $(DEFAULT_PREFIX)/bin/ase
|
-rm -vf $(DEFAULT_PREFIX)/bin/ase
|
||||||
|
|
|
@ -21,7 +21,6 @@ ASE_SOURCES = \
|
||||||
src/commands/cmd_crop_frame.c \
|
src/commands/cmd_crop_frame.c \
|
||||||
src/commands/cmd_crop_layer.c \
|
src/commands/cmd_crop_layer.c \
|
||||||
src/commands/cmd_crop_sprite.c \
|
src/commands/cmd_crop_sprite.c \
|
||||||
src/commands/cmd_customize.c \
|
|
||||||
src/commands/cmd_cut.c \
|
src/commands/cmd_cut.c \
|
||||||
src/commands/cmd_deselect_mask.c \
|
src/commands/cmd_deselect_mask.c \
|
||||||
src/commands/cmd_despeckle.c \
|
src/commands/cmd_despeckle.c \
|
||||||
|
@ -41,11 +40,9 @@ ASE_SOURCES = \
|
||||||
src/commands/cmd_layer_properties.c \
|
src/commands/cmd_layer_properties.c \
|
||||||
src/commands/cmd_link_frame.c \
|
src/commands/cmd_link_frame.c \
|
||||||
src/commands/cmd_load_mask.c \
|
src/commands/cmd_load_mask.c \
|
||||||
src/commands/cmd_load_session.c \
|
|
||||||
src/commands/cmd_mapgen.c \
|
src/commands/cmd_mapgen.c \
|
||||||
src/commands/cmd_mask_all.c \
|
src/commands/cmd_mask_all.c \
|
||||||
src/commands/cmd_mask_by_color.c \
|
src/commands/cmd_mask_by_color.c \
|
||||||
src/commands/cmd_mask_repository.c \
|
|
||||||
src/commands/cmd_merge_down_layer.c \
|
src/commands/cmd_merge_down_layer.c \
|
||||||
src/commands/cmd_move_frame.c \
|
src/commands/cmd_move_frame.c \
|
||||||
src/commands/cmd_new_file.c \
|
src/commands/cmd_new_file.c \
|
||||||
|
@ -71,7 +68,6 @@ ASE_SOURCES = \
|
||||||
src/commands/cmd_save_file.c \
|
src/commands/cmd_save_file.c \
|
||||||
src/commands/cmd_save_file_as.c \
|
src/commands/cmd_save_file_as.c \
|
||||||
src/commands/cmd_save_mask.c \
|
src/commands/cmd_save_mask.c \
|
||||||
src/commands/cmd_save_session.c \
|
|
||||||
src/commands/cmd_screen_shot.c \
|
src/commands/cmd_screen_shot.c \
|
||||||
src/commands/cmd_select_file.c \
|
src/commands/cmd_select_file.c \
|
||||||
src/commands/cmd_sprite_properties.c \
|
src/commands/cmd_sprite_properties.c \
|
||||||
|
@ -85,7 +81,6 @@ ASE_SOURCES = \
|
||||||
src/core/core.c \
|
src/core/core.c \
|
||||||
src/core/dirs.c \
|
src/core/dirs.c \
|
||||||
src/core/modules.c \
|
src/core/modules.c \
|
||||||
src/core/shutdown.c \
|
|
||||||
src/dialogs/canvasze.c \
|
src/dialogs/canvasze.c \
|
||||||
src/dialogs/colsel.c \
|
src/dialogs/colsel.c \
|
||||||
src/dialogs/dfrlen.c \
|
src/dialogs/dfrlen.c \
|
||||||
|
@ -101,7 +96,6 @@ ASE_SOURCES = \
|
||||||
src/dialogs/filmedit.c \
|
src/dialogs/filmedit.c \
|
||||||
src/dialogs/gfxsel.c \
|
src/dialogs/gfxsel.c \
|
||||||
src/dialogs/maskcol.c \
|
src/dialogs/maskcol.c \
|
||||||
src/dialogs/maskrepo.c \
|
|
||||||
src/dialogs/minipal.c \
|
src/dialogs/minipal.c \
|
||||||
src/dialogs/options.c \
|
src/dialogs/options.c \
|
||||||
src/dialogs/playfli.c \
|
src/dialogs/playfli.c \
|
||||||
|
@ -109,7 +103,6 @@ ASE_SOURCES = \
|
||||||
src/dialogs/repo.c \
|
src/dialogs/repo.c \
|
||||||
src/dialogs/scrsaver.c \
|
src/dialogs/scrsaver.c \
|
||||||
src/dialogs/tips.c \
|
src/dialogs/tips.c \
|
||||||
src/dialogs/toolconf.c \
|
|
||||||
src/dialogs/vectmap.c \
|
src/dialogs/vectmap.c \
|
||||||
src/effect/colcurve.c \
|
src/effect/colcurve.c \
|
||||||
src/effect/convmatr.c \
|
src/effect/convmatr.c \
|
||||||
|
@ -176,8 +169,6 @@ ASE_SOURCES = \
|
||||||
src/util/pic_file.c \
|
src/util/pic_file.c \
|
||||||
src/util/quantize.c \
|
src/util/quantize.c \
|
||||||
src/util/recscr.c \
|
src/util/recscr.c \
|
||||||
src/util/scrshot.c \
|
|
||||||
src/util/session.c \
|
|
||||||
src/util/setgfx.c \
|
src/util/setgfx.c \
|
||||||
src/util/thmbnail.c \
|
src/util/thmbnail.c \
|
||||||
src/widgets/colbar.c \
|
src/widgets/colbar.c \
|
||||||
|
|
|
@ -15,7 +15,8 @@ endif
|
||||||
# Flags for MinGW
|
# Flags for MinGW
|
||||||
|
|
||||||
CFLAGS =
|
CFLAGS =
|
||||||
LFLAGS = -mwindows
|
# LFLAGS = -mwindows
|
||||||
|
LFLAGS = -mconsole
|
||||||
ifdef DEBUGMODE
|
ifdef DEBUGMODE
|
||||||
LFLAGS_LAST = -lalld
|
LFLAGS_LAST = -lalld
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#! /bin/sh
|
#! /bin/sh
|
||||||
|
|
||||||
dir="`pwd`"
|
dir="`pwd`"
|
||||||
version=0.9
|
version=0.6
|
||||||
distdir=ase-$version
|
distdir=ase-$version
|
||||||
|
|
||||||
freetype_files="jinete/freetype/ChangeLog \
|
freetype_files="jinete/freetype/ChangeLog \
|
||||||
|
@ -110,7 +110,6 @@ ase_files="all.h \
|
||||||
data/po/*.po \
|
data/po/*.po \
|
||||||
data/scripts/*.lua \
|
data/scripts/*.lua \
|
||||||
data/scripts/examples/*.lua \
|
data/scripts/examples/*.lua \
|
||||||
data/session/*.txt \
|
|
||||||
data/tips/*.pcx \
|
data/tips/*.pcx \
|
||||||
data/tips/tips.en \
|
data/tips/tips.en \
|
||||||
data/tips/tips.es \
|
data/tips/tips.es \
|
||||||
|
@ -190,7 +189,6 @@ $1/data/menus.es \
|
||||||
$1/data/po/es.po \
|
$1/data/po/es.po \
|
||||||
$1/data/scripts/*.lua \
|
$1/data/scripts/*.lua \
|
||||||
$1/data/scripts/examples/*.lua \
|
$1/data/scripts/examples/*.lua \
|
||||||
$1/data/session/*.txt \
|
|
||||||
$1/data/tips/*.en \
|
$1/data/tips/*.en \
|
||||||
$1/data/tips/*.es \
|
$1/data/tips/*.es \
|
||||||
$1/docs/*.html \
|
$1/docs/*.html \
|
||||||
|
|
|
@ -20,32 +20,112 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
|
#include <allegro.h>
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete.h"
|
||||||
|
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
|
#include "core/dirs.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static char *read_authors_txt(const char *filename);
|
||||||
|
|
||||||
void command_execute_about(const char *argument)
|
void command_execute_about(const char *argument)
|
||||||
{
|
{
|
||||||
JWidget window, box1, label1, label2, label3, label4;
|
JWidget window, box1, label1, label2, separator1;
|
||||||
JWidget separator1, button1;
|
JWidget textbox, view, separator2;
|
||||||
|
JWidget label3, label4, box2, box3, box4, button1;
|
||||||
|
char *authors_txt = read_authors_txt("AUTHORS.txt");
|
||||||
|
|
||||||
|
if (authors_txt)
|
||||||
|
window = jwindow_new_desktop();
|
||||||
|
else
|
||||||
|
window = jwindow_new(_("About ASE"));
|
||||||
|
|
||||||
window = jwindow_new(_("About ASE"));
|
|
||||||
box1 = jbox_new(JI_VERTICAL);
|
box1 = jbox_new(JI_VERTICAL);
|
||||||
label1 = jlabel_new("Allegro Sprite Editor - " VERSION);
|
label1 = jlabel_new("Allegro Sprite Editor - " VERSION);
|
||||||
label2 = jlabel_new(_("The Ultimate Sprites Factory"));
|
label2 = jlabel_new(_("The Ultimate Sprites Factory"));
|
||||||
separator1 = ji_separator_new(NULL, JI_HORIZONTAL);
|
separator1 = ji_separator_new(NULL, JI_HORIZONTAL);
|
||||||
|
|
||||||
|
if (authors_txt) {
|
||||||
|
view = jview_new();
|
||||||
|
textbox = jtextbox_new(authors_txt, JI_LEFT);
|
||||||
|
separator2 = ji_separator_new(NULL, JI_HORIZONTAL);
|
||||||
|
jfree(authors_txt);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
view = textbox = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
label3 = jlabel_new(COPYRIGHT);
|
label3 = jlabel_new(COPYRIGHT);
|
||||||
label4 = jlabel_new("http://ase.sourceforge.net/");
|
label4 = jlabel_new("http://ase.sourceforge.net/");
|
||||||
|
box2 = jbox_new(JI_HORIZONTAL);
|
||||||
|
box3 = jbox_new(JI_HORIZONTAL);
|
||||||
|
box4 = jbox_new(JI_HORIZONTAL);
|
||||||
button1 = jbutton_new(_("&Close"));
|
button1 = jbutton_new(_("&Close"));
|
||||||
|
|
||||||
jwidget_magnetic(button1, TRUE);
|
jwidget_magnetic(button1, TRUE);
|
||||||
|
|
||||||
jwidget_add_childs(box1, label1, label2, separator1, label3, label4,
|
jwidget_add_childs(box1, label1, label2, separator1, NULL);
|
||||||
button1, NULL);
|
if (textbox) {
|
||||||
|
jview_attach(view, textbox);
|
||||||
|
jwidget_expansive(view, TRUE);
|
||||||
|
jwidget_set_static_size(view, JI_SCREEN_W/3, JI_SCREEN_H/4);
|
||||||
|
jwidget_add_childs(box1, view, separator2, NULL);
|
||||||
|
}
|
||||||
|
jwidget_expansive(box3, TRUE);
|
||||||
|
jwidget_expansive(box4, TRUE);
|
||||||
|
jwidget_add_childs(box2, box3, button1, box4, NULL);
|
||||||
|
jwidget_add_childs(box1, label3, label4, NULL);
|
||||||
|
jwidget_add_child(box1, box2);
|
||||||
jwidget_add_child(window, box1);
|
jwidget_add_child(window, box1);
|
||||||
|
|
||||||
|
jwidget_set_border(button1,
|
||||||
|
button1->border_width.l+16,
|
||||||
|
button1->border_width.t,
|
||||||
|
button1->border_width.r+16,
|
||||||
|
button1->border_width.b);
|
||||||
|
|
||||||
jwindow_open_fg(window);
|
jwindow_open_fg(window);
|
||||||
jwidget_free(window);
|
jwidget_free(window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static char *read_authors_txt(const char *filename)
|
||||||
|
{
|
||||||
|
DIRS *dirs, *dir;
|
||||||
|
char *txt = NULL;
|
||||||
|
|
||||||
|
dirs = filename_in_bindir(filename);
|
||||||
|
dirs_cat_dirs(dirs, filename_in_datadir(filename));
|
||||||
|
|
||||||
|
/* search the configuration file from first to last path */
|
||||||
|
for (dir=dirs; dir && !txt; dir=dir->next) {
|
||||||
|
PRINTF("Triying opening %s\n", dir->path);
|
||||||
|
if ((dir->path) && exists(dir->path)) {
|
||||||
|
int size;
|
||||||
|
FILE *f;
|
||||||
|
|
||||||
|
#if (MAKE_VERSION(4, 2, 0) < MAKE_VERSION(ALLEGRO_VERSION, \
|
||||||
|
ALLEGRO_SUB_VERSION, \
|
||||||
|
ALLEGRO_WIP_VERSION))
|
||||||
|
size = file_size(dir->path);
|
||||||
|
#else
|
||||||
|
size = file_size_ex(dir->path);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (size > 0) {
|
||||||
|
f = fopen(dir->path, "r");
|
||||||
|
if (f) {
|
||||||
|
txt = jmalloc0(size+2);
|
||||||
|
fread(txt, 1, size, f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dirs_free(dirs);
|
||||||
|
return txt;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "util/misc.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_clear(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_clear(const char *argument)
|
void command_execute_clear(const char *argument)
|
||||||
{
|
{
|
||||||
|
/* get current sprite */
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
|
||||||
|
/* clear the mask */
|
||||||
|
ClearMask();
|
||||||
|
|
||||||
|
/* refresh the sprite */
|
||||||
|
GUI_Refresh(sprite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* Copyright (C) 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool command_enabled_close_all_file(const char *argument)
|
|
||||||
{
|
|
||||||
return !jlist_empty(get_sprite_list());
|
|
||||||
}
|
|
||||||
|
|
||||||
void command_execute_close_all_files(const char *argument)
|
|
||||||
{
|
|
||||||
Sprite *sprite = get_first_sprite();
|
|
||||||
Sprite *clipboard = get_clipboard_sprite();
|
|
||||||
|
|
||||||
while (sprite) {
|
|
||||||
sprite = current_sprite;
|
|
||||||
|
|
||||||
/* check if this sprite is modified */
|
|
||||||
if (sprite_is_modified(sprite) &&
|
|
||||||
(!clipboard || sprite->gfxobj.id != clipboard->gfxobj.id)) {
|
|
||||||
command_execute_close_file();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sprite = get_next_sprite(sprite);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* close the window */
|
|
||||||
jwindow_close(app_get_top_window(), 0);
|
|
||||||
}
|
|
|
@ -20,14 +20,311 @@
|
||||||
|
|
||||||
#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 "modules/editors.h"
|
||||||
|
#include "modules/gfx.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
|
#include "modules/rootmenu.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "modules/tools.h"
|
||||||
|
#include "raster/brush.h"
|
||||||
|
#include "raster/image.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "widgets/colbut.h"
|
||||||
|
#include "widgets/editor.h"
|
||||||
|
#include "widgets/groupbut.h"
|
||||||
|
#include "widgets/statebar.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static JWidget window = NULL;
|
||||||
|
|
||||||
|
static bool brush_preview_msg_proc(JWidget widget, JMessage msg);
|
||||||
|
|
||||||
|
static int window_close_hook(JWidget widget, int user_data);
|
||||||
|
static int brush_size_slider_change_hook(JWidget widget, int user_data);
|
||||||
|
static int brush_angle_slider_change_hook(JWidget widget, int user_data);
|
||||||
|
static int brush_type_change_hook(JWidget widget, int user_data);
|
||||||
|
static int brush_mode_change_hook(JWidget widget, int user_data);
|
||||||
|
static int glass_dirty_slider_change_hook(JWidget widget, int user_data);
|
||||||
|
static int spray_width_slider_change_hook(JWidget widget, int user_data);
|
||||||
|
static int air_speed_slider_change_hook(JWidget widget, int user_data);
|
||||||
|
static int filled_check_change_hook(JWidget widget, int user_data);
|
||||||
|
static int tiled_check_change_hook(JWidget widget, int user_data);
|
||||||
|
static int use_grid_check_change_hook(JWidget widget, int user_data);
|
||||||
|
static int view_grid_check_change_hook(JWidget widget, int user_data);
|
||||||
|
static int set_grid_button_select_hook(JWidget widget, int user_data);
|
||||||
|
static int cursor_button_change_hook(JWidget widget, int user_data);
|
||||||
|
static int onionskin_check_change_hook(JWidget widget, int user_data);
|
||||||
|
|
||||||
void command_execute_configure_tools(const char *argument)
|
void command_execute_configure_tools(const char *argument)
|
||||||
{
|
{
|
||||||
|
JWidget filled, tiled, use_grid, view_grid, set_grid;
|
||||||
|
JWidget brush_size, brush_angle, glass_dirty;
|
||||||
|
JWidget spray_width, air_speed;
|
||||||
|
JWidget cursor_color, cursor_color_box;
|
||||||
|
JWidget brush_preview_box;
|
||||||
|
JWidget brush_type_box, brush_type;
|
||||||
|
JWidget brush_mode_box, brush_mode;
|
||||||
|
JWidget check_onionskin;
|
||||||
|
JWidget brush_preview;
|
||||||
|
|
||||||
|
/* if the window is opened, close it */
|
||||||
|
if (window) {
|
||||||
|
jwindow_close (window, NULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* if the window is closed, open it */
|
||||||
|
|
||||||
|
window = load_widget ("toolconf.jid", "configure_tool");
|
||||||
|
if (!window)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!get_widgets (window,
|
||||||
|
"filled", &filled,
|
||||||
|
"tiled", &tiled,
|
||||||
|
"use_grid", &use_grid,
|
||||||
|
"view_grid", &view_grid,
|
||||||
|
"set_grid", &set_grid,
|
||||||
|
"brush_size", &brush_size,
|
||||||
|
"brush_angle", &brush_angle,
|
||||||
|
"glass_dirty", &glass_dirty,
|
||||||
|
"spray_width", &spray_width,
|
||||||
|
"air_speed", &air_speed,
|
||||||
|
"cursor_color_box", &cursor_color_box,
|
||||||
|
"brush_preview_box", &brush_preview_box,
|
||||||
|
"brush_type_box", &brush_type_box,
|
||||||
|
"brush_mode_box", &brush_mode_box,
|
||||||
|
"onionskin", &check_onionskin, NULL)) {
|
||||||
|
jwidget_free (window);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* cursor-color */
|
||||||
|
cursor_color = color_button_new (get_cursor_color (), IMAGE_INDEXED);
|
||||||
|
/* brush-preview */
|
||||||
|
brush_preview = jwidget_new (JI_WIDGET);
|
||||||
|
brush_preview->static_w = 32 + 4;
|
||||||
|
brush_preview->static_h = 32 + 4;
|
||||||
|
jwidget_add_hook (brush_preview, JI_WIDGET,
|
||||||
|
brush_preview_msg_proc, NULL);
|
||||||
|
/* brush-type */
|
||||||
|
brush_type = group_button_new (3, 1, get_brush_type (),
|
||||||
|
GFX_BRUSH_CIRCLE,
|
||||||
|
GFX_BRUSH_SQUARE,
|
||||||
|
GFX_BRUSH_LINE);
|
||||||
|
/* brush-type */
|
||||||
|
brush_mode = group_button_new (3, 1, get_brush_mode (),
|
||||||
|
GFX_DRAWMODE_OPAQUE,
|
||||||
|
GFX_DRAWMODE_GLASS,
|
||||||
|
GFX_DRAWMODE_SEMI);
|
||||||
|
|
||||||
|
/* append children */
|
||||||
|
jwidget_add_child (cursor_color_box, cursor_color);
|
||||||
|
jwidget_add_child (brush_preview_box, brush_preview);
|
||||||
|
jwidget_add_child (brush_type_box, brush_type);
|
||||||
|
jwidget_add_child (brush_mode_box, brush_mode);
|
||||||
|
|
||||||
|
if (get_filled_mode ()) jwidget_select (filled);
|
||||||
|
if (get_tiled_mode ()) jwidget_select (tiled);
|
||||||
|
if (get_use_grid ()) jwidget_select (use_grid);
|
||||||
|
if (get_view_grid ()) jwidget_select (view_grid);
|
||||||
|
jslider_set_value (brush_size, get_brush_size ());
|
||||||
|
jslider_set_value (brush_angle, get_brush_angle ());
|
||||||
|
jslider_set_value (glass_dirty, get_glass_dirty ());
|
||||||
|
jslider_set_value (spray_width, get_spray_width ());
|
||||||
|
jslider_set_value (air_speed, get_air_speed ());
|
||||||
|
if (get_onionskin ()) jwidget_select (check_onionskin);
|
||||||
|
|
||||||
|
HOOK (window, JI_SIGNAL_WINDOW_CLOSE, window_close_hook, 0);
|
||||||
|
HOOK (filled, JI_SIGNAL_CHECK_CHANGE, filled_check_change_hook, 0);
|
||||||
|
HOOK (tiled, JI_SIGNAL_CHECK_CHANGE, tiled_check_change_hook, 0);
|
||||||
|
HOOK (use_grid, JI_SIGNAL_CHECK_CHANGE, use_grid_check_change_hook, 0);
|
||||||
|
HOOK (view_grid, JI_SIGNAL_CHECK_CHANGE, view_grid_check_change_hook, 0);
|
||||||
|
HOOK (set_grid, JI_SIGNAL_BUTTON_SELECT, set_grid_button_select_hook, 0);
|
||||||
|
HOOK (brush_size, JI_SIGNAL_SLIDER_CHANGE, brush_size_slider_change_hook, brush_preview);
|
||||||
|
HOOK (brush_angle, JI_SIGNAL_SLIDER_CHANGE, brush_angle_slider_change_hook, brush_preview);
|
||||||
|
HOOK (brush_type, SIGNAL_GROUP_BUTTON_CHANGE, brush_type_change_hook, brush_preview);
|
||||||
|
HOOK (brush_mode, SIGNAL_GROUP_BUTTON_CHANGE, brush_mode_change_hook, 0);
|
||||||
|
HOOK (glass_dirty, JI_SIGNAL_SLIDER_CHANGE, glass_dirty_slider_change_hook, 0);
|
||||||
|
HOOK (air_speed, JI_SIGNAL_SLIDER_CHANGE, air_speed_slider_change_hook, 0);
|
||||||
|
HOOK (spray_width, JI_SIGNAL_SLIDER_CHANGE, spray_width_slider_change_hook, 0);
|
||||||
|
HOOK (cursor_color, SIGNAL_COLOR_BUTTON_CHANGE, cursor_button_change_hook, 0);
|
||||||
|
HOOK (check_onionskin, JI_SIGNAL_CHECK_CHANGE, onionskin_check_change_hook, 0);
|
||||||
|
|
||||||
|
/* default position */
|
||||||
|
jwindow_remap (window);
|
||||||
|
jwindow_center (window);
|
||||||
|
|
||||||
|
/* load window configuration */
|
||||||
|
load_window_pos (window, "ConfigureTool");
|
||||||
|
|
||||||
|
/* open the window */
|
||||||
|
jwindow_open_bg (window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool brush_preview_msg_proc(JWidget widget, JMessage msg)
|
||||||
|
{
|
||||||
|
switch (msg->type) {
|
||||||
|
|
||||||
|
case JM_DRAW: {
|
||||||
|
BITMAP *bmp = create_bitmap(jrect_w(widget->rc),
|
||||||
|
jrect_h(widget->rc));
|
||||||
|
Brush *brush = get_brush();
|
||||||
|
|
||||||
|
clear_to_color(bmp, makecol(0, 0, 0));
|
||||||
|
image_to_allegro(brush->image, bmp,
|
||||||
|
bmp->w/2 - brush->size/2,
|
||||||
|
bmp->h/2 - brush->size/2);
|
||||||
|
blit(bmp, ji_screen, 0, 0, widget->rc->x1, widget->rc->y1,
|
||||||
|
bmp->w, bmp->h);
|
||||||
|
destroy_bitmap(bmp);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int window_close_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
/* isn't running anymore */
|
||||||
|
window = NULL;
|
||||||
|
|
||||||
|
/* save window configuration */
|
||||||
|
save_window_pos(widget, "ConfigureTool");
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brush_size_slider_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_brush_size(jslider_get_value(widget));
|
||||||
|
jwidget_dirty((JWidget)user_data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brush_angle_slider_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_brush_angle(jslider_get_value(widget));
|
||||||
|
jwidget_dirty((JWidget)user_data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brush_type_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
int type = group_button_get_selected(widget);
|
||||||
|
|
||||||
|
set_brush_type(type);
|
||||||
|
jwidget_dirty((JWidget)user_data);
|
||||||
|
|
||||||
|
status_bar_set_text(app_get_status_bar(), 250,
|
||||||
|
"Brush type: %s",
|
||||||
|
type == BRUSH_CIRCLE ? "Circle":
|
||||||
|
type == BRUSH_SQUARE ? "Square":
|
||||||
|
type == BRUSH_LINE ? "Line": "Unknown");
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int brush_mode_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
int mode = group_button_get_selected(widget);
|
||||||
|
|
||||||
|
set_brush_mode(mode);
|
||||||
|
|
||||||
|
status_bar_set_text(app_get_status_bar(), 250,
|
||||||
|
"Brush mode: %s",
|
||||||
|
mode == DRAWMODE_OPAQUE ? "Opaque":
|
||||||
|
mode == DRAWMODE_GLASS ? "Glass":
|
||||||
|
mode == DRAWMODE_SEMI ? "Semi": "Unknown");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int glass_dirty_slider_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_glass_dirty(jslider_get_value(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int spray_width_slider_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_spray_width(jslider_get_value(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int air_speed_slider_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_air_speed(jslider_get_value(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int filled_check_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_filled_mode(jwidget_is_selected(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int tiled_check_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_tiled_mode(jwidget_is_selected(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int use_grid_check_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_use_grid(jwidget_is_selected(widget));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int view_grid_check_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_view_grid(jwidget_is_selected(widget));
|
||||||
|
refresh_all_editors();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int set_grid_button_select_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
|
||||||
|
if (sprite && sprite->mask && sprite->mask->bitmap) {
|
||||||
|
JRect rect = jrect_new(sprite->mask->x,
|
||||||
|
sprite->mask->y,
|
||||||
|
sprite->mask->x+sprite->mask->w,
|
||||||
|
sprite->mask->y+sprite->mask->h);
|
||||||
|
set_grid(rect);
|
||||||
|
jrect_free(rect);
|
||||||
|
|
||||||
|
if (get_view_grid())
|
||||||
|
refresh_all_editors();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
jalert(_("Error"
|
||||||
|
"<<You must select a sprite with mask."
|
||||||
|
"<<The boundaries of the mask will be used"
|
||||||
|
"<<to specify the grid area.||&OK"));
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int cursor_button_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_cursor_color(color_button_get_color(widget));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int onionskin_check_change_hook(JWidget widget, int user_data)
|
||||||
|
{
|
||||||
|
set_onionskin(jwidget_is_selected(widget));
|
||||||
|
refresh_all_editors();
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,14 +20,31 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "util/clipbrd.h"
|
||||||
|
#include "util/misc.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_copy(const char *argument)
|
||||||
|
{
|
||||||
|
if ((!current_sprite) ||
|
||||||
|
(!current_sprite->layer) ||
|
||||||
|
(!current_sprite->layer->readable) ||
|
||||||
|
(!current_sprite->layer->writeable) ||
|
||||||
|
(!current_sprite->mask) ||
|
||||||
|
(!current_sprite->mask->bitmap))
|
||||||
|
return FALSE;
|
||||||
|
else
|
||||||
|
return GetImage() ? TRUE: FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_copy(const char *argument)
|
void command_execute_copy(const char *argument)
|
||||||
{
|
{
|
||||||
|
copy_to_clipboard();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* Copyright (C) 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void command_execute_customize(const char *argument)
|
|
||||||
{
|
|
||||||
jalert("Customize<<This functionality will be available in ASE 1.0||&OK");
|
|
||||||
}
|
|
|
@ -20,14 +20,31 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/layer.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "util/clipbrd.h"
|
||||||
|
#include "util/misc.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_cut(const char *argument)
|
||||||
|
{
|
||||||
|
if ((!current_sprite) ||
|
||||||
|
(!current_sprite->layer) ||
|
||||||
|
(!current_sprite->layer->readable) ||
|
||||||
|
(!current_sprite->layer->writeable) ||
|
||||||
|
(!current_sprite->mask) ||
|
||||||
|
(!current_sprite->mask->bitmap))
|
||||||
|
return FALSE;
|
||||||
|
else
|
||||||
|
return GetImage() ? TRUE: FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_cut(const char *argument)
|
void command_execute_cut(const char *argument)
|
||||||
{
|
{
|
||||||
|
cut_to_clipboard();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,45 @@
|
||||||
|
|
||||||
#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/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_deselect_mask(const char *argument)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
current_sprite != NULL &&
|
||||||
|
!mask_is_empty(current_sprite->mask);
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_deselect_mask(const char *argument)
|
void command_execute_deselect_mask(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Mask *mask;
|
||||||
|
|
||||||
|
/* destroy the *deselected* mask */
|
||||||
|
mask = sprite_request_mask(sprite, "*deselected*");
|
||||||
|
if (mask) {
|
||||||
|
sprite_remove_mask(sprite, mask);
|
||||||
|
mask_free(mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* save the selection in the repository */
|
||||||
|
mask = mask_new_copy(sprite->mask);
|
||||||
|
mask_set_name(mask, "*deselected*");
|
||||||
|
sprite_add_mask(sprite, mask);
|
||||||
|
|
||||||
|
/* undo */
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_set_mask(sprite->undo, sprite);
|
||||||
|
|
||||||
|
/* deselect the mask */
|
||||||
|
mask_none(sprite->mask);
|
||||||
|
|
||||||
|
sprite_generate_mask_boundaries(sprite);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,11 +20,11 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include <allegro/unicode.h>
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "jinete/base.h"
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
#include "modules/tools.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -32,70 +32,124 @@
|
||||||
/* brush_tool */
|
/* brush_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_brush_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_brush;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_brush_tool(const char *argument)
|
void command_execute_brush_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_brush);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* dots_tool */
|
/* dots_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_dots_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_dots;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_dots_tool(const char *argument)
|
void command_execute_dots_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_dots);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* ellipse_tool */
|
/* ellipse_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_ellipse_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_ellipse;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_ellipse_tool(const char *argument)
|
void command_execute_ellipse_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_ellipse);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* floodfill_tool */
|
/* floodfill_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_floodfill_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_floodfill;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_floodfill_tool(const char *argument)
|
void command_execute_floodfill_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_floodfill);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* line_tool */
|
/* line_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_line_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_line;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_line_tool(const char *argument)
|
void command_execute_line_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_line);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* marker_tool */
|
/* marker_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_marker_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_marker;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_marker_tool(const char *argument)
|
void command_execute_marker_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_marker);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* pencil_tool */
|
/* pencil_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_pencil_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_pencil;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_pencil_tool(const char *argument)
|
void command_execute_pencil_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_pencil);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* rectangle_tool */
|
/* rectangle_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_rectangle_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_rectangle;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_rectangle_tool(const char *argument)
|
void command_execute_rectangle_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_rectangle);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
/* spray_tool */
|
/* spray_tool */
|
||||||
/* ======================== */
|
/* ======================== */
|
||||||
|
|
||||||
|
bool command_checked_spray_tool(const char *argument)
|
||||||
|
{
|
||||||
|
return current_tool && current_tool == &ase_tool_spray;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_spray_tool(const char *argument)
|
void command_execute_spray_tool(const char *argument)
|
||||||
{
|
{
|
||||||
|
select_tool(&ase_tool_spray);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,63 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "commands/commands.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/image.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_invert_mask(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_invert_mask(const char *argument)
|
void command_execute_invert_mask(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Mask *mask;
|
||||||
|
|
||||||
|
/* change the selection */
|
||||||
|
if (!sprite->mask->bitmap) {
|
||||||
|
command_execute(command_get_by_name(CMD_MASK_ALL), argument);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
/* undo */
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_set_mask(sprite->undo, sprite);
|
||||||
|
|
||||||
|
/* create a new mask */
|
||||||
|
mask = mask_new();
|
||||||
|
|
||||||
|
/* select all the sprite area */
|
||||||
|
mask_replace(mask, 0, 0, sprite->w, sprite->h);
|
||||||
|
|
||||||
|
/* remove in the new mask the current sprite marked region */
|
||||||
|
image_rectfill(mask->bitmap,
|
||||||
|
sprite->mask->x, sprite->mask->y,
|
||||||
|
sprite->mask->x + sprite->mask->w-1,
|
||||||
|
sprite->mask->y + sprite->mask->h-1, 0);
|
||||||
|
|
||||||
|
/* invert the current mask in the sprite */
|
||||||
|
mask_invert(sprite->mask);
|
||||||
|
if (sprite->mask->bitmap) {
|
||||||
|
/* copy the inverted region in the new mask */
|
||||||
|
image_copy(mask->bitmap, sprite->mask->bitmap,
|
||||||
|
sprite->mask->x, sprite->mask->y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* we need only need the area inside the sprite */
|
||||||
|
mask_intersect(mask, 0, 0, sprite->w, sprite->h);
|
||||||
|
|
||||||
|
/* set the new mask */
|
||||||
|
sprite_set_mask(sprite, mask);
|
||||||
|
mask_free(mask);
|
||||||
|
|
||||||
|
sprite_generate_mask_boundaries(sprite);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,48 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/alert.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "dialogs/filesel.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
#include "util/msk_file.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_load_mask(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_load_mask(const char *argument)
|
void command_execute_load_mask(const char *argument)
|
||||||
{
|
{
|
||||||
|
/* get current sprite */
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
char *filename = GUI_FileSelect(_("Load .msk File"), "", "msk");
|
||||||
|
if (filename) {
|
||||||
|
Mask *mask = load_msk_file(filename);
|
||||||
|
if (!mask) {
|
||||||
|
jalert("%s<<%s<<%s||%s",
|
||||||
|
_("Error"), _("Error loading .msk file"),
|
||||||
|
filename, _("&Close"));
|
||||||
|
|
||||||
|
jfree(filename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* undo */
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_set_mask(sprite->undo, sprite);
|
||||||
|
|
||||||
|
sprite_set_mask(sprite, mask);
|
||||||
|
mask_free(mask);
|
||||||
|
|
||||||
|
sprite_generate_mask_boundaries(sprite);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
|
jfree(filename);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,30 @@
|
||||||
|
|
||||||
#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/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_mask_all(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_mask_all(const char *argument)
|
void command_execute_mask_all(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
|
||||||
|
/* undo */
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_set_mask(sprite->undo, sprite);
|
||||||
|
|
||||||
|
/* change the selection */
|
||||||
|
mask_replace(sprite->mask, 0, 0, sprite->w, sprite->h);
|
||||||
|
|
||||||
|
sprite_generate_mask_boundaries(sprite);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,19 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "dialogs/maskcol.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_mask_by_color(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_mask_by_color(const char *argument)
|
void command_execute_mask_by_color(const char *argument)
|
||||||
{
|
{
|
||||||
|
dialogs_mask_color();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* Copyright (C) 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void command_execute_mask_repository(const char *argument)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -20,14 +20,21 @@
|
||||||
|
|
||||||
#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 "raster/sprite.h"
|
||||||
|
#include "util/clipbrd.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_paste(const char *argument)
|
||||||
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Sprite *clipboard = get_clipboard_sprite();
|
||||||
|
|
||||||
|
return (sprite && clipboard && (clipboard != sprite));
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_paste(const char *argument)
|
void command_execute_paste(const char *argument)
|
||||||
{
|
{
|
||||||
|
paste_from_clipboard();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,21 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "util/recscr.h"
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_checked_record_screen(const char *argument)
|
||||||
|
{
|
||||||
|
return is_rec_screen();
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_record_screen(const char *argument)
|
void command_execute_record_screen(const char *argument)
|
||||||
{
|
{
|
||||||
|
if (is_rec_screen())
|
||||||
|
rec_screen_off();
|
||||||
|
else
|
||||||
|
rec_screen_on();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,11 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void command_execute_refresh(const char *argument)
|
void command_execute_refresh(const char *argument)
|
||||||
{
|
{
|
||||||
|
app_refresh_screen();
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,40 @@
|
||||||
|
|
||||||
#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/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "raster/undo.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_reselect_mask(const char *argument)
|
||||||
|
{
|
||||||
|
return
|
||||||
|
current_sprite != NULL &&
|
||||||
|
sprite_request_mask(current_sprite, "*deselected*") != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_reselect_mask(const char *argument)
|
void command_execute_reselect_mask(const char *argument)
|
||||||
{
|
{
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
Mask *mask;
|
||||||
|
|
||||||
|
/* request *deselected* mask */
|
||||||
|
mask = sprite_request_mask(sprite, "*deselected*");
|
||||||
|
|
||||||
|
/* undo */
|
||||||
|
if (undo_is_enabled(sprite->undo))
|
||||||
|
undo_set_mask(sprite->undo, sprite);
|
||||||
|
|
||||||
|
/* set the mask */
|
||||||
|
sprite_set_mask(sprite, mask);
|
||||||
|
|
||||||
|
/* remove the *deselected* mask */
|
||||||
|
sprite_remove_mask(sprite, mask);
|
||||||
|
mask_free(mask);
|
||||||
|
|
||||||
|
sprite_generate_mask_boundaries(sprite);
|
||||||
|
GUI_Refresh(sprite);
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,42 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "commands/commands.h"
|
||||||
|
#include "console/console.h"
|
||||||
|
#include "file/file.h"
|
||||||
|
#include "modules/recent.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_save_file(const char *argument)
|
||||||
|
{
|
||||||
|
return current_sprite != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_save_file(const char *argument)
|
void command_execute_save_file(const char *argument)
|
||||||
{
|
{
|
||||||
|
/* if the sprite is associated to a file in the file-system, we can
|
||||||
|
save it directly without user interaction */
|
||||||
|
if (sprite_is_associated_to_file(current_sprite)) {
|
||||||
|
if (sprite_save(current_sprite) == 0) {
|
||||||
|
recent_file(current_sprite->filename);
|
||||||
|
sprite_mark_as_saved(current_sprite);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
unrecent_file(current_sprite->filename);
|
||||||
|
console_printf("%s: %s",
|
||||||
|
_("Error saving sprite file"),
|
||||||
|
current_sprite->filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* if the sprite isn't associated to a file, we must to show the
|
||||||
|
save-as dialog to the user to select for first time the file-name
|
||||||
|
for this sprite */
|
||||||
|
else {
|
||||||
|
command_execute(command_get_by_name(CMD_SAVE_FILE), argument);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ void command_execute_save_file_as(const char *argument)
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ustrcpy(filename, current_sprite->filename);
|
ustrcpy(filename, current_sprite->filename);
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
newfilename = GUI_FileSelect(_("Save Sprite"), filename,
|
newfilename = GUI_FileSelect(_("Save Sprite"), filename,
|
||||||
get_writeable_extensions());
|
get_writeable_extensions());
|
||||||
|
@ -83,10 +83,12 @@ void command_execute_save_file_as(const char *argument)
|
||||||
|
|
||||||
if (sprite_save(current_sprite) == 0) {
|
if (sprite_save(current_sprite) == 0) {
|
||||||
recent_file(filename);
|
recent_file(filename);
|
||||||
sprite_was_saved(current_sprite);
|
sprite_mark_as_saved(current_sprite);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
unrecent_file(filename);
|
unrecent_file(filename);
|
||||||
console_printf("%s: %s", _("Error saving sprite file"), filename);
|
console_printf("%s: %s",
|
||||||
|
_("Error saving sprite file"),
|
||||||
|
filename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,62 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include <allegro/file.h>
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "jinete/alert.h"
|
||||||
|
|
||||||
|
#include "dialogs/filesel.h"
|
||||||
#include "modules/sprites.h"
|
#include "modules/sprites.h"
|
||||||
|
#include "raster/mask.h"
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
|
#include "util/msk_file.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
bool command_enabled_save_mask(const char *argument)
|
||||||
|
{
|
||||||
|
if (!current_sprite)
|
||||||
|
return FALSE;
|
||||||
|
else
|
||||||
|
return (current_sprite->mask &&
|
||||||
|
current_sprite->mask->bitmap) ? TRUE: FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void command_execute_save_mask(const char *argument)
|
void command_execute_save_mask(const char *argument)
|
||||||
{
|
{
|
||||||
|
/* get current sprite */
|
||||||
|
Sprite *sprite = current_sprite;
|
||||||
|
char *filename = "default.msk";
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
char *filename = GUI_FileSelect(_("Save .msk File"), filename, "msk");
|
||||||
|
if (!filename)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* does the file exist? */
|
||||||
|
if (exists(filename)) {
|
||||||
|
/* ask if the user wants overwrite the file? */
|
||||||
|
ret = jalert("%s<<%s<<%s||%s||%s||%s",
|
||||||
|
_("Warning"), _("File exists, overwrite it?"),
|
||||||
|
get_filename(filename),
|
||||||
|
_("&Yes"), _("&No"), _("&Cancel"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* "yes": we must continue with the operation... */
|
||||||
|
if (ret == 1)
|
||||||
|
break;
|
||||||
|
/* "cancel" or <esc> per example: we back doing nothing */
|
||||||
|
else if (ret != 2)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* "no": we must back to select other file-name */
|
||||||
|
}
|
||||||
|
|
||||||
|
if (save_msk_file(sprite->mask, filename) != 0)
|
||||||
|
jalert("%s<<%s<<%s||%s",
|
||||||
|
_("Error"), _("Error saving .msk file"),
|
||||||
|
_(filename), _("&Close"));
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,46 @@
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
#ifndef USE_PRECOMPILED_HEADER
|
||||||
|
|
||||||
#include "jinete.h"
|
#include <allegro.h>
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "jinete/system.h"
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/sprite.h"
|
#include "core/core.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void command_execute_screen_shot(const char *argument)
|
void command_execute_screen_shot(const char *argument)
|
||||||
{
|
{
|
||||||
|
int old_flag;
|
||||||
|
char buf[512];
|
||||||
|
PALETTE pal;
|
||||||
|
BITMAP *bmp;
|
||||||
|
int c;
|
||||||
|
|
||||||
|
/* save the active flag which indicate if the mouse is freeze or not */
|
||||||
|
old_flag = freeze_mouse_flag;
|
||||||
|
|
||||||
|
/* freeze the mouse obligatory */
|
||||||
|
freeze_mouse_flag = TRUE;
|
||||||
|
|
||||||
|
/* get the active palette color */
|
||||||
|
get_palette(pal);
|
||||||
|
|
||||||
|
/* get a file name for the capture */
|
||||||
|
for (c=0; c<10000; c++) {
|
||||||
|
usprintf(buf, "shot%04d.%s", c, "pcx");
|
||||||
|
if (!exists(buf))
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ji_screen != screen)
|
||||||
|
jmouse_draw_cursor();
|
||||||
|
|
||||||
|
/* save in a bitmap the visible screen portion */
|
||||||
|
bmp = create_sub_bitmap(ji_screen, 0, 0, JI_SCREEN_W, JI_SCREEN_H);
|
||||||
|
save_bitmap(buf, bmp, pal);
|
||||||
|
destroy_bitmap(bmp);
|
||||||
|
|
||||||
|
/* restore the freeze flag by the previous value */
|
||||||
|
freeze_mouse_flag = old_flag;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,17 +33,18 @@
|
||||||
|
|
||||||
bool command_enabled_select_file(const char *argument)
|
bool command_enabled_select_file(const char *argument)
|
||||||
{
|
{
|
||||||
|
/* with argument, the argument specified the ID of the GfxObj */
|
||||||
if (argument) {
|
if (argument) {
|
||||||
int sprite_id = ustrtol(argument, NULL, 10);
|
int sprite_id = ustrtol(argument, NULL, 10);
|
||||||
GfxObj *gfxobj = gfxobj_find(sprite_id);
|
GfxObj *gfxobj = gfxobj_find(sprite_id);
|
||||||
return
|
return gfxobj && gfxobj->type == GFXOBJ_SPRITE;
|
||||||
gfxobj && gfxobj->type == GFXOBJ_SPRITE;
|
|
||||||
}
|
}
|
||||||
|
/* argument=NULL, means the select "Nothing" option */
|
||||||
else
|
else
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool command_selected_select_file(const char *argument)
|
bool command_checked_select_file(const char *argument)
|
||||||
{
|
{
|
||||||
if (argument) {
|
if (argument) {
|
||||||
int sprite_id = ustrtol(argument, NULL, 10);
|
int sprite_id = ustrtol(argument, NULL, 10);
|
||||||
|
|
|
@ -30,142 +30,170 @@
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CMD0(name) { #name, NULL, NULL, command_execute_##name, NULL }
|
/********************************************************************/
|
||||||
#define CMD1(name) { #name, command_enabled_##name, NULL, command_execute_##name, NULL }
|
/* All commands */
|
||||||
#define CMD2(name,name2) { #name, command_enabled_##name2, NULL, command_execute_##name, NULL }
|
|
||||||
#define CMD3(name) { #name, command_enabled_##name, command_selected_##name, command_execute_##name, NULL }
|
|
||||||
/* #define CMD4(name) { #name, NULL, NULL, NULL, NULL } */
|
|
||||||
|
|
||||||
void command_execute_about(const char *argument);
|
/* file */
|
||||||
void command_execute_advanced_mode(const char *argument);
|
void command_execute_new_file(const char *argument);
|
||||||
void command_execute_auto_crop_sprite(const char *argument);
|
void command_execute_new_file(const char *argument);
|
||||||
void command_execute_brush_tool(const char *argument);
|
void command_execute_open_file(const char *argument);
|
||||||
void command_execute_change_image_type(const char *argument);
|
bool command_enabled_save_file(const char *argument);
|
||||||
void command_execute_clear(const char *argument);
|
void command_execute_save_file(const char *argument);
|
||||||
bool command_enabled_close_all_files(const char *argument);
|
bool command_enabled_save_file_as(const char *argument);
|
||||||
void command_execute_close_all_files(const char *argument);
|
void command_execute_save_file_as(const char *argument);
|
||||||
void command_execute_close_editor(const char *argument);
|
|
||||||
bool command_enabled_close_file(const char *argument);
|
bool command_enabled_close_file(const char *argument);
|
||||||
void command_execute_close_file(const char *argument);
|
void command_execute_close_file(const char *argument);
|
||||||
void command_execute_color_curve(const char *argument);
|
bool command_enabled_close_all_files(const char *argument);
|
||||||
void command_execute_configure_screen(const char *argument);
|
void command_execute_close_all_files(const char *argument);
|
||||||
void command_execute_configure_tools(const char *argument);
|
void command_execute_screen_shot(const char *argument);
|
||||||
void command_execute_convolution_matrix(const char *argument);
|
bool command_checked_record_screen(const char *argument);
|
||||||
void command_execute_copy(const char *argument);
|
void command_execute_record_screen(const char *argument);
|
||||||
void command_execute_copy_frame(const char *argument);
|
void command_execute_about(const char *argument);
|
||||||
void command_execute_crop_frame(const char *argument);
|
|
||||||
void command_execute_crop_layer(const char *argument);
|
|
||||||
void command_execute_crop_sprite(const char *argument);
|
|
||||||
void command_execute_customize(const char *argument);
|
|
||||||
void command_execute_cut(const char *argument);
|
|
||||||
void command_execute_deselect_mask(const char *argument);
|
|
||||||
void command_execute_despeckle(const char *argument);
|
|
||||||
void command_execute_dots_tool(const char *argument);
|
|
||||||
void command_execute_draw_text(const char *argument);
|
|
||||||
void command_execute_duplicate_layer(const char *argument);
|
|
||||||
void command_execute_duplicate_sprite(const char *argument);
|
|
||||||
void command_execute_ellipse_tool(const char *argument);
|
|
||||||
void command_execute_exit(const char *argument);
|
void command_execute_exit(const char *argument);
|
||||||
void command_execute_film_editor(const char *argument);
|
/* edit */
|
||||||
void command_execute_flatten_layers(const char *argument);
|
bool command_enabled_undo(const char *argument);
|
||||||
|
void command_execute_undo(const char *argument);
|
||||||
|
bool command_enabled_redo(const char *argument);
|
||||||
|
void command_execute_redo(const char *argument);
|
||||||
|
bool command_enabled_cut(const char *argument);
|
||||||
|
void command_execute_cut(const char *argument);
|
||||||
|
bool command_enabled_copy(const char *argument);
|
||||||
|
void command_execute_copy(const char *argument);
|
||||||
|
bool command_enabled_paste(const char *argument);
|
||||||
|
void command_execute_paste(const char *argument);
|
||||||
|
bool command_enabled_clear(const char *argument);
|
||||||
|
void command_execute_clear(const char *argument);
|
||||||
|
void command_execute_quick_move(const char *argument);
|
||||||
|
void command_execute_quick_copy(const char *argument);
|
||||||
void command_execute_flip_horizontal(const char *argument);
|
void command_execute_flip_horizontal(const char *argument);
|
||||||
void command_execute_flip_vertical(const char *argument);
|
void command_execute_flip_vertical(const char *argument);
|
||||||
void command_execute_floodfill_tool(const char *argument);
|
void command_execute_replace_color(const char *argument);
|
||||||
void command_execute_frame_properties(const char *argument);
|
|
||||||
void command_execute_invert_color(const char *argument);
|
void command_execute_invert_color(const char *argument);
|
||||||
void command_execute_invert_mask(const char *argument);
|
void command_execute_refresh(const char *argument);
|
||||||
void command_execute_layer_properties(const char *argument);
|
void command_execute_configure_screen(const char *argument);
|
||||||
void command_execute_line_tool(const char *argument);
|
void command_execute_advanced_mode(const char *argument);
|
||||||
void command_execute_link_frame(const char *argument);
|
|
||||||
void command_execute_load_mask(const char *argument);
|
|
||||||
void command_execute_load_session(const char *argument);
|
|
||||||
void command_execute_make_unique_editor(const char *argument);
|
void command_execute_make_unique_editor(const char *argument);
|
||||||
void command_execute_mapgen(const char *argument);
|
void command_execute_split_editor_vertically(const char *argument);
|
||||||
void command_execute_marker_tool(const char *argument);
|
void command_execute_split_editor_horizontally(const char *argument);
|
||||||
void command_execute_mask_all(const char *argument);
|
void command_execute_close_editor(const char *argument);
|
||||||
void command_execute_mask_by_color(const char *argument);
|
|
||||||
void command_execute_mask_repository(const char *argument);
|
|
||||||
void command_execute_merge_down_layer(const char *argument);
|
|
||||||
void command_execute_move_frame(const char *argument);
|
|
||||||
void command_execute_new_file(const char *argument);
|
|
||||||
void command_execute_new_file(const char *argument);
|
|
||||||
void command_execute_new_frame(const char *argument);
|
|
||||||
void command_execute_new_layer(const char *argument);
|
|
||||||
void command_execute_new_layer_set(const char *argument);
|
|
||||||
void command_execute_open_file(const char *argument);
|
|
||||||
void command_execute_options(const char *argument);
|
|
||||||
void command_execute_palette_editor(const char *argument);
|
|
||||||
void command_execute_paste(const char *argument);
|
|
||||||
void command_execute_pencil_tool(const char *argument);
|
|
||||||
void command_execute_play_flic(const char *argument);
|
|
||||||
bool command_enabled_preview(const char *argument);
|
bool command_enabled_preview(const char *argument);
|
||||||
void command_execute_preview_fit_to_screen(const char *argument);
|
void command_execute_preview_fit_to_screen(const char *argument);
|
||||||
void command_execute_preview_normal(const char *argument);
|
void command_execute_preview_normal(const char *argument);
|
||||||
void command_execute_preview_tiled(const char *argument);
|
void command_execute_preview_tiled(const char *argument);
|
||||||
void command_execute_quick_copy(const char *argument);
|
/* sprite */
|
||||||
void command_execute_quick_move(const char *argument);
|
|
||||||
void command_execute_record_screen(const char *argument);
|
|
||||||
void command_execute_rectangle_tool(const char *argument);
|
|
||||||
bool command_enabled_redo(const char *argument);
|
|
||||||
void command_execute_redo(const char *argument);
|
|
||||||
void command_execute_refresh(const char *argument);
|
|
||||||
void command_execute_remove_frame(const char *argument);
|
|
||||||
void command_execute_remove_layer(const char *argument);
|
|
||||||
void command_execute_replace_color(const char *argument);
|
|
||||||
void command_execute_reselect_mask(const char *argument);
|
|
||||||
void command_execute_run_script(const char *argument);
|
|
||||||
void command_execute_save_file(const char *argument);
|
|
||||||
bool command_enabled_save_file_as(const char *argument);
|
|
||||||
void command_execute_save_file_as(const char *argument);
|
|
||||||
void command_execute_save_mask(const char *argument);
|
|
||||||
void command_execute_save_session(const char *argument);
|
|
||||||
void command_execute_screen_shot(const char *argument);
|
|
||||||
bool command_enabled_select_file(const char *argument);
|
|
||||||
bool command_selected_select_file(const char *argument);
|
|
||||||
void command_execute_select_file(const char *argument);
|
|
||||||
void command_execute_split_editor_horizontally(const char *argument);
|
|
||||||
void command_execute_split_editor_vertically(const char *argument);
|
|
||||||
void command_execute_spray_tool(const char *argument);
|
|
||||||
void command_execute_sprite_properties(const char *argument);
|
void command_execute_sprite_properties(const char *argument);
|
||||||
|
void command_execute_duplicate_sprite(const char *argument);
|
||||||
|
void command_execute_change_image_type(const char *argument);
|
||||||
|
void command_execute_crop_sprite(const char *argument);
|
||||||
|
void command_execute_auto_crop_sprite(const char *argument);
|
||||||
|
/* layer */
|
||||||
|
void command_execute_layer_properties(const char *argument);
|
||||||
|
void command_execute_new_layer(const char *argument);
|
||||||
|
void command_execute_new_layer_set(const char *argument);
|
||||||
|
void command_execute_remove_layer(const char *argument);
|
||||||
|
void command_execute_duplicate_layer(const char *argument);
|
||||||
|
void command_execute_merge_down_layer(const char *argument);
|
||||||
|
void command_execute_flatten_layers(const char *argument);
|
||||||
|
void command_execute_crop_layer(const char *argument);
|
||||||
|
/* frame */
|
||||||
|
void command_execute_frame_properties(const char *argument);
|
||||||
|
void command_execute_remove_frame(const char *argument);
|
||||||
|
void command_execute_new_frame(const char *argument);
|
||||||
|
void command_execute_move_frame(const char *argument);
|
||||||
|
void command_execute_copy_frame(const char *argument);
|
||||||
|
void command_execute_link_frame(const char *argument);
|
||||||
|
void command_execute_crop_frame(const char *argument);
|
||||||
|
/* select */
|
||||||
|
bool command_enabled_mask_all(const char *argument);
|
||||||
|
void command_execute_mask_all(const char *argument);
|
||||||
|
bool command_enabled_deselect_mask(const char *argument);
|
||||||
|
void command_execute_deselect_mask(const char *argument);
|
||||||
|
bool command_enabled_reselect_mask(const char *argument);
|
||||||
|
void command_execute_reselect_mask(const char *argument);
|
||||||
|
bool command_enabled_invert_mask(const char *argument);
|
||||||
|
void command_execute_invert_mask(const char *argument);
|
||||||
|
bool command_enabled_mask_by_color(const char *argument);
|
||||||
|
void command_execute_mask_by_color(const char *argument);
|
||||||
|
bool command_enabled_load_mask(const char *argument);
|
||||||
|
void command_execute_load_mask(const char *argument);
|
||||||
|
bool command_enabled_save_mask(const char *argument);
|
||||||
|
void command_execute_save_mask(const char *argument);
|
||||||
|
/* tools */
|
||||||
|
void command_execute_configure_tools(const char *argument);
|
||||||
|
bool command_checked_marker_tool(const char *argument);
|
||||||
|
void command_execute_marker_tool(const char *argument);
|
||||||
|
bool command_checked_dots_tool(const char *argument);
|
||||||
|
void command_execute_dots_tool(const char *argument);
|
||||||
|
bool command_checked_pencil_tool(const char *argument);
|
||||||
|
void command_execute_pencil_tool(const char *argument);
|
||||||
|
bool command_checked_brush_tool(const char *argument);
|
||||||
|
void command_execute_brush_tool(const char *argument);
|
||||||
|
bool command_checked_spray_tool(const char *argument);
|
||||||
|
void command_execute_spray_tool(const char *argument);
|
||||||
|
bool command_checked_floodfill_tool(const char *argument);
|
||||||
|
void command_execute_floodfill_tool(const char *argument);
|
||||||
|
bool command_checked_line_tool(const char *argument);
|
||||||
|
void command_execute_line_tool(const char *argument);
|
||||||
|
bool command_checked_rectangle_tool(const char *argument);
|
||||||
|
void command_execute_rectangle_tool(const char *argument);
|
||||||
|
bool command_checked_ellipse_tool(const char *argument);
|
||||||
|
void command_execute_ellipse_tool(const char *argument);
|
||||||
|
void command_execute_film_editor(const char *argument);
|
||||||
|
void command_execute_palette_editor(const char *argument);
|
||||||
|
void command_execute_convolution_matrix(const char *argument);
|
||||||
|
void command_execute_color_curve(const char *argument);
|
||||||
|
void command_execute_despeckle(const char *argument);
|
||||||
|
/* void command_execute_draw_text(const char *argument); */
|
||||||
|
/* void command_execute_play_flic(const char *argument); */
|
||||||
|
/* void command_execute_mapgen(const char *argument); */
|
||||||
|
void command_execute_run_script(const char *argument);
|
||||||
void command_execute_tips(const char *argument);
|
void command_execute_tips(const char *argument);
|
||||||
bool command_enabled_undo(const char *argument);
|
void command_execute_options(const char *argument);
|
||||||
void command_execute_undo(const char *argument);
|
/* internal commands */
|
||||||
|
bool command_enabled_select_file(const char *argument);
|
||||||
|
bool command_checked_select_file(const char *argument);
|
||||||
|
void command_execute_select_file(const char *argument);
|
||||||
|
|
||||||
|
/* EXE=execute, ENA=enabled, CHK=checked */
|
||||||
|
#define CMD_EXE(name) { #name, NULL, NULL, command_execute_##name, NULL }
|
||||||
|
#define CMD_EXE_ENA(name) { #name, command_enabled_##name, NULL, command_execute_##name, NULL }
|
||||||
|
#define CMD_EXE_ENA2(name,name2){ #name, command_enabled_##name2, NULL, command_execute_##name, NULL }
|
||||||
|
#define CMD_EXE_ENA_CHK(name) { #name, command_enabled_##name, command_checked_##name, command_execute_##name, NULL }
|
||||||
|
#define CMD_EXE_CHK(name) { #name, NULL, command_checked_##name, command_execute_##name, NULL }
|
||||||
|
|
||||||
static Command commands[] = {
|
static Command commands[] = {
|
||||||
CMD0(new_file),
|
CMD_EXE(new_file),
|
||||||
CMD0(open_file),
|
CMD_EXE(open_file),
|
||||||
{ CMD_SAVE_FILE, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(save_file),
|
||||||
CMD1(save_file_as),
|
CMD_EXE_ENA(save_file_as),
|
||||||
CMD1(close_file),
|
CMD_EXE_ENA(close_file),
|
||||||
CMD1(close_all_files),
|
CMD_EXE_ENA(close_all_files),
|
||||||
{ CMD_SCREEN_SHOT, NULL, NULL, NULL, NULL },
|
CMD_EXE(screen_shot),
|
||||||
{ CMD_RECORD_SCREEN, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(record_screen),
|
||||||
{ CMD_LOAD_SESSION, NULL, NULL, NULL, NULL },
|
CMD_EXE(about),
|
||||||
{ CMD_SAVE_SESSION, NULL, NULL, NULL, NULL },
|
CMD_EXE(exit),
|
||||||
CMD0(about),
|
CMD_EXE_ENA(undo),
|
||||||
CMD0(exit),
|
CMD_EXE_ENA(redo),
|
||||||
CMD1(undo),
|
CMD_EXE_ENA(cut),
|
||||||
CMD1(redo),
|
CMD_EXE_ENA(copy),
|
||||||
{ CMD_CUT, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(paste),
|
||||||
{ CMD_COPY, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(clear),
|
||||||
{ CMD_PASTE, NULL, NULL, NULL, NULL },
|
|
||||||
{ CMD_CLEAR, NULL, NULL, NULL, NULL },
|
|
||||||
{ CMD_QUICK_MOVE, NULL, NULL, NULL, NULL },
|
{ CMD_QUICK_MOVE, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_QUICK_COPY, NULL, NULL, NULL, NULL },
|
{ CMD_QUICK_COPY, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_FLIP_HORIZONTAL, NULL, NULL, NULL, NULL },
|
{ CMD_FLIP_HORIZONTAL, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_FLIP_VERTICAL, NULL, NULL, NULL, NULL },
|
{ CMD_FLIP_VERTICAL, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_REPLACE_COLOR, NULL, NULL, NULL, NULL },
|
{ CMD_REPLACE_COLOR, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_INVERT_COLOR, NULL, NULL, NULL, NULL },
|
{ CMD_INVERT_COLOR, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_REFRESH, NULL, NULL, NULL, NULL },
|
CMD_EXE(refresh),
|
||||||
{ CMD_CONFIGURE_SCREEN, NULL, NULL, NULL, NULL },
|
{ CMD_CONFIGURE_SCREEN, NULL, NULL, NULL, NULL },
|
||||||
CMD0(advanced_mode),
|
CMD_EXE(advanced_mode),
|
||||||
CMD0(make_unique_editor),
|
CMD_EXE(make_unique_editor),
|
||||||
CMD0(split_editor_vertically),
|
CMD_EXE(split_editor_vertically),
|
||||||
CMD0(split_editor_horizontally),
|
CMD_EXE(split_editor_horizontally),
|
||||||
CMD0(close_editor),
|
CMD_EXE(close_editor),
|
||||||
CMD2(preview_tiled,preview),
|
CMD_EXE_ENA2(preview_tiled, preview),
|
||||||
CMD2(preview_normal,preview),
|
CMD_EXE_ENA2(preview_normal, preview),
|
||||||
CMD2(preview_fit_to_screen,preview),
|
CMD_EXE_ENA2(preview_fit_to_screen, preview),
|
||||||
{ CMD_SPRITE_PROPERTIES, NULL, NULL, NULL, NULL },
|
{ CMD_SPRITE_PROPERTIES, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_DUPLICATE_SPRITE, NULL, NULL, NULL, NULL },
|
{ CMD_DUPLICATE_SPRITE, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_CHANGE_IMAGE_TYPE, NULL, NULL, NULL, NULL },
|
{ CMD_CHANGE_IMAGE_TYPE, NULL, NULL, NULL, NULL },
|
||||||
|
@ -186,37 +214,35 @@ static Command commands[] = {
|
||||||
{ CMD_COPY_FRAME, NULL, NULL, NULL, NULL },
|
{ CMD_COPY_FRAME, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_LINK_FRAME, NULL, NULL, NULL, NULL },
|
{ CMD_LINK_FRAME, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_CROP_FRAME, NULL, NULL, NULL, NULL },
|
{ CMD_CROP_FRAME, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_MASK_ALL, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(mask_all),
|
||||||
{ CMD_DESELECT_MASK, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(deselect_mask),
|
||||||
{ CMD_RESELECT_MASK, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(reselect_mask),
|
||||||
{ CMD_INVERT_MASK, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(invert_mask),
|
||||||
{ CMD_MASK_BY_COLOR, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(mask_by_color),
|
||||||
{ CMD_MASK_REPOSITORY, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(load_mask),
|
||||||
{ CMD_LOAD_MASK, NULL, NULL, NULL, NULL },
|
CMD_EXE_ENA(save_mask),
|
||||||
{ CMD_SAVE_MASK, NULL, NULL, NULL, NULL },
|
CMD_EXE(configure_tools),
|
||||||
{ CMD_CONFIGURE_TOOLS, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(marker_tool),
|
||||||
{ CMD_MARKER_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(dots_tool),
|
||||||
{ CMD_DOTS_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(pencil_tool),
|
||||||
{ CMD_PENCIL_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(brush_tool),
|
||||||
{ CMD_BRUSH_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(spray_tool),
|
||||||
{ CMD_SPRAY_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(floodfill_tool),
|
||||||
{ CMD_FLOODFILL_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(line_tool),
|
||||||
{ CMD_LINE_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(rectangle_tool),
|
||||||
{ CMD_RECTANGLE_TOOL, NULL, NULL, NULL, NULL },
|
CMD_EXE_CHK(ellipse_tool),
|
||||||
{ CMD_ELLIPSE_TOOL, NULL, NULL, NULL, NULL },
|
|
||||||
{ CMD_FILM_EDITOR, NULL, NULL, NULL, NULL },
|
{ CMD_FILM_EDITOR, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_PALETTE_EDITOR, NULL, NULL, NULL, NULL },
|
{ CMD_PALETTE_EDITOR, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_CONVOLUTION_MATRIX, NULL, NULL, NULL, NULL },
|
{ CMD_CONVOLUTION_MATRIX, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_COLOR_CURVE, NULL, NULL, NULL, NULL },
|
{ CMD_COLOR_CURVE, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_DESPECKLE, NULL, NULL, NULL, NULL },
|
{ CMD_DESPECKLE, NULL, NULL, NULL, NULL },
|
||||||
{ CMD_DRAW_TEXT, NULL, NULL, NULL, NULL },
|
/* { CMD_DRAW_TEXT, NULL, NULL, NULL, NULL }, */
|
||||||
{ CMD_PLAY_FLIC, NULL, NULL, NULL, NULL },
|
/* { CMD_PLAY_FLIC, NULL, NULL, NULL, NULL }, */
|
||||||
{ CMD_MAPGEN, NULL, NULL, NULL, NULL },
|
/* { CMD_MAPGEN, NULL, NULL, NULL, NULL }, */
|
||||||
{ CMD_RUN_SCRIPT, NULL, NULL, NULL, NULL },
|
{ CMD_RUN_SCRIPT, NULL, NULL, NULL, NULL },
|
||||||
CMD0(tips),
|
CMD_EXE(tips),
|
||||||
CMD0(customize),
|
CMD_EXE(options),
|
||||||
CMD0(options),
|
CMD_EXE_ENA_CHK(select_file),
|
||||||
CMD3(select_file),
|
|
||||||
{ NULL, NULL, NULL, NULL, NULL }
|
{ NULL, NULL, NULL, NULL, NULL }
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -248,6 +274,10 @@ Command *command_get_by_key(JMessage msg)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns true if the current state of the program fulfills the
|
||||||
|
* preconditions to execute this command.
|
||||||
|
*/
|
||||||
bool command_is_enabled(Command *command, const char *argument)
|
bool command_is_enabled(Command *command, const char *argument)
|
||||||
{
|
{
|
||||||
if (command && command->enabled)
|
if (command && command->enabled)
|
||||||
|
@ -256,18 +286,22 @@ bool command_is_enabled(Command *command, const char *argument)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool command_is_selected(Command *command, const char *argument)
|
bool command_is_checked(Command *command, const char *argument)
|
||||||
{
|
{
|
||||||
if (command && command->selected)
|
if (command && command->checked)
|
||||||
return (*command->selected)(argument);
|
return (*command->checked)(argument);
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes the command. You can be sure that the command will be
|
||||||
|
* executed only if it is enabled.
|
||||||
|
*/
|
||||||
void command_execute(Command *command, const char *argument)
|
void command_execute(Command *command, const char *argument)
|
||||||
{
|
{
|
||||||
if (command && command->execute) {
|
if (command && command->execute &&
|
||||||
PRINTF("Executing command \"%s\"\n", command->name);
|
command_is_enabled(command, argument)) {
|
||||||
(*command->execute)(argument);
|
(*command->execute)(argument);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
#include "jinete/base.h"
|
#include "jinete/base.h"
|
||||||
|
|
||||||
|
/* file */
|
||||||
#define CMD_NEW_FILE "new_file"
|
#define CMD_NEW_FILE "new_file"
|
||||||
#define CMD_OPEN_FILE "open_file"
|
#define CMD_OPEN_FILE "open_file"
|
||||||
#define CMD_SAVE_FILE "save_file"
|
#define CMD_SAVE_FILE "save_file"
|
||||||
|
@ -29,10 +30,9 @@
|
||||||
#define CMD_CLOSE_ALL_FILES "close_all_files"
|
#define CMD_CLOSE_ALL_FILES "close_all_files"
|
||||||
#define CMD_SCREEN_SHOT "screen_shot"
|
#define CMD_SCREEN_SHOT "screen_shot"
|
||||||
#define CMD_RECORD_SCREEN "record_screen"
|
#define CMD_RECORD_SCREEN "record_screen"
|
||||||
#define CMD_LOAD_SESSION "load_session"
|
|
||||||
#define CMD_SAVE_SESSION "save_session"
|
|
||||||
#define CMD_ABOUT "about"
|
#define CMD_ABOUT "about"
|
||||||
#define CMD_EXIT "exit"
|
#define CMD_EXIT "exit"
|
||||||
|
/* edit */
|
||||||
#define CMD_UNDO "undo"
|
#define CMD_UNDO "undo"
|
||||||
#define CMD_REDO "redo"
|
#define CMD_REDO "redo"
|
||||||
#define CMD_CUT "cut"
|
#define CMD_CUT "cut"
|
||||||
|
@ -45,6 +45,7 @@
|
||||||
#define CMD_FLIP_VERTICAL "flip_vertical"
|
#define CMD_FLIP_VERTICAL "flip_vertical"
|
||||||
#define CMD_REPLACE_COLOR "replace_color"
|
#define CMD_REPLACE_COLOR "replace_color"
|
||||||
#define CMD_INVERT_COLOR "invert_color"
|
#define CMD_INVERT_COLOR "invert_color"
|
||||||
|
/* view */
|
||||||
#define CMD_REFRESH "refresh"
|
#define CMD_REFRESH "refresh"
|
||||||
#define CMD_CONFIGURE_SCREEN "configure_screen"
|
#define CMD_CONFIGURE_SCREEN "configure_screen"
|
||||||
#define CMD_ADVANCED_MODE "advanced_mode"
|
#define CMD_ADVANCED_MODE "advanced_mode"
|
||||||
|
@ -55,11 +56,13 @@
|
||||||
#define CMD_PREVIEW_TILED "preview_tiled"
|
#define CMD_PREVIEW_TILED "preview_tiled"
|
||||||
#define CMD_PREVIEW_NORMAL "preview_normal"
|
#define CMD_PREVIEW_NORMAL "preview_normal"
|
||||||
#define CMD_PREVIEW_FIT_TO_SCREEN "preview_fit_to_screen"
|
#define CMD_PREVIEW_FIT_TO_SCREEN "preview_fit_to_screen"
|
||||||
|
/* sprite */
|
||||||
#define CMD_SPRITE_PROPERTIES "sprite_properties"
|
#define CMD_SPRITE_PROPERTIES "sprite_properties"
|
||||||
#define CMD_DUPLICATE_SPRITE "duplicate_sprite"
|
#define CMD_DUPLICATE_SPRITE "duplicate_sprite"
|
||||||
#define CMD_CHANGE_IMAGE_TYPE "change_image_type"
|
#define CMD_CHANGE_IMAGE_TYPE "change_image_type"
|
||||||
#define CMD_CROP_SPRITE "crop_sprite"
|
#define CMD_CROP_SPRITE "crop_sprite"
|
||||||
#define CMD_AUTO_CROP_SPRITE "auto_crop_sprite"
|
#define CMD_AUTO_CROP_SPRITE "auto_crop_sprite"
|
||||||
|
/* layer */
|
||||||
#define CMD_LAYER_PROPERTIES "layer_properties"
|
#define CMD_LAYER_PROPERTIES "layer_properties"
|
||||||
#define CMD_NEW_LAYER "new_layer"
|
#define CMD_NEW_LAYER "new_layer"
|
||||||
#define CMD_NEW_LAYER_SET "new_layer_set"
|
#define CMD_NEW_LAYER_SET "new_layer_set"
|
||||||
|
@ -68,6 +71,7 @@
|
||||||
#define CMD_MERGE_DOWN_LAYER "merge_down_layer"
|
#define CMD_MERGE_DOWN_LAYER "merge_down_layer"
|
||||||
#define CMD_FLATTEN_LAYERS "flatten_layers"
|
#define CMD_FLATTEN_LAYERS "flatten_layers"
|
||||||
#define CMD_CROP_LAYER "crop_layer"
|
#define CMD_CROP_LAYER "crop_layer"
|
||||||
|
/* frame */
|
||||||
#define CMD_FRAME_PROPERTIES "frame_properties"
|
#define CMD_FRAME_PROPERTIES "frame_properties"
|
||||||
#define CMD_REMOVE_FRAME "remove_frame"
|
#define CMD_REMOVE_FRAME "remove_frame"
|
||||||
#define CMD_NEW_FRAME "new_frame"
|
#define CMD_NEW_FRAME "new_frame"
|
||||||
|
@ -75,14 +79,15 @@
|
||||||
#define CMD_COPY_FRAME "copy_frame"
|
#define CMD_COPY_FRAME "copy_frame"
|
||||||
#define CMD_LINK_FRAME "link_frame"
|
#define CMD_LINK_FRAME "link_frame"
|
||||||
#define CMD_CROP_FRAME "crop_frame"
|
#define CMD_CROP_FRAME "crop_frame"
|
||||||
|
/* select */
|
||||||
#define CMD_MASK_ALL "mask_all"
|
#define CMD_MASK_ALL "mask_all"
|
||||||
#define CMD_DESELECT_MASK "deselect_mask"
|
#define CMD_DESELECT_MASK "deselect_mask"
|
||||||
#define CMD_RESELECT_MASK "reselect_mask"
|
#define CMD_RESELECT_MASK "reselect_mask"
|
||||||
#define CMD_INVERT_MASK "invert_mask"
|
#define CMD_INVERT_MASK "invert_mask"
|
||||||
#define CMD_MASK_BY_COLOR "mask_by_color"
|
#define CMD_MASK_BY_COLOR "mask_by_color"
|
||||||
#define CMD_MASK_REPOSITORY "mask_repository"
|
|
||||||
#define CMD_LOAD_MASK "load_mask"
|
#define CMD_LOAD_MASK "load_mask"
|
||||||
#define CMD_SAVE_MASK "save_mask"
|
#define CMD_SAVE_MASK "save_mask"
|
||||||
|
/* tools */
|
||||||
#define CMD_CONFIGURE_TOOLS "configure_tools"
|
#define CMD_CONFIGURE_TOOLS "configure_tools"
|
||||||
#define CMD_MARKER_TOOL "marker_tool"
|
#define CMD_MARKER_TOOL "marker_tool"
|
||||||
#define CMD_DOTS_TOOL "dots_tool"
|
#define CMD_DOTS_TOOL "dots_tool"
|
||||||
|
@ -98,23 +103,24 @@
|
||||||
#define CMD_CONVOLUTION_MATRIX "convolution_matrix"
|
#define CMD_CONVOLUTION_MATRIX "convolution_matrix"
|
||||||
#define CMD_COLOR_CURVE "color_curve"
|
#define CMD_COLOR_CURVE "color_curve"
|
||||||
#define CMD_DESPECKLE "despeckle"
|
#define CMD_DESPECKLE "despeckle"
|
||||||
#define CMD_DRAW_TEXT "draw_text"
|
/* #define CMD_DRAW_TEXT "draw_text" */
|
||||||
#define CMD_PLAY_FLIC "play_flic"
|
/* #define CMD_PLAY_FLIC "play_flic" */
|
||||||
#define CMD_MAPGEN "mapgen"
|
/* #define CMD_MAPGEN "mapgen" */
|
||||||
#define CMD_RUN_SCRIPT "run_script"
|
#define CMD_RUN_SCRIPT "run_script"
|
||||||
#define CMD_TIPS "tips"
|
#define CMD_TIPS "tips"
|
||||||
#define CMD_CUSTOMIZE "customize"
|
|
||||||
#define CMD_OPTIONS "options"
|
#define CMD_OPTIONS "options"
|
||||||
|
/* internal commands */
|
||||||
#define CMD_SELECT_FILE "select_file"
|
#define CMD_SELECT_FILE "select_file"
|
||||||
|
|
||||||
|
|
||||||
typedef struct Command Command;
|
typedef struct Command Command;
|
||||||
|
|
||||||
struct Command
|
struct Command
|
||||||
{
|
{
|
||||||
const char *name;
|
const char *name;
|
||||||
bool (*enabled)(const char *argument);
|
bool (*enabled)(const char *argument); /* preconditions to execute the command */
|
||||||
bool (*selected)(const char *argument);
|
bool (*checked)(const char *argument); /* should the menu-item be checked? */
|
||||||
void (*execute)(const char *argument);
|
void (*execute)(const char *argument); /* execute the command (after check the preconditions) */
|
||||||
JAccel accel;
|
JAccel accel;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,7 +128,7 @@ Command *command_get_by_name(const char *name);
|
||||||
Command *command_get_by_key(JMessage msg);
|
Command *command_get_by_key(JMessage msg);
|
||||||
|
|
||||||
bool command_is_enabled(Command *command, const char *argument);
|
bool command_is_enabled(Command *command, const char *argument);
|
||||||
bool command_is_selected(Command *command, const char *argument);
|
bool command_is_checked(Command *command, const char *argument);
|
||||||
void command_execute(Command *command, const char *argument);
|
void command_execute(Command *command, const char *argument);
|
||||||
|
|
||||||
bool command_is_key_pressed(Command *command, JMessage msg);
|
bool command_is_key_pressed(Command *command, JMessage msg);
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
|
|
||||||
#include "core/app.h"
|
#include "core/app.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
|
#include "modules/gui.h"
|
||||||
#include "widgets/statebar.h"
|
#include "widgets/statebar.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -104,7 +105,7 @@ void console_close (void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void console_printf (const char *format, ...)
|
void console_printf(const char *format, ...)
|
||||||
{
|
{
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
@ -168,29 +169,35 @@ void user_printf (const char *format, ...)
|
||||||
allegro_message (buf);
|
allegro_message (buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
void do_progress (int progress)
|
void do_progress(int progress)
|
||||||
{
|
{
|
||||||
JWidget status_bar = app_get_status_bar ();
|
JWidget status_bar = app_get_status_bar();
|
||||||
|
|
||||||
if (status_bar) {
|
if (status_bar) {
|
||||||
status_bar_do_progress (status_bar, progress);
|
status_bar_do_progress(status_bar, progress);
|
||||||
jwidget_flush_redraw (status_bar);
|
|
||||||
jmanager_dispatch_messages ();
|
jwidget_flush_redraw(status_bar);
|
||||||
|
jmanager_dispatch_messages();
|
||||||
|
gui_feedback();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void add_progress (int max)
|
void add_progress(int max)
|
||||||
{
|
{
|
||||||
JWidget status_bar = app_get_status_bar ();
|
JWidget status_bar = app_get_status_bar();
|
||||||
|
|
||||||
if (status_bar)
|
if (status_bar)
|
||||||
status_bar_add_progress (status_bar, max);
|
status_bar_add_progress(status_bar, max);
|
||||||
|
|
||||||
|
jmouse_hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
void del_progress (void)
|
void del_progress(void)
|
||||||
{
|
{
|
||||||
JWidget status_bar = app_get_status_bar();
|
JWidget status_bar = app_get_status_bar();
|
||||||
|
|
||||||
if (status_bar)
|
if (status_bar)
|
||||||
status_bar_del_progress(status_bar);
|
status_bar_del_progress(status_bar);
|
||||||
|
|
||||||
|
jmouse_show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "core/cfg.h"
|
#include "core/cfg.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/modules.h"
|
#include "core/modules.h"
|
||||||
#include "core/shutdown.h"
|
|
||||||
#include "dialogs/options.h"
|
#include "dialogs/options.h"
|
||||||
#include "dialogs/tips.h"
|
#include "dialogs/tips.h"
|
||||||
#include "file/file.h"
|
#include "file/file.h"
|
||||||
|
@ -153,9 +152,6 @@ int app_init(int argc, char *argv[])
|
||||||
/* set system palette to the default one */
|
/* set system palette to the default one */
|
||||||
set_current_palette (NULL, TRUE);
|
set_current_palette (NULL, TRUE);
|
||||||
|
|
||||||
/* add the abnormal program exit handler */
|
|
||||||
init_shutdown_handler ();
|
|
||||||
|
|
||||||
/* ok */
|
/* ok */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -238,8 +234,9 @@ void app_loop(void)
|
||||||
load_all_scripts();
|
load_all_scripts();
|
||||||
|
|
||||||
/* set background mode for non-GUI modes */
|
/* set background mode for non-GUI modes */
|
||||||
if (!(ase_mode & MODE_GUI))
|
/* if (!(ase_mode & MODE_GUI)) */
|
||||||
set_display_switch_mode(SWITCH_BACKAMNESIA);
|
/* set_display_switch_mode(SWITCH_BACKAMNESIA); */
|
||||||
|
set_display_switch_mode(SWITCH_BACKGROUND);
|
||||||
|
|
||||||
/* procress options */
|
/* procress options */
|
||||||
PRINTF("Processing options...\n");
|
PRINTF("Processing options...\n");
|
||||||
|
@ -334,9 +331,6 @@ void app_exit(void)
|
||||||
core_exit();
|
core_exit();
|
||||||
_ji_font_exit();
|
_ji_font_exit();
|
||||||
|
|
||||||
/* remove the shutdown handler */
|
|
||||||
remove_shutdown_handler();
|
|
||||||
|
|
||||||
/* final copyright message */
|
/* final copyright message */
|
||||||
if (ase_mode & MODE_GUI) {
|
if (ase_mode & MODE_GUI) {
|
||||||
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
|
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
|
||||||
|
|
|
@ -1,185 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "jinete/alert.h"
|
|
||||||
#include "jinete/box.h"
|
|
||||||
#include "jinete/button.h"
|
|
||||||
#include "jinete/entry.h"
|
|
||||||
#include "jinete/label.h"
|
|
||||||
#include "jinete/list.h"
|
|
||||||
#include "jinete/listbox.h"
|
|
||||||
#include "jinete/widget.h"
|
|
||||||
#include "jinete/window.h"
|
|
||||||
|
|
||||||
#include "core/core.h"
|
|
||||||
#include "dialogs/repo.h"
|
|
||||||
#include "modules/editors.h"
|
|
||||||
#include "modules/gui.h"
|
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "raster/mask.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static JWidget new_listitem (Mask *mask);
|
|
||||||
|
|
||||||
static void load_listbox (RepoDlg *repo_dlg);
|
|
||||||
static bool use_listitem (RepoDlg *repo_dlg);
|
|
||||||
static bool add_listitem (RepoDlg *repo_dlg, int *added);
|
|
||||||
static bool delete_listitem (RepoDlg *repo_dlg, int *kill);
|
|
||||||
|
|
||||||
void dialogs_mask_repository(void)
|
|
||||||
{
|
|
||||||
RepoDlg repo_dlg = {
|
|
||||||
"MaskRepository",
|
|
||||||
_("Mask Repository"),
|
|
||||||
_("&Replace"),
|
|
||||||
load_listbox,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
use_listitem,
|
|
||||||
add_listitem,
|
|
||||||
delete_listitem,
|
|
||||||
{ NULL, NULL, NULL, NULL }
|
|
||||||
};
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
|
|
||||||
if (!is_interactive () || !sprite)
|
|
||||||
return;
|
|
||||||
|
|
||||||
ji_show_repo_dlg (&repo_dlg);
|
|
||||||
}
|
|
||||||
|
|
||||||
static JWidget new_listitem (Mask *mask)
|
|
||||||
{
|
|
||||||
char buf[256];
|
|
||||||
JWidget listitem;
|
|
||||||
|
|
||||||
sprintf (buf, "%s (%d %d)", mask->name, mask->w, mask->h);
|
|
||||||
|
|
||||||
listitem = jlistitem_new (buf);
|
|
||||||
listitem->user_data[0] = mask;
|
|
||||||
|
|
||||||
return listitem;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void load_listbox (RepoDlg *repo_dlg)
|
|
||||||
{
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
JLink link;
|
|
||||||
|
|
||||||
/* disable "Add" button if there isn't a current mask */
|
|
||||||
if (!sprite->mask->bitmap)
|
|
||||||
jwidget_disable (repo_dlg->button_add);
|
|
||||||
|
|
||||||
/* add new items to the list-box */
|
|
||||||
JI_LIST_FOR_EACH(sprite->repository.masks, link)
|
|
||||||
jwidget_add_child (repo_dlg->listbox, new_listitem (link->data));
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool use_listitem(RepoDlg *repo_dlg)
|
|
||||||
{
|
|
||||||
JWidget listitem = repo_dlg->listitem;
|
|
||||||
Mask *mask = listitem->user_data[0];
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
|
|
||||||
/* XXXX undo stuff */
|
|
||||||
sprite_set_mask(sprite, mask);
|
|
||||||
sprite_generate_mask_boundaries(sprite);
|
|
||||||
GUI_Refresh(sprite);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool add_listitem (RepoDlg *repo_dlg, int *added)
|
|
||||||
{
|
|
||||||
JWidget window, box1, box2, box3;
|
|
||||||
JWidget label_name, entry_name, button_ok, button_cancel;
|
|
||||||
|
|
||||||
window = jwindow_new (_("New Mask"));
|
|
||||||
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, _("Current Mask"));
|
|
||||||
button_ok = jbutton_new (_("&OK"));
|
|
||||||
button_cancel = jbutton_new (_("&Cancel"));
|
|
||||||
|
|
||||||
jwidget_magnetic (button_ok, TRUE);
|
|
||||||
|
|
||||||
jwidget_expansive (entry_name, TRUE);
|
|
||||||
jwidget_expansive (box3, TRUE);
|
|
||||||
|
|
||||||
jwidget_add_child (box2, label_name);
|
|
||||||
jwidget_add_child (box2, entry_name);
|
|
||||||
jwidget_add_child (box1, box2);
|
|
||||||
jwidget_add_child (box3, button_ok);
|
|
||||||
jwidget_add_child (box3, button_cancel);
|
|
||||||
jwidget_add_child (box1, box3);
|
|
||||||
jwidget_add_child (window, box1);
|
|
||||||
|
|
||||||
jwindow_open_fg (window);
|
|
||||||
|
|
||||||
if (jwindow_get_killer (window) == button_ok) {
|
|
||||||
const char *name = jwidget_get_text (entry_name);
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
Mask *mask;
|
|
||||||
|
|
||||||
/* if the mask already exists */
|
|
||||||
if (sprite_request_mask (sprite, name)) {
|
|
||||||
jalert (_("Error"
|
|
||||||
"<<You can't have two masks with"
|
|
||||||
"<<the same name in the repository||&OK"));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mask = mask_new_copy (sprite->mask);
|
|
||||||
|
|
||||||
/* set the mask's name */
|
|
||||||
mask_set_name (mask, name);
|
|
||||||
|
|
||||||
/* append the mask */
|
|
||||||
sprite_add_mask (sprite, mask);
|
|
||||||
|
|
||||||
/* we added the new mask */
|
|
||||||
jwidget_add_child (repo_dlg->listbox, new_listitem (mask));
|
|
||||||
*added = TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
jwidget_free (window);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool delete_listitem (RepoDlg *repo_dlg, int *kill)
|
|
||||||
{
|
|
||||||
JWidget listitem = repo_dlg->listitem;
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
Mask *mask = listitem->user_data[0];
|
|
||||||
|
|
||||||
sprite_remove_mask (sprite, mask);
|
|
||||||
mask_free (mask);
|
|
||||||
|
|
||||||
*kill = TRUE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DIALOGS_MASKREPO_H
|
|
||||||
#define DIALOGS_MASKREPO_H
|
|
||||||
|
|
||||||
void dialogs_mask_repository(void);
|
|
||||||
|
|
||||||
#endif /* DIALOGS_MASKREPO_H */
|
|
||||||
|
|
|
@ -81,7 +81,7 @@ void dialogs_options(void)
|
||||||
{
|
{
|
||||||
JWidget window, move_delay, check_smooth, check_dither;
|
JWidget window, move_delay, check_smooth, check_dither;
|
||||||
JWidget button_font, button_lang, button_ok, button_save;
|
JWidget button_font, button_lang, button_ok, button_save;
|
||||||
JWidget move_click2, draw_click2, askbkpses, killer;
|
JWidget move_click2, draw_click2, killer;
|
||||||
int x, y, old_x, old_y;
|
int x, y, old_x, old_y;
|
||||||
char *default_font;
|
char *default_font;
|
||||||
|
|
||||||
|
@ -109,7 +109,6 @@ void dialogs_options(void)
|
||||||
"draw_click2", &draw_click2,
|
"draw_click2", &draw_click2,
|
||||||
"button_font", &button_font,
|
"button_font", &button_font,
|
||||||
"button_lang", &button_lang,
|
"button_lang", &button_lang,
|
||||||
"askbkpses", &askbkpses,
|
|
||||||
"button_ok", &button_ok,
|
"button_ok", &button_ok,
|
||||||
"button_save", &button_save, NULL)) {
|
"button_save", &button_save, NULL)) {
|
||||||
jwidget_free (window);
|
jwidget_free (window);
|
||||||
|
@ -124,8 +123,6 @@ void dialogs_options(void)
|
||||||
jwidget_select (move_click2);
|
jwidget_select (move_click2);
|
||||||
if (get_config_bool ("Options", "DrawClick2", FALSE))
|
if (get_config_bool ("Options", "DrawClick2", FALSE))
|
||||||
jwidget_select (draw_click2);
|
jwidget_select (draw_click2);
|
||||||
if (get_config_bool ("Options", "AskBkpSes", TRUE))
|
|
||||||
jwidget_select (askbkpses);
|
|
||||||
|
|
||||||
jslider_set_value (move_delay,
|
jslider_set_value (move_delay,
|
||||||
get_config_int ("Options", "MoveDelay", 250));
|
get_config_int ("Options", "MoveDelay", 250));
|
||||||
|
@ -154,7 +151,6 @@ void dialogs_options(void)
|
||||||
set_config_bool ("Options", "MoveSmooth", jwidget_is_selected (check_smooth));
|
set_config_bool ("Options", "MoveSmooth", jwidget_is_selected (check_smooth));
|
||||||
set_config_bool ("Options", "MoveClick2", jwidget_is_selected (move_click2));
|
set_config_bool ("Options", "MoveClick2", jwidget_is_selected (move_click2));
|
||||||
set_config_bool ("Options", "DrawClick2", jwidget_is_selected (draw_click2));
|
set_config_bool ("Options", "DrawClick2", jwidget_is_selected (draw_click2));
|
||||||
set_config_bool ("Options", "AskBkpSes", jwidget_is_selected (askbkpses));
|
|
||||||
|
|
||||||
if (get_config_bool ("Options", "Dither", FALSE)
|
if (get_config_bool ("Options", "Dither", FALSE)
|
||||||
!= jwidget_is_selected (check_dither)) {
|
!= jwidget_is_selected (check_dither)) {
|
||||||
|
|
|
@ -1,330 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include <allegro.h>
|
|
||||||
|
|
||||||
#include "jinete.h"
|
|
||||||
|
|
||||||
#include "core/app.h"
|
|
||||||
#include "modules/editors.h"
|
|
||||||
#include "modules/gfx.h"
|
|
||||||
#include "modules/gui.h"
|
|
||||||
#include "modules/rootmenu.h"
|
|
||||||
#include "modules/sprites.h"
|
|
||||||
#include "modules/tools.h"
|
|
||||||
#include "raster/brush.h"
|
|
||||||
#include "raster/image.h"
|
|
||||||
#include "raster/mask.h"
|
|
||||||
#include "raster/sprite.h"
|
|
||||||
#include "widgets/colbut.h"
|
|
||||||
#include "widgets/editor.h"
|
|
||||||
#include "widgets/groupbut.h"
|
|
||||||
#include "widgets/statebar.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static JWidget window = NULL;
|
|
||||||
|
|
||||||
static bool brush_preview_msg_proc(JWidget widget, JMessage msg);
|
|
||||||
|
|
||||||
static int window_close_hook(JWidget widget, int user_data);
|
|
||||||
static int brush_size_slider_change_hook(JWidget widget, int user_data);
|
|
||||||
static int brush_angle_slider_change_hook(JWidget widget, int user_data);
|
|
||||||
static int brush_type_change_hook(JWidget widget, int user_data);
|
|
||||||
static int brush_mode_change_hook(JWidget widget, int user_data);
|
|
||||||
static int glass_dirty_slider_change_hook(JWidget widget, int user_data);
|
|
||||||
static int spray_width_slider_change_hook(JWidget widget, int user_data);
|
|
||||||
static int air_speed_slider_change_hook(JWidget widget, int user_data);
|
|
||||||
static int filled_check_change_hook(JWidget widget, int user_data);
|
|
||||||
static int tiled_check_change_hook(JWidget widget, int user_data);
|
|
||||||
static int use_grid_check_change_hook(JWidget widget, int user_data);
|
|
||||||
static int view_grid_check_change_hook(JWidget widget, int user_data);
|
|
||||||
static int set_grid_button_select_hook(JWidget widget, int user_data);
|
|
||||||
static int cursor_button_change_hook(JWidget widget, int user_data);
|
|
||||||
static int onionskin_check_change_hook(JWidget widget, int user_data);
|
|
||||||
|
|
||||||
void dialogs_tools_configuration(void)
|
|
||||||
{
|
|
||||||
JWidget filled, tiled, use_grid, view_grid, set_grid;
|
|
||||||
JWidget brush_size, brush_angle, glass_dirty;
|
|
||||||
JWidget spray_width, air_speed;
|
|
||||||
JWidget cursor_color, cursor_color_box;
|
|
||||||
JWidget brush_preview_box;
|
|
||||||
JWidget brush_type_box, brush_type;
|
|
||||||
JWidget brush_mode_box, brush_mode;
|
|
||||||
JWidget check_onionskin;
|
|
||||||
JWidget brush_preview;
|
|
||||||
|
|
||||||
/* if the window is opened, close it */
|
|
||||||
if (window) {
|
|
||||||
jwindow_close (window, NULL);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* if the window is closed, open it */
|
|
||||||
|
|
||||||
window = load_widget ("toolconf.jid", "configure_tool");
|
|
||||||
if (!window)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (!get_widgets (window,
|
|
||||||
"filled", &filled,
|
|
||||||
"tiled", &tiled,
|
|
||||||
"use_grid", &use_grid,
|
|
||||||
"view_grid", &view_grid,
|
|
||||||
"set_grid", &set_grid,
|
|
||||||
"brush_size", &brush_size,
|
|
||||||
"brush_angle", &brush_angle,
|
|
||||||
"glass_dirty", &glass_dirty,
|
|
||||||
"spray_width", &spray_width,
|
|
||||||
"air_speed", &air_speed,
|
|
||||||
"cursor_color_box", &cursor_color_box,
|
|
||||||
"brush_preview_box", &brush_preview_box,
|
|
||||||
"brush_type_box", &brush_type_box,
|
|
||||||
"brush_mode_box", &brush_mode_box,
|
|
||||||
"onionskin", &check_onionskin, NULL)) {
|
|
||||||
jwidget_free (window);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* cursor-color */
|
|
||||||
cursor_color = color_button_new (get_cursor_color (), IMAGE_INDEXED);
|
|
||||||
/* brush-preview */
|
|
||||||
brush_preview = jwidget_new (JI_WIDGET);
|
|
||||||
brush_preview->static_w = 32 + 4;
|
|
||||||
brush_preview->static_h = 32 + 4;
|
|
||||||
jwidget_add_hook (brush_preview, JI_WIDGET,
|
|
||||||
brush_preview_msg_proc, NULL);
|
|
||||||
/* brush-type */
|
|
||||||
brush_type = group_button_new (3, 1, get_brush_type (),
|
|
||||||
GFX_BRUSH_CIRCLE,
|
|
||||||
GFX_BRUSH_SQUARE,
|
|
||||||
GFX_BRUSH_LINE);
|
|
||||||
/* brush-type */
|
|
||||||
brush_mode = group_button_new (3, 1, get_brush_mode (),
|
|
||||||
GFX_DRAWMODE_OPAQUE,
|
|
||||||
GFX_DRAWMODE_GLASS,
|
|
||||||
GFX_DRAWMODE_SEMI);
|
|
||||||
|
|
||||||
/* append children */
|
|
||||||
jwidget_add_child (cursor_color_box, cursor_color);
|
|
||||||
jwidget_add_child (brush_preview_box, brush_preview);
|
|
||||||
jwidget_add_child (brush_type_box, brush_type);
|
|
||||||
jwidget_add_child (brush_mode_box, brush_mode);
|
|
||||||
|
|
||||||
if (get_filled_mode ()) jwidget_select (filled);
|
|
||||||
if (get_tiled_mode ()) jwidget_select (tiled);
|
|
||||||
if (get_use_grid ()) jwidget_select (use_grid);
|
|
||||||
if (get_view_grid ()) jwidget_select (view_grid);
|
|
||||||
jslider_set_value (brush_size, get_brush_size ());
|
|
||||||
jslider_set_value (brush_angle, get_brush_angle ());
|
|
||||||
jslider_set_value (glass_dirty, get_glass_dirty ());
|
|
||||||
jslider_set_value (spray_width, get_spray_width ());
|
|
||||||
jslider_set_value (air_speed, get_air_speed ());
|
|
||||||
if (get_onionskin ()) jwidget_select (check_onionskin);
|
|
||||||
|
|
||||||
HOOK (window, JI_SIGNAL_WINDOW_CLOSE, window_close_hook, 0);
|
|
||||||
HOOK (filled, JI_SIGNAL_CHECK_CHANGE, filled_check_change_hook, 0);
|
|
||||||
HOOK (tiled, JI_SIGNAL_CHECK_CHANGE, tiled_check_change_hook, 0);
|
|
||||||
HOOK (use_grid, JI_SIGNAL_CHECK_CHANGE, use_grid_check_change_hook, 0);
|
|
||||||
HOOK (view_grid, JI_SIGNAL_CHECK_CHANGE, view_grid_check_change_hook, 0);
|
|
||||||
HOOK (set_grid, JI_SIGNAL_BUTTON_SELECT, set_grid_button_select_hook, 0);
|
|
||||||
HOOK (brush_size, JI_SIGNAL_SLIDER_CHANGE, brush_size_slider_change_hook, brush_preview);
|
|
||||||
HOOK (brush_angle, JI_SIGNAL_SLIDER_CHANGE, brush_angle_slider_change_hook, brush_preview);
|
|
||||||
HOOK (brush_type, SIGNAL_GROUP_BUTTON_CHANGE, brush_type_change_hook, brush_preview);
|
|
||||||
HOOK (brush_mode, SIGNAL_GROUP_BUTTON_CHANGE, brush_mode_change_hook, 0);
|
|
||||||
HOOK (glass_dirty, JI_SIGNAL_SLIDER_CHANGE, glass_dirty_slider_change_hook, 0);
|
|
||||||
HOOK (air_speed, JI_SIGNAL_SLIDER_CHANGE, air_speed_slider_change_hook, 0);
|
|
||||||
HOOK (spray_width, JI_SIGNAL_SLIDER_CHANGE, spray_width_slider_change_hook, 0);
|
|
||||||
HOOK (cursor_color, SIGNAL_COLOR_BUTTON_CHANGE, cursor_button_change_hook, 0);
|
|
||||||
HOOK (check_onionskin, JI_SIGNAL_CHECK_CHANGE, onionskin_check_change_hook, 0);
|
|
||||||
|
|
||||||
/* default position */
|
|
||||||
jwindow_remap (window);
|
|
||||||
jwindow_center (window);
|
|
||||||
|
|
||||||
/* load window configuration */
|
|
||||||
load_window_pos (window, "ConfigureTool");
|
|
||||||
|
|
||||||
/* open the window */
|
|
||||||
jwindow_open_bg (window);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool brush_preview_msg_proc(JWidget widget, JMessage msg)
|
|
||||||
{
|
|
||||||
switch (msg->type) {
|
|
||||||
|
|
||||||
case JM_DRAW: {
|
|
||||||
BITMAP *bmp = create_bitmap(jrect_w(widget->rc),
|
|
||||||
jrect_h(widget->rc));
|
|
||||||
Brush *brush = get_brush();
|
|
||||||
|
|
||||||
clear_to_color(bmp, makecol(0, 0, 0));
|
|
||||||
image_to_allegro(brush->image, bmp,
|
|
||||||
bmp->w/2 - brush->size/2,
|
|
||||||
bmp->h/2 - brush->size/2);
|
|
||||||
blit(bmp, ji_screen, 0, 0, widget->rc->x1, widget->rc->y1,
|
|
||||||
bmp->w, bmp->h);
|
|
||||||
destroy_bitmap(bmp);
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int window_close_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
/* isn't running anymore */
|
|
||||||
window = NULL;
|
|
||||||
|
|
||||||
/* save window configuration */
|
|
||||||
save_window_pos(widget, "ConfigureTool");
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int brush_size_slider_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_brush_size(jslider_get_value(widget));
|
|
||||||
jwidget_dirty((JWidget)user_data);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int brush_angle_slider_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_brush_angle(jslider_get_value(widget));
|
|
||||||
jwidget_dirty((JWidget)user_data);
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int brush_type_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
int type = group_button_get_selected(widget);
|
|
||||||
|
|
||||||
set_brush_type(type);
|
|
||||||
jwidget_dirty((JWidget)user_data);
|
|
||||||
|
|
||||||
status_bar_set_text(app_get_status_bar(), 250,
|
|
||||||
"Brush type: %s",
|
|
||||||
type == BRUSH_CIRCLE ? "Circle":
|
|
||||||
type == BRUSH_SQUARE ? "Square":
|
|
||||||
type == BRUSH_LINE ? "Line": "Unknown");
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int brush_mode_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
int mode = group_button_get_selected(widget);
|
|
||||||
|
|
||||||
set_brush_mode(mode);
|
|
||||||
|
|
||||||
status_bar_set_text(app_get_status_bar(), 250,
|
|
||||||
"Brush mode: %s",
|
|
||||||
mode == DRAWMODE_OPAQUE ? "Opaque":
|
|
||||||
mode == DRAWMODE_GLASS ? "Glass":
|
|
||||||
mode == DRAWMODE_SEMI ? "Semi": "Unknown");
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int glass_dirty_slider_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_glass_dirty(jslider_get_value(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int spray_width_slider_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_spray_width(jslider_get_value(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int air_speed_slider_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_air_speed(jslider_get_value(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int filled_check_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_filled_mode(jwidget_is_selected(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int tiled_check_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_tiled_mode(jwidget_is_selected(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int use_grid_check_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_use_grid(jwidget_is_selected(widget));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int view_grid_check_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_view_grid(jwidget_is_selected(widget));
|
|
||||||
refresh_all_editors();
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int set_grid_button_select_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
Sprite *sprite = current_sprite;
|
|
||||||
|
|
||||||
if (sprite && sprite->mask && sprite->mask->bitmap) {
|
|
||||||
JRect rect = jrect_new(sprite->mask->x,
|
|
||||||
sprite->mask->y,
|
|
||||||
sprite->mask->x+sprite->mask->w,
|
|
||||||
sprite->mask->y+sprite->mask->h);
|
|
||||||
set_grid(rect);
|
|
||||||
jrect_free(rect);
|
|
||||||
|
|
||||||
if (get_view_grid())
|
|
||||||
refresh_all_editors();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
jalert(_("Error"
|
|
||||||
"<<You must select a sprite with mask."
|
|
||||||
"<<The boundaries of the mask will be used"
|
|
||||||
"<<to specify the grid area.||&OK"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cursor_button_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_cursor_color(color_button_get_color(widget));
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int onionskin_check_change_hook(JWidget widget, int user_data)
|
|
||||||
{
|
|
||||||
set_onionskin(jwidget_is_selected(widget));
|
|
||||||
refresh_all_editors();
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef DIALOGS_TOOLCONF_H
|
|
||||||
#define DIALOGS_TOOLCONF_H
|
|
||||||
|
|
||||||
void dialogs_tools_configuration(void);
|
|
||||||
|
|
||||||
#endif /* DIALOGS_TOOLCONF_H */
|
|
||||||
|
|
|
@ -27,11 +27,13 @@
|
||||||
#include "jinete/list.h"
|
#include "jinete/list.h"
|
||||||
|
|
||||||
#include "console/console.h"
|
#include "console/console.h"
|
||||||
|
#include "core/app.h"
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "file/file.h"
|
#include "file/file.h"
|
||||||
#include "modules/gui.h"
|
#include "modules/gui.h"
|
||||||
#include "modules/palette.h"
|
#include "modules/palette.h"
|
||||||
#include "raster/raster.h"
|
#include "raster/raster.h"
|
||||||
|
#include "widgets/statebar.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -250,7 +252,7 @@ Sprite *sprite_load(const char *filename)
|
||||||
get_filename(filename)) != 1)) {
|
get_filename(filename)) != 1)) {
|
||||||
/* if the user replies "Skip", we need just one file name */
|
/* if the user replies "Skip", we need just one file name */
|
||||||
while (jlist_length(file_names) > 1)
|
while (jlist_length(file_names) > 1)
|
||||||
jlist_delete_link (file_names, jlist_last (file_names));
|
jlist_delete_link(file_names, jlist_last(file_names));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,13 +283,13 @@ Sprite *sprite_load(const char *filename)
|
||||||
/* error reading the first frame */
|
/* error reading the first frame */
|
||||||
if ((!sprite) || (!file_sequence.last_frame)) {
|
if ((!sprite) || (!file_sequence.last_frame)) {
|
||||||
if (file_sequence.last_image)
|
if (file_sequence.last_image)
|
||||||
image_free (file_sequence.last_image);
|
image_free(file_sequence.last_image);
|
||||||
|
|
||||||
if (file_sequence.last_frame)
|
if (file_sequence.last_frame)
|
||||||
frame_free (file_sequence.last_frame);
|
frame_free(file_sequence.last_frame);
|
||||||
|
|
||||||
if (file_sequence.sprite) {
|
if (file_sequence.sprite) {
|
||||||
sprite_free (file_sequence.sprite);
|
sprite_free(file_sequence.sprite);
|
||||||
file_sequence.sprite = NULL;
|
file_sequence.sprite = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -296,10 +298,10 @@ Sprite *sprite_load(const char *filename)
|
||||||
/* read ok */
|
/* read ok */
|
||||||
else {
|
else {
|
||||||
/* add the keyframe */
|
/* add the keyframe */
|
||||||
SEQUENCE_IMAGE ();
|
SEQUENCE_IMAGE();
|
||||||
|
|
||||||
/* the first palette will be the palette to use */
|
/* the first palette will be the palette to use */
|
||||||
/* memcpy (first_palette, file_palette, sizeof (PALETTE)); */
|
/* memcpy(first_palette, file_palette, sizeof(PALETTE)); */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* for other frames */
|
/* for other frames */
|
||||||
|
@ -333,10 +335,10 @@ Sprite *sprite_load(const char *filename)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frames > 1)
|
|
||||||
do_progress (c);
|
|
||||||
|
|
||||||
c++;
|
c++;
|
||||||
|
|
||||||
|
if (frames > 1)
|
||||||
|
do_progress(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (frames > 1)
|
if (frames > 1)
|
||||||
|
@ -375,6 +377,7 @@ Sprite *sprite_load(const char *filename)
|
||||||
|
|
||||||
/* set the filename */
|
/* set the filename */
|
||||||
sprite_set_filename(sprite, filename);
|
sprite_set_filename(sprite, filename);
|
||||||
|
sprite_mark_as_saved(sprite);
|
||||||
|
|
||||||
rebuild_sprite_list();
|
rebuild_sprite_list();
|
||||||
}
|
}
|
||||||
|
@ -485,17 +488,17 @@ int sprite_save(Sprite *sprite)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show the confirmation alert */
|
/* show the confirmation alert */
|
||||||
if (ugetc (buf)) {
|
if (ugetc(buf)) {
|
||||||
if (is_interactive ()) {
|
if (is_interactive()) {
|
||||||
if (fatal)
|
if (fatal)
|
||||||
ret = jalert (_("Error<<File type \"%s\" doesn't support:%s"
|
ret = jalert(_("Error<<File type \"%s\" doesn't support:%s"
|
||||||
"||&Close"),
|
"||&Close"),
|
||||||
file->name, buf);
|
file->name, buf);
|
||||||
else
|
else
|
||||||
ret = jalert (_("Warning<<File type \"%s\" doesn't support:%s"
|
ret = jalert(_("Warning<<File type \"%s\" doesn't support:%s"
|
||||||
"<<Do you want continue?"
|
"<<Do you want continue?"
|
||||||
"||&Yes||&No"),
|
"||&Yes||&No"),
|
||||||
file->name, buf);
|
file->name, buf);
|
||||||
|
|
||||||
if ((fatal) || (ret != 1))
|
if ((fatal) || (ret != 1))
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -548,15 +551,15 @@ int sprite_save(Sprite *sprite)
|
||||||
|
|
||||||
for (sprite->frpos=0; sprite->frpos<sprite->frames; sprite->frpos++) {
|
for (sprite->frpos=0; sprite->frpos<sprite->frames; sprite->frpos++) {
|
||||||
/* draw all the sprite in this frame in the image */
|
/* draw all the sprite in this frame in the image */
|
||||||
image_clear (image, 0);
|
image_clear(image, 0);
|
||||||
sprite_render (sprite, image, 0, 0);
|
sprite_render(sprite, image, 0, 0);
|
||||||
|
|
||||||
/* get the name for this image */
|
/* get the name for this image */
|
||||||
usprintf (buf, "%s%0*d%s", left, width, start_from+sprite->frpos, right);
|
usprintf(buf, "%s%0*d%s", left, width, start_from+sprite->frpos, right);
|
||||||
|
|
||||||
/* save the image */
|
/* save the image */
|
||||||
file_sequence.image = image;
|
file_sequence.image = image;
|
||||||
ustrcpy (sprite->filename, buf);
|
ustrcpy(sprite->filename, buf);
|
||||||
|
|
||||||
palette_copy(file_palette, sprite_get_palette(sprite, sprite->frpos));
|
palette_copy(file_palette, sprite_get_palette(sprite, sprite->frpos));
|
||||||
|
|
||||||
|
@ -568,10 +571,10 @@ int sprite_save(Sprite *sprite)
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
do_progress (sprite->frpos);
|
do_progress(sprite->frpos);
|
||||||
}
|
}
|
||||||
|
|
||||||
del_progress ();
|
del_progress();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* destroy the image */
|
/* destroy the image */
|
||||||
|
@ -593,6 +596,9 @@ int sprite_save(Sprite *sprite)
|
||||||
|
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
console_printf(_("Error saving \"%s\"\n"), sprite->filename);
|
console_printf(_("Error saving \"%s\"\n"), sprite->filename);
|
||||||
|
else
|
||||||
|
status_bar_set_text(app_get_status_bar(), 1000,
|
||||||
|
"File saved: %s", get_filename(sprite->filename));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -327,6 +327,8 @@ static int save_GIF(Sprite *sprite)
|
||||||
/* avoid compilation warnings */
|
/* avoid compilation warnings */
|
||||||
x1 = y1 = x2 = y2 = 0;
|
x1 = y1 = x2 = y2 = 0;
|
||||||
|
|
||||||
|
add_progress(2);
|
||||||
|
add_progress(sprite->frames);
|
||||||
for (i = 0; i < sprite->frames; i++) {
|
for (i = 0; i < sprite->frames; i++) {
|
||||||
/* frame palette */
|
/* frame palette */
|
||||||
palette_copy(npal, sprite_get_palette(sprite, i));
|
palette_copy(npal, sprite_get_palette(sprite, i));
|
||||||
|
@ -440,12 +442,19 @@ static int save_GIF(Sprite *sprite)
|
||||||
/* update the old image and color-map to the new ones to compare later */
|
/* update the old image and color-map to the new ones to compare later */
|
||||||
image_copy(old, bmp, 0, 0);
|
image_copy(old, bmp, 0, 0);
|
||||||
palette_copy(opal, npal);
|
palette_copy(opal, npal);
|
||||||
|
|
||||||
|
do_progress(i);
|
||||||
}
|
}
|
||||||
|
del_progress();
|
||||||
|
do_progress(1);
|
||||||
|
|
||||||
add_progress(100);
|
add_progress(100);
|
||||||
ret = gif_save_animation(sprite->filename, gif, do_progress);
|
ret = gif_save_animation(sprite->filename, gif, do_progress);
|
||||||
del_progress();
|
del_progress();
|
||||||
|
|
||||||
|
do_progress(2);
|
||||||
|
del_progress();
|
||||||
|
|
||||||
gif_destroy_animation(gif);
|
gif_destroy_animation(gif);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,64 +103,64 @@ static DATA gfx_data[GFX_BITMAP_COUNT] =
|
||||||
"## ## ##" },
|
"## ## ##" },
|
||||||
/* GFX_TOOL_DOTS */
|
/* GFX_TOOL_DOTS */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" # "
|
|
||||||
" # "
|
" # "
|
||||||
" # "
|
" # # "
|
||||||
" # # "
|
|
||||||
" "
|
" "
|
||||||
" # "
|
" # "
|
||||||
" # "
|
" "
|
||||||
" # " },
|
" # "
|
||||||
|
" "
|
||||||
|
" # " },
|
||||||
/* GFX_TOOL_PENCIL */
|
/* GFX_TOOL_PENCIL */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" ## "
|
" "
|
||||||
" ## "
|
" ### "
|
||||||
" # "
|
" # ## "
|
||||||
" #### "
|
" # ### "
|
||||||
" # "
|
" # ### "
|
||||||
" ## "
|
" #### "
|
||||||
" ## "
|
"# ## "
|
||||||
"## " },
|
"## " },
|
||||||
/* GFX_TOOL_BRUSH */
|
/* GFX_TOOL_BRUSH */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" ### "
|
"### "
|
||||||
" ### "
|
|
||||||
"## "
|
|
||||||
" ###### "
|
|
||||||
" ##"
|
|
||||||
" ### "
|
|
||||||
" ### "
|
" ### "
|
||||||
"### " },
|
" ## "
|
||||||
|
" ## "
|
||||||
|
" ##"
|
||||||
|
" ##"
|
||||||
|
" ###"
|
||||||
|
" #### " },
|
||||||
/* GFX_TOOL_FLOODFILL */
|
/* GFX_TOOL_FLOODFILL */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" #### "
|
" "
|
||||||
" ###### "
|
" ##### "
|
||||||
" ###### "
|
"# # "
|
||||||
|
"# ## ## "
|
||||||
|
"# ##### "
|
||||||
|
"#### ## "
|
||||||
"####### "
|
"####### "
|
||||||
"####### "
|
" ##### " },
|
||||||
" ###### "
|
|
||||||
" ##### "
|
|
||||||
" ## " },
|
|
||||||
/* GFX_TOOL_SPRAY */
|
/* GFX_TOOL_SPRAY */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
"# "
|
"# "
|
||||||
" # # "
|
" # # "
|
||||||
"# # ## "
|
"# # ### "
|
||||||
" # # "
|
" # # #"
|
||||||
"# ### "
|
"# ### #"
|
||||||
" ### "
|
" ### #"
|
||||||
" ### "
|
" ### #"
|
||||||
" ### " },
|
" #####" },
|
||||||
/* GFX_TOOL_LINE */
|
/* GFX_TOOL_LINE */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" #"
|
" #"
|
||||||
" # "
|
" ##"
|
||||||
" # "
|
" ## "
|
||||||
" # "
|
" ## "
|
||||||
" # "
|
" ## "
|
||||||
" # "
|
" ## "
|
||||||
" # "
|
" ## "
|
||||||
"# " },
|
"## " },
|
||||||
/* GFX_TOOL_RECTANGLE */
|
/* GFX_TOOL_RECTANGLE */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
"########"
|
"########"
|
||||||
|
@ -169,8 +169,8 @@ static DATA gfx_data[GFX_BITMAP_COUNT] =
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
"########"
|
||||||
"########" },
|
" " },
|
||||||
/* GFX_TOOL_ELLIPSE */
|
/* GFX_TOOL_ELLIPSE */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" #### "
|
" #### "
|
||||||
|
@ -178,9 +178,9 @@ static DATA gfx_data[GFX_BITMAP_COUNT] =
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
"# #"
|
||||||
"# #"
|
|
||||||
" # # "
|
" # # "
|
||||||
" #### " },
|
" #### "
|
||||||
|
" " },
|
||||||
/* GFX_TOOL_CONFIGURATION */
|
/* GFX_TOOL_CONFIGURATION */
|
||||||
{ 8, 8,
|
{ 8, 8,
|
||||||
" # # "
|
" # # "
|
||||||
|
|
|
@ -45,7 +45,6 @@
|
||||||
#include "raster/sprite.h"
|
#include "raster/sprite.h"
|
||||||
#include "script/script.h"
|
#include "script/script.h"
|
||||||
#include "util/recscr.h"
|
#include "util/recscr.h"
|
||||||
#include "util/scrshot.h"
|
|
||||||
#include "widgets/editor.h"
|
#include "widgets/editor.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -306,9 +305,6 @@ void gui_feedback(void)
|
||||||
|
|
||||||
/* jmanager_dispatch_draw_messages(); */
|
/* jmanager_dispatch_draw_messages(); */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* don't eat CPU... rest some time */
|
|
||||||
rest(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void gui_setup_screen(void)
|
void gui_setup_screen(void)
|
||||||
|
@ -690,6 +686,7 @@ 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: {
|
||||||
|
@ -699,8 +696,10 @@ static bool manager_msg_proc(JWidget widget, JMessage msg)
|
||||||
|
|
||||||
/* the screen shot is available in everywhere */
|
/* the screen shot is available in everywhere */
|
||||||
if (strcmp(command->name, CMD_SCREEN_SHOT) == 0) {
|
if (strcmp(command->name, CMD_SCREEN_SHOT) == 0) {
|
||||||
screen_shot();
|
if (command_is_enabled(command, NULL)) {
|
||||||
return TRUE;
|
command_execute(command, NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/* all other keys are only available in the main-window */
|
/* all other keys are only available in the main-window */
|
||||||
else {
|
else {
|
||||||
|
|
|
@ -229,8 +229,8 @@ static JWidget convert_xmlelem_to_menu(JXmlElem elem)
|
||||||
JI_LIST_FOR_EACH(((JXmlNode)elem)->children, link) {
|
JI_LIST_FOR_EACH(((JXmlNode)elem)->children, link) {
|
||||||
JXmlNode child = (JXmlNode)link->data;
|
JXmlNode child = (JXmlNode)link->data;
|
||||||
|
|
||||||
PRINTF("convert_xmlelem_to_menu: child->value = %p (%s)\n",
|
/* PRINTF("convert_xmlelem_to_menu: child->value = %p (%s)\n", */
|
||||||
child->value, child->value ? child->value: "");
|
/* child->value, child->value ? child->value: ""); */
|
||||||
|
|
||||||
if (child->type == JI_XML_ELEM) {
|
if (child->type == JI_XML_ELEM) {
|
||||||
menuitem = convert_xmlelem_to_menuitem((JXmlElem)child);
|
menuitem = convert_xmlelem_to_menuitem((JXmlElem)child);
|
||||||
|
|
|
@ -79,7 +79,7 @@ static int _cursor_mask;
|
||||||
static Image *tool_image = NULL;
|
static Image *tool_image = NULL;
|
||||||
static int tool_color;
|
static int tool_color;
|
||||||
|
|
||||||
static void update_cursor_color (void)
|
static void update_cursor_color(void)
|
||||||
{
|
{
|
||||||
if (cursor_color) {
|
if (cursor_color) {
|
||||||
if (ji_screen)
|
if (ji_screen)
|
||||||
|
@ -126,6 +126,7 @@ int init_module_tools(void)
|
||||||
|
|
||||||
grid = jrect_new(0, 0, 16, 16);
|
grid = jrect_new(0, 0, 16, 16);
|
||||||
get_config_rect("Tools", "GridRect", grid);
|
get_config_rect("Tools", "GridRect", grid);
|
||||||
|
set_grid(grid);
|
||||||
|
|
||||||
glass_dirty = MID(0, glass_dirty, 255);
|
glass_dirty = MID(0, glass_dirty, 255);
|
||||||
spray_width = MID(1, spray_width, 320);
|
spray_width = MID(1, spray_width, 320);
|
||||||
|
@ -137,7 +138,7 @@ int init_module_tools(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void exit_module_tools (void)
|
void exit_module_tools(void)
|
||||||
{
|
{
|
||||||
set_config_string("Tools", "CursorColor", cursor_color);
|
set_config_string("Tools", "CursorColor", cursor_color);
|
||||||
set_config_int("Tools", "GlassDirty", glass_dirty);
|
set_config_int("Tools", "GlassDirty", glass_dirty);
|
||||||
|
@ -162,7 +163,7 @@ void exit_module_tools (void)
|
||||||
unhook_palette_changes(update_cursor_color);
|
unhook_palette_changes(update_cursor_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
void refresh_tools_names (void)
|
void refresh_tools_names(void)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
|
@ -170,26 +171,33 @@ void refresh_tools_names (void)
|
||||||
ase_tools_list[c]->translated_name = _(ase_tools_list[c]->name);
|
ase_tools_list[c]->translated_name = _(ase_tools_list[c]->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
void select_tool (const char *tool_name)
|
void select_tool(Tool *tool)
|
||||||
|
{
|
||||||
|
ASSERT(tool != NULL);
|
||||||
|
|
||||||
|
current_tool = tool;
|
||||||
|
|
||||||
|
/* update status-bar */
|
||||||
|
if (app_get_status_bar() &&
|
||||||
|
jwidget_is_visible(app_get_status_bar()))
|
||||||
|
status_bar_set_text(app_get_status_bar(), 500, "%s: %s",
|
||||||
|
_("Tool"), current_tool->translated_name);
|
||||||
|
|
||||||
|
/* update tool-bar */
|
||||||
|
if (app_get_tool_bar())
|
||||||
|
tool_bar_update(app_get_tool_bar());
|
||||||
|
}
|
||||||
|
|
||||||
|
void select_tool_by_name(const char *tool_name)
|
||||||
{
|
{
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
for (c=0; ase_tools_list[c]; c++) {
|
for (c=0; ase_tools_list[c]; c++) {
|
||||||
if (ustricmp (ase_tools_list[c]->name, tool_name) == 0) {
|
if (ustricmp(ase_tools_list[c]->name, tool_name) == 0) {
|
||||||
if (current_tool == ase_tools_list[c])
|
if (current_tool == ase_tools_list[c])
|
||||||
return;
|
return;
|
||||||
|
|
||||||
current_tool = ase_tools_list[c];
|
select_tool(ase_tools_list[c]);
|
||||||
|
|
||||||
/* update status-bar */
|
|
||||||
if (app_get_status_bar () &&
|
|
||||||
jwidget_is_visible (app_get_status_bar ()))
|
|
||||||
status_bar_set_text (app_get_status_bar (), 500, "%s: %s",
|
|
||||||
_("Tool"), current_tool->translated_name);
|
|
||||||
|
|
||||||
/* update tool-bar */
|
|
||||||
if (app_get_tool_bar ())
|
|
||||||
tool_bar_update (app_get_tool_bar ());
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -207,8 +215,16 @@ bool get_filled_mode(void) { return filled_mode; }
|
||||||
bool get_tiled_mode(void) { return tiled_mode; }
|
bool get_tiled_mode(void) { return tiled_mode; }
|
||||||
bool get_use_grid(void) { return use_grid; }
|
bool get_use_grid(void) { return use_grid; }
|
||||||
bool get_view_grid(void) { return view_grid; }
|
bool get_view_grid(void) { return view_grid; }
|
||||||
JRect get_grid(void) { return jrect_new_copy (grid); }
|
|
||||||
bool get_onionskin(void) { return onionskin; }
|
JRect get_grid(void)
|
||||||
|
{
|
||||||
|
return jrect_new_copy (grid);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool get_onionskin(void)
|
||||||
|
{
|
||||||
|
return onionskin;
|
||||||
|
}
|
||||||
|
|
||||||
void set_brush_type(int type) { brush_set_type (brush, type); }
|
void set_brush_type(int type) { brush_set_type (brush, type); }
|
||||||
void set_brush_size(int size) { brush_set_size (brush, size); }
|
void set_brush_size(int size) { brush_set_size (brush, size); }
|
||||||
|
@ -221,8 +237,18 @@ void set_filled_mode(bool status) { filled_mode = status; }
|
||||||
void set_tiled_mode(bool status) { tiled_mode = status; }
|
void set_tiled_mode(bool status) { tiled_mode = status; }
|
||||||
void set_use_grid(bool status) { use_grid = status; }
|
void set_use_grid(bool status) { use_grid = status; }
|
||||||
void set_view_grid(bool status) { view_grid = status; }
|
void set_view_grid(bool status) { view_grid = status; }
|
||||||
void set_grid(JRect rect) { jrect_copy (grid, rect); }
|
|
||||||
void set_onionskin(bool status) { onionskin = status; }
|
void set_grid(JRect rect)
|
||||||
|
{
|
||||||
|
jrect_copy(grid, rect);
|
||||||
|
if (grid->x2 <= grid->x1) grid->x2 = grid->x1+1;
|
||||||
|
if (grid->y2 <= grid->y1) grid->y2 = grid->y1+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_onionskin(bool status)
|
||||||
|
{
|
||||||
|
onionskin = status;
|
||||||
|
}
|
||||||
|
|
||||||
int get_raw_cursor_color(void)
|
int get_raw_cursor_color(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,7 +74,8 @@ int init_module_tools(void);
|
||||||
void exit_module_tools(void);
|
void exit_module_tools(void);
|
||||||
|
|
||||||
void refresh_tools_names(void);
|
void refresh_tools_names(void);
|
||||||
void select_tool(const char *tool_name);
|
void select_tool(Tool *tool);
|
||||||
|
void select_tool_by_name(const char *tool_name);
|
||||||
|
|
||||||
struct Brush *get_brush(void);
|
struct Brush *get_brush(void);
|
||||||
int get_brush_type(void);
|
int get_brush_type(void);
|
||||||
|
|
|
@ -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
|
||||||
|
@ -56,6 +56,7 @@ Sprite *sprite_new(int imgtype, int w, int h)
|
||||||
|
|
||||||
/* main properties */
|
/* main properties */
|
||||||
strcpy(sprite->filename, "Sprite");
|
strcpy(sprite->filename, "Sprite");
|
||||||
|
sprite->associated_to_file = FALSE;
|
||||||
sprite->imgtype = imgtype;
|
sprite->imgtype = imgtype;
|
||||||
sprite->w = w;
|
sprite->w = w;
|
||||||
sprite->h = h;
|
sprite->h = h;
|
||||||
|
@ -241,15 +242,21 @@ void sprite_free(Sprite *sprite)
|
||||||
gfxobj_free((GfxObj *)sprite);
|
gfxobj_free((GfxObj *)sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sprite_is_modified(Sprite *sprite)
|
bool sprite_is_modified(Sprite *sprite)
|
||||||
{
|
{
|
||||||
return (sprite->undo->diff_count ==
|
return (sprite->undo->diff_count ==
|
||||||
sprite->undo->diff_saved) ? FALSE: TRUE;
|
sprite->undo->diff_saved) ? FALSE: TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sprite_was_saved(Sprite *sprite)
|
bool sprite_is_associated_to_file(Sprite *sprite)
|
||||||
|
{
|
||||||
|
return sprite->associated_to_file;
|
||||||
|
}
|
||||||
|
|
||||||
|
void sprite_mark_as_saved(Sprite *sprite)
|
||||||
{
|
{
|
||||||
sprite->undo->diff_saved = sprite->undo->diff_count;
|
sprite->undo->diff_saved = sprite->undo->diff_count;
|
||||||
|
sprite->associated_to_file = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
RGB *sprite_get_palette(Sprite *sprite, int frpos)
|
RGB *sprite_get_palette(Sprite *sprite, int frpos)
|
||||||
|
|
|
@ -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
|
||||||
|
@ -35,6 +35,8 @@ struct Sprite
|
||||||
{
|
{
|
||||||
GfxObj gfxobj;
|
GfxObj gfxobj;
|
||||||
char filename[512]; /* sprite's file name */
|
char filename[512]; /* sprite's file name */
|
||||||
|
bool associated_to_file; /* true if this sprite is associated
|
||||||
|
to a file in the file-system */
|
||||||
int imgtype; /* image type */
|
int imgtype; /* image type */
|
||||||
int w, h; /* image width/height size (in pixels) */
|
int w, h; /* image width/height size (in pixels) */
|
||||||
int frames; /* how many frames has this sprite */
|
int frames; /* how many frames has this sprite */
|
||||||
|
@ -68,8 +70,9 @@ Sprite *sprite_new_flatten_copy(const Sprite *sprite);
|
||||||
Sprite *sprite_new_with_layer(int imgtype, int w, int h);
|
Sprite *sprite_new_with_layer(int imgtype, int w, int h);
|
||||||
void sprite_free(Sprite *sprite);
|
void sprite_free(Sprite *sprite);
|
||||||
|
|
||||||
int sprite_is_modified(Sprite *sprite);
|
bool sprite_is_modified(Sprite *sprite);
|
||||||
void sprite_was_saved(Sprite *sprite);
|
bool sprite_is_associated_to_file(Sprite *sprite);
|
||||||
|
void sprite_mark_as_saved(Sprite *sprite);
|
||||||
|
|
||||||
RGB *sprite_get_palette(Sprite *sprite, int frpos);
|
RGB *sprite_get_palette(Sprite *sprite, int frpos);
|
||||||
void sprite_set_palette(Sprite *sprite, RGB *rgb, int frpos);
|
void sprite_set_palette(Sprite *sprite, RGB *rgb, int frpos);
|
||||||
|
|
|
@ -723,13 +723,11 @@ static int bind_jwidget_hook_signal (lua_State *L)
|
||||||
#include "dialogs/effect.h"
|
#include "dialogs/effect.h"
|
||||||
#include "dialogs/filmedit.h"
|
#include "dialogs/filmedit.h"
|
||||||
#include "dialogs/maskcol.h"
|
#include "dialogs/maskcol.h"
|
||||||
#include "dialogs/maskrepo.h"
|
|
||||||
#include "dialogs/options.h"
|
#include "dialogs/options.h"
|
||||||
#include "dialogs/playfli.h"
|
#include "dialogs/playfli.h"
|
||||||
#include "dialogs/quick.h"
|
#include "dialogs/quick.h"
|
||||||
#include "dialogs/scrsaver.h"
|
#include "dialogs/scrsaver.h"
|
||||||
#include "dialogs/tips.h"
|
#include "dialogs/tips.h"
|
||||||
#include "dialogs/toolconf.h"
|
|
||||||
#include "dialogs/vectmap.h"
|
#include "dialogs/vectmap.h"
|
||||||
#include "file/file.h"
|
#include "file/file.h"
|
||||||
#include "intl/intl.h"
|
#include "intl/intl.h"
|
||||||
|
@ -743,8 +741,6 @@ static int bind_jwidget_hook_signal (lua_State *L)
|
||||||
#include "util/msk_file.h"
|
#include "util/msk_file.h"
|
||||||
#include "util/quantize.h"
|
#include "util/quantize.h"
|
||||||
#include "util/recscr.h"
|
#include "util/recscr.h"
|
||||||
#include "util/scrshot.h"
|
|
||||||
#include "util/session.h"
|
|
||||||
#include "util/setgfx.h"
|
#include "util/setgfx.h"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -107,10 +107,6 @@ void intl_set_lang(const char *lang);
|
||||||
|
|
||||||
void show_fx_popup_menu(void);
|
void show_fx_popup_menu(void);
|
||||||
|
|
||||||
/* modules/tools.c */
|
|
||||||
|
|
||||||
void select_tool(const char *tool_name);
|
|
||||||
|
|
||||||
/* Brush *get_brush (void); */
|
/* Brush *get_brush (void); */
|
||||||
int get_brush_type(void);
|
int get_brush_type(void);
|
||||||
int get_brush_size(void);
|
int get_brush_size(void);
|
||||||
|
@ -266,13 +262,6 @@ int save_msk_file(Mask *mask, const char *filename);
|
||||||
|
|
||||||
void sprite_quantize(Sprite *sprite);
|
void sprite_quantize(Sprite *sprite);
|
||||||
|
|
||||||
/* util/session.c */
|
|
||||||
|
|
||||||
bool load_session(const char *filename);
|
|
||||||
bool save_session(const char *filename);
|
|
||||||
|
|
||||||
bool is_backup_session(void);
|
|
||||||
|
|
||||||
/* modules/gui.c */
|
/* modules/gui.c */
|
||||||
|
|
||||||
void GUI_Refresh(Sprite *sprite);
|
void GUI_Refresh(Sprite *sprite);
|
||||||
|
@ -291,16 +280,6 @@ void quick_swap(void);
|
||||||
|
|
||||||
void play_fli_animation(const char *filename, bool loop, bool fullscreen);
|
void play_fli_animation(const char *filename, bool loop, bool fullscreen);
|
||||||
|
|
||||||
/* util/recscr.c */
|
|
||||||
|
|
||||||
bool is_rec_screen(void);
|
|
||||||
void rec_screen_on(void);
|
|
||||||
void rec_screen_off(void);
|
|
||||||
|
|
||||||
/* util/scrshot.c */
|
|
||||||
|
|
||||||
void screen_shot(void);
|
|
||||||
|
|
||||||
/* util/setgfx.c */
|
/* util/setgfx.c */
|
||||||
|
|
||||||
int set_gfx(const char *card, int w, int h, int depth);
|
int set_gfx(const char *card, int w, int h, int depth);
|
||||||
|
@ -315,7 +294,6 @@ void dialogs_frame_length (int frpos);
|
||||||
void dialogs_invert_color(void);
|
void dialogs_invert_color(void);
|
||||||
void dialogs_mapgen(void);
|
void dialogs_mapgen(void);
|
||||||
void dialogs_mask_color(void);
|
void dialogs_mask_color(void);
|
||||||
void dialogs_mask_repository(void);
|
|
||||||
void dialogs_median_filter(void);
|
void dialogs_median_filter(void);
|
||||||
void dialogs_options(void);
|
void dialogs_options(void);
|
||||||
void dialogs_palette_editor(void);
|
void dialogs_palette_editor(void);
|
||||||
|
@ -323,15 +301,8 @@ void dialogs_replace_color(void);
|
||||||
void dialogs_screen_saver(void);
|
void dialogs_screen_saver(void);
|
||||||
void dialogs_select_language(bool force);
|
void dialogs_select_language(bool force);
|
||||||
void dialogs_tips(bool forced);
|
void dialogs_tips(bool forced);
|
||||||
void dialogs_tools_configuration(void);
|
|
||||||
void dialogs_vector_map(void);
|
void dialogs_vector_map(void);
|
||||||
|
|
||||||
/* dialogs/view.c */
|
|
||||||
|
|
||||||
void view_tiled(void);
|
|
||||||
void view_normal(void);
|
|
||||||
void view_fullscreen(void);
|
|
||||||
|
|
||||||
/* dialogs/drawtext.c */
|
/* dialogs/drawtext.c */
|
||||||
|
|
||||||
Image *RenderText(const char *fontname, int size, int color, const char *text);
|
Image *RenderText(const char *fontname, int size, int color, const char *text);
|
||||||
|
@ -533,7 +504,8 @@ Sprite *sprite_new_with_layer(int imgtype, int w, int h);
|
||||||
void sprite_free(Sprite *sprite);
|
void sprite_free(Sprite *sprite);
|
||||||
|
|
||||||
bool sprite_is_modified(Sprite *sprite);
|
bool sprite_is_modified(Sprite *sprite);
|
||||||
void sprite_was_saved(Sprite *sprite);
|
bool sprite_is_associated_to_file(Sprite *sprite);
|
||||||
|
void sprite_mark_as_saved(Sprite *sprite);
|
||||||
|
|
||||||
void sprite_set_filename(Sprite *sprite, const char *filename);
|
void sprite_set_filename(Sprite *sprite, const char *filename);
|
||||||
void sprite_set_size(Sprite *sprite, int w, int h);
|
void sprite_set_size(Sprite *sprite, int w, int h);
|
||||||
|
|
|
@ -553,14 +553,6 @@ static int bind_show_fx_popup_menu(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_select_tool(lua_State *L)
|
|
||||||
{
|
|
||||||
const char *tool_name;
|
|
||||||
GetArg(1, tool_name, const char *, string);
|
|
||||||
select_tool(tool_name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_get_brush_type(lua_State *L)
|
static int bind_get_brush_type(lua_State *L)
|
||||||
{
|
{
|
||||||
int return_value;
|
int return_value;
|
||||||
|
@ -1259,34 +1251,6 @@ static int bind_sprite_quantize(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_load_session(lua_State *L)
|
|
||||||
{
|
|
||||||
bool return_value;
|
|
||||||
const char *filename;
|
|
||||||
GetArg(1, filename, const char *, string);
|
|
||||||
return_value = load_session(filename);
|
|
||||||
lua_pushboolean(L, return_value);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_save_session(lua_State *L)
|
|
||||||
{
|
|
||||||
bool return_value;
|
|
||||||
const char *filename;
|
|
||||||
GetArg(1, filename, const char *, string);
|
|
||||||
return_value = save_session(filename);
|
|
||||||
lua_pushboolean(L, return_value);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_is_backup_session(lua_State *L)
|
|
||||||
{
|
|
||||||
bool return_value;
|
|
||||||
return_value = is_backup_session();
|
|
||||||
lua_pushboolean(L, return_value);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_GUI_Refresh(lua_State *L)
|
static int bind_GUI_Refresh(lua_State *L)
|
||||||
{
|
{
|
||||||
Sprite *sprite;
|
Sprite *sprite;
|
||||||
|
@ -1343,32 +1307,6 @@ static int bind_play_fli_animation(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_is_rec_screen(lua_State *L)
|
|
||||||
{
|
|
||||||
bool return_value;
|
|
||||||
return_value = is_rec_screen();
|
|
||||||
lua_pushboolean(L, return_value);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_rec_screen_on(lua_State *L)
|
|
||||||
{
|
|
||||||
rec_screen_on();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_rec_screen_off(lua_State *L)
|
|
||||||
{
|
|
||||||
rec_screen_off();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_screen_shot(lua_State *L)
|
|
||||||
{
|
|
||||||
screen_shot();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_set_gfx(lua_State *L)
|
static int bind_set_gfx(lua_State *L)
|
||||||
{
|
{
|
||||||
int return_value;
|
int return_value;
|
||||||
|
@ -1427,12 +1365,6 @@ static int bind_dialogs_mask_color(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_dialogs_mask_repository(lua_State *L)
|
|
||||||
{
|
|
||||||
dialogs_mask_repository();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_dialogs_median_filter(lua_State *L)
|
static int bind_dialogs_median_filter(lua_State *L)
|
||||||
{
|
{
|
||||||
dialogs_median_filter();
|
dialogs_median_filter();
|
||||||
|
@ -1479,12 +1411,6 @@ static int bind_dialogs_tips(lua_State *L)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_dialogs_tools_configuration(lua_State *L)
|
|
||||||
{
|
|
||||||
dialogs_tools_configuration();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int bind_dialogs_vector_map(lua_State *L)
|
static int bind_dialogs_vector_map(lua_State *L)
|
||||||
{
|
{
|
||||||
dialogs_vector_map();
|
dialogs_vector_map();
|
||||||
|
@ -2597,11 +2523,21 @@ static int bind_sprite_is_modified(lua_State *L)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bind_sprite_was_saved(lua_State *L)
|
static int bind_sprite_is_associated_to_file(lua_State *L)
|
||||||
|
{
|
||||||
|
bool return_value;
|
||||||
|
Sprite *sprite;
|
||||||
|
GetUD(1, sprite, Sprite);
|
||||||
|
return_value = sprite_is_associated_to_file(sprite);
|
||||||
|
lua_pushboolean(L, return_value);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int bind_sprite_mark_as_saved(lua_State *L)
|
||||||
{
|
{
|
||||||
Sprite *sprite;
|
Sprite *sprite;
|
||||||
GetUD(1, sprite, Sprite);
|
GetUD(1, sprite, Sprite);
|
||||||
sprite_was_saved(sprite);
|
sprite_mark_as_saved(sprite);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5723,7 +5659,6 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "intl_get_lang", bind_intl_get_lang },
|
{ "intl_get_lang", bind_intl_get_lang },
|
||||||
{ "intl_set_lang", bind_intl_set_lang },
|
{ "intl_set_lang", bind_intl_set_lang },
|
||||||
{ "show_fx_popup_menu", bind_show_fx_popup_menu },
|
{ "show_fx_popup_menu", bind_show_fx_popup_menu },
|
||||||
{ "select_tool", bind_select_tool },
|
|
||||||
{ "get_brush_type", bind_get_brush_type },
|
{ "get_brush_type", bind_get_brush_type },
|
||||||
{ "get_brush_size", bind_get_brush_size },
|
{ "get_brush_size", bind_get_brush_size },
|
||||||
{ "get_brush_angle", bind_get_brush_angle },
|
{ "get_brush_angle", bind_get_brush_angle },
|
||||||
|
@ -5812,9 +5747,6 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "load_msk_file", bind_load_msk_file },
|
{ "load_msk_file", bind_load_msk_file },
|
||||||
{ "save_msk_file", bind_save_msk_file },
|
{ "save_msk_file", bind_save_msk_file },
|
||||||
{ "sprite_quantize", bind_sprite_quantize },
|
{ "sprite_quantize", bind_sprite_quantize },
|
||||||
{ "load_session", bind_load_session },
|
|
||||||
{ "save_session", bind_save_session },
|
|
||||||
{ "is_backup_session", bind_is_backup_session },
|
|
||||||
{ "GUI_Refresh", bind_GUI_Refresh },
|
{ "GUI_Refresh", bind_GUI_Refresh },
|
||||||
{ "rebuild_root_menu", bind_rebuild_root_menu },
|
{ "rebuild_root_menu", bind_rebuild_root_menu },
|
||||||
{ "rebuild_sprite_list", bind_rebuild_sprite_list },
|
{ "rebuild_sprite_list", bind_rebuild_sprite_list },
|
||||||
|
@ -5823,10 +5755,6 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "quick_copy", bind_quick_copy },
|
{ "quick_copy", bind_quick_copy },
|
||||||
{ "quick_swap", bind_quick_swap },
|
{ "quick_swap", bind_quick_swap },
|
||||||
{ "play_fli_animation", bind_play_fli_animation },
|
{ "play_fli_animation", bind_play_fli_animation },
|
||||||
{ "is_rec_screen", bind_is_rec_screen },
|
|
||||||
{ "rec_screen_on", bind_rec_screen_on },
|
|
||||||
{ "rec_screen_off", bind_rec_screen_off },
|
|
||||||
{ "screen_shot", bind_screen_shot },
|
|
||||||
{ "set_gfx", bind_set_gfx },
|
{ "set_gfx", bind_set_gfx },
|
||||||
{ "dialogs_color_curve", bind_dialogs_color_curve },
|
{ "dialogs_color_curve", bind_dialogs_color_curve },
|
||||||
{ "dialogs_convolution_matrix", bind_dialogs_convolution_matrix },
|
{ "dialogs_convolution_matrix", bind_dialogs_convolution_matrix },
|
||||||
|
@ -5835,7 +5763,6 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "dialogs_invert_color", bind_dialogs_invert_color },
|
{ "dialogs_invert_color", bind_dialogs_invert_color },
|
||||||
{ "dialogs_mapgen", bind_dialogs_mapgen },
|
{ "dialogs_mapgen", bind_dialogs_mapgen },
|
||||||
{ "dialogs_mask_color", bind_dialogs_mask_color },
|
{ "dialogs_mask_color", bind_dialogs_mask_color },
|
||||||
{ "dialogs_mask_repository", bind_dialogs_mask_repository },
|
|
||||||
{ "dialogs_median_filter", bind_dialogs_median_filter },
|
{ "dialogs_median_filter", bind_dialogs_median_filter },
|
||||||
{ "dialogs_options", bind_dialogs_options },
|
{ "dialogs_options", bind_dialogs_options },
|
||||||
{ "dialogs_palette_editor", bind_dialogs_palette_editor },
|
{ "dialogs_palette_editor", bind_dialogs_palette_editor },
|
||||||
|
@ -5843,7 +5770,6 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "dialogs_screen_saver", bind_dialogs_screen_saver },
|
{ "dialogs_screen_saver", bind_dialogs_screen_saver },
|
||||||
{ "dialogs_select_language", bind_dialogs_select_language },
|
{ "dialogs_select_language", bind_dialogs_select_language },
|
||||||
{ "dialogs_tips", bind_dialogs_tips },
|
{ "dialogs_tips", bind_dialogs_tips },
|
||||||
{ "dialogs_tools_configuration", bind_dialogs_tools_configuration },
|
|
||||||
{ "dialogs_vector_map", bind_dialogs_vector_map },
|
{ "dialogs_vector_map", bind_dialogs_vector_map },
|
||||||
{ "RenderText", bind_RenderText },
|
{ "RenderText", bind_RenderText },
|
||||||
{ "_rgba_getr", bind__rgba_getr },
|
{ "_rgba_getr", bind__rgba_getr },
|
||||||
|
@ -5934,7 +5860,8 @@ const luaL_reg bindings_routines[] = {
|
||||||
{ "sprite_new_with_layer", bind_sprite_new_with_layer },
|
{ "sprite_new_with_layer", bind_sprite_new_with_layer },
|
||||||
{ "sprite_free", bind_sprite_free },
|
{ "sprite_free", bind_sprite_free },
|
||||||
{ "sprite_is_modified", bind_sprite_is_modified },
|
{ "sprite_is_modified", bind_sprite_is_modified },
|
||||||
{ "sprite_was_saved", bind_sprite_was_saved },
|
{ "sprite_is_associated_to_file", bind_sprite_is_associated_to_file },
|
||||||
|
{ "sprite_mark_as_saved", bind_sprite_mark_as_saved },
|
||||||
{ "sprite_set_filename", bind_sprite_set_filename },
|
{ "sprite_set_filename", bind_sprite_set_filename },
|
||||||
{ "sprite_set_size", bind_sprite_set_size },
|
{ "sprite_set_size", bind_sprite_set_size },
|
||||||
{ "sprite_set_frames", bind_sprite_set_frames },
|
{ "sprite_set_frames", bind_sprite_set_frames },
|
||||||
|
|
|
@ -53,20 +53,22 @@ void rec_screen_on(void)
|
||||||
char buf[512];
|
char buf[512];
|
||||||
int c;
|
int c;
|
||||||
|
|
||||||
if (!is_interactive ()
|
/* if (!is_interactive() */
|
||||||
|| (bitmap_color_depth (ji_screen) != 8)
|
/* /\* || (bitmap_color_depth(ji_screen) != 8) *\/ */
|
||||||
|| (rec_file))
|
/* || (rec_file)) */
|
||||||
return;
|
/* return; */
|
||||||
|
|
||||||
|
ASSERT(rec_file == NULL);
|
||||||
|
|
||||||
/* get a file name for the record */
|
/* get a file name for the record */
|
||||||
for (c=0; c<10000; c++) {
|
for (c=0; c<10000; c++) {
|
||||||
usprintf (buf, "rec%04d.%s", c, "flc");
|
usprintf(buf, "rec%04d.%s", c, "flc");
|
||||||
if (!exists (buf))
|
if (!exists(buf))
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* open the file */
|
/* open the file */
|
||||||
rec_file = fopen (buf, "wb");
|
rec_file = fopen(buf, "wb");
|
||||||
if (!rec_file)
|
if (!rec_file)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -90,8 +92,8 @@ void rec_screen_on(void)
|
||||||
fli_header->oframe1 = fli_header->oframe2 = 0;
|
fli_header->oframe1 = fli_header->oframe2 = 0;
|
||||||
|
|
||||||
/* prepare maps */
|
/* prepare maps */
|
||||||
omap = jmalloc (768);
|
omap = jmalloc(768);
|
||||||
cmap = jmalloc (768);
|
cmap = jmalloc(768);
|
||||||
|
|
||||||
/* prepare old bitmap */
|
/* prepare old bitmap */
|
||||||
old_bmp = NULL;
|
old_bmp = NULL;
|
||||||
|
@ -107,23 +109,23 @@ void rec_screen_off(void)
|
||||||
{
|
{
|
||||||
if (rec_file) {
|
if (rec_file) {
|
||||||
/* write the header and close the file */
|
/* write the header and close the file */
|
||||||
fli_write_header (rec_file, fli_header);
|
fli_write_header(rec_file, fli_header);
|
||||||
fclose (rec_file);
|
fclose(rec_file);
|
||||||
rec_file = NULL;
|
rec_file = NULL;
|
||||||
|
|
||||||
/* free memory */
|
/* free memory */
|
||||||
if (old_bmp)
|
if (old_bmp)
|
||||||
destroy_bitmap (old_bmp);
|
destroy_bitmap(old_bmp);
|
||||||
|
|
||||||
jfree (fli_header);
|
jfree(fli_header);
|
||||||
jfree (cmap);
|
jfree(cmap);
|
||||||
jfree (omap);
|
jfree(omap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void rec_screen_poll (void)
|
void rec_screen_poll (void)
|
||||||
{
|
{
|
||||||
if (!is_interactive () || !rec_file)
|
if (!is_interactive() || !rec_file)
|
||||||
return;
|
return;
|
||||||
else if (ji_clock-rec_clock > JI_TICKS_PER_SEC/FRAMES_PER_SECOND) {
|
else if (ji_clock-rec_clock > JI_TICKS_PER_SEC/FRAMES_PER_SECOND) {
|
||||||
int old_flag;
|
int old_flag;
|
||||||
|
@ -144,24 +146,26 @@ void rec_screen_poll (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* save in a bitmap the visible screen portion */
|
/* save in a bitmap the visible screen portion */
|
||||||
bmp = create_bitmap (JI_SCREEN_W, JI_SCREEN_H);
|
bmp = create_bitmap_ex(8, JI_SCREEN_W, JI_SCREEN_H);
|
||||||
blit (ji_screen, bmp, 0, 0, 0, 0, JI_SCREEN_W, JI_SCREEN_H);
|
if (ji_screen != screen)
|
||||||
|
jmouse_draw_cursor();
|
||||||
|
blit(ji_screen, bmp, 0, 0, 0, 0, JI_SCREEN_W, JI_SCREEN_H);
|
||||||
|
|
||||||
/* write the frame in FLC file */
|
/* write the frame in FLC file */
|
||||||
if (old_bmp)
|
if (old_bmp)
|
||||||
fli_write_frame (rec_file, fli_header,
|
fli_write_frame(rec_file, fli_header,
|
||||||
(unsigned char *)old_bmp->dat, omap,
|
(unsigned char *)old_bmp->dat, omap,
|
||||||
(unsigned char *)bmp->dat, cmap, W_ALL);
|
(unsigned char *)bmp->dat, cmap, W_ALL);
|
||||||
else
|
else
|
||||||
fli_write_frame (rec_file, fli_header, NULL, NULL,
|
fli_write_frame(rec_file, fli_header, NULL, NULL,
|
||||||
(unsigned char *)bmp->dat, cmap, W_ALL);
|
(unsigned char *)bmp->dat, cmap, W_ALL);
|
||||||
|
|
||||||
/* copy this palette to the old one */
|
/* copy this palette to the old one */
|
||||||
memcpy (omap, cmap, 768);
|
memcpy(omap, cmap, 768);
|
||||||
|
|
||||||
/* fixup old bitmap */
|
/* fixup old bitmap */
|
||||||
if (old_bmp)
|
if (old_bmp)
|
||||||
destroy_bitmap (old_bmp);
|
destroy_bitmap(old_bmp);
|
||||||
|
|
||||||
old_bmp = bmp;
|
old_bmp = bmp;
|
||||||
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* Copyright (C) 2001-2005 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifndef USE_PRECOMPILED_HEADER
|
|
||||||
|
|
||||||
#include <allegro.h>
|
|
||||||
|
|
||||||
#include "jinete/system.h"
|
|
||||||
|
|
||||||
#include "core/core.h"
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void screen_shot (void)
|
|
||||||
{
|
|
||||||
int old_flag;
|
|
||||||
char buf[512];
|
|
||||||
PALETTE pal;
|
|
||||||
BITMAP *bmp;
|
|
||||||
int c;
|
|
||||||
|
|
||||||
if (!is_interactive ())
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* save the active flag which indicate if the mouse is freeze or not */
|
|
||||||
old_flag = freeze_mouse_flag;
|
|
||||||
|
|
||||||
/* freeze the mouse obligatory */
|
|
||||||
freeze_mouse_flag = TRUE;
|
|
||||||
|
|
||||||
/* get the active palette color */
|
|
||||||
get_palette (pal);
|
|
||||||
|
|
||||||
/* get a file name for the capture */
|
|
||||||
for (c=0; c<10000; c++) {
|
|
||||||
usprintf (buf, "shot%04d.%s", c, "pcx");
|
|
||||||
if (!exists (buf))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* save in a bitmap the visible screen portion */
|
|
||||||
bmp = create_sub_bitmap (ji_screen, 0, 0, JI_SCREEN_W, JI_SCREEN_H);
|
|
||||||
save_bitmap (buf, bmp, pal);
|
|
||||||
destroy_bitmap (bmp);
|
|
||||||
|
|
||||||
/* restore the freeze flag by the previous value */
|
|
||||||
freeze_mouse_flag = old_flag;
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
/* ase -- allegro-sprite-editor: the ultimate sprites factory
|
|
||||||
* Copyright (C) 2001-2005 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
|
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef UTIL_SCRSHOT_H
|
|
||||||
#define UTIL_SCRSHOT_H
|
|
||||||
|
|
||||||
void screen_shot (void);
|
|
||||||
|
|
||||||
#endif /* UTIL_SCRSHOT_H */
|
|
||||||
|
|
|
@ -64,6 +64,7 @@ enum { CURSOR_CROSS_ONE = 1,
|
||||||
CURSOR_BRUSH = 2 };
|
CURSOR_BRUSH = 2 };
|
||||||
|
|
||||||
static int cursor_type;
|
static int cursor_type;
|
||||||
|
static int cursor_negative;
|
||||||
|
|
||||||
static int saved_pixel[MAX_SAVED];
|
static int saved_pixel[MAX_SAVED];
|
||||||
static int saved_pixel_n;
|
static int saved_pixel_n;
|
||||||
|
@ -102,10 +103,8 @@ void editor_draw_cursor(JWidget widget, int x, int y)
|
||||||
limit_region = jwidget_get_drawable_region(widget, JI_GDR_CUTTOPWINDOWS);
|
limit_region = jwidget_get_drawable_region(widget, JI_GDR_CUTTOPWINDOWS);
|
||||||
|
|
||||||
/* get cursor color */
|
/* get cursor color */
|
||||||
if (is_cursor_mask())
|
cursor_negative = is_cursor_mask();
|
||||||
color = -1;
|
color = get_raw_cursor_color();
|
||||||
else
|
|
||||||
color = get_raw_cursor_color();
|
|
||||||
|
|
||||||
/* cursor in the screen (view) */
|
/* cursor in the screen (view) */
|
||||||
editor->cursor_screen_x = x;
|
editor->cursor_screen_x = x;
|
||||||
|
@ -328,7 +327,7 @@ static void savepixel(BITMAP *bmp, int x, int y, int color)
|
||||||
static void drawpixel(BITMAP *bmp, int x, int y, int color)
|
static void drawpixel(BITMAP *bmp, int x, int y, int color)
|
||||||
{
|
{
|
||||||
if (saved_pixel_n < MAX_SAVED && point_inside_region(x, y)) {
|
if (saved_pixel_n < MAX_SAVED && point_inside_region(x, y)) {
|
||||||
if (color < 0) {
|
if (cursor_negative) {
|
||||||
int r, g, b, c = saved_pixel[saved_pixel_n++];
|
int r, g, b, c = saved_pixel[saved_pixel_n++];
|
||||||
|
|
||||||
r = getr(c);
|
r = getr(c);
|
||||||
|
|
|
@ -560,8 +560,8 @@ void editor_draw_grid(JWidget widget)
|
||||||
screen_to_editor(widget, x2, y2, &u2, &v2);
|
screen_to_editor(widget, x2, y2, &u2, &v2);
|
||||||
|
|
||||||
jrect_moveto(grid,
|
jrect_moveto(grid,
|
||||||
(grid->x1 % jrect_w(grid)) - jrect_w(grid),
|
(grid->x1 % jrect_w(grid)) - jrect_w(grid),
|
||||||
(grid->y1 % jrect_h(grid)) - jrect_h(grid));
|
(grid->y1 % jrect_h(grid)) - jrect_h(grid));
|
||||||
|
|
||||||
u1 = ((u1-grid->x1) / jrect_w(grid)) - 1;
|
u1 = ((u1-grid->x1) / jrect_w(grid)) - 1;
|
||||||
v1 = ((v1-grid->y1) / jrect_h(grid)) - 1;
|
v1 = ((v1-grid->y1) / jrect_h(grid)) - 1;
|
||||||
|
|
|
@ -103,15 +103,13 @@ static bool menuitem_msg_proc(JWidget widget, JMessage msg)
|
||||||
|
|
||||||
if (menuitem->command) {
|
if (menuitem->command) {
|
||||||
/* enabled? */
|
/* enabled? */
|
||||||
if (command_is_enabled(menuitem->command,
|
if (command_is_enabled(menuitem->command, menuitem->argument))
|
||||||
menuitem->argument))
|
|
||||||
jwidget_enable(widget);
|
jwidget_enable(widget);
|
||||||
else
|
else
|
||||||
jwidget_disable(widget);
|
jwidget_disable(widget);
|
||||||
|
|
||||||
/* selected? */
|
/* selected? */
|
||||||
if (command_is_selected(menuitem->command,
|
if (command_is_checked(menuitem->command, menuitem->argument))
|
||||||
menuitem->argument))
|
|
||||||
jwidget_select(widget);
|
jwidget_select(widget);
|
||||||
else
|
else
|
||||||
jwidget_deselect(widget);
|
jwidget_deselect(widget);
|
||||||
|
@ -134,8 +132,7 @@ static bool menuitem_msg_proc(JWidget widget, JMessage msg)
|
||||||
|
|
||||||
if (menuitem->command && command_is_enabled(menuitem->command,
|
if (menuitem->command && command_is_enabled(menuitem->command,
|
||||||
menuitem->argument)) {
|
menuitem->argument)) {
|
||||||
command_execute(menuitem->command,
|
command_execute(menuitem->command, menuitem->argument);
|
||||||
menuitem->argument);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -386,7 +386,7 @@ static void button_command(JWidget widget, void *data)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACTION_PLAY:
|
case ACTION_PLAY:
|
||||||
play_animation ();
|
play_animation();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ACTION_NEXT:
|
case ACTION_NEXT:
|
||||||
|
@ -465,7 +465,7 @@ static void play_animation(void)
|
||||||
LOCK_VARIABLE(speed_timer);
|
LOCK_VARIABLE(speed_timer);
|
||||||
LOCK_FUNCTION(speed_timer_callback);
|
LOCK_FUNCTION(speed_timer_callback);
|
||||||
|
|
||||||
clear_keybuf ();
|
clear_keybuf();
|
||||||
|
|
||||||
/* clear all the screen */
|
/* clear all the screen */
|
||||||
clear_bitmap(ji_screen);
|
clear_bitmap(ji_screen);
|
||||||
|
@ -480,10 +480,11 @@ static void play_animation(void)
|
||||||
editor_draw_sprite_safe(current_editor, 0, 0, sprite->w, sprite->h);
|
editor_draw_sprite_safe(current_editor, 0, 0, sprite->w, sprite->h);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
poll_mouse ();
|
poll_mouse();
|
||||||
poll_keyboard ();
|
poll_keyboard();
|
||||||
if (keypressed() || mouse_b)
|
if (keypressed() || mouse_b)
|
||||||
done = TRUE;
|
done = TRUE;
|
||||||
|
gui_feedback();
|
||||||
} while (!done && (speed_timer <= 0));
|
} while (!done && (speed_timer <= 0));
|
||||||
|
|
||||||
if (!done) {
|
if (!done) {
|
||||||
|
@ -493,6 +494,7 @@ static void play_animation(void)
|
||||||
|
|
||||||
speed_timer--;
|
speed_timer--;
|
||||||
}
|
}
|
||||||
|
gui_feedback();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* if right-click or ESC */
|
/* if right-click or ESC */
|
||||||
|
@ -503,6 +505,7 @@ static void play_animation(void)
|
||||||
/* refresh all */
|
/* refresh all */
|
||||||
set_current_palette(sprite_get_palette(sprite, sprite->frpos), TRUE);
|
set_current_palette(sprite_get_palette(sprite, sprite->frpos), TRUE);
|
||||||
jmanager_refresh_screen();
|
jmanager_refresh_screen();
|
||||||
|
gui_feedback();
|
||||||
|
|
||||||
while (mouse_b)
|
while (mouse_b)
|
||||||
poll_mouse();
|
poll_mouse();
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
#include "jinete/hook.h"
|
#include "jinete/hook.h"
|
||||||
#include "jinete/widget.h"
|
#include "jinete/widget.h"
|
||||||
|
|
||||||
#include "dialogs/toolconf.h"
|
#include "commands/commands.h"
|
||||||
#include "modules/gfx.h"
|
#include "modules/gfx.h"
|
||||||
#include "modules/gui.h"
|
#include "modules/gui.h"
|
||||||
#include "modules/tools.h"
|
#include "modules/tools.h"
|
||||||
|
@ -71,8 +71,10 @@ JWidget tool_bar_new(int align)
|
||||||
|
|
||||||
if (align == JI_HORIZONTAL)
|
if (align == JI_HORIZONTAL)
|
||||||
group = group_button_new(len, 1, c, ICONS_LIST);
|
group = group_button_new(len, 1, c, ICONS_LIST);
|
||||||
else
|
else {
|
||||||
|
/* group = group_button_new(1, len, c, ICONS_LIST); */
|
||||||
group = group_button_new(1, len, c, ICONS_LIST);
|
group = group_button_new(1, len, c, ICONS_LIST);
|
||||||
|
}
|
||||||
|
|
||||||
jwidget_expansive(box, TRUE);
|
jwidget_expansive(box, TRUE);
|
||||||
jwidget_expansive(fillbox, TRUE);
|
jwidget_expansive(fillbox, TRUE);
|
||||||
|
@ -106,12 +108,12 @@ static int group_change_signal(JWidget widget, int user_data)
|
||||||
int c = group_button_get_selected(widget);
|
int c = group_button_get_selected(widget);
|
||||||
|
|
||||||
if (current_tool != ase_tools_list[c])
|
if (current_tool != ase_tools_list[c])
|
||||||
select_tool(ase_tools_list[c]->name);
|
select_tool(ase_tools_list[c]);
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void conf_command(JWidget widget)
|
static void conf_command(JWidget widget)
|
||||||
{
|
{
|
||||||
dialogs_tools_configuration();
|
command_execute(command_get_by_name(CMD_CONFIGURE_TOOLS), NULL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue