From 14191db89960b8dc9b58579f2ecf08bbfc69148d Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Wed, 30 Jul 2008 22:03:03 +0000 Subject: [PATCH] Scroll_picture git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@84 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- divers.c | 38 ++++++++++++++++++++++++++++++++++++-- gfx2.cfg | Bin 10351 -> 10351 bytes graph.c | 2 ++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/divers.c b/divers.c index d383c3fd..78e60a37 100644 --- a/divers.c +++ b/divers.c @@ -384,7 +384,14 @@ void Pixel_dans_ecran_courant (word X,word Y,byte Couleur) void Remplacer_une_couleur(byte Ancienne_couleur, byte Nouvelle_couleur) { - UNIMPLEMENTED + byte* edi; + + // pour chaque pixel : + for(edi = Principal_Ecran;edi < Principal_Ecran + Principal_Hauteur_image * Principal_Largeur_image;edi++) + if (*edi == Ancienne_couleur) + *edi = Nouvelle_couleur; + SDL_UpdateRect(Ecran_SDL,0,0,0,0); // On pet TOUT a jour + // C'est pas un problème car il n'y a pas de preview } void Ellipse_Calculer_limites(short Rayon_horizontal,short Rayon_vertical) @@ -651,7 +658,34 @@ void Set_color(byte Couleur, byte Rouge, byte Vert, byte Bleu) void Scroll_picture(short Decalage_X,short Decalage_Y) { - UNIMPLEMENTED + byte* esi = Ecran_backup; //Source de la copie + byte* edi = Principal_Ecran + Decalage_Y * Principal_Largeur_image + Decalage_X; + const word ax = Principal_Largeur_image - Decalage_X; // Nombre de pixels à copier à droite + word dx; + for(dx = Principal_Hauteur_image - Decalage_Y;dx>0;dx--) + { + // Pour chaque ligne + memcpy(edi,esi,ax); + memcpy(edi - Decalage_X,esi+ax,Decalage_X); + + // On passe à la ligne suivante + edi += Principal_Largeur_image; + esi += Principal_Largeur_image; + } + + // On vient de faire le traitement pour otutes les lignes au-dessous de Decalage_Y + // Maintenant on traite celles au dessus + edi = Decalage_X + Principal_Ecran; + for(dx = Decalage_Y;dx>0;dx--) + { + memcpy(edi,esi,ax); + memcpy(edi - Decalage_X,esi+ax,Decalage_X); + + edi += Principal_Largeur_image; + esi += Principal_Largeur_image; + } + + SDL_UpdateRect(Ecran_SDL,0,0,0,0); } word Get_key(void) diff --git a/gfx2.cfg b/gfx2.cfg index d6796a97741df0fb06a244b75a38e24c9b9b654e..e8bd4fbcfc918bb19c62b28717a02bc5666269f8 100644 GIT binary patch delta 33 jcmaDK@IGKewVJ@+{|rE|21EcsX6EEZl?$7r)kPQq(A^5G delta 33 icmaDK@IGKewVHr|Jp&Xl0_n`m$&D%(Hb<+AFaiLcBM5W= diff --git a/graph.c b/graph.c index 96aadddf..771613f7 100644 --- a/graph.c +++ b/graph.c @@ -5198,6 +5198,8 @@ void Polyfill_General(int Vertices, short * Points, int Color) } free(initial_edge); + // On ne connait pas simplement les xmin et xmax ici, mais de toutes façon ce n'est pas utilisé en preview + Mettre_Ecran_A_Jour(0,top,Principal_Largeur_image,bottom-top+1); }