Support for "wide pixel" mode (Each pixel is 2x1). Run the program with "/wide" argument to test.
Now you can draw graphics for Amstrad CPC's "mode 0" :) git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@385 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
d81a4a26f0
commit
d4dcf44f7c
2
Makefile
2
Makefile
@ -133,7 +133,7 @@ endif
|
|||||||
|
|
||||||
.PHONY : all debug release clean depend zip version force install uninstall
|
.PHONY : all debug release clean depend zip version force install uninstall
|
||||||
|
|
||||||
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o
|
OBJ = $(OBJDIR)/main.o $(OBJDIR)/init.o $(OBJDIR)/graph.o $(OBJDIR)/sdlscreen.o $(OBJDIR)/divers.o $(OBJDIR)/special.o $(OBJDIR)/boutons.o $(OBJDIR)/palette.o $(OBJDIR)/aide.o $(OBJDIR)/operatio.o $(OBJDIR)/pages.o $(OBJDIR)/loadsave.o $(OBJDIR)/readline.o $(OBJDIR)/moteur.o $(OBJDIR)/files.o $(OBJDIR)/op_c.o $(OBJDIR)/readini.o $(OBJDIR)/saveini.o $(OBJDIR)/shade.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/version.o $(OBJDIR)/texte.o $(OBJDIR)/SFont.o $(OBJDIR)/setup.o $(OBJDIR)/pxsimple.o $(OBJDIR)/pxtall.o $(OBJDIR)/pxwide.o
|
||||||
CFGOBJ = $(OBJDIR)/gfxcfg.o $(OBJDIR)/SFont.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/setup.o
|
CFGOBJ = $(OBJDIR)/gfxcfg.o $(OBJDIR)/SFont.o $(OBJDIR)/clavier.o $(OBJDIR)/io.o $(OBJDIR)/setup.o
|
||||||
|
|
||||||
all : $(BIN) $(CFGBIN)
|
all : $(BIN) $(CFGBIN)
|
||||||
|
|||||||
@ -12,7 +12,8 @@ $(OBJDIR)/files.o: files.c const.h struct.h global.h loadsave.h graph.h divers.h
|
|||||||
$(OBJDIR)/gfxcfg.o: gfxcfg.c SFont.h struct.h const.h clavier.h io.h hotkeys.h \
|
$(OBJDIR)/gfxcfg.o: gfxcfg.c SFont.h struct.h const.h clavier.h io.h hotkeys.h \
|
||||||
setup.h
|
setup.h
|
||||||
$(OBJDIR)/graph.o: graph.c global.h struct.h const.h loadsave.h moteur.h boutons.h \
|
$(OBJDIR)/graph.o: graph.c global.h struct.h const.h loadsave.h moteur.h boutons.h \
|
||||||
pages.h erreurs.h sdlscreen.h graph.h divers.h pxsimple.h pxtall.h
|
pages.h erreurs.h sdlscreen.h graph.h divers.h pxsimple.h pxtall.h \
|
||||||
|
pxwide.h
|
||||||
$(OBJDIR)/init.o: init.c const.h struct.h global.h loadsave.h graph.h boutons.h \
|
$(OBJDIR)/init.o: init.c const.h struct.h global.h loadsave.h graph.h boutons.h \
|
||||||
palette.h aide.h operatio.h divers.h erreurs.h clavier.h io.h hotkeys.h \
|
palette.h aide.h operatio.h divers.h erreurs.h clavier.h io.h hotkeys.h \
|
||||||
files.h setup.h
|
files.h setup.h
|
||||||
@ -36,6 +37,8 @@ $(OBJDIR)/pxsimple.o: pxsimple.c global.h struct.h const.h loadsave.h sdlscreen.
|
|||||||
divers.h
|
divers.h
|
||||||
$(OBJDIR)/pxtall.o: pxtall.c global.h struct.h const.h loadsave.h sdlscreen.h \
|
$(OBJDIR)/pxtall.o: pxtall.c global.h struct.h const.h loadsave.h sdlscreen.h \
|
||||||
divers.h pxsimple.h
|
divers.h pxsimple.h
|
||||||
|
$(OBJDIR)/pxwide.o: pxwide.c global.h struct.h const.h loadsave.h sdlscreen.h \
|
||||||
|
divers.h
|
||||||
$(OBJDIR)/readini.o: readini.c const.h global.h struct.h loadsave.h graph.h
|
$(OBJDIR)/readini.o: readini.c const.h global.h struct.h loadsave.h graph.h
|
||||||
$(OBJDIR)/readline.o: readline.c const.h struct.h global.h loadsave.h graph.h \
|
$(OBJDIR)/readline.o: readline.c const.h struct.h global.h loadsave.h graph.h \
|
||||||
divers.h erreurs.h sdlscreen.h readline.h
|
divers.h erreurs.h sdlscreen.h readline.h
|
||||||
|
|||||||
4
aide.c
4
aide.c
@ -177,13 +177,13 @@ void Afficher_aide(void)
|
|||||||
Couleur=CM_Fonce;
|
Couleur=CM_Fonce;
|
||||||
}
|
}
|
||||||
Buffer_de_ligne_horizontale[Position_X++]=Couleur;
|
Buffer_de_ligne_horizontale[Position_X++]=Couleur;
|
||||||
if (Pixel_width>1)
|
if (Pixel_width==2)
|
||||||
Buffer_de_ligne_horizontale[Position_X++]=Couleur;
|
Buffer_de_ligne_horizontale[Position_X++]=Couleur;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// On la splotche
|
// On la splotche
|
||||||
for (Repeat_Menu_Facteur_Y=0;Repeat_Menu_Facteur_Y<Menu_Facteur_Y;Repeat_Menu_Facteur_Y++)
|
for (Repeat_Menu_Facteur_Y=0;Repeat_Menu_Facteur_Y<Menu_Facteur_Y;Repeat_Menu_Facteur_Y++)
|
||||||
Afficher_ligne(Pos_Reel_X,Pos_Reel_Y++,Largeur*Menu_Facteur_X*6,Buffer_de_ligne_horizontale);
|
Afficher_ligne_fast(Pos_Reel_X,Pos_Reel_Y++,Largeur*Menu_Facteur_X*6,Buffer_de_ligne_horizontale);
|
||||||
}
|
}
|
||||||
|
|
||||||
// On efface la fin de la ligne:
|
// On efface la fin de la ligne:
|
||||||
|
|||||||
1
global.h
1
global.h
@ -191,6 +191,7 @@ GLOBAL fonction_display_brush_Mono Display_brush_Mono; // Affiche une partie d
|
|||||||
GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichée à l'écran
|
GLOBAL fonction_display_brush_Color Clear_brush; // Efface la partie de la brosse affichée à l'écran
|
||||||
GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'écran avec les nouvelles couleurs du menu
|
GLOBAL fonction_remap Remap_screen; // Remappe une partie de l'écran avec les nouvelles couleurs du menu
|
||||||
GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne
|
GLOBAL fonction_procsline Afficher_ligne; // Afficher une ligne
|
||||||
|
GLOBAL fonction_procsline Afficher_ligne_fast; // Afficher une ligne talle quelle (sans la doubler en mode wide)
|
||||||
GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne
|
GLOBAL fonction_procsline Lire_ligne; // Afficher ou lire une ligne
|
||||||
GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomée à l'écran (en faisant attention de ne pas effacer le menu)
|
GLOBAL fonction_display_zoom Display_zoomed_screen; // Affiche rapidement toute la partie zoomée à l'écran (en faisant attention de ne pas effacer le menu)
|
||||||
GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom;
|
GLOBAL fonction_display_brush_Color_zoom Display_brush_Color_zoom;
|
||||||
|
|||||||
29
graph.c
29
graph.c
@ -45,6 +45,7 @@
|
|||||||
#include "divers.h"
|
#include "divers.h"
|
||||||
#include "pxsimple.h"
|
#include "pxsimple.h"
|
||||||
#include "pxtall.h"
|
#include "pxtall.h"
|
||||||
|
#include "pxwide.h"
|
||||||
|
|
||||||
// Fonction qui met à jour la zone de l'image donnée en paramètre sur l'écran.
|
// Fonction qui met à jour la zone de l'image donnée en paramètre sur l'écran.
|
||||||
// Tient compte du décalage X et Y et du zoom, et fait tous les controles nécessaires
|
// Tient compte du décalage X et Y et du zoom, et fait tous les controles nécessaires
|
||||||
@ -1079,6 +1080,7 @@ void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen)
|
|||||||
Clear_brush = Clear_brush_Simple ;
|
Clear_brush = Clear_brush_Simple ;
|
||||||
Remap_screen = Remap_screen_Simple ;
|
Remap_screen = Remap_screen_Simple ;
|
||||||
Afficher_ligne = Afficher_une_ligne_ecran_Simple ;
|
Afficher_ligne = Afficher_une_ligne_ecran_Simple ;
|
||||||
|
Afficher_ligne_fast = Afficher_une_ligne_ecran_Simple ;
|
||||||
Lire_ligne = Lire_une_ligne_ecran_Simple ;
|
Lire_ligne = Lire_une_ligne_ecran_Simple ;
|
||||||
Display_zoomed_screen = Afficher_partie_de_l_ecran_zoomee_Simple ;
|
Display_zoomed_screen = Afficher_partie_de_l_ecran_zoomee_Simple ;
|
||||||
Display_brush_Color_zoom = Display_brush_Color_zoom_Simple ;
|
Display_brush_Color_zoom = Display_brush_Color_zoom_Simple ;
|
||||||
@ -1102,6 +1104,7 @@ void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen)
|
|||||||
Clear_brush = Clear_brush_Tall;
|
Clear_brush = Clear_brush_Tall;
|
||||||
Remap_screen = Remap_screen_Tall;
|
Remap_screen = Remap_screen_Tall;
|
||||||
Afficher_ligne = Afficher_une_ligne_ecran_Tall;
|
Afficher_ligne = Afficher_une_ligne_ecran_Tall;
|
||||||
|
Afficher_ligne_fast = Afficher_une_ligne_ecran_Tall;
|
||||||
Lire_ligne = Lire_une_ligne_ecran_Tall;
|
Lire_ligne = Lire_une_ligne_ecran_Tall;
|
||||||
Display_zoomed_screen = Afficher_partie_de_l_ecran_zoomee_Tall;
|
Display_zoomed_screen = Afficher_partie_de_l_ecran_zoomee_Tall;
|
||||||
Display_brush_Color_zoom = Display_brush_Color_zoom_Tall;
|
Display_brush_Color_zoom = Display_brush_Color_zoom_Tall;
|
||||||
@ -1109,6 +1112,30 @@ void Initialiser_mode_video(int Largeur, int Hauteur, int Fullscreen)
|
|||||||
Clear_brush_zoom = Clear_brush_zoom_Tall;
|
Clear_brush_zoom = Clear_brush_zoom_Tall;
|
||||||
Affiche_brosse = Affiche_brosse_Tall;
|
Affiche_brosse = Affiche_brosse_Tall;
|
||||||
break;
|
break;
|
||||||
|
case PIXEL_WIDE:
|
||||||
|
Pixel_width=2;
|
||||||
|
Pixel_height=1;
|
||||||
|
Pixel = Pixel_Wide ;
|
||||||
|
Lit_pixel= Lit_Pixel_Wide ;
|
||||||
|
Display_screen = Afficher_partie_de_l_ecran_Wide ;
|
||||||
|
Block = Block_Wide ;
|
||||||
|
Pixel_Preview_Normal = Pixel_Preview_Normal_Wide ;
|
||||||
|
Pixel_Preview_Loupe = Pixel_Preview_Loupe_Wide ;
|
||||||
|
Ligne_horizontale_XOR = Ligne_horizontale_XOR_Wide ;
|
||||||
|
Ligne_verticale_XOR = Ligne_verticale_XOR_Wide ;
|
||||||
|
Display_brush_Color = Display_brush_Color_Wide ;
|
||||||
|
Display_brush_Mono = Display_brush_Mono_Wide ;
|
||||||
|
Clear_brush = Clear_brush_Wide ;
|
||||||
|
Remap_screen = Remap_screen_Wide ;
|
||||||
|
Afficher_ligne = Afficher_une_ligne_ecran_Wide ;
|
||||||
|
Afficher_ligne_fast = Afficher_une_ligne_ecran_fast_Wide ;
|
||||||
|
Lire_ligne = Lire_une_ligne_ecran_Wide ;
|
||||||
|
Display_zoomed_screen = Afficher_partie_de_l_ecran_zoomee_Wide ;
|
||||||
|
Display_brush_Color_zoom = Display_brush_Color_zoom_Wide ;
|
||||||
|
Display_brush_Mono_zoom = Display_brush_Mono_zoom_Wide ;
|
||||||
|
Clear_brush_zoom = Clear_brush_zoom_Wide ;
|
||||||
|
Affiche_brosse = Affiche_brosse_Wide ;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
// Valeurs raisonnables: minimum 320x200
|
// Valeurs raisonnables: minimum 320x200
|
||||||
if (Pixel_width==1 && Pixel_height==1)
|
if (Pixel_width==1 && Pixel_height==1)
|
||||||
@ -1590,7 +1617,7 @@ void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur
|
|||||||
Buffer_de_ligne_horizontale[Reel_X++]=Fonte[Caractere+Pos_X+Pos_Y]?Couleur_texte:Couleur_fond;
|
Buffer_de_ligne_horizontale[Reel_X++]=Fonte[Caractere+Pos_X+Pos_Y]?Couleur_texte:Couleur_fond;
|
||||||
}
|
}
|
||||||
for (Repeat_Menu_Facteur_Y=0;Repeat_Menu_Facteur_Y<Menu_Facteur_Y;Repeat_Menu_Facteur_Y++)
|
for (Repeat_Menu_Facteur_Y=0;Repeat_Menu_Facteur_Y<Menu_Facteur_Y;Repeat_Menu_Facteur_Y++)
|
||||||
Afficher_ligne(X,Reel_Y++,Indice*Menu_Facteur_X*8,Buffer_de_ligne_horizontale);
|
Afficher_ligne_fast(X,Reel_Y++,Indice*Menu_Facteur_X*8,Buffer_de_ligne_horizontale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
4
main.c
4
main.c
@ -206,6 +206,10 @@ void Analyse_de_la_ligne_de_commande(int argc,char * argv[])
|
|||||||
{
|
{
|
||||||
Pixel_ratio = PIXEL_TALL;
|
Pixel_ratio = PIXEL_TALL;
|
||||||
}
|
}
|
||||||
|
else if ( !strcmp(argv[Indice],"/wide") )
|
||||||
|
{
|
||||||
|
Pixel_ratio = PIXEL_WIDE;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir
|
// Si ce n'est pas un paramètre, c'est le nom du fichier à ouvrir
|
||||||
|
|||||||
8
moteur.c
8
moteur.c
@ -139,16 +139,16 @@ char * TITRE_BOUTON[NB_BOUTONS]=
|
|||||||
void Sauve_fond(byte **Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
void Sauve_fond(byte **Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
||||||
{
|
{
|
||||||
int Indice;
|
int Indice;
|
||||||
*Buffer=(byte *) malloc(Largeur*Menu_Facteur_X*Hauteur*Menu_Facteur_Y);
|
*Buffer=(byte *) malloc(Largeur*Menu_Facteur_X*Hauteur*Menu_Facteur_Y*Pixel_width);
|
||||||
for (Indice=0; Indice<(Hauteur*Menu_Facteur_Y); Indice++)
|
for (Indice=0; Indice<(Hauteur*Menu_Facteur_Y); Indice++)
|
||||||
Lire_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,(*Buffer)+((int)Indice*Largeur*Menu_Facteur_X));
|
Lire_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,(*Buffer)+((int)Indice*Largeur*Menu_Facteur_X*Pixel_width));
|
||||||
}
|
}
|
||||||
// Restaure de ce que la fenêtre cachait
|
// Restaure de ce que la fenêtre cachait
|
||||||
void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
void Restaure_fond(byte *Buffer, int Pos_X, int Pos_Y, int Largeur, int Hauteur)
|
||||||
{
|
{
|
||||||
int Indice;
|
int Indice;
|
||||||
for (Indice=0; Indice<Hauteur*Menu_Facteur_Y; Indice++)
|
for (Indice=0; Indice<Hauteur*Menu_Facteur_Y; Indice++)
|
||||||
Afficher_ligne(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,Buffer+((int)Indice*Largeur*Menu_Facteur_X));
|
Afficher_ligne_fast(Pos_X,Pos_Y+Indice,Largeur*Menu_Facteur_X,Buffer+((int)Indice*Largeur*Menu_Facteur_X*Pixel_width));
|
||||||
free(Buffer);
|
free(Buffer);
|
||||||
}
|
}
|
||||||
// Ecrit un pixel dans un fond de fenêtre
|
// Ecrit un pixel dans un fond de fenêtre
|
||||||
@ -1539,7 +1539,7 @@ void Recuperer_couleur_derriere_fenetre(byte * Couleur, byte * Click)
|
|||||||
Cacher_curseur=0;
|
Cacher_curseur=0;
|
||||||
|
|
||||||
for (Indice=0; Indice<Hauteur; Indice++)
|
for (Indice=0; Indice<Hauteur; Indice++)
|
||||||
Lire_ligne(Fenetre_Pos_X,Fenetre_Pos_Y+Indice,Largeur,Buffer+((int)Indice*Largeur));
|
Lire_ligne(Fenetre_Pos_X,Fenetre_Pos_Y+Indice,Largeur,Buffer+((int)Indice*Largeur*Pixel_width));
|
||||||
A=Menu_Ordonnee;
|
A=Menu_Ordonnee;
|
||||||
Menu_Ordonnee=Menu_Ordonnee_avant_fenetre;
|
Menu_Ordonnee=Menu_Ordonnee_avant_fenetre;
|
||||||
B=Menu_visible;
|
B=Menu_visible;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user