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:
Yves Rizoud 2008-12-15 21:00:18 +00:00
parent d81a4a26f0
commit d4dcf44f7c
7 changed files with 44 additions and 9 deletions

View File

@ -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)

View File

@ -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
View File

@ -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:

View File

@ -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
View File

@ -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
View File

@ -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

View File

@ -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;