don't use SDL in Load_surface() anymore
So the init phase does not depend on SDL anymore. Signed-off-by: Thomas Bernard <miniupnp@free.fr>
This commit is contained in:
parent
72fea0290f
commit
a6c948b27e
@ -577,7 +577,7 @@ OBJS = main.o init.o graph.o $(APIOBJ) misc.o special.o \
|
||||
transform.o pversion.o factory.o $(PLATFORMOBJ) \
|
||||
fileformats.o miscfileformats.o libraw2crtc.o \
|
||||
brush_ops.o buttons_effects.o layers.o \
|
||||
oldies.o tiles.o colorred.o unicode.o
|
||||
oldies.o tiles.o colorred.o unicode.o gfx2surface.o
|
||||
ifndef NORECOIL
|
||||
OBJS += loadrecoil.o recoil.o
|
||||
endif
|
||||
|
||||
@ -2,78 +2,80 @@ $(OBJDIR)/SFont.o: SFont.c SFont.h
|
||||
$(OBJDIR)/brush.o: brush.c global.h struct.h const.h graph.h misc.h errors.h \
|
||||
windows.h sdlscreen.h brush.h tiles.h
|
||||
$(OBJDIR)/brush_ops.o: brush_ops.c brush.h struct.h const.h buttons.h loadsave.h \
|
||||
engine.h global.h graph.h misc.h operatio.h pages.h sdlscreen.h \
|
||||
windows.h
|
||||
gfx2surface.h engine.h global.h graph.h misc.h operatio.h pages.h \
|
||||
sdlscreen.h windows.h
|
||||
$(OBJDIR)/buttons.o: buttons.c const.h struct.h global.h misc.h graph.h engine.h \
|
||||
readline.h filesel.h loadsave.h init.h buttons.h operatio.h pages.h \
|
||||
palette.h errors.h readini.h saveini.h shade.h io.h help.h text.h \
|
||||
sdlscreen.h windows.h brush.h input.h special.h tiles.h setup.h \
|
||||
unicode.h
|
||||
readline.h filesel.h loadsave.h gfx2surface.h init.h buttons.h \
|
||||
operatio.h pages.h palette.h errors.h readini.h saveini.h shade.h io.h \
|
||||
help.h text.h sdlscreen.h windows.h brush.h input.h special.h tiles.h \
|
||||
setup.h unicode.h
|
||||
$(OBJDIR)/buttons_effects.o: buttons_effects.c brush.h struct.h const.h buttons.h \
|
||||
loadsave.h engine.h global.h graph.h help.h input.h misc.h pages.h \
|
||||
readline.h sdlscreen.h windows.h tiles.h
|
||||
loadsave.h gfx2surface.h engine.h global.h graph.h help.h input.h misc.h \
|
||||
pages.h readline.h sdlscreen.h windows.h tiles.h
|
||||
$(OBJDIR)/colorred.o: colorred.c colorred.h struct.h const.h
|
||||
$(OBJDIR)/engine.o: engine.c const.h struct.h global.h graph.h misc.h special.h \
|
||||
buttons.h loadsave.h operatio.h shade.h errors.h sdlscreen.h windows.h \
|
||||
brush.h input.h engine.h pages.h layers.h factory.h io.h pxsimple.h \
|
||||
oldies.h
|
||||
buttons.h loadsave.h gfx2surface.h operatio.h shade.h errors.h \
|
||||
sdlscreen.h windows.h brush.h input.h engine.h pages.h layers.h \
|
||||
factory.h io.h pxsimple.h oldies.h
|
||||
$(OBJDIR)/factory.o: factory.c brush.h struct.h const.h buttons.h loadsave.h \
|
||||
engine.h errors.h filesel.h global.h graph.h io.h misc.h pages.h \
|
||||
readline.h sdlscreen.h windows.h palette.h input.h help.h realpath.h \
|
||||
setup.h tiles.h
|
||||
gfx2surface.h engine.h errors.h filesel.h global.h graph.h io.h misc.h \
|
||||
pages.h readline.h sdlscreen.h windows.h palette.h input.h help.h \
|
||||
realpath.h setup.h tiles.h
|
||||
$(OBJDIR)/fileformats.o: fileformats.c errors.h global.h struct.h const.h \
|
||||
loadsave.h misc.h io.h pages.h windows.h fileformats.h
|
||||
loadsave.h gfx2surface.h misc.h io.h pages.h windows.h fileformats.h
|
||||
$(OBJDIR)/filesel.o: filesel.c const.h struct.h global.h misc.h errors.h io.h \
|
||||
windows.h sdlscreen.h loadsave.h mountlist.h engine.h readline.h input.h \
|
||||
help.h unicode.h filesel.h
|
||||
windows.h sdlscreen.h loadsave.h gfx2surface.h mountlist.h engine.h \
|
||||
readline.h input.h help.h unicode.h filesel.h
|
||||
$(OBJDIR)/gfx2surface.o: gfx2surface.c gfx2surface.h struct.h const.h errors.h
|
||||
$(OBJDIR)/graph.o: graph.c global.h struct.h const.h engine.h buttons.h loadsave.h \
|
||||
pages.h errors.h sdlscreen.h graph.h misc.h pxsimple.h pxtall.h pxwide.h \
|
||||
pxdouble.h pxtriple.h pxwide2.h pxtall2.h pxtall3.h pxquad.h windows.h \
|
||||
input.h brush.h tiles.h
|
||||
gfx2surface.h pages.h errors.h sdlscreen.h graph.h misc.h pxsimple.h \
|
||||
pxtall.h pxwide.h pxdouble.h pxtriple.h pxwide2.h pxtall2.h pxtall3.h \
|
||||
pxquad.h windows.h input.h brush.h tiles.h
|
||||
$(OBJDIR)/help.o: help.c const.h struct.h global.h misc.h engine.h helpfile.h \
|
||||
help.h sdlscreen.h text.h keyboard.h windows.h input.h hotkeys.h \
|
||||
errors.h pages.h factory.h
|
||||
$(OBJDIR)/hotkeys.o: hotkeys.c struct.h const.h global.h hotkeys.h
|
||||
$(OBJDIR)/init.o: init.c buttons.h struct.h const.h loadsave.h errors.h global.h \
|
||||
graph.h init.h io.h factory.h help.h hotkeys.h keyboard.h misc.h \
|
||||
mountlist.h operatio.h palette.h sdlscreen.h setup.h transform.h \
|
||||
$(OBJDIR)/init.o: init.c buttons.h struct.h const.h loadsave.h gfx2surface.h \
|
||||
errors.h global.h graph.h init.h io.h factory.h help.h hotkeys.h \
|
||||
keyboard.h misc.h mountlist.h operatio.h palette.h setup.h transform.h \
|
||||
windows.h layers.h special.h
|
||||
$(OBJDIR)/input.o: input.c global.h struct.h const.h keyboard.h sdlscreen.h \
|
||||
windows.h errors.h misc.h buttons.h loadsave.h input.h
|
||||
windows.h errors.h misc.h buttons.h loadsave.h gfx2surface.h input.h
|
||||
$(OBJDIR)/io.o: io.c struct.h const.h io.h realpath.h unicode.h global.h
|
||||
$(OBJDIR)/keyboard.o: keyboard.c global.h struct.h const.h keyboard.h
|
||||
$(OBJDIR)/layers.o: layers.c const.h struct.h global.h windows.h engine.h pages.h \
|
||||
sdlscreen.h input.h help.h misc.h readline.h graph.h
|
||||
$(OBJDIR)/libraw2crtc.o: libraw2crtc.c const.h global.h struct.h loadsave.h
|
||||
$(OBJDIR)/loadrecoil.o: loadrecoil.c struct.h const.h global.h loadsave.h io.h \
|
||||
errors.h recoil.h
|
||||
$(OBJDIR)/loadsave.o: loadsave.c buttons.h struct.h const.h loadsave.h errors.h \
|
||||
global.h io.h misc.h graph.h op_c.h colorred.h pages.h palette.h \
|
||||
sdlscreen.h windows.h engine.h brush.h setup.h filesel.h unicode.h \
|
||||
$(OBJDIR)/libraw2crtc.o: libraw2crtc.c const.h global.h struct.h loadsave.h \
|
||||
gfx2surface.h
|
||||
$(OBJDIR)/loadrecoil.o: loadrecoil.c struct.h const.h global.h loadsave.h \
|
||||
gfx2surface.h io.h errors.h recoil.h
|
||||
$(OBJDIR)/loadsave.o: loadsave.c buttons.h struct.h const.h loadsave.h \
|
||||
gfx2surface.h errors.h global.h io.h misc.h graph.h op_c.h colorred.h \
|
||||
pages.h palette.h windows.h engine.h brush.h setup.h filesel.h unicode.h \
|
||||
fileformats.h
|
||||
$(OBJDIR)/main.o: main.c const.h struct.h global.h graph.h misc.h init.h buttons.h \
|
||||
loadsave.h engine.h pages.h sdlscreen.h errors.h readini.h saveini.h \
|
||||
io.h text.h setup.h windows.h brush.h palette.h realpath.h input.h \
|
||||
help.h filesel.h
|
||||
loadsave.h gfx2surface.h engine.h pages.h sdlscreen.h errors.h readini.h \
|
||||
saveini.h io.h text.h setup.h windows.h brush.h palette.h realpath.h \
|
||||
input.h help.h filesel.h
|
||||
$(OBJDIR)/misc.o: misc.c struct.h const.h sdlscreen.h global.h errors.h buttons.h \
|
||||
loadsave.h engine.h misc.h keyboard.h windows.h palette.h input.h \
|
||||
graph.h pages.h
|
||||
loadsave.h gfx2surface.h engine.h misc.h keyboard.h windows.h palette.h \
|
||||
input.h graph.h pages.h
|
||||
$(OBJDIR)/miscfileformats.o: miscfileformats.c engine.h struct.h const.h errors.h \
|
||||
global.h io.h libraw2crtc.h loadsave.h misc.h sdlscreen.h windows.h \
|
||||
oldies.h fileformats.h
|
||||
global.h io.h libraw2crtc.h loadsave.h gfx2surface.h misc.h sdlscreen.h \
|
||||
windows.h oldies.h pages.h fileformats.h
|
||||
$(OBJDIR)/mountlist.o: mountlist.c mountlist.h
|
||||
$(OBJDIR)/oldies.o: oldies.c struct.h const.h global.h errors.h misc.h palette.h \
|
||||
pages.h windows.h layers.h
|
||||
$(OBJDIR)/op_c.o: op_c.c op_c.h struct.h const.h colorred.h errors.h global.h \
|
||||
engine.h windows.h
|
||||
$(OBJDIR)/operatio.o: operatio.c const.h struct.h global.h misc.h engine.h graph.h \
|
||||
operatio.h buttons.h loadsave.h pages.h errors.h sdlscreen.h brush.h \
|
||||
windows.h input.h special.h tiles.h
|
||||
operatio.h buttons.h loadsave.h gfx2surface.h pages.h errors.h \
|
||||
sdlscreen.h brush.h windows.h input.h special.h tiles.h
|
||||
$(OBJDIR)/pages.o: pages.c global.h struct.h const.h pages.h errors.h loadsave.h \
|
||||
misc.h windows.h tiles.h graph.h
|
||||
gfx2surface.h misc.h windows.h tiles.h graph.h
|
||||
$(OBJDIR)/palette.o: palette.c const.h struct.h global.h misc.h engine.h readline.h \
|
||||
buttons.h loadsave.h pages.h help.h sdlscreen.h errors.h op_c.h \
|
||||
colorred.h windows.h input.h palette.h shade.h
|
||||
buttons.h loadsave.h gfx2surface.h pages.h help.h sdlscreen.h errors.h \
|
||||
op_c.h colorred.h windows.h input.h palette.h shade.h
|
||||
$(OBJDIR)/pversion.o: pversion.c
|
||||
$(OBJDIR)/pxdouble.o: pxdouble.c global.h struct.h const.h sdlscreen.h misc.h \
|
||||
graph.h pxdouble.h pxwide.h
|
||||
@ -107,14 +109,14 @@ $(OBJDIR)/setup.o: setup.c struct.h const.h io.h setup.h
|
||||
$(OBJDIR)/shade.o: shade.c global.h struct.h const.h graph.h engine.h errors.h \
|
||||
misc.h readline.h help.h sdlscreen.h windows.h input.h shade.h
|
||||
$(OBJDIR)/special.o: special.c const.h struct.h global.h graph.h engine.h windows.h \
|
||||
special.h pages.h misc.h buttons.h loadsave.h
|
||||
special.h pages.h misc.h buttons.h loadsave.h gfx2surface.h
|
||||
$(OBJDIR)/text.o: text.c SFont.h struct.h const.h global.h sdlscreen.h io.h \
|
||||
errors.h windows.h misc.h setup.h
|
||||
$(OBJDIR)/tiles.o: tiles.c struct.h const.h global.h graph.h sdlscreen.h engine.h \
|
||||
windows.h input.h misc.h tiles.h
|
||||
$(OBJDIR)/transform.o: transform.c global.h struct.h const.h transform.h engine.h \
|
||||
sdlscreen.h windows.h input.h help.h misc.h readline.h buttons.h \
|
||||
loadsave.h pages.h tiles.h
|
||||
loadsave.h gfx2surface.h pages.h tiles.h
|
||||
$(OBJDIR)/unicode.o: unicode.c unicode.h struct.h const.h
|
||||
$(OBJDIR)/version.o: version.c
|
||||
$(OBJDIR)/windows.o: windows.c windows.h struct.h const.h engine.h errors.h \
|
||||
|
||||
80
src/gfx2surface.c
Normal file
80
src/gfx2surface.c
Normal file
@ -0,0 +1,80 @@
|
||||
/* vim:expandtab:ts=2 sw=2:
|
||||
*/
|
||||
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||
|
||||
Copyright 2018 Thomas Bernard
|
||||
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
|
||||
|
||||
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/>
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "gfx2surface.h"
|
||||
#include "errors.h"
|
||||
|
||||
T_GFX2_Surface * New_GFX2_Surface(word width, word height)
|
||||
{
|
||||
T_GFX2_Surface * surface;
|
||||
size_t size;
|
||||
|
||||
surface = malloc(sizeof(T_GFX2_Surface));
|
||||
if (surface == NULL)
|
||||
return NULL;
|
||||
size = width * height;
|
||||
if (size > 0)
|
||||
{
|
||||
surface->pixels = malloc(size);
|
||||
if(surface->pixels == NULL)
|
||||
{
|
||||
free(surface);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
surface->pixels = NULL;
|
||||
}
|
||||
memset(surface->palette, 0, sizeof(surface->palette));
|
||||
surface->w = width;
|
||||
surface->h = height;
|
||||
return surface;
|
||||
}
|
||||
|
||||
void Free_GFX2_Surface(T_GFX2_Surface * surface)
|
||||
{
|
||||
free(surface->pixels);
|
||||
free(surface);
|
||||
}
|
||||
|
||||
byte Get_GFX2_Surface_pixel(const T_GFX2_Surface * surface, int x, int y)
|
||||
{
|
||||
if (surface == NULL) return 0;
|
||||
if (x<0 || x>=surface->w || y<0 || y>=surface->h)
|
||||
{
|
||||
Warning("Get_GFX2_Surface_pixel() out of bound access");
|
||||
return 0;
|
||||
}
|
||||
return surface->pixels[x + surface->w * y];
|
||||
}
|
||||
|
||||
void Set_GFX2_Surface_pixel(T_GFX2_Surface * surface, int x, int y, byte value)
|
||||
{
|
||||
if (surface == NULL) return;
|
||||
if (x<0 || x>=surface->w || y<0 || y>=surface->h)
|
||||
{
|
||||
Warning("Set_GFX2_Surface_pixel() out of bound access");
|
||||
return;
|
||||
}
|
||||
surface->pixels[x + surface->w * y] = value;
|
||||
}
|
||||
46
src/gfx2surface.h
Normal file
46
src/gfx2surface.h
Normal file
@ -0,0 +1,46 @@
|
||||
/* vim:expandtab:ts=2 sw=2:
|
||||
*/
|
||||
/* Grafx2 - The Ultimate 256-color bitmap paint program
|
||||
|
||||
Copyright 2018 Thomas Bernard
|
||||
Copyright 1996-2001 Sunset Design (Guillaume Dorme & Karl Maritaud)
|
||||
|
||||
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 gfx2surface.h
|
||||
/// Memory representation of a 8bits picture
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef GFX2SURFACE_H__
|
||||
#define GFX2SURFACE_H__
|
||||
|
||||
#include "struct.h"
|
||||
|
||||
/// to load 256 color pictures into memory
|
||||
typedef struct
|
||||
{
|
||||
byte * pixels;
|
||||
T_Palette palette;
|
||||
word w; ///< Width
|
||||
word h; ///< Height
|
||||
} T_GFX2_Surface;
|
||||
|
||||
T_GFX2_Surface * New_GFX2_Surface(word width, word height);
|
||||
void Free_GFX2_Surface(T_GFX2_Surface * surface);
|
||||
|
||||
byte Get_GFX2_Surface_pixel(const T_GFX2_Surface * surface, int x, int y);
|
||||
void Set_GFX2_Surface_pixel(T_GFX2_Surface * surface, int x, int y, byte value);
|
||||
|
||||
#endif
|
||||
69
src/init.c
69
src/init.c
@ -43,8 +43,10 @@
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <errno.h>
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
#include <SDL_byteorder.h>
|
||||
#include <SDL_image.h>
|
||||
#endif
|
||||
#if defined(__WIN32__)
|
||||
#include <windows.h> // GetLogicalDrives(), GetDriveType(), DRIVE_*
|
||||
#endif
|
||||
@ -81,13 +83,16 @@
|
||||
#include "mountlist.h" // read_file_system_list
|
||||
#include "operatio.h"
|
||||
#include "palette.h"
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
#include "sdlscreen.h"
|
||||
#endif
|
||||
#include "setup.h"
|
||||
#include "struct.h"
|
||||
#include "transform.h"
|
||||
#include "windows.h"
|
||||
#include "layers.h"
|
||||
#include "special.h"
|
||||
#include "gfx2surface.h"
|
||||
|
||||
char Gui_loading_error_message[512];
|
||||
|
||||
@ -98,7 +103,7 @@ void bstrtostr( BSTR in, STRPTR out, TEXT max );
|
||||
#endif
|
||||
|
||||
// Fonctions de lecture dans la skin de l'interface graphique
|
||||
byte GUI_seek_down(SDL_Surface *gui, int *start_x, int *start_y, byte neutral_color,char * section)
|
||||
static byte GUI_seek_down(T_GFX2_Surface *gui, int *start_x, int *start_y, byte neutral_color,char * section)
|
||||
{
|
||||
byte color;
|
||||
int y;
|
||||
@ -106,7 +111,7 @@ byte GUI_seek_down(SDL_Surface *gui, int *start_x, int *start_y, byte neutral_co
|
||||
*start_x=0;
|
||||
do
|
||||
{
|
||||
color=Get_SDL_pixel_8(gui,*start_x,y);
|
||||
color=Get_GFX2_Surface_pixel(gui,*start_x,y);
|
||||
if (color!=neutral_color)
|
||||
{
|
||||
*start_y=y;
|
||||
@ -120,7 +125,7 @@ byte GUI_seek_down(SDL_Surface *gui, int *start_x, int *start_y, byte neutral_co
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte GUI_seek_right(SDL_Surface *gui, int *start_x, int start_y, byte neutral_color, char * section)
|
||||
static byte GUI_seek_right(T_GFX2_Surface *gui, int *start_x, int start_y, byte neutral_color, char * section)
|
||||
{
|
||||
byte color;
|
||||
int x;
|
||||
@ -128,7 +133,7 @@ byte GUI_seek_right(SDL_Surface *gui, int *start_x, int start_y, byte neutral_co
|
||||
|
||||
do
|
||||
{
|
||||
color=Get_SDL_pixel_8(gui,x,start_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,x,start_y);
|
||||
if (color!=neutral_color)
|
||||
{
|
||||
*start_x=x;
|
||||
@ -142,7 +147,7 @@ byte GUI_seek_right(SDL_Surface *gui, int *start_x, int start_y, byte neutral_co
|
||||
return 1;
|
||||
}
|
||||
|
||||
byte Read_GUI_block(T_Gui_skin *gfx, SDL_Surface *gui, int start_x, int start_y, void *dest, int width, int height, char * section, int type)
|
||||
static byte Read_GUI_block(T_Gui_skin *gfx, T_GFX2_Surface *gui, int start_x, int start_y, void *dest, int width, int height, char * section, int type)
|
||||
{
|
||||
// type: 0 = normal GUI element, only 4 colors allowed
|
||||
// type: 1 = mouse cursor, 4 colors allowed + transparent
|
||||
@ -165,7 +170,7 @@ byte Read_GUI_block(T_Gui_skin *gfx, SDL_Surface *gui, int start_x, int start_y,
|
||||
{
|
||||
for (x=start_x; x<start_x+width; x++)
|
||||
{
|
||||
color=Get_SDL_pixel_8(gui,x,y);
|
||||
color=Get_GFX2_Surface_pixel(gui,x,y);
|
||||
if (type==0 && (color != gfx->Color[0] && color != gfx->Color[1] && color != gfx->Color[2] && color != gfx->Color[3]))
|
||||
{
|
||||
sprintf(Gui_loading_error_message, "Error in skin file: Was looking at %d,%d for a %d*%d object (%s) but at %d,%d a pixel was found with color %d which isn't one of the GUI colors (which were detected as %d,%d,%d,%d.\n",
|
||||
@ -196,7 +201,7 @@ byte Read_GUI_block(T_Gui_skin *gfx, SDL_Surface *gui, int start_x, int start_y,
|
||||
return 0;
|
||||
}
|
||||
|
||||
byte Read_GUI_pattern(T_Gui_skin *gfx, SDL_Surface *gui, int start_x, int start_y, word *dest, char * section)
|
||||
static byte Read_GUI_pattern(T_Gui_skin *gfx, T_GFX2_Surface *gui, int start_x, int start_y, word *dest, char * section)
|
||||
{
|
||||
byte buffer[256];
|
||||
int x,y;
|
||||
@ -260,7 +265,7 @@ void Center_GUI_cursor(T_Gui_skin *gfx, byte *cursor_buffer, int cursor_number)
|
||||
gfx->Cursor_sprite[cursor_number][y][x]=cursor_buffer[(start_y+y)*29+start_x+x];
|
||||
}
|
||||
|
||||
byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
static byte Parse_skin(T_GFX2_Surface * gui, T_Gui_skin *gfx)
|
||||
{
|
||||
int i,j;
|
||||
int cursor_x=0,cursor_y=0;
|
||||
@ -271,26 +276,12 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
int char_3=0; // l'une des fontes dans l'ordre : 1 2
|
||||
int char_4=0; // 3 4
|
||||
byte mouse_cursor_area[31][29];
|
||||
SDL_Palette * SDLPal;
|
||||
|
||||
// Default palette
|
||||
if (!gui->format || gui->format->BitsPerPixel != 8)
|
||||
{
|
||||
sprintf(Gui_loading_error_message, "Not a 8-bit image");
|
||||
return 1;
|
||||
}
|
||||
SDLPal=gui->format->palette;
|
||||
if (!SDLPal || SDLPal->ncolors!=256)
|
||||
{
|
||||
sprintf(Gui_loading_error_message, "Not a 256-color palette");
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Read the default palette
|
||||
Get_SDL_Palette(SDLPal, gfx->Default_palette);
|
||||
memcpy(gfx->Default_palette, gui->palette, sizeof(T_Palette));
|
||||
|
||||
// Carré "noir"
|
||||
gfx->Color[0] = Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
gfx->Color[0] = Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
do
|
||||
{
|
||||
if (++cursor_x>=gui->w)
|
||||
@ -298,7 +289,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
sprintf(Gui_loading_error_message, "Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
|
||||
return 1;
|
||||
}
|
||||
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
} while(color==gfx->Color[0]);
|
||||
// Carré "foncé"
|
||||
gfx->Color[1] = color;
|
||||
@ -309,7 +300,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
sprintf(Gui_loading_error_message, "Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
|
||||
return 1;
|
||||
}
|
||||
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
} while(color==gfx->Color[1]);
|
||||
// Carré "clair"
|
||||
gfx->Color[2] = color;
|
||||
@ -320,7 +311,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
sprintf(Gui_loading_error_message, "Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
|
||||
return 1;
|
||||
}
|
||||
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
} while(color==gfx->Color[2]);
|
||||
// Carré "blanc"
|
||||
gfx->Color[3] = color;
|
||||
@ -331,7 +322,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
sprintf(Gui_loading_error_message, "Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
|
||||
return 1;
|
||||
}
|
||||
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
} while(color==gfx->Color[3]);
|
||||
// Carré "transparent"
|
||||
gfx->Color_trans=color;
|
||||
@ -342,7 +333,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
sprintf(Gui_loading_error_message, "Error in GUI skin file: should start with 5 consecutive squares for black, dark, light, white, transparent, then a neutral color\n");
|
||||
return 1;
|
||||
}
|
||||
color=Get_SDL_pixel_8(gui,cursor_x,cursor_y);
|
||||
color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y);
|
||||
} while(color==gfx->Color_trans);
|
||||
// Reste : couleur neutre
|
||||
neutral_color=color;
|
||||
@ -350,7 +341,7 @@ byte Parse_skin(SDL_Surface * gui, T_Gui_skin *gfx)
|
||||
|
||||
cursor_x=0;
|
||||
cursor_y=1;
|
||||
while ((color=Get_SDL_pixel_8(gui,cursor_x,cursor_y))==gfx->Color[0])
|
||||
while ((color=Get_GFX2_Surface_pixel(gui,cursor_x,cursor_y))==gfx->Color[0])
|
||||
{
|
||||
cursor_y++;
|
||||
if (cursor_y>=gui->h)
|
||||
@ -666,7 +657,7 @@ T_Gui_skin * Load_graphics(const char * skin_file, T_Gradient_array *gradients)
|
||||
{
|
||||
T_Gui_skin * gfx;
|
||||
char filename[MAX_PATH_CHARACTERS];
|
||||
SDL_Surface * gui;
|
||||
T_GFX2_Surface * gui;
|
||||
|
||||
if (skin_file[0] == '\0')
|
||||
{
|
||||
@ -692,20 +683,18 @@ T_Gui_skin * Load_graphics(const char * skin_file, T_Gradient_array *gradients)
|
||||
gfx = NULL;
|
||||
return NULL;
|
||||
}
|
||||
if (Parse_skin(gui, gfx))
|
||||
if (Parse_skin(gui, gfx) != 0)
|
||||
{
|
||||
SDL_FreeSurface(gui);
|
||||
free(gfx);
|
||||
gfx = NULL;
|
||||
return NULL;
|
||||
}
|
||||
SDL_FreeSurface(gui);
|
||||
Free_GFX2_Surface(gui);
|
||||
return gfx;
|
||||
}
|
||||
|
||||
// ---- font loading -----
|
||||
|
||||
static byte * Parse_font(SDL_Surface * image, int is_main)
|
||||
static byte * Parse_font(T_GFX2_Surface * image, int is_main)
|
||||
{
|
||||
byte * font;
|
||||
int character;
|
||||
@ -741,7 +730,7 @@ static byte * Parse_font(SDL_Surface * image, int is_main)
|
||||
for (x=0;x<8; x++)
|
||||
{
|
||||
// Pick pixel
|
||||
color = Get_SDL_pixel_8(image, (character % chars_per_line)*8+x, (character / chars_per_line)*8+y);
|
||||
color = Get_GFX2_Surface_pixel(image, (character % chars_per_line)*8+x, (character / chars_per_line)*8+y);
|
||||
if (color > 1)
|
||||
{
|
||||
sprintf(Gui_loading_error_message, "Error in font file: Only colors 0 and 1 can be used for the font.\n");
|
||||
@ -760,7 +749,7 @@ byte * Load_font(const char * font_name, int is_main)
|
||||
{
|
||||
byte * font = NULL;
|
||||
char filename[MAX_PATH_CHARACTERS];
|
||||
SDL_Surface * image;
|
||||
T_GFX2_Surface * image;
|
||||
|
||||
if (font_name[0] == '\0')
|
||||
{
|
||||
@ -778,7 +767,7 @@ byte * Load_font(const char * font_name, int is_main)
|
||||
return NULL;
|
||||
}
|
||||
font = Parse_font(image, is_main);
|
||||
SDL_FreeSurface(image);
|
||||
Free_GFX2_Surface(image);
|
||||
return font;
|
||||
}
|
||||
|
||||
@ -3193,6 +3182,7 @@ void Define_icon(void)
|
||||
|
||||
#endif
|
||||
// General version: Load icon from the file gfx2.gif
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
{
|
||||
char icon_path[MAX_PATH_CHARACTERS];
|
||||
SDL_Surface * icon;
|
||||
@ -3230,4 +3220,5 @@ void Define_icon(void)
|
||||
SDL_FreeSurface(icon);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -41,8 +41,11 @@
|
||||
#endif
|
||||
#endif
|
||||
#include <limits.h>
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
#include <SDL.h>
|
||||
#include <SDL_image.h>
|
||||
#include <SDL_endian.h>
|
||||
#endif
|
||||
|
||||
#include "buttons.h"
|
||||
#include "const.h"
|
||||
@ -55,7 +58,9 @@
|
||||
#include "op_c.h"
|
||||
#include "pages.h"
|
||||
#include "palette.h"
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
#include "sdlscreen.h"
|
||||
#endif
|
||||
#include "struct.h"
|
||||
#include "windows.h"
|
||||
#include "engine.h"
|
||||
@ -65,9 +70,11 @@
|
||||
#include "unicode.h"
|
||||
#include "fileformats.h"
|
||||
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
// -- SDL_Image -------------------------------------------------------------
|
||||
// (TGA, BMP, PNM, XPM, XCF, PCX, GIF, JPG, TIF, IFF, PNG, ICO)
|
||||
void Load_SDL_Image(T_IO_Context *);
|
||||
#endif
|
||||
|
||||
// -- Recoil ----------------------------------------------------------------
|
||||
// 8bits and 16bits computer graphics
|
||||
@ -170,10 +177,10 @@ void Set_pixel(T_IO_Context *context, short x_pos, short y_pos, byte color)
|
||||
|
||||
break;
|
||||
|
||||
// Load pixels in a SDL_Surface
|
||||
// Load pixels into a Surface
|
||||
case CONTEXT_SURFACE:
|
||||
if (x_pos>=0 && y_pos>=0 && x_pos<context->Surface->w && y_pos<context->Surface->h)
|
||||
*(((byte *)(context->Surface->pixels)) + context->Surface->pitch * y_pos + x_pos) = color;
|
||||
Set_GFX2_Surface_pixel(context->Surface, x_pos, y_pos, color);
|
||||
break;
|
||||
|
||||
case CONTEXT_PALETTE:
|
||||
@ -447,7 +454,7 @@ void Pre_load(T_IO_Context *context, short width, short height, long file_size,
|
||||
break;
|
||||
|
||||
case CONTEXT_SURFACE:
|
||||
context->Surface = SDL_CreateRGBSurface(SDL_SWSURFACE|SDL_SRCCOLORKEY, width, height, 8, 0, 0, 0, 0);
|
||||
context->Surface = New_GFX2_Surface(width, height);
|
||||
if (! context->Surface)
|
||||
{
|
||||
File_error=1;
|
||||
@ -586,12 +593,14 @@ void Load_image(T_IO_Context *context)
|
||||
Load_Recoil_Image(context);
|
||||
if (File_error)
|
||||
#endif
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
{
|
||||
// Last try: with SDL_image
|
||||
Load_SDL_Image(context);
|
||||
}
|
||||
|
||||
if (File_error)
|
||||
#endif
|
||||
{
|
||||
// Sinon, l'appelant sera au courant de l'échec grace à File_error;
|
||||
// et si on s'apprêtait à faire un chargement définitif de l'image (pas
|
||||
@ -846,16 +855,7 @@ void Load_image(T_IO_Context *context)
|
||||
if (File_error == 0)
|
||||
{
|
||||
// Copy the palette
|
||||
SDL_Color colors[256];
|
||||
int i;
|
||||
|
||||
for (i=0; i<256; i++)
|
||||
{
|
||||
colors[i].r=context->Palette[i].R;
|
||||
colors[i].g=context->Palette[i].G;
|
||||
colors[i].b=context->Palette[i].B;
|
||||
}
|
||||
SDL_SetColors(context->Surface, colors, 0, 256);
|
||||
memcpy(context->Surface->palette, context->Palette, sizeof(T_Palette));
|
||||
}
|
||||
}
|
||||
else if (context->Type == CONTEXT_PREVIEW || context->Type == CONTEXT_PREVIEW_PALETTE
|
||||
@ -1049,6 +1049,7 @@ void Save_image(T_IO_Context *context)
|
||||
}
|
||||
|
||||
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
void Load_SDL_Image(T_IO_Context *context)
|
||||
{
|
||||
char filename[MAX_PATH_CHARACTERS]; // Nom complet du fichier
|
||||
@ -1120,12 +1121,12 @@ void Load_SDL_Image(T_IO_Context *context)
|
||||
}
|
||||
|
||||
///
|
||||
/// Load an arbitrary SDL_Surface.
|
||||
/// Load an arbitrary Surface.
|
||||
/// @param full_name Full (absolute) path of the file to load.
|
||||
/// @param gradients Pass the address of a target T_Gradient_array if you want the gradients, NULL otherwise
|
||||
SDL_Surface * Load_surface(char *full_name, T_Gradient_array *gradients)
|
||||
T_GFX2_Surface * Load_surface(char *full_name, T_Gradient_array *gradients)
|
||||
{
|
||||
SDL_Surface * bmp=NULL;
|
||||
T_GFX2_Surface * bmp=NULL;
|
||||
T_IO_Context context;
|
||||
|
||||
Init_context_surface(&context, full_name, "");
|
||||
@ -1153,6 +1154,7 @@ SDL_Surface * Load_surface(char *full_name, T_Gradient_array *gradients)
|
||||
|
||||
return bmp;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/// Saves an image.
|
||||
@ -1335,7 +1337,7 @@ void Init_context_brush(T_IO_Context * context, char *file_name, char *file_dire
|
||||
|
||||
}
|
||||
|
||||
// Setup for loading an image into a new SDL surface.
|
||||
// Setup for loading an image into a new GFX2 surface.
|
||||
void Init_context_surface(T_IO_Context * context, char *file_name, char *file_directory)
|
||||
{
|
||||
memset(context, 0, sizeof(T_IO_Context));
|
||||
|
||||
@ -28,7 +28,10 @@
|
||||
#define __LOADSAVE_H__
|
||||
|
||||
#include <stdio.h>
|
||||
#if defined(USE_SDL) || defined(USE_SDL2)
|
||||
#include <SDL_image.h>
|
||||
#endif
|
||||
#include "gfx2surface.h"
|
||||
|
||||
enum CONTEXT_TYPE {
|
||||
CONTEXT_MAIN_IMAGE,
|
||||
@ -107,8 +110,8 @@ typedef struct
|
||||
byte *Preview_bitmap;
|
||||
byte Preview_usage[256];
|
||||
|
||||
// Internal: returned surface for SDL_Surface case
|
||||
SDL_Surface * Surface;
|
||||
// Internal: returned surface for Surface case
|
||||
T_GFX2_Surface * Surface;
|
||||
|
||||
} T_IO_Context;
|
||||
|
||||
@ -137,7 +140,7 @@ void Init_context_flat_image(T_IO_Context * context, char *file_name, char *file
|
||||
void Init_context_brush(T_IO_Context * context, char *file_name, char *file_directory);
|
||||
// Setup for saving an arbitrary undo/redo step, from either the main or spare page.
|
||||
void Init_context_history_step(T_IO_Context * context, T_Page *page);
|
||||
// Setup for loading an image into a new SDL surface.
|
||||
// Setup for loading an image into a new GFX2 surface.
|
||||
void Init_context_surface(T_IO_Context * context, char *file_name, char *file_directory);
|
||||
|
||||
// Cleans up resources (currently: the 24bit buffer)
|
||||
@ -189,9 +192,9 @@ extern const T_Format File_formats[];
|
||||
void Image_emergency_backup(void);
|
||||
|
||||
///
|
||||
/// Load an arbitrary SDL_Surface.
|
||||
/// Load an arbitrary GFX2_Surface.
|
||||
/// @param gradients Pass the address of a target T_Gradient_array if you want the gradients, NULL otherwise
|
||||
SDL_Surface * Load_surface(char *full_name, T_Gradient_array *gradients);
|
||||
T_GFX2_Surface * Load_surface(char *full_name, T_Gradient_array *gradients);
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@ -309,7 +309,7 @@ SDL_Color Color_to_SDL_color(byte index)
|
||||
}
|
||||
|
||||
/// Reads a pixel in a 8-bit SDL surface.
|
||||
byte Get_SDL_pixel_8(SDL_Surface *bmp, int x, int y)
|
||||
byte Get_SDL_pixel_8(const SDL_Surface *bmp, int x, int y)
|
||||
{
|
||||
return ((byte *)(bmp->pixels))[(y*bmp->pitch+x)];
|
||||
}
|
||||
@ -322,7 +322,7 @@ void Set_SDL_pixel_8(SDL_Surface *bmp, int x, int y, byte color)
|
||||
|
||||
|
||||
/// Reads a pixel in a multi-byte SDL surface.
|
||||
dword Get_SDL_pixel_hicolor(SDL_Surface *bmp, int x, int y)
|
||||
dword Get_SDL_pixel_hicolor(const SDL_Surface *bmp, int x, int y)
|
||||
{
|
||||
byte * ptr;
|
||||
|
||||
|
||||
@ -58,9 +58,9 @@ byte * Surface_to_bytefield(SDL_Surface *source, byte * dest);
|
||||
/// Gets the RGB 24-bit color currently associated with a palette index.
|
||||
SDL_Color Color_to_SDL_color(byte);
|
||||
/// Reads a pixel in a 8-bit SDL surface.
|
||||
byte Get_SDL_pixel_8(SDL_Surface *bmp, int x, int y);
|
||||
byte Get_SDL_pixel_8(const SDL_Surface *bmp, int x, int y);
|
||||
/// Reads a pixel in a multi-byte SDL surface.
|
||||
dword Get_SDL_pixel_hicolor(SDL_Surface *bmp, int x, int y);
|
||||
dword Get_SDL_pixel_hicolor(const SDL_Surface *bmp, int x, int y);
|
||||
/// Writes a pixel in a 8-bit SDL surface.
|
||||
void Set_SDL_pixel_8(SDL_Surface *bmp, int x, int y, byte color);
|
||||
/// Convert a SDL Palette to a grafx2 palette
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user