diff --git a/boutons.c b/boutons.c index ef5f18d9..f89138a1 100644 --- a/boutons.c +++ b/boutons.c @@ -2173,16 +2173,6 @@ void Relire_liste_fichiers(byte Filtre, short Position, short Decalage, Preparer_et_afficher_liste_fichiers(Position,Decalage,Enreg); } - // -- Gestion du chrono -- - byte Etat_chrono; // Etat du chrono: 0=Attente d'un Xème de seconde - // 1=Il faut afficher la preview - // 2=Plus de chrono à gerer pour l'instant - long Chrono_delay; // Nombre de 18.2ème de secondes demandés - long Chrono_cmp; // Heure de départ du chrono - byte Nouvelle_preview; // Booléen "Il faut relancer le chrono de preview" - // Les fonctions de manipulation du chrono se trouvent dans DIVERS.ASM - - void On_vient_de_scroller_dans_le_fileselect(struct Fenetre_Bouton_scroller * Scroller_de_fichiers) { char Ancien_nom_de_fichier[13]; diff --git a/boutons.h b/boutons.h index 07b25a17..fa61c38c 100644 --- a/boutons.h +++ b/boutons.h @@ -1,151 +1,151 @@ -void Message_Non_disponible(void); -void Message_Memoire_insuffisante(void); -void Bouton_Message_initial(void); - -void Changer_la_forme_du_pinceau(byte Numero); - -// Boutons relatifs aux couleurs -void Bouton_Pal_left(void); -void Bouton_Pal_left_fast(void); -void Bouton_Pal_right(void); -void Bouton_Pal_right_fast(void); -void Bouton_Choix_forecolor(void); -void Bouton_Choix_backcolor(void); - -// Boutons relatifs au pinceaux -void Bouton_Brosse_monochrome(void); -void Bouton_Menu_pinceaux(void); - -// Boutons relatifs au mode de dessin … main lev‚e -void Bouton_Dessin(void); -void Bouton_Dessin_Switch_mode(void); - -// Dessin par ligne -void Bouton_Lignes(void); -void Bouton_Lignes_Switch_mode(void); - -// Bouton relatif au remplissage -void Bouton_Fill(void); -void Bouton_Remplacer(void); -void Bouton_desenclencher_Fill(void); - -// Spray -void Bouton_Spray(void); -void Bouton_Spray_Menu(void); - -// Courbes de B‚zier -void Bouton_Courbes(void); -void Bouton_Courbes_Switch_mode(void); - -// Boutons relatifs aux rectangles pleins et vides -void Bouton_Rectangle_vide(void); -void Bouton_Rectangle_plein(void); - -// Boutons relatifs aux d‚grad‚s -void Bouton_Degrades(void); -void Degrade_Charger_infos_du_tableau(int Indice); -// Boutons relatifs aux cercles (ellipses) d‚grad‚(e)s -void Bouton_Cercle_degrade(void); -void Bouton_Ellipse_degrade(void); - -// Boutons relatifs aux cercles (ellipses) plein(e)s et vides -void Bouton_Cercle_vide(void); -void Bouton_Ellipse_vide(void); -void Bouton_Cercle_plein(void); -void Bouton_Ellipse_pleine(void); - -// Boutons relatifs aux polygones vides et pleins -void Bouton_Polygone(void); -void Bouton_Polyform(void); -void Bouton_Polyfill(void); -void Bouton_Filled_polyform(void); - -// Boutons d'ajustement de l'image -void Bouton_Ajuster(void); - -// Gestion du mode Shade -void Bouton_Shade_Mode(void); -void Bouton_Quick_shade_Mode(void); -void Bouton_Shade_Menu(void); -// Gestion du Stencil -void Bouton_Stencil_Mode(void); -void Bouton_Menu_Stencil(void); -// Gestion du Masque -void Bouton_Mask_Mode(void); -void Bouton_Mask_Menu(void); -// Mode grille (Snap) -void Bouton_Snap_Mode(void); -void Bouton_Menu_Grille(void); -// Mode trame (Sieve) -void Copier_trame_predefinie(byte Indice); -void Inverser_trame(void); -void Bouton_Trame_Mode(void); -void Bouton_Trame_Menu(void); -// Mode Smooth -void Bouton_Smooth_Mode(void); -void Bouton_Smooth_Mode(void); -// Boutons relatifs au mode Colorize -void Calculer_les_tables_de_Colorize(void); -void Bouton_Colorize_Mode(void); -void Bouton_Colorize_Menu(void); -// Boutons relatifs au mode Tiling -void Bouton_Tiling_Mode(void); -void Bouton_Tiling_Menu(void); -// Menu des effets -void Bouton_Effets(void); - -// Prise de brosse -void Bouton_Brosse(void); -void Bouton_Restaurer_brosse(void); -void Bouton_desenclencher_Brosse(void); -// Prise de brosse au lasso -void Bouton_Lasso(void); -void Bouton_desenclencher_Lasso(void); - -// Bouton relatifs … la pipette -void Bouton_Pipette(void); -void Bouton_desenclencher_Pipette(void); -void Bouton_Inverser_foreback(void); - -// Mode loupe -void Bouton_Loupe(void); -void Bouton_Menu_Loupe(void); -void Bouton_desenclencher_Loupe(void); - -// Les diff‚rents effets sur la brosse -void Bouton_Brush_FX(void); - -// Boutons relatifs aux diff‚rentes pages -void Bouton_Page(void); -void Bouton_Copy_page(void); -void Copier_image_seule(void); -void Bouton_Kill(void); - -// Boutons relatifs aux changements de r‚solution et de taille d'image -void Bouton_Resol(void); -void Bouton_Safety_resol(void); - -// Boutons relatifs aux chargements et sauvegardes -void Bouton_Load(void); -void Bouton_Reload(void); -void Bouton_Save(void); -void Bouton_Autosave(void); - -// R‚glage des paramŠtres de l'utilisateur -void Bouton_Settings(void); - -// Annulation de la derniŠre modification -void Bouton_Undo(void); -void Bouton_Redo(void); - -// Boutons relatifs aux effacements d'images -void Bouton_Clear(void); -void Bouton_Clear_colore(void); - -// Quitter le programme -void Bouton_Quit(void); - -// Cacher le menu +void Message_Non_disponible(void); +void Message_Memoire_insuffisante(void); +void Bouton_Message_initial(void); + +void Changer_la_forme_du_pinceau(byte Numero); + +// Boutons relatifs aux couleurs +void Bouton_Pal_left(void); +void Bouton_Pal_left_fast(void); +void Bouton_Pal_right(void); +void Bouton_Pal_right_fast(void); +void Bouton_Choix_forecolor(void); +void Bouton_Choix_backcolor(void); + +// Boutons relatifs au pinceaux +void Bouton_Brosse_monochrome(void); +void Bouton_Menu_pinceaux(void); + +// Boutons relatifs au mode de dessin … main lev‚e +void Bouton_Dessin(void); +void Bouton_Dessin_Switch_mode(void); + +// Dessin par ligne +void Bouton_Lignes(void); +void Bouton_Lignes_Switch_mode(void); + +// Bouton relatif au remplissage +void Bouton_Fill(void); +void Bouton_Remplacer(void); +void Bouton_desenclencher_Fill(void); + +// Spray +void Bouton_Spray(void); +void Bouton_Spray_Menu(void); + +// Courbes de B‚zier +void Bouton_Courbes(void); +void Bouton_Courbes_Switch_mode(void); + +// Boutons relatifs aux rectangles pleins et vides +void Bouton_Rectangle_vide(void); +void Bouton_Rectangle_plein(void); + +// Boutons relatifs aux d‚grad‚s +void Bouton_Degrades(void); +void Degrade_Charger_infos_du_tableau(int Indice); +// Boutons relatifs aux cercles (ellipses) d‚grad‚(e)s +void Bouton_Cercle_degrade(void); +void Bouton_Ellipse_degrade(void); + +// Boutons relatifs aux cercles (ellipses) plein(e)s et vides +void Bouton_Cercle_vide(void); +void Bouton_Ellipse_vide(void); +void Bouton_Cercle_plein(void); +void Bouton_Ellipse_pleine(void); + +// Boutons relatifs aux polygones vides et pleins +void Bouton_Polygone(void); +void Bouton_Polyform(void); +void Bouton_Polyfill(void); +void Bouton_Filled_polyform(void); + +// Boutons d'ajustement de l'image +void Bouton_Ajuster(void); + +// Gestion du mode Shade +void Bouton_Shade_Mode(void); +void Bouton_Quick_shade_Mode(void); +void Bouton_Shade_Menu(void); +// Gestion du Stencil +void Bouton_Stencil_Mode(void); +void Bouton_Menu_Stencil(void); +// Gestion du Masque +void Bouton_Mask_Mode(void); +void Bouton_Mask_Menu(void); +// Mode grille (Snap) +void Bouton_Snap_Mode(void); +void Bouton_Menu_Grille(void); +// Mode trame (Sieve) +void Copier_trame_predefinie(byte Indice); +void Inverser_trame(void); +void Bouton_Trame_Mode(void); +void Bouton_Trame_Menu(void); +// Mode Smooth +void Bouton_Smooth_Mode(void); +void Bouton_Smooth_Mode(void); +// Boutons relatifs au mode Colorize +void Calculer_les_tables_de_Colorize(void); +void Bouton_Colorize_Mode(void); +void Bouton_Colorize_Menu(void); +// Boutons relatifs au mode Tiling +void Bouton_Tiling_Mode(void); +void Bouton_Tiling_Menu(void); +// Menu des effets +void Bouton_Effets(void); + +// Prise de brosse +void Bouton_Brosse(void); +void Bouton_Restaurer_brosse(void); +void Bouton_desenclencher_Brosse(void); +// Prise de brosse au lasso +void Bouton_Lasso(void); +void Bouton_desenclencher_Lasso(void); + +// Bouton relatifs … la pipette +void Bouton_Pipette(void); +void Bouton_desenclencher_Pipette(void); +void Bouton_Inverser_foreback(void); + +// Mode loupe +void Bouton_Loupe(void); +void Bouton_Menu_Loupe(void); +void Bouton_desenclencher_Loupe(void); + +// Les diff‚rents effets sur la brosse +void Bouton_Brush_FX(void); + +// Boutons relatifs aux diff‚rentes pages +void Bouton_Page(void); +void Bouton_Copy_page(void); +void Copier_image_seule(void); +void Bouton_Kill(void); + +// Boutons relatifs aux changements de r‚solution et de taille d'image +void Bouton_Resol(void); +void Bouton_Safety_resol(void); + +// Boutons relatifs aux chargements et sauvegardes +void Bouton_Load(void); +void Bouton_Reload(void); +void Bouton_Save(void); +void Bouton_Autosave(void); + +// R‚glage des paramŠtres de l'utilisateur +void Bouton_Settings(void); + +// Annulation de la derniŠre modification +void Bouton_Undo(void); +void Bouton_Redo(void); + +// Boutons relatifs aux effacements d'images +void Bouton_Clear(void); +void Bouton_Clear_colore(void); + +// Quitter le programme +void Bouton_Quit(void); + +// Cacher le menu void Bouton_Cacher_menu(void); void Stencil_Tagger_couleur(byte Couleur, byte Couleur_de_taggage); @@ -157,4 +157,13 @@ void Menu_Tag_couleurs(char * En_tete, byte * Table, byte * Mode, byte Cancel); void Bouton_Smooth_Menu(void); -void Bouton_Smear_Mode(void); +void Bouton_Smear_Mode(void); + + // -- Gestion du chrono -- + byte Etat_chrono; // Etat du chrono: 0=Attente d'un Xème de seconde + // 1=Il faut afficher la preview + // 2=Plus de chrono à gerer pour l'instant + long Chrono_delay; // Nombre de 18.2ème de secondes demandés + long Chrono_cmp; // Heure de départ du chrono + byte Nouvelle_preview; // Booléen "Il faut relancer le chrono de preview" + // Les fonctions de manipulation du chrono se trouvent dans DIVERS.ASM diff --git a/divers.c b/divers.c index 63ea12e4..52e9979c 100644 --- a/divers.c +++ b/divers.c @@ -4,6 +4,7 @@ #include "global.h" #include "graph.h" //Afficher_curseur #include "erreurs.h" +#include "boutons.h" // Gestion du mode texte de départ (pour pouvoir y retourner en cas de problème byte Recuperer_nb_lignes(void) @@ -413,7 +414,25 @@ byte Pixel_dans_cercle(void) void Copier_une_partie_d_image_dans_une_autre(byte * Source,word S_Pos_X,word S_Pos_Y,word Largeur,word Hauteur,word Largeur_source,byte * Destination,word D_Pos_X,word D_Pos_Y,word Largeur_destination) { - UNIMPLEMENTED + // ESI = adresse de la source en (S_Pox_X,S_Pos_Y) + byte* esi = Source + S_Pos_Y * Largeur_source + S_Pos_X; + + // EDI = adresse de la destination (D_Pos_X,D_Pos_Y) + byte* edi = Destination + D_Pos_Y * Largeur_destination + D_Pos_X; + + int Ligne; + + // Pour chaque ligne + for (Ligne=0;Ligne < Hauteur; Ligne++) + { + memcpy(edi,esi,Largeur); + + // Passe à la ligne suivante + esi+=Largeur_source - Largeur; + edi+=Largeur_destination - Largeur; + } + + } byte Lit_pixel_dans_ecran_brouillon(word X,word Y) @@ -454,7 +473,7 @@ void Copier_image_dans_brosse(short Debut_X,short Debut_Y,short Brosse_Largeur,s byte Lit_pixel_dans_ecran_feedback (word X,word Y) { - puts("Lit_pixel_dans_ecran_feedback non implémenté!"); + UNIMPLEMENTED return 0; } @@ -465,7 +484,7 @@ dword Round_div(dword Numerateur,dword Diviseur) byte Effet_Trame(word X,word Y) { - puts("Effet_Trame non implémenté!"); + UNIMPLEMENTED return 0; } @@ -479,18 +498,41 @@ void Set_mouse_position(void) void Clip_mouse(void) { - puts("Clip_mouse non implémenté!"); + UNIMPLEMENTED } void Remplacer_toutes_les_couleurs_dans_limites(byte * Table_de_remplacement) { - puts("Remplacer_toutes_les_couleurs_dans_limites non implémenté!"); -} + // ESI pointe sur le début de la ligne d'écran actuelle + byte* esi = Principal_Ecran + Limite_Gauche + + Limite_Haut * Principal_Largeur_image; + + // EDI pointe sur la position actuelle dans l'écran + byte* edi = esi; -byte Lit_pixel_dans_ecran_backup (word X,word Y) + // On place dans CX le nombre de lignes à traiter + int Ligne; + + // Pour chaque ligne : + for(Ligne = Limite_Haut;Ligne < Limite_Bas; Ligne++) + { + int Compteur; + // Pour chaque pixel sur la ligne : + for (Compteur = Limite_Gauche;Compteur < Limite_Droite;Compteur ++); + { + *edi = Table_de_remplacement[*edi]; + edi++; + } + + // Passage à la ligne suivante + esi += Principal_Largeur_image; + edi = esi; + } +} + +byte inline Lit_pixel_dans_ecran_backup (word X,word Y) { - puts("Lit_pixel_dans_ecran_backup non implémenté!"); - return 0; + return *(Ecran_backup + X + Principal_Largeur_image * Y); } byte Type_de_lecteur_de_disquette(byte Numero_de_lecteur) @@ -504,86 +546,86 @@ byte Type_de_lecteur_de_disquette(byte Numero_de_lecteur) // 5 : Lecteur 2.8 Mo (??? pas sur ???) // 6 : Lecteur 2.8 Mo { - puts("Type_de_lecteur_de_disquette non implémenté!"); + UNIMPLEMENTED return 0; } byte Disk_map(byte Numero_de_lecteur) { - puts("Disk_map non implémenté!"); + UNIMPLEMENTED return 0; } byte Disque_dur_present(byte Numero_de_disque) { - puts("Disque_dur_present non implémenté!"); + UNIMPLEMENTED return 0; } byte Lecteur_CDROM_present(byte Numero_de_lecteur) { - puts("Lecteur_CDROM_present non implémenté!"); + UNIMPLEMENTED return 0; } long Freespace(byte Numero_de_lecteur) { - puts("Freespace non implémenté!"); + UNIMPLEMENTED return 0; } byte Couleur_ILBM_line(word Pos_X, word Vraie_taille_ligne) { - puts("Couleur_ILBM_line non implémenté!"); + UNIMPLEMENTED return 0; } void Palette_256_to_64(T_Palette Palette) { - puts("Palette_256_to_64 non implémenté!"); + UNIMPLEMENTED } void Palette_64_to_256(T_Palette Palette) { - puts("Palette_64_to_256 non implémenté!"); + UNIMPLEMENTED } byte Effet_Colorize_interpole (word X,word Y,byte Couleur) { - puts("Effet_Colorize_interpole non implémenté!"); + UNIMPLEMENTED return 0; } byte Effet_Colorize_additif (word X,word Y,byte Couleur) { - puts("Effet_Colorize_additif non implémenté!"); + UNIMPLEMENTED return 0; } byte Effet_Colorize_soustractif(word X,word Y,byte Couleur) { - puts("Effet_Colorize_soustractif non implémenté!"); + UNIMPLEMENTED return 0; } -void Tester_chrono(void) +void inline Tester_chrono(void) { - puts("Tester_chrono non implémenté!"); + if((SDL_GetTicks()/55)-Chrono_delay>Chrono_cmp) Etat_chrono=1; } void Flip_Y_LOWLEVEL(void) { - puts("Flip_Y_LOWLEVEL non implémenté!"); + UNIMPLEMENTED } void Flip_X_LOWLEVEL(void) { - puts("Flip_X_LOWLEVEL non implémenté!"); + UNIMPLEMENTED } void Rotate_180_deg_LOWLEVEL(void) { - puts("Rotate_180_deg_LOWLEVEL non implémenté!"); + UNIMPLEMENTED } void Tempo_jauge(byte Vitesse) @@ -598,24 +640,36 @@ void Tempo_jauge(byte Vitesse) byte Meilleure_couleur_sans_exclusion(byte Rouge,byte Vert,byte Bleu) { - puts("Meilleure_couleur_sans_exclusion non implémenté!"); + UNIMPLEMENTED return 0; } void Set_color(byte Couleur, byte Rouge, byte Vert, byte Bleu) { - puts("Set_color non implémenté!"); + UNIMPLEMENTED } void Scroll_picture(short Decalage_X,short Decalage_Y) { - puts("Scroll_picture non implémenté!"); + UNIMPLEMENTED } byte Get_key(void) { - puts("Get_key non implémenté!"); - return 0; + SDL_Event event; + + SDL_EnableUNICODE(SDL_ENABLE); // On a besoin du caractère + + while(1) + { + SDL_PollEvent(&event); + if(event.type == SDL_KEYDOWN) + { + // On retourne en mode standard pour la gestion normale + SDL_EnableUNICODE(SDL_DISABLE); + return (byte)(event.key.keysym.unicode); + } + } } void Zoomer_une_ligne(byte* Ligne_originale, byte* Ligne_zoomee,