Added "Brush Factory", allowing you to run a lua script to generate (or alter, untested yet) a brush.
Added a simple (and ugly) sample script. This needs updates to the makefile for platforms other than linux. TODO: add a listbox to select the script you want to run. Do we have a simple API to handle filelists yet ? git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1094 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
4d20be0053
commit
1934425972
17
Makefile
17
Makefile
@ -227,8 +227,8 @@ else
|
||||
|
||||
# Compiles a regular linux exectutable for the native platform
|
||||
BIN = grafx2
|
||||
COPT = -W -Wall -Wdeclaration-after-statement -std=c99 -c -g `sdl-config --cflags` $(TTFCOPT)
|
||||
LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT) -lpng
|
||||
COPT = -W -Wall -Wdeclaration-after-statement -std=c99 -c -g `sdl-config --cflags` $(TTFCOPT) $(LUACOPT)
|
||||
LOPT = `sdl-config --libs` -lSDL_image $(TTFLOPT) -lpng $(LUALOPT)
|
||||
# Use gcc for compiling. Use ncc to build a callgraph and analyze the code.
|
||||
CC = gcc
|
||||
#CC = nccgen -ncgcc -ncld -ncfabs
|
||||
@ -253,6 +253,17 @@ else
|
||||
TTFLABEL =
|
||||
endif
|
||||
|
||||
#Lua scripting is optional too
|
||||
ifeq ($(NOLUA),1)
|
||||
LUACOPT =
|
||||
LUALOPT =
|
||||
LUALABEL = -nolua
|
||||
else
|
||||
LUACOPT = -D__ENABLE_LUA__
|
||||
LUALOPT = -llua5.1
|
||||
LUALABEL =
|
||||
endif
|
||||
|
||||
#To disable Joystick emulation of cursor, make NOJOY=1 (for input.o)
|
||||
#This can be necessary to test keyboard cursor code, because an existing
|
||||
#joystick will keep reporting a contradicting position.
|
||||
@ -267,7 +278,7 @@ endif
|
||||
.PHONY : all debug release clean depend zip version force install uninstall
|
||||
|
||||
# This is the list of the objects we want to build. Dependancies are built by "make depend" automatically.
|
||||
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/misc.o $(OBJDIR)/special.o $(OBJDIR)/buttons.o $(OBJDIR)/palette.o $(OBJDIR)/help.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/engine.o $(OBJDIR)/filesel.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/keyboard.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/text.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o $(OBJDIR)/pxwide.o $(OBJDIR)/pxdouble.o $(OBJDIR)/pxtriple.o $(OBJDIR)/pxtall2.o $(OBJDIR)/pxwide2.o $(OBJDIR)/pxquad.o $(OBJDIR)/windows.o $(OBJDIR)/brush.o $(OBJDIR)/realpath.o $(OBJDIR)/mountlist.o $(OBJDIR)/input.o $(OBJDIR)/hotkeys.o $(OBJDIR)/transform.o $(OBJDIR)/pversion.o $(PLATFORMOBJ)
|
||||
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/misc.o $(OBJDIR)/special.o $(OBJDIR)/buttons.o $(OBJDIR)/palette.o $(OBJDIR)/help.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/engine.o $(OBJDIR)/filesel.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/keyboard.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/text.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o $(OBJDIR)/pxwide.o $(OBJDIR)/pxdouble.o $(OBJDIR)/pxtriple.o $(OBJDIR)/pxtall2.o $(OBJDIR)/pxwide2.o $(OBJDIR)/pxquad.o $(OBJDIR)/windows.o $(OBJDIR)/brush.o $(OBJDIR)/realpath.o $(OBJDIR)/mountlist.o $(OBJDIR)/input.o $(OBJDIR)/hotkeys.o $(OBJDIR)/transform.o $(OBJDIR)/pversion.o $(OBJDIR)/factory.o $(PLATFORMOBJ)
|
||||
|
||||
SKIN_FILES = skins/skin_classic.png skins/skin_modern.png skins/font_Classic.png skins/font_Fun.png
|
||||
|
||||
|
||||
2
brush.h
2
brush.h
@ -25,6 +25,8 @@
|
||||
#ifndef __BRUSH_H_
|
||||
#define __BRUSH_H_
|
||||
|
||||
#include "struct.h"
|
||||
|
||||
/*!
|
||||
Gets the brush from the picture.
|
||||
@param start_x left edge coordinate in the picture
|
||||
|
||||
16
buttons.h
16
buttons.h
@ -17,10 +17,10 @@
|
||||
along with Grafx2; if not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
///@file buttons.h
|
||||
/// Almost all the editor actions that are called by the menu are here.
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __BOUTONS_H_
|
||||
#define __BOUTONS_H_
|
||||
@ -28,19 +28,21 @@
|
||||
#include "struct.h"
|
||||
|
||||
/*!
|
||||
Displays an error message when there is no more memory for the requested operation.
|
||||
Displays an error message when there is no more memory for the requested
|
||||
operation.
|
||||
*/
|
||||
void Message_out_of_memory(void);
|
||||
|
||||
/*!
|
||||
Displays the splash screen at program startup.
|
||||
Displays the splash screen at program startup.
|
||||
*/
|
||||
void Button_Message_initial(void);
|
||||
|
||||
/*!
|
||||
Changes brush shape.
|
||||
This function saves the current brush shape and swith to the default one (single pixel brush) for the filler and the color picker.
|
||||
These functions don't need (and will not work with) a custom brush.
|
||||
Changes brush shape.
|
||||
This function saves the current brush shape and swith to the default one
|
||||
(single pixel brush) for the filler and the color picker.
|
||||
These functions don't need (and will not work with) a custom brush.
|
||||
*/
|
||||
void Change_paintbrush_shape(byte shape);
|
||||
|
||||
|
||||
4
engine.c
4
engine.c
@ -79,7 +79,11 @@ char * Menu_tooltip[NB_BUTTONS]=
|
||||
"Grad. spheres / ellipses",
|
||||
"Brush grab. / Restore ",
|
||||
"Lasso / Restore brush ",
|
||||
#ifdef __ENABLE_LUA__
|
||||
"Brush effects / factory ",
|
||||
#else
|
||||
"Brush effects ",
|
||||
#endif
|
||||
"Drawing modes (effects) ",
|
||||
"Text ",
|
||||
"Magnify mode / Menu ",
|
||||
|
||||
2
engine.h
2
engine.h
@ -86,7 +86,7 @@ void Window_dropdown_clear_items(T_Dropdown_button * dropdown);
|
||||
T_List_button * Window_set_list_button(T_Special_button * entry_button,
|
||||
T_Scroller_button * scroller, Func_draw_list_item draw_list_item);
|
||||
void Window_redraw_list(T_List_button * list);
|
||||
byte Window_click_in_rectangle(short start_x,short start_y,short end_x,
|
||||
byte Window_click_in_rectangle(short start_x, short start_y, short end_x,
|
||||
short end_y);
|
||||
short Wait_click_in_palette(T_Palette_button * button);
|
||||
void Get_color_behind_window(byte * color, byte * click);
|
||||
|
||||
148
factory.c
Normal file
148
factory.c
Normal file
@ -0,0 +1,148 @@
|
||||
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||
|
||||
Copyright 2009 Adrien Destugues
|
||||
|
||||
Grafx2 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; version 2
|
||||
of the License.
|
||||
|
||||
Grafx2 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 Grafx2; if not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
|
||||
/*! \file factory.c
|
||||
* \brief Brush factory - generates brush from lua scripts
|
||||
*
|
||||
* The brush factory allows you to generate brushes with Lua code.
|
||||
*/
|
||||
|
||||
#include "brush.h"
|
||||
#include "buttons.h"
|
||||
#include "engine.h"
|
||||
#include "global.h"
|
||||
#include "misc.h"
|
||||
#include "readline.h"
|
||||
#include "sdlscreen.h"
|
||||
#include "windows.h"
|
||||
|
||||
#ifdef __ENABLE_LUA__
|
||||
|
||||
#include <lua5.1/lua.h>
|
||||
#include <lua5.1/lauxlib.h>
|
||||
|
||||
// Wrapper functions to call C from Lua
|
||||
int L_PutPixel(lua_State* L)
|
||||
{
|
||||
Pixel_in_brush(lua_tonumber(L, 1), lua_tonumber(L, 2), lua_tonumber(L, 3));
|
||||
return 0; // no values returned for lua
|
||||
}
|
||||
|
||||
int L_GetPixel(lua_State* L)
|
||||
{
|
||||
uint8_t c = Read_pixel_from_brush(lua_tonumber(L, 1), lua_tonumber(L, 2));
|
||||
lua_pushinteger(L, c);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void Button_Brush_Factory(void)
|
||||
{
|
||||
short clicked_button;
|
||||
word height;
|
||||
word width;
|
||||
char str[5];
|
||||
|
||||
T_Special_button* width_button;
|
||||
T_Special_button* height_button;
|
||||
|
||||
Open_window(154, 162, "Brush Factory");
|
||||
|
||||
Window_set_normal_button(77, 141, 67, 14, "Cancel", 0, 1, KEY_ESC); // 1
|
||||
Window_set_normal_button(10, 141, 67, 14, "Run", 0, 1, 0); // 2
|
||||
Print_in_window(10, 17, "Width:", MC_Black, MC_Light);
|
||||
width_button = Window_set_input_button(64, 15, 4); // 3
|
||||
Print_in_window(10, 30, "Height:", MC_Black, MC_Light);
|
||||
height_button = Window_set_input_button(64, 28, 4); // 4
|
||||
|
||||
width = Paintbrush_width;
|
||||
Num2str(width, str, 4);
|
||||
Window_input_content(width_button, str);
|
||||
|
||||
height = Paintbrush_height;
|
||||
Num2str(height, str, 4);
|
||||
Window_input_content(height_button, str);
|
||||
|
||||
Update_window_area(0, 0, Window_width, Window_height);
|
||||
Display_cursor();
|
||||
|
||||
do {
|
||||
clicked_button = Window_clicked_button();
|
||||
|
||||
switch (clicked_button)
|
||||
{
|
||||
case 3 : // Largeur
|
||||
Num2str(width, str, 4);
|
||||
Readline(65, 16, str, 4, 1);
|
||||
width = atoi(str);
|
||||
// On corrige les dimensions
|
||||
if (width == 0)
|
||||
{
|
||||
width = 1;
|
||||
Num2str(width, str, 4);
|
||||
Window_input_content(width_button, str);
|
||||
}
|
||||
Display_cursor();
|
||||
break;
|
||||
|
||||
case 4 : // Height
|
||||
Num2str(height, str, 4);
|
||||
Readline(65, 29, str, 4, 1);
|
||||
height = atoi(str);
|
||||
// On corrige les dimensions
|
||||
if (height == 0)
|
||||
{
|
||||
height = 1;
|
||||
Num2str(height, str, 4);
|
||||
Window_input_content(height_button, str);
|
||||
}
|
||||
Display_cursor();
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
} while (clicked_button <= 0 || clicked_button >= 3);
|
||||
|
||||
if (clicked_button == 2) // Run the script
|
||||
{
|
||||
lua_State* L = lua_open();
|
||||
|
||||
Realloc_brush(width, height);
|
||||
|
||||
lua_register(L,"putpixel",L_PutPixel);
|
||||
lua_register(L,"getpixel",L_GetPixel);
|
||||
|
||||
if (luaL_loadfile(L,"./test.lua") != 0)
|
||||
Verbose_error_message(lua_tostring(L, 1));
|
||||
|
||||
lua_pushinteger(L, width);
|
||||
lua_pushinteger(L, height);
|
||||
if (lua_pcall(L, 2, 0, 0) != 0)
|
||||
Verbose_error_message(lua_tostring(L, 1));
|
||||
|
||||
lua_close(L);
|
||||
|
||||
Change_paintbrush_shape(PAINTBRUSH_SHAPE_COLOR_BRUSH);
|
||||
}
|
||||
|
||||
Close_window();
|
||||
Display_cursor();
|
||||
}
|
||||
|
||||
#endif
|
||||
41
init.c
41
init.c
@ -48,26 +48,27 @@
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
#include "buttons.h"
|
||||
#include "const.h"
|
||||
#include "struct.h"
|
||||
#include "errors.h"
|
||||
#include "global.h"
|
||||
#include "graph.h"
|
||||
#include "buttons.h"
|
||||
#include "palette.h"
|
||||
#include "help.h"
|
||||
#include "operatio.h"
|
||||
#include "misc.h"
|
||||
#include "errors.h"
|
||||
#include "keyboard.h"
|
||||
#include "io.h"
|
||||
#include "hotkeys.h"
|
||||
#include "setup.h"
|
||||
#include "windows.h"
|
||||
#include "sdlscreen.h"
|
||||
#include "mountlist.h" // read_file_system_list
|
||||
#include "loadsave.h" // Image_emergency_backup
|
||||
#include "init.h"
|
||||
#include "io.h"
|
||||
#include "factory.h"
|
||||
#include "help.h"
|
||||
#include "hotkeys.h"
|
||||
#include "keyboard.h"
|
||||
#include "loadsave.h" // Image_emergency_backup
|
||||
#include "misc.h"
|
||||
#include "mountlist.h" // read_file_system_list
|
||||
#include "operatio.h"
|
||||
#include "palette.h"
|
||||
#include "sdlscreen.h"
|
||||
#include "setup.h"
|
||||
#include "struct.h"
|
||||
#include "transform.h"
|
||||
#include "windows.h"
|
||||
|
||||
char Gui_loading_error_message[512];
|
||||
|
||||
@ -1058,10 +1059,14 @@ void Init_buttons(void)
|
||||
FAMILY_INTERRUPTION);
|
||||
|
||||
Init_button(BUTTON_BRUSH_EFFECTS,
|
||||
106,18,
|
||||
16,16,
|
||||
106, 18,
|
||||
16, 16,
|
||||
BUTTON_SHAPE_RECTANGLE,
|
||||
Button_Brush_FX,Button_Brush_FX,
|
||||
#ifdef __ENABLE_LUA__
|
||||
Button_Brush_FX, Button_Brush_Factory,
|
||||
#else
|
||||
Button_Brush_FX, Button_Brush_FX,
|
||||
#endif
|
||||
Do_nothing,
|
||||
FAMILY_INSTANT);
|
||||
|
||||
|
||||
2
main.c
2
main.c
@ -1,4 +1,4 @@
|
||||
/* Grafx1 - The Ultimate 256-color bitmap paint program
|
||||
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||
|
||||
Copyright 2008 Peter Gordon
|
||||
Copyright 2008 Franck Charlet
|
||||
|
||||
6
misc.c
6
misc.c
@ -206,12 +206,12 @@ void Init_chrono(dword delay)
|
||||
return;
|
||||
}
|
||||
|
||||
void Pixel_in_brush (word x,word y,byte color)
|
||||
void Pixel_in_brush (word x, word y, byte color)
|
||||
{
|
||||
*(Brush+y*Brush_width+x)=color;
|
||||
*(Brush + y * Brush_width + x)=color;
|
||||
}
|
||||
|
||||
byte Read_pixel_from_brush (word x,word y)
|
||||
byte Read_pixel_from_brush (word x, word y)
|
||||
{
|
||||
return *(Brush + y * Brush_width + x);
|
||||
}
|
||||
|
||||
@ -908,7 +908,7 @@ void Warning_message(char * message)
|
||||
}
|
||||
|
||||
/// Window that shows a big message, and waits for a click on OK
|
||||
void Verbose_error_message(char * message)
|
||||
void Verbose_error_message(const char * message)
|
||||
{
|
||||
short clicked_button;
|
||||
int line;
|
||||
|
||||
@ -70,7 +70,7 @@ void Print_counter(short x,short y,const char * str,byte text_color,byte backgro
|
||||
|
||||
byte Confirmation_box(char * message);
|
||||
void Warning_message(char * message);
|
||||
void Verbose_error_message(char * message);
|
||||
void Verbose_error_message(const char * message);
|
||||
int Requester_window(char* message, int initial_value);
|
||||
|
||||
void Display_image_limits(void);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user