From 8d5e4f6840c8f025cea731c5a91ffc53320afc70 Mon Sep 17 00:00:00 2001 From: Adrien Destugues Date: Tue, 7 Oct 2008 14:16:48 +0000 Subject: [PATCH] removed screen refreshing in the block drawing function and made the needed update in windows display. Should be a lot faster, but i may have missed some screen updates. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@205 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- aide.c | 3 +++ boutons.c | 29 +++++++++++++++++++++++++---- gfx2.cfg | Bin 10062 -> 10062 bytes global.h | 1 - graph.c | 22 ++++++++++++++-------- moteur.c | 13 ++++++++++--- palette.c | 5 +++++ sdlscreen.c | 15 ++------------- shade.c | 4 ++++ 9 files changed, 63 insertions(+), 29 deletions(-) diff --git a/aide.c b/aide.c index 68b99393..3ec7235a 100644 --- a/aide.c +++ b/aide.c @@ -139,6 +139,8 @@ void Bouton_Aide(void) Afficher_aide(); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,310*Menu_Facteur_X,175*Menu_Facteur_Y); + Afficher_curseur(); do @@ -326,6 +328,7 @@ void Bouton_Stats(void) else Print_dans_fenetre(106,115,"* No VESA support *",STATS_COULEUR_DONNEES,CM_Noir); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*310,Menu_Facteur_Y*174); Afficher_curseur(); diff --git a/boutons.c b/boutons.c index ce097cef..8859c53e 100644 --- a/boutons.c +++ b/boutons.c @@ -33,6 +33,8 @@ #define FILENAMESPACE 13 +#define Display_Window(X,Y) SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,X*Menu_Facteur_X,Y*Menu_Facteur_Y); + //-- MODELE DE BOUTON DE MENU ------------------------------------------------ /* void Bouton_***(void) @@ -44,6 +46,8 @@ void Bouton_***(void) Fenetre_Definir_bouton_normal(103,137,80,14,"OK",0,1,SDLK_RETURN); // 1 Fenetre_Definir_bouton_scroller(18,44,88,16,4,0); // 2 + Display_Window(310,190); + Afficher_curseur(); do @@ -69,6 +73,7 @@ void Message_Non_disponible(void) Print_dans_fenetre(12,28,"be implemented in",CM_Noir,CM_Clair); Print_dans_fenetre(16,36,"a later version.",CM_Noir,CM_Clair); Fenetre_Definir_bouton_normal(60,53,40,14,"OK",1,1,SDLK_RETURN); // 1 + Display_Window(160,76); Afficher_curseur(); do @@ -98,6 +103,7 @@ void Message_Memoire_insuffisante(void) Print_dans_fenetre(24,28,"to know how to obtain",CM_Noir,CM_Clair); Print_dans_fenetre(36,36,"more memory space.",CM_Noir,CM_Clair); Fenetre_Definir_bouton_normal(60,53,40,14,"OK",1,1,SDLK_RETURN); // 1 + Display_Window(216,76); Afficher_curseur(); do @@ -134,9 +140,10 @@ void Bouton_Message_initial(void) Print_dans_fenetre( 7,128,"file before using this program",CM_Fonce,CM_Clair); Print_dans_fenetre( 7,136,"for the first time.",CM_Fonce,CM_Clair); - SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(260*Menu_Facteur_X))>>1,(Hauteur_ecran-(172*Menu_Facteur_Y))>>1,260*Menu_Facteur_X,172*Menu_Facteur_Y); Fenetre_Definir_bouton_normal(90,151,80,14,"OK",0,1,SDLK_RETURN); // 1 + Display_Window(260,172); + Afficher_curseur(); do @@ -385,6 +392,7 @@ byte Bouton_Quitter_Routine_locale(void) Fenetre_Definir_bouton_normal(20,20,120,14,"Stay",0,1,SDLK_ESCAPE); // 1 Fenetre_Definir_bouton_normal(20,40,120,14,"Save & quit",1,1,SDLK_s); // 2 Fenetre_Definir_bouton_normal(20,60,120,14,"Discard (Quit)",1,1,SDLK_d);// 3 + Display_Window(160,84); Afficher_curseur(); do @@ -519,6 +527,7 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel) for (Indice=0; Indice<=255; Indice++) Stencil_Tagger_couleur(Indice, (Table[Indice])?CM_Noir:CM_Clair); + Display_Window(176,150); Afficher_curseur(); do @@ -788,7 +797,7 @@ void Bouton_Settings(void) // Zone de saisie du nb de pages de Undo Fenetre_Definir_bouton_saisie(140,50,2); // 22 - SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(307*Menu_Facteur_X))>>1,(Hauteur_ecran-(182*Menu_Facteur_Y))>>1,307,182); + Display_Window(307,182); Afficher_curseur(); @@ -1108,6 +1117,7 @@ void Bouton_Copy_page(void) Fenetre_Definir_bouton_normal(10, 71,148,14,"Some colors only" , 6,1,SDLK_c); // 4 Fenetre_Definir_bouton_normal(10, 88,148,14,"Palette and remap",13,1,SDLK_r); // 5 Fenetre_Definir_bouton_normal(44,114, 80,14,"Cancel" , 0,1,SDLK_ESCAPE); // 6 + Display_Window(168,137); Afficher_curseur(); @@ -1357,7 +1367,7 @@ void Bouton_Resol(void) Afficher_liste_modes(Debut_liste,Position_curseur); - SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(299*Menu_Facteur_X))>>1,(Hauteur_ecran-(190*Menu_Facteur_Y))>>1,299,190); + Display_Window(299,190); Afficher_curseur(); @@ -1795,6 +1805,7 @@ void Bouton_Degrades(void) Degrade_Dessiner_preview(8,112,108,14,Degrade_Courant); Premiere_couleur=Derniere_couleur=(Degrade_Tableau[Degrade_Courant].Inverse)?Degrade_Tableau[Degrade_Courant].Fin:Degrade_Tableau[Degrade_Courant].Debut; + Display_Window(237,133); Afficher_curseur(); @@ -2037,6 +2048,7 @@ void Bouton_Menu_pinceaux(void) Fenetre_Definir_bouton_normal(Pos_X ,Pos_Y ,20,20,"",0,1,SDLK_LAST); Afficher_pinceau_dans_fenetre(Pos_X+2,Pos_Y+2,Indice); } + Display_Window(310,155); Afficher_curseur(); @@ -2408,6 +2420,7 @@ byte Bouton_Load_ou_Save(byte Load, byte Image) Pixel_de_chargement=Pixel_Chargement_dans_preview; Nouvelle_preview=1; + Display_Window(310,(187+FILENAMESPACE)); Afficher_curseur(); @@ -3610,6 +3623,7 @@ void Bouton_Menu_Loupe(void) Fenetre_Definir_bouton_normal( 41,65,27,14,"x16",0,Loupe_Facteur!=16,SDLK_F10); // 11 Fenetre_Definir_bouton_normal( 73,65,27,14,"x18",0,Loupe_Facteur!=18,SDLK_F11); // 12 Fenetre_Definir_bouton_normal(105,65,27,14,"x20",0,Loupe_Facteur!=20,SDLK_F12); // 13 + Display_Window(141,114); Afficher_curseur(); @@ -3737,6 +3751,7 @@ void Bouton_Menu_Grille(void) Bouton_saisie_dY=Fenetre_Liste_boutons_special; Num2str(dY_choisi,Chaine,2); Fenetre_Contenu_bouton_saisie(Bouton_saisie_dY,Chaine); + Display_Window(133,98); Afficher_curseur(); @@ -3916,7 +3931,7 @@ void Bouton_Brush_FX(void) Block(Fenetre_Pos_X+(Menu_Facteur_X*105),Fenetre_Pos_Y+(Menu_Facteur_Y*126),Menu_Facteur_X*7,Menu_Facteur_Y,CM_Noir); Block(Fenetre_Pos_X+(Menu_Facteur_X*111),Fenetre_Pos_Y+(Menu_Facteur_Y*120),Menu_Facteur_X,Menu_Facteur_Y*7,CM_Noir); - SDL_UpdateRect(Ecran_SDL,(Largeur_ecran-(310*Menu_Facteur_X))>>1,(Hauteur_ecran-(162*Menu_Facteur_Y))>>1,310,162); + Display_Window(310,162); Afficher_curseur(); @@ -4070,6 +4085,7 @@ void Bouton_Smooth_Menu(void) Num2str(Matrice_choisie[I][J]=Smooth_Matrice[I][J],Chaine,2); Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); } + Display_Window(142,109); Afficher_curseur(); @@ -4237,6 +4253,7 @@ void Bouton_Colorize_Menu(void) Opacite_choisie=Colorize_Opacite; Mode_choisi =Colorize_Mode_en_cours; + Display_Window(140,118); Afficher_curseur(); do @@ -4328,6 +4345,7 @@ void Bouton_Tiling_Menu(void) Num2str(Tiling_Decalage_Y,Chaine,4); Fenetre_Contenu_bouton_saisie(Bouton_saisie_Decalage_Y,Chaine); + Display_Window(138,79); Afficher_curseur(); do @@ -4513,6 +4531,7 @@ void Bouton_Spray_Menu(void) Stencil_Tagger_couleur(Couleur_selectionnee,CM_Blanc); Spray_Rafficher_infos(Couleur_selectionnee,0); + Display_Window(226,170); Afficher_curseur(); @@ -4922,6 +4941,7 @@ void Bouton_Trame_Menu(void) Print_dans_fenetre(71,136,Chaine,CM_Noir,CM_Clair); Dessiner_trame_zoomee(Orig_X,Orig_Y); + Display_Window(290,179); Afficher_curseur(); @@ -5287,6 +5307,7 @@ void Bouton_Effets(void) Print_dans_fenetre(12,117,"Click: Left:Switch / Right:Edit",CM_Fonce,CM_Clair); + Display_Window(270,152); Afficher_curseur(); do diff --git a/gfx2.cfg b/gfx2.cfg index 8243ebb4a8c764df40f3a685aa0dc40d8bc28673..8f2724152177a59ddc5de5528894c93464c29742 100644 GIT binary patch delta 15 WcmX@-cg}Bvzbcb_{pLW`zl;Dih6W@6 delta 15 WcmX@-cg}Bvzbcc1|K>o|zl;DiO$HSJ diff --git a/global.h b/global.h index 8a9e3fc3..9811209c 100644 --- a/global.h +++ b/global.h @@ -160,7 +160,6 @@ GLOBAL fonction_lecteur Lit_pixel; // Teste la couleur d'un pixel dans l' GLOBAL fonction_effaceur Clear_screen; // Efface rapidement tout l'écran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_display Display_screen; // Affiche rapidement tout l'écran (en faisant attention de ne pas effacer le menu) GLOBAL fonction_block Block; // Affiche rapidement un bloc à l'écran -GLOBAL fonction_block Block_Fast; // Affiche rapidement un bloc à l'écran sans rafraichir GLOBAL fonction_afficheur Pixel_Preview_Normal; // Affiche un point de l'image à l'écran en mode normal (pas en mode loupe) GLOBAL fonction_afficheur Pixel_Preview_Loupe; // Affiche un point de l'image à l'écran en mode loupe GLOBAL fonction_afficheur Pixel_Preview; // Affiche un point de l'image à l'écran en fonction de l'état du mode loupe diff --git a/graph.c b/graph.c index 4ba0cada..f470207b 100644 --- a/graph.c +++ b/graph.c @@ -32,13 +32,13 @@ void Mettre_Ecran_A_Jour(short X, short Y, short Largeur, short Hauteur) if (Largeur < 0) { X += Largeur; - Largeur = 3 - Largeur; + Largeur = - Largeur; } if (Hauteur < 0) { Y += Hauteur; - Hauteur = 3 - Hauteur; + Hauteur = - Hauteur; } // D'abord on met à jour dans la zone écran normale @@ -296,7 +296,8 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table) } } } - SDL_UpdateRect(Ecran_SDL,(LARGEUR_MENU+1)*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur,Hauteur); + SDL_UpdateRect(Ecran_SDL,(LARGEUR_MENU+1)*Menu_Facteur_X,Menu_Ordonnee*Menu_Facteur_Y,Largeur,Hauteur); +// SDL_UpdateRect(Ecran_SDL,LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),(HAUTEUR_MENU-9)*Menu_Facteur_Y); } @@ -909,7 +910,7 @@ int Conversion_argument_mode(const char *Argument) // Je suis paresseux alors je vais juste tester les libellés int Indice_mode; for (Indice_mode=0; Indice_mode>1)-(strlen(Message)<<2),20,Message,CM_Noir,CM_Clair); Fenetre_Definir_bouton_normal((Largeur_de_la_fenetre>>1)-20 ,37,40,14,"OK",1,1,SDLK_RETURN); // 1 + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*Largeur_de_la_fenetre,Menu_Facteur_Y*60); Afficher_curseur(); do @@ -3193,6 +3197,8 @@ void Bloc_degrade_dans_fenetre(word Pos_X,word Pos_Y,word Debut_block,word Fin_b for (Indice=Debut_Y;IndicePos_Y+3)*Menu_Facteur_Y; for (Pos_X=0,Pos_fenetre_X=Origine_X;Pos_X<16;Pos_X++,Pos_fenetre_X+=(Menu_Facteur_X*10)) Block(Pos_fenetre_X,Origine_Y,Menu_Facteur_X*3,Menu_Facteur_Y*80,CM_Clair); + SDL_UpdateRect(Ecran_SDL,Origine_X,Origine_Y,ToWinL(160),ToWinH(80)); } @@ -1166,7 +1171,6 @@ void Tagger_intervalle_palette(byte Debut,byte Fin) for (Pos_Y=0,Pos_fenetre_Y=Origine_Y+1;Pos_Y<3;Pos_Y++,Pos_fenetre_Y++) Pixel_dans_fenetre(Origine_X+1,Pos_fenetre_Y,CM_Noir); Pixel_dans_fenetre(Origine_X+2,Origine_Y+2,CM_Noir); - SDL_UpdateRect(Ecran_SDL,ToWinX(Origine_X),ToWinY(Origine_Y),ToWinL(2),ToWinH(2)); if (Debut!=Fin) { @@ -1197,7 +1201,7 @@ void Tagger_intervalle_palette(byte Debut,byte Fin) } - SDL_UpdateRect(Ecran_SDL,ToWinX(Fenetre_Liste_boutons_palette->Pos_X+3+(Debut>>4)*10),ToWinY(Fenetre_Liste_boutons_palette->Pos_Y+3+(Debut&15)*5),ToWinL(4),ToWinH((Fin-Debut+1)*5)); + SDL_UpdateRect(Ecran_SDL,ToWinX(Fenetre_Liste_boutons_palette->Pos_X+3),ToWinY(Fenetre_Liste_boutons_palette->Pos_Y+3),ToWinL(12*16),ToWinH(5*16)); } @@ -1234,6 +1238,10 @@ void Fenetre_Dessiner_jauge(struct Fenetre_Bouton_scroller * Enreg) Block(Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), Fenetre_Pos_Y+(Position_curseur_jauge*Menu_Facteur_Y), 11*Menu_Facteur_X,Enreg->Hauteur_curseur*Menu_Facteur_Y,CM_Clair/*CM_Blanc*/); + + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X+(Enreg->Pos_X*Menu_Facteur_X), + Fenetre_Pos_Y+Enreg->Pos_Y*Menu_Facteur_Y, + 11*Menu_Facteur_X,(Enreg->Hauteur)*Menu_Facteur_Y); } void Fenetre_Dessiner_bouton_scroller(struct Fenetre_Bouton_scroller * Enreg) @@ -1651,7 +1659,6 @@ void Deplacer_fenetre(short Dx, short Dy) free(Buffer); - DEBUG("Deplace",0); } else { diff --git a/palette.c b/palette.c index 85ea4d99..80984365 100644 --- a/palette.c +++ b/palette.c @@ -777,6 +777,8 @@ void Bouton_Palette(void) Dessiner_zigouigoui(263,165,CM_Fonce,-1); Dessiner_zigouigoui(280,165,CM_Fonce,+1); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,299*Menu_Facteur_X,188*Menu_Facteur_Y); + Afficher_curseur(); Clavier_americain(); // On est obligé de rester en clavier américain pour @@ -840,6 +842,7 @@ void Bouton_Palette(void) // Affichage dans le block de visu de la couleur en cours Block(Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64,Fore_color); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X+(Menu_Facteur_X*264),Fenetre_Pos_Y+(Menu_Facteur_Y*93),Menu_Facteur_X<<4,Menu_Facteur_Y*64); memcpy(Palette_backup ,Palette_de_travail,sizeof(T_Palette)); memcpy(Palette_temporaire,Palette_de_travail,sizeof(T_Palette)); @@ -1810,6 +1813,8 @@ void Bouton_Palette_secondaire(void) Fenetre_Definir_bouton_normal(10,37,180,14,"User's color series" ,14,0,SDLK_s); // 2 Fenetre_Definir_bouton_normal(60,60, 80,14,"Cancel" , 0,1,SDLK_ESCAPE); // 3 + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*200,Menu_Facteur_Y*80); + Afficher_curseur(); do diff --git a/sdlscreen.c b/sdlscreen.c index 0abc06de..737937b3 100644 --- a/sdlscreen.c +++ b/sdlscreen.c @@ -51,18 +51,7 @@ void Block_SDL (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur rectangle.w=Largeur; rectangle.h=Hauteur; SDL_FillRect(Ecran_SDL,&rectangle,Couleur); - SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Largeur,Hauteur); -} - -void Block_SDL_Fast (word Debut_X,word Debut_Y,word Largeur,word Hauteur,byte Couleur) -/* On affiche un rectangle de la couleur donnée */ -{ - SDL_Rect rectangle; - rectangle.x=Debut_X; - rectangle.y=Debut_Y; - rectangle.w=Largeur; - rectangle.h=Hauteur; - SDL_FillRect(Ecran_SDL,&rectangle,Couleur); +// SDL_UpdateRect(Ecran_SDL,Debut_X,Debut_Y,Largeur,Hauteur); } void Pixel_Preview_Normal_SDL (word X,word Y,byte Couleur) @@ -95,7 +84,7 @@ void Pixel_Preview_Loupe_SDL (word X,word Y,byte Couleur) else hauteur = Loupe_Facteur; - Block_SDL_Fast( + Block_SDL( Table_mul_facteur_zoom[X-Loupe_Decalage_X] + Principal_X_Zoom, Y_Zoom, Loupe_Facteur, hauteur, Couleur diff --git a/shade.c b/shade.c index 362965fe..c26d260e 100644 --- a/shade.c +++ b/shade.c @@ -498,6 +498,8 @@ int Menu_Shade(void) memcpy(Buffer ,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); memcpy(Buffer_Undo,Shade_Liste[Shade_Actuel].Liste,512*sizeof(word)); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*310,Menu_Facteur_Y*190); + Afficher_curseur(); /*TODO A vérifier :) @@ -1021,6 +1023,8 @@ void Bouton_Quick_shade_Menu(void) Num2str(Quick_shade_Step,Chaine,3); Fenetre_Contenu_bouton_saisie(Fenetre_Liste_boutons_special,Chaine); + SDL_UpdateRect(Ecran_SDL,Fenetre_Pos_X,Fenetre_Pos_Y,Menu_Facteur_X*142,Menu_Facteur_Y*26); + Afficher_curseur(); do