Some sources converted from Unicode to ANSI, and removed some warnings for mingw (implicit include of libc)
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@401 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
parent
fb6d1100dc
commit
77206f2baa
182
brush.c
182
brush.c
@ -25,6 +25,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h> // memset()
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "graph.h"
|
#include "graph.h"
|
||||||
@ -33,8 +35,8 @@
|
|||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "sdlscreen.h"
|
#include "sdlscreen.h"
|
||||||
|
|
||||||
// Calcul de redimensionnement du pinceau pour éviter les débordements de
|
// Calcul de redimensionnement du pinceau pour éviter les débordements de
|
||||||
// l'écran et de l'image
|
// l'écran et de l'image
|
||||||
void Calculer_dimensions_clipees(short * X,short * Y,short * Largeur,short * Hauteur)
|
void Calculer_dimensions_clipees(short * X,short * Y,short * Largeur,short * Hauteur)
|
||||||
{
|
{
|
||||||
if ((*X)<Limite_Gauche)
|
if ((*X)<Limite_Gauche)
|
||||||
@ -60,8 +62,8 @@ void Calculer_dimensions_clipees(short * X,short * Y,short * Largeur,short * Hau
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Calcul de redimensionnement du pinceau pour éviter les débordements
|
// -- Calcul de redimensionnement du pinceau pour éviter les débordements
|
||||||
// de l'écran zoomé et de l'image --
|
// de l'écran zoomé et de l'image --
|
||||||
|
|
||||||
void Calculer_dimensions_clipees_zoom(short * X,short * Y,short * Largeur,short * Hauteur)
|
void Calculer_dimensions_clipees_zoom(short * X,short * Y,short * Largeur,short * Hauteur)
|
||||||
{
|
{
|
||||||
@ -89,24 +91,24 @@ void Calculer_dimensions_clipees_zoom(short * X,short * Y,short * Largeur,short
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -- Afficher le pinceau (de façon définitive ou non) --
|
// -- Afficher le pinceau (de façon définitive ou non) --
|
||||||
|
|
||||||
void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
||||||
// X,Y: position du centre du pinceau
|
// X,Y: position du centre du pinceau
|
||||||
// Couleur: couleur à appliquer au pinceau
|
// Couleur: couleur à appliquer au pinceau
|
||||||
// Preview: "Il ne faut l'afficher qu'à l'écran"
|
// Preview: "Il ne faut l'afficher qu'à l'écran"
|
||||||
{
|
{
|
||||||
short Debut_X; // Position X (dans l'image) à partir de laquelle on
|
short Debut_X; // Position X (dans l'image) à partir de laquelle on
|
||||||
// affiche la brosse/pinceau
|
// affiche la brosse/pinceau
|
||||||
short Debut_Y; // Position Y (dans l'image) à partir de laquelle on
|
short Debut_Y; // Position Y (dans l'image) à partir de laquelle on
|
||||||
// affiche la brosse/pinceau
|
// affiche la brosse/pinceau
|
||||||
short Largeur; // Largeur dans l'écran selon laquelle on affiche la
|
short Largeur; // Largeur dans l'écran selon laquelle on affiche la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la
|
short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir
|
short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir
|
||||||
// de laquelle on affiche la brosse/pinceau
|
// de laquelle on affiche la brosse/pinceau
|
||||||
short Debut_Compteur_Y; // Position Y (dans la brosse/pinceau) à partir
|
short Debut_Compteur_Y; // Position Y (dans la brosse/pinceau) à partir
|
||||||
// de laquelle on affiche la brosse/pinceau
|
// de laquelle on affiche la brosse/pinceau
|
||||||
short Pos_X; // Position X (dans l'image) en cours d'affichage
|
short Pos_X; // Position X (dans l'image) en cours d'affichage
|
||||||
short Pos_Y; // Position Y (dans l'image) en cours d'affichage
|
short Pos_Y; // Position Y (dans l'image) en cours d'affichage
|
||||||
@ -114,15 +116,15 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
|||||||
// d'affichage
|
// d'affichage
|
||||||
short Compteur_Y; // Position Y (dans la brosse/pinceau) en cours
|
short Compteur_Y; // Position Y (dans la brosse/pinceau) en cours
|
||||||
// d'affichage
|
// d'affichage
|
||||||
short Fin_Compteur_X; // Position X ou s'arrête l'affichade de la
|
short Fin_Compteur_X; // Position X ou s'arrête l'affichade de la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
short Fin_Compteur_Y; // Position Y ou s'arrête l'affichade de la
|
short Fin_Compteur_Y; // Position Y ou s'arrête l'affichade de la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
byte Couleur_temporaire; // Couleur de la brosse en cours d'affichage
|
byte Couleur_temporaire; // Couleur de la brosse en cours d'affichage
|
||||||
int Position;
|
int Position;
|
||||||
byte * Temp;
|
byte * Temp;
|
||||||
|
|
||||||
if (!(Preview && Mouse_K)) // Si bouton enfoncé & preview > pas de dessin
|
if (!(Preview && Mouse_K)) // Si bouton enfoncé & preview > pas de dessin
|
||||||
switch (Pinceau_Forme)
|
switch (Pinceau_Forme)
|
||||||
{
|
{
|
||||||
case FORME_PINCEAU_POINT : // !!! TOUJOURS EN PREVIEW !!!
|
case FORME_PINCEAU_POINT : // !!! TOUJOURS EN PREVIEW !!!
|
||||||
@ -475,25 +477,25 @@ void Afficher_pinceau(short X,short Y,byte Couleur,byte Preview)
|
|||||||
void Effacer_pinceau(short X,short Y)
|
void Effacer_pinceau(short X,short Y)
|
||||||
// X,Y: position du centre du pinceau
|
// X,Y: position du centre du pinceau
|
||||||
{
|
{
|
||||||
short Debut_X; // Position X (dans l'image) à partir de laquelle on
|
short Debut_X; // Position X (dans l'image) à partir de laquelle on
|
||||||
// affiche la brosse/pinceau
|
// affiche la brosse/pinceau
|
||||||
short Debut_Y; // Position Y (dans l'image) à partir de laquelle on
|
short Debut_Y; // Position Y (dans l'image) à partir de laquelle on
|
||||||
// affiche la brosse/pinceau
|
// affiche la brosse/pinceau
|
||||||
short Largeur; // Largeur dans l'écran selon laquelle on affiche la
|
short Largeur; // Largeur dans l'écran selon laquelle on affiche la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la
|
short Hauteur; // Hauteur dans l'écran selon laquelle on affiche la
|
||||||
// brosse/pinceau
|
// brosse/pinceau
|
||||||
short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir
|
short Debut_Compteur_X; // Position X (dans la brosse/pinceau) à partir
|
||||||
// de laquelle on affiche la brosse/pinceau
|
// de laquelle on affiche la brosse/pinceau
|
||||||
short Debut_Compteur_Y; // Position Y (dans la brosse/pinceau) à partir
|
short Debut_Compteur_Y; // Position Y (dans la brosse/pinceau) à partir
|
||||||
// de laquelle on affiche la brosse/pinceau
|
// de laquelle on affiche la brosse/pinceau
|
||||||
//short Pos_X; // Position X (dans l'image) en cours d'affichage
|
//short Pos_X; // Position X (dans l'image) en cours d'affichage
|
||||||
//short Pos_Y; // Position Y (dans l'image) en cours d'affichage
|
//short Pos_Y; // Position Y (dans l'image) en cours d'affichage
|
||||||
//short Compteur_X; // Position X (dans la brosse/pinceau) en cours
|
//short Compteur_X; // Position X (dans la brosse/pinceau) en cours
|
||||||
//d'affichage
|
//d'affichage
|
||||||
//short Compteur_Y; // Position Y (dans la brosse/pinceau) en cours d'affichage
|
//short Compteur_Y; // Position Y (dans la brosse/pinceau) en cours d'affichage
|
||||||
short Fin_Compteur_X; // Position X ou s'arrête l'affichade de la brosse/pinceau
|
short Fin_Compteur_X; // Position X ou s'arrête l'affichade de la brosse/pinceau
|
||||||
short Fin_Compteur_Y; // Position Y ou s'arrête l'affichade de la brosse/pinceau
|
short Fin_Compteur_Y; // Position Y ou s'arrête l'affichade de la brosse/pinceau
|
||||||
byte * Temp;
|
byte * Temp;
|
||||||
|
|
||||||
if (!Mouse_K)
|
if (!Mouse_K)
|
||||||
@ -632,10 +634,10 @@ void Capturer_brosse(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y,short E
|
|||||||
|
|
||||||
if ((Debut_X<Principal_Largeur_image) && (Debut_Y<Principal_Hauteur_image))
|
if ((Debut_X<Principal_Largeur_image) && (Debut_Y<Principal_Hauteur_image))
|
||||||
{
|
{
|
||||||
// On met les décalages du tiling à 0 pour eviter toute incohérence.
|
// On met les décalages du tiling à 0 pour eviter toute incohérence.
|
||||||
// Si par hasard on voulait les mettre à
|
// Si par hasard on voulait les mettre à
|
||||||
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
|
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
|
||||||
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
|
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
|
||||||
Tiling_Decalage_X=0;
|
Tiling_Decalage_X=0;
|
||||||
Tiling_Decalage_Y=0;
|
Tiling_Decalage_Y=0;
|
||||||
|
|
||||||
@ -670,7 +672,7 @@ void Capturer_brosse(short Debut_X,short Debut_Y,short Fin_X,short Fin_Y,short E
|
|||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
|
|
||||||
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
||||||
{
|
{
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
|
|
||||||
@ -738,11 +740,11 @@ void Remap_brosse(void)
|
|||||||
{
|
{
|
||||||
short Pos_X; // Variable de balayage de la brosse
|
short Pos_X; // Variable de balayage de la brosse
|
||||||
short Pos_Y; // Variable de balayage de la brosse
|
short Pos_Y; // Variable de balayage de la brosse
|
||||||
byte Utilisee[256]; // Tableau de booléens "La couleur est utilisée"
|
byte Utilisee[256]; // Tableau de booléens "La couleur est utilisée"
|
||||||
int Couleur;
|
int Couleur;
|
||||||
|
|
||||||
|
|
||||||
// On commence par initialiser le tableau de booléens à faux
|
// On commence par initialiser le tableau de booléens à faux
|
||||||
for (Couleur=0;Couleur<=255;Couleur++)
|
for (Couleur=0;Couleur<=255;Couleur++)
|
||||||
Utilisee[Couleur]=0;
|
Utilisee[Couleur]=0;
|
||||||
|
|
||||||
@ -751,32 +753,32 @@ void Remap_brosse(void)
|
|||||||
for (Pos_X=0;Pos_X<Brosse_Largeur;Pos_X++)
|
for (Pos_X=0;Pos_X<Brosse_Largeur;Pos_X++)
|
||||||
Utilisee[Lit_pixel_dans_brosse(Pos_X,Pos_Y)]=1;
|
Utilisee[Lit_pixel_dans_brosse(Pos_X,Pos_Y)]=1;
|
||||||
|
|
||||||
// On n'est pas censé remapper la couleur de transparence, sinon la brosse
|
// On n'est pas censé remapper la couleur de transparence, sinon la brosse
|
||||||
// changera de forme, donc on dit pour l'instant qu'elle n'est pas utilisée
|
// changera de forme, donc on dit pour l'instant qu'elle n'est pas utilisée
|
||||||
// ainsi on ne s'embêtera pas à la recalculer
|
// ainsi on ne s'embêtera pas à la recalculer
|
||||||
Utilisee[Back_color]=0;
|
Utilisee[Back_color]=0;
|
||||||
|
|
||||||
// On va maintenant se servir de la table "Utilisee" comme table de
|
// On va maintenant se servir de la table "Utilisee" comme table de
|
||||||
// conversion: pour chaque indice, la table donne une couleur de
|
// conversion: pour chaque indice, la table donne une couleur de
|
||||||
// remplacement.
|
// remplacement.
|
||||||
// Note : Seules les couleurs utilisées on besoin d'êtres recalculées: les
|
// Note : Seules les couleurs utilisées on besoin d'êtres recalculées: les
|
||||||
// autres ne seront jamais consultées dans la nouvelle table de
|
// autres ne seront jamais consultées dans la nouvelle table de
|
||||||
// conversion puisque elles n'existent pas dans la brosse, donc elles
|
// conversion puisque elles n'existent pas dans la brosse, donc elles
|
||||||
// ne seront pas utilisées par Remap_brush_LOWLEVEL.
|
// ne seront pas utilisées par Remap_brush_LOWLEVEL.
|
||||||
for (Couleur=0;Couleur<=255;Couleur++)
|
for (Couleur=0;Couleur<=255;Couleur++)
|
||||||
if (Utilisee[Couleur])
|
if (Utilisee[Couleur])
|
||||||
Utilisee[Couleur]=Meilleure_couleur(Brouillon_Palette[Couleur].R,Brouillon_Palette[Couleur].V,Brouillon_Palette[Couleur].B);
|
Utilisee[Couleur]=Meilleure_couleur(Brouillon_Palette[Couleur].R,Brouillon_Palette[Couleur].V,Brouillon_Palette[Couleur].B);
|
||||||
|
|
||||||
// Il reste une couleur non calculée dans la table qu'il faut mettre à
|
// Il reste une couleur non calculée dans la table qu'il faut mettre à
|
||||||
// jour: c'est la couleur de fond. On l'avait inhibée pour éviter son
|
// jour: c'est la couleur de fond. On l'avait inhibée pour éviter son
|
||||||
// calcul inutile, mais comme il est possible qu'elle soit quand même dans
|
// calcul inutile, mais comme il est possible qu'elle soit quand même dans
|
||||||
// la brosse, on va mettre dans la table une relation d'équivalence entre
|
// la brosse, on va mettre dans la table une relation d'équivalence entre
|
||||||
// les deux palettes: comme on ne veut pas que la couleur soit remplacée,
|
// les deux palettes: comme on ne veut pas que la couleur soit remplacée,
|
||||||
// on va dire qu'on veut qu'elle soit remplacée par la couleur en question.
|
// on va dire qu'on veut qu'elle soit remplacée par la couleur en question.
|
||||||
Utilisee[Back_color]=Back_color;
|
Utilisee[Back_color]=Back_color;
|
||||||
|
|
||||||
// Maintenant qu'on a une super table de conversion qui n'a que le nom
|
// Maintenant qu'on a une super table de conversion qui n'a que le nom
|
||||||
// qui craint un peu, on peut faire l'échange dans la brosse de toutes les
|
// qui craint un peu, on peut faire l'échange dans la brosse de toutes les
|
||||||
// teintes.
|
// teintes.
|
||||||
Remap_general_LOWLEVEL(Utilisee,Brosse,Brosse_Largeur,Brosse_Hauteur,Brosse_Largeur);
|
Remap_general_LOWLEVEL(Utilisee,Brosse,Brosse_Largeur,Brosse_Hauteur,Brosse_Largeur);
|
||||||
//Remap_brush_LOWLEVEL(Utilisee);
|
//Remap_brush_LOWLEVEL(Utilisee);
|
||||||
@ -800,7 +802,7 @@ void Outline_brush(void)
|
|||||||
|
|
||||||
if (Nouvelle_brosse)
|
if (Nouvelle_brosse)
|
||||||
{
|
{
|
||||||
// On remplit la bordure ajoutée par la Backcolor
|
// On remplit la bordure ajoutée par la Backcolor
|
||||||
memset(Nouvelle_brosse,Back_color,((long)Largeur)*Hauteur);
|
memset(Nouvelle_brosse,Back_color,((long)Largeur)*Hauteur);
|
||||||
|
|
||||||
// On copie la brosse courante dans la nouvelle
|
// On copie la brosse courante dans la nouvelle
|
||||||
@ -821,7 +823,7 @@ void Outline_brush(void)
|
|||||||
Largeur-=2;
|
Largeur-=2;
|
||||||
Hauteur-=2;
|
Hauteur-=2;
|
||||||
|
|
||||||
// Si on "outline" avec une couleur différente de la Back_color on y va!
|
// Si on "outline" avec une couleur différente de la Back_color on y va!
|
||||||
if (Fore_color!=Back_color)
|
if (Fore_color!=Back_color)
|
||||||
{
|
{
|
||||||
// 1er balayage (horizontal)
|
// 1er balayage (horizontal)
|
||||||
@ -847,12 +849,12 @@ void Outline_brush(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Cas du dernier pixel à droite de la ligne
|
// Cas du dernier pixel à droite de la ligne
|
||||||
if (Etat)
|
if (Etat)
|
||||||
Pixel_dans_brosse(Pos_X,Pos_Y,Fore_color);
|
Pixel_dans_brosse(Pos_X,Pos_Y,Fore_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2ème balayage (vertical)
|
// 2ème balayage (vertical)
|
||||||
for (Pos_X=1; Pos_X<Brosse_Largeur-1; Pos_X++)
|
for (Pos_X=1; Pos_X<Brosse_Largeur-1; Pos_X++)
|
||||||
{
|
{
|
||||||
Etat=0;
|
Etat=0;
|
||||||
@ -885,16 +887,16 @@ void Outline_brush(void)
|
|||||||
Brosse_Decalage_X=(Brosse_Largeur>>1);
|
Brosse_Decalage_X=(Brosse_Largeur>>1);
|
||||||
Brosse_Decalage_Y=(Brosse_Hauteur>>1);
|
Brosse_Decalage_Y=(Brosse_Hauteur>>1);
|
||||||
|
|
||||||
free(Temporaire); // Libération de l'ancienne brosse
|
free(Temporaire); // Libération de l'ancienne brosse
|
||||||
|
|
||||||
// Réallocation d'un buffer de Smear
|
// Réallocation d'un buffer de Smear
|
||||||
free(Smear_Brosse);
|
free(Smear_Brosse);
|
||||||
Smear_Brosse_Largeur=(Brosse_Largeur>TAILLE_MAXI_PINCEAU)?Brosse_Largeur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Largeur=(Brosse_Largeur>TAILLE_MAXI_PINCEAU)?Brosse_Largeur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Largeur)*Smear_Brosse_Hauteur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Largeur)*Smear_Brosse_Hauteur);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Erreur(0); // Pas assez de mémoire!
|
Erreur(0); // Pas assez de mémoire!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -959,12 +961,12 @@ void Nibble_brush(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Cas du dernier pixel à droite de la ligne
|
// Cas du dernier pixel à droite de la ligne
|
||||||
if (Temporaire[((Pos_Y+1)*Largeur)+Pos_X+1]==Back_color)
|
if (Temporaire[((Pos_Y+1)*Largeur)+Pos_X+1]==Back_color)
|
||||||
Pixel_dans_brosse(Pos_X-1,Pos_Y,Back_color);
|
Pixel_dans_brosse(Pos_X-1,Pos_Y,Back_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2ème balayage (vertical)
|
// 2ème balayage (vertical)
|
||||||
for (Pos_X=0; Pos_X<Brosse_Largeur; Pos_X++)
|
for (Pos_X=0; Pos_X<Brosse_Largeur; Pos_X++)
|
||||||
{
|
{
|
||||||
Etat=(Temporaire[Largeur+Pos_X+1]!=Back_color);;
|
Etat=(Temporaire[Largeur+Pos_X+1]!=Back_color);;
|
||||||
@ -997,16 +999,16 @@ void Nibble_brush(void)
|
|||||||
Brosse_Decalage_X=(Brosse_Largeur>>1);
|
Brosse_Decalage_X=(Brosse_Largeur>>1);
|
||||||
Brosse_Decalage_Y=(Brosse_Hauteur>>1);
|
Brosse_Decalage_Y=(Brosse_Hauteur>>1);
|
||||||
|
|
||||||
free(Temporaire); // Libération de l'ancienne brosse
|
free(Temporaire); // Libération de l'ancienne brosse
|
||||||
|
|
||||||
// Réallocation d'un buffer de Smear
|
// Réallocation d'un buffer de Smear
|
||||||
free(Smear_Brosse);
|
free(Smear_Brosse);
|
||||||
Smear_Brosse_Largeur=(Brosse_Largeur>TAILLE_MAXI_PINCEAU)?Brosse_Largeur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Largeur=(Brosse_Largeur>TAILLE_MAXI_PINCEAU)?Brosse_Largeur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Largeur)*Smear_Brosse_Hauteur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Largeur)*Smear_Brosse_Hauteur);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Erreur(0); // Pas assez de mémoire!
|
Erreur(0); // Pas assez de mémoire!
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1040,7 +1042,7 @@ void Capturer_brosse_au_lasso(int Vertices, short * Points,short Effacement)
|
|||||||
Fin_Y=Pos_Y;
|
Fin_Y=Pos_Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On clippe ces bornes à l'écran:
|
// On clippe ces bornes à l'écran:
|
||||||
if (Debut_X<Limite_Gauche)
|
if (Debut_X<Limite_Gauche)
|
||||||
Debut_X=Limite_Gauche;
|
Debut_X=Limite_Gauche;
|
||||||
if (Fin_X>Limite_Droite)
|
if (Fin_X>Limite_Droite)
|
||||||
@ -1055,10 +1057,10 @@ void Capturer_brosse_au_lasso(int Vertices, short * Points,short Effacement)
|
|||||||
|
|
||||||
if ((Debut_X<Principal_Largeur_image) && (Debut_Y<Principal_Hauteur_image))
|
if ((Debut_X<Principal_Largeur_image) && (Debut_Y<Principal_Hauteur_image))
|
||||||
{
|
{
|
||||||
// On met les décalages du tiling à 0 pour eviter toute incohérence.
|
// On met les décalages du tiling à 0 pour eviter toute incohérence.
|
||||||
// Si par hasard on voulait les mettre à
|
// Si par hasard on voulait les mettre à
|
||||||
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
|
// min(Tiling_Decalage_?,Brosse_?a??eur-1)
|
||||||
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
|
// il faudrait penser à les initialiser à 0 dans "MAIN.C".
|
||||||
Tiling_Decalage_X=0;
|
Tiling_Decalage_X=0;
|
||||||
Tiling_Decalage_Y=0;
|
Tiling_Decalage_Y=0;
|
||||||
|
|
||||||
@ -1088,7 +1090,7 @@ void Capturer_brosse_au_lasso(int Vertices, short * Points,short Effacement)
|
|||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
|
|
||||||
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
||||||
{
|
{
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
|
|
||||||
@ -1120,7 +1122,7 @@ void Capturer_brosse_au_lasso(int Vertices, short * Points,short Effacement)
|
|||||||
Points[0],Points[1],
|
Points[0],Points[1],
|
||||||
~Back_color);
|
~Back_color);
|
||||||
|
|
||||||
// On scanne la brosse pour remplacer tous les pixels affectés par le
|
// On scanne la brosse pour remplacer tous les pixels affectés par le
|
||||||
// polyfill par ceux de l'image:
|
// polyfill par ceux de l'image:
|
||||||
for (Pos_Y=Debut_Y;Pos_Y<=Fin_Y;Pos_Y++)
|
for (Pos_Y=Debut_Y;Pos_Y<=Fin_Y;Pos_Y++)
|
||||||
for (Pos_X=Debut_X;Pos_X<=Fin_X;Pos_X++)
|
for (Pos_X=Debut_X;Pos_X<=Fin_X;Pos_X++)
|
||||||
@ -1152,9 +1154,9 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
|
|
||||||
int Pos_X_dans_brosse; // Position courante dans l'ancienne brosse
|
int Pos_X_dans_brosse; // Position courante dans l'ancienne brosse
|
||||||
int Pos_Y_dans_brosse;
|
int Pos_Y_dans_brosse;
|
||||||
int Delta_X_dans_brosse; // "Vecteur incrémental" du point précédent
|
int Delta_X_dans_brosse; // "Vecteur incrémental" du point précédent
|
||||||
int Delta_Y_dans_brosse;
|
int Delta_Y_dans_brosse;
|
||||||
int Pos_X_initial; // Position X de début de parcours de ligne
|
int Pos_X_initial; // Position X de début de parcours de ligne
|
||||||
int Dx,Dy;
|
int Dx,Dy;
|
||||||
|
|
||||||
Dx=(X1<X2)?1:-1;
|
Dx=(X1<X2)?1:-1;
|
||||||
@ -1171,7 +1173,7 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
|
|
||||||
// Calcul des anciennes dimensions de la brosse:
|
// Calcul des anciennes dimensions de la brosse:
|
||||||
|
|
||||||
// Calcul du "vecteur incrémental":
|
// Calcul du "vecteur incrémental":
|
||||||
Delta_X_dans_brosse=(Brosse_Largeur<<16)/(X2-X1+Dx);
|
Delta_X_dans_brosse=(Brosse_Largeur<<16)/(X2-X1+Dx);
|
||||||
Delta_Y_dans_brosse=(Brosse_Hauteur<<16)/(Y2-Y1+Dy);
|
Delta_Y_dans_brosse=(Brosse_Hauteur<<16)/(Y2-Y1+Dy);
|
||||||
|
|
||||||
@ -1181,7 +1183,7 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
else
|
else
|
||||||
Pos_X_initial = (Brosse_Largeur<<16)-1; // Inversion en X de la brosse
|
Pos_X_initial = (Brosse_Largeur<<16)-1; // Inversion en X de la brosse
|
||||||
|
|
||||||
free(Smear_Brosse); // On libère un peu de mémoire
|
free(Smear_Brosse); // On libère un peu de mémoire
|
||||||
|
|
||||||
if ((New_Brosse=((byte *)malloc(New_Brosse_Largeur*New_Brosse_Hauteur))))
|
if ((New_Brosse=((byte *)malloc(New_Brosse_Largeur*New_Brosse_Hauteur))))
|
||||||
{
|
{
|
||||||
@ -1196,7 +1198,7 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
// Pour chaque ligne
|
// Pour chaque ligne
|
||||||
for (Ligne=0;Ligne<New_Brosse_Hauteur;Ligne++)
|
for (Ligne=0;Ligne<New_Brosse_Hauteur;Ligne++)
|
||||||
{
|
{
|
||||||
// On repart du début de la ligne:
|
// On repart du début de la ligne:
|
||||||
Pos_X_dans_brosse=Pos_X_initial;
|
Pos_X_dans_brosse=Pos_X_initial;
|
||||||
|
|
||||||
// Pour chaque colonne:
|
// Pour chaque colonne:
|
||||||
@ -1204,13 +1206,13 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
{
|
{
|
||||||
// On copie le pixel:
|
// On copie le pixel:
|
||||||
New_Brosse[Offset]=Lit_pixel_dans_brosse(Pos_X_dans_brosse>>16,Pos_Y_dans_brosse>>16);
|
New_Brosse[Offset]=Lit_pixel_dans_brosse(Pos_X_dans_brosse>>16,Pos_Y_dans_brosse>>16);
|
||||||
// On passe à la colonne de brosse suivante:
|
// On passe à la colonne de brosse suivante:
|
||||||
Pos_X_dans_brosse+=Delta_X_dans_brosse;
|
Pos_X_dans_brosse+=Delta_X_dans_brosse;
|
||||||
// On passe au pixel suivant de la nouvelle brosse:
|
// On passe au pixel suivant de la nouvelle brosse:
|
||||||
Offset++;
|
Offset++;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On passe à la ligne de brosse suivante:
|
// On passe à la ligne de brosse suivante:
|
||||||
Pos_Y_dans_brosse+=Delta_Y_dans_brosse;
|
Pos_Y_dans_brosse+=Delta_Y_dans_brosse;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1224,7 +1226,7 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
|
|
||||||
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
||||||
{
|
{
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
|
|
||||||
@ -1243,9 +1245,9 @@ void Etirer_brosse(short X1, short Y1, short X2, short Y2)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Ici la libération de mémoire n'a pas suffit donc on remet dans l'état
|
// Ici la libération de mémoire n'a pas suffit donc on remet dans l'état
|
||||||
// où c'etait avant. On a juste à réallouer la Smear_Brosse car il y a
|
// où c'etait avant. On a juste à réallouer la Smear_Brosse car il y a
|
||||||
// normalement la place pour elle puisque rien d'autre n'a pu être alloué
|
// normalement la place pour elle puisque rien d'autre n'a pu être alloué
|
||||||
// entre temps.
|
// entre temps.
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
@ -1276,7 +1278,7 @@ void Etirer_brosse_preview(short X1, short Y1, short X2, short Y2)
|
|||||||
Largeur_dest=Pos_X_dest_Finale-Pos_X_dest_Initiale+1;
|
Largeur_dest=Pos_X_dest_Finale-Pos_X_dest_Initiale+1;
|
||||||
Hauteur_dest=Pos_Y_dest_Finale-Pos_Y_dest_Initiale+1;
|
Hauteur_dest=Pos_Y_dest_Finale-Pos_Y_dest_Initiale+1;
|
||||||
|
|
||||||
// Calcul des vecteurs d'incrémentation :
|
// Calcul des vecteurs d'incrémentation :
|
||||||
Delta_X=(Brosse_Largeur<<16)/Largeur_dest;
|
Delta_X=(Brosse_Largeur<<16)/Largeur_dest;
|
||||||
Delta_Y=(Brosse_Hauteur<<16)/Hauteur_dest;
|
Delta_Y=(Brosse_Hauteur<<16)/Hauteur_dest;
|
||||||
|
|
||||||
@ -1394,7 +1396,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
{
|
{
|
||||||
Xt=(((float)((Pos_X-Debut_X)*Delta_Xt))/(float)Delta_X2) + (float)Xt1;
|
Xt=(((float)((Pos_X-Debut_X)*Delta_Xt))/(float)Delta_X2) + (float)Xt1;
|
||||||
Yt=(((float)((Pos_X-Debut_X)*Delta_Yt))/(float)Delta_X2) + (float)Yt1;
|
Yt=(((float)((Pos_X-Debut_X)*Delta_Yt))/(float)Delta_X2) + (float)Yt1;
|
||||||
if (ScanY_X[0][Pos_Y]==INDEFINI) // Gauche non défini
|
if (ScanY_X[0][Pos_Y]==INDEFINI) // Gauche non défini
|
||||||
{
|
{
|
||||||
ScanY_X[0][Pos_Y]=Pos_X;
|
ScanY_X[0][Pos_Y]=Pos_X;
|
||||||
ScanY_Xt[0][Pos_Y]=Xt;
|
ScanY_Xt[0][Pos_Y]=Xt;
|
||||||
@ -1404,7 +1406,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
{
|
{
|
||||||
if (Pos_X>=ScanY_X[0][Pos_Y])
|
if (Pos_X>=ScanY_X[0][Pos_Y])
|
||||||
{
|
{
|
||||||
if ((ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
if ((ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
||||||
|| (Pos_X>ScanY_X[1][Pos_Y]))
|
|| (Pos_X>ScanY_X[1][Pos_Y]))
|
||||||
{
|
{
|
||||||
ScanY_X[1][Pos_Y]=Pos_X;
|
ScanY_X[1][Pos_Y]=Pos_X;
|
||||||
@ -1414,7 +1416,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
if (ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
||||||
{
|
{
|
||||||
ScanY_X[1][Pos_Y]=ScanY_X[0][Pos_Y];
|
ScanY_X[1][Pos_Y]=ScanY_X[0][Pos_Y];
|
||||||
ScanY_Xt[1][Pos_Y]=ScanY_Xt[0][Pos_Y];
|
ScanY_Xt[1][Pos_Y]=ScanY_Xt[0][Pos_Y];
|
||||||
@ -1451,7 +1453,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
{
|
{
|
||||||
Xt=(((float)((Pos_Y-Debut_Y)*Delta_Xt))/(float)Delta_Y2) + (float)Xt1;
|
Xt=(((float)((Pos_Y-Debut_Y)*Delta_Xt))/(float)Delta_Y2) + (float)Xt1;
|
||||||
Yt=(((float)((Pos_Y-Debut_Y)*Delta_Yt))/(float)Delta_Y2) + (float)Yt1;
|
Yt=(((float)((Pos_Y-Debut_Y)*Delta_Yt))/(float)Delta_Y2) + (float)Yt1;
|
||||||
if (ScanY_X[0][Pos_Y]==INDEFINI) // Gauche non défini
|
if (ScanY_X[0][Pos_Y]==INDEFINI) // Gauche non défini
|
||||||
{
|
{
|
||||||
ScanY_X[0][Pos_Y]=Pos_X;
|
ScanY_X[0][Pos_Y]=Pos_X;
|
||||||
ScanY_Xt[0][Pos_Y]=Xt;
|
ScanY_Xt[0][Pos_Y]=Xt;
|
||||||
@ -1461,7 +1463,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
{
|
{
|
||||||
if (Pos_X>=ScanY_X[0][Pos_Y])
|
if (Pos_X>=ScanY_X[0][Pos_Y])
|
||||||
{
|
{
|
||||||
if ((ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
if ((ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
||||||
|| (Pos_X>ScanY_X[1][Pos_Y]))
|
|| (Pos_X>ScanY_X[1][Pos_Y]))
|
||||||
{
|
{
|
||||||
ScanY_X[1][Pos_Y]=Pos_X;
|
ScanY_X[1][Pos_Y]=Pos_X;
|
||||||
@ -1471,7 +1473,7 @@ void Interpoler_texture(int Debut_X,int Debut_Y,int Xt1,int Yt1,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
if (ScanY_X[1][Pos_Y]==INDEFINI) // Droit non défini
|
||||||
{
|
{
|
||||||
ScanY_X[1][Pos_Y]=ScanY_X[0][Pos_Y];
|
ScanY_X[1][Pos_Y]=ScanY_X[0][Pos_Y];
|
||||||
ScanY_Xt[1][Pos_Y]=ScanY_Xt[0][Pos_Y];
|
ScanY_Xt[1][Pos_Y]=ScanY_Xt[0][Pos_Y];
|
||||||
@ -1519,7 +1521,7 @@ void Calculer_quad_texture(int X1,int Y1,int Xt1,int Yt1,
|
|||||||
ScanY_X[0] =(float *)malloc(Hauteur*sizeof(float));
|
ScanY_X[0] =(float *)malloc(Hauteur*sizeof(float));
|
||||||
ScanY_X[1] =(float *)malloc(Hauteur*sizeof(float));
|
ScanY_X[1] =(float *)malloc(Hauteur*sizeof(float));
|
||||||
|
|
||||||
// Remplir avec des valeurs égales à INDEFINI.
|
// Remplir avec des valeurs égales à INDEFINI.
|
||||||
for (Y=0; Y<Hauteur; Y++)
|
for (Y=0; Y<Hauteur; Y++)
|
||||||
{
|
{
|
||||||
ScanY_X[0][Y]=INDEFINI;
|
ScanY_X[0][Y]=INDEFINI;
|
||||||
@ -1574,7 +1576,7 @@ void Tourner_brosse(float Angle)
|
|||||||
float cosA=cos(Angle);
|
float cosA=cos(Angle);
|
||||||
float sinA=sin(Angle);
|
float sinA=sin(Angle);
|
||||||
|
|
||||||
// Calcul des coordonnées des 4 coins:
|
// Calcul des coordonnées des 4 coins:
|
||||||
// 1 2
|
// 1 2
|
||||||
// 3 4
|
// 3 4
|
||||||
|
|
||||||
@ -1597,11 +1599,11 @@ void Tourner_brosse(float Angle)
|
|||||||
New_Brosse_Largeur=Xmax+1-Xmin;
|
New_Brosse_Largeur=Xmax+1-Xmin;
|
||||||
New_Brosse_Hauteur=Ymax+1-Ymin;
|
New_Brosse_Hauteur=Ymax+1-Ymin;
|
||||||
|
|
||||||
free(Smear_Brosse); // On libère un peu de mémoire
|
free(Smear_Brosse); // On libère un peu de mémoire
|
||||||
|
|
||||||
if ((New_Brosse=((byte *)malloc(New_Brosse_Largeur*New_Brosse_Hauteur))))
|
if ((New_Brosse=((byte *)malloc(New_Brosse_Largeur*New_Brosse_Hauteur))))
|
||||||
{
|
{
|
||||||
// Et maintenant on calcule la nouvelle brosse tournée.
|
// Et maintenant on calcule la nouvelle brosse tournée.
|
||||||
Calculer_quad_texture(X1,Y1, 0, 0,
|
Calculer_quad_texture(X1,Y1, 0, 0,
|
||||||
X2,Y2,Brosse_Largeur-1, 0,
|
X2,Y2,Brosse_Largeur-1, 0,
|
||||||
X3,Y3, 0,Brosse_Hauteur-1,
|
X3,Y3, 0,Brosse_Hauteur-1,
|
||||||
@ -1618,7 +1620,7 @@ void Tourner_brosse(float Angle)
|
|||||||
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
Smear_Brosse_Hauteur=(Brosse_Hauteur>TAILLE_MAXI_PINCEAU)?Brosse_Hauteur:TAILLE_MAXI_PINCEAU;
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
|
|
||||||
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
if (!Smear_Brosse) // On ne peut même pas allouer la brosse du smear!
|
||||||
{
|
{
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
|
|
||||||
@ -1637,9 +1639,9 @@ void Tourner_brosse(float Angle)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Ici la libération de mémoire n'a pas suffit donc on remet dans l'état
|
// Ici la libération de mémoire n'a pas suffit donc on remet dans l'état
|
||||||
// où c'etait avant. On a juste à réallouer la Smear_Brosse car il y a
|
// où c'etait avant. On a juste à réallouer la Smear_Brosse car il y a
|
||||||
// normalement la place pour elle puisque rien d'autre n'a pu être alloué
|
// normalement la place pour elle puisque rien d'autre n'a pu être alloué
|
||||||
// entre temps.
|
// entre temps.
|
||||||
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
Smear_Brosse=(byte *)malloc(((long)Smear_Brosse_Hauteur)*Smear_Brosse_Largeur);
|
||||||
Erreur(0);
|
Erreur(0);
|
||||||
@ -1673,7 +1675,7 @@ void Dessiner_quad_texture_preview(int X1,int Y1,int Xt1,int Yt1,
|
|||||||
ScanY_X[0] =(float *)malloc(Hauteur*sizeof(float));
|
ScanY_X[0] =(float *)malloc(Hauteur*sizeof(float));
|
||||||
ScanY_X[1] =(float *)malloc(Hauteur*sizeof(float));
|
ScanY_X[1] =(float *)malloc(Hauteur*sizeof(float));
|
||||||
|
|
||||||
// Remplir avec des valeurs égales à INDEFINI.
|
// Remplir avec des valeurs égales à INDEFINI.
|
||||||
for (Y=0; Y<Hauteur; Y++)
|
for (Y=0; Y<Hauteur; Y++)
|
||||||
{
|
{
|
||||||
ScanY_X[0][Y]=INDEFINI;
|
ScanY_X[0][Y]=INDEFINI;
|
||||||
@ -1728,7 +1730,7 @@ void Tourner_brosse_preview(float Angle)
|
|||||||
float cosA=cos(Angle);
|
float cosA=cos(Angle);
|
||||||
float sinA=sin(Angle);
|
float sinA=sin(Angle);
|
||||||
|
|
||||||
// Calcul des coordonnées des 4 coins:
|
// Calcul des coordonnées des 4 coins:
|
||||||
// 1 2
|
// 1 2
|
||||||
// 3 4
|
// 3 4
|
||||||
|
|
||||||
@ -1751,7 +1753,7 @@ void Tourner_brosse_preview(float Angle)
|
|||||||
X4+=Brosse_Centre_rotation_X;
|
X4+=Brosse_Centre_rotation_X;
|
||||||
Y4+=Brosse_Centre_rotation_Y;
|
Y4+=Brosse_Centre_rotation_Y;
|
||||||
|
|
||||||
// Et maintenant on dessine la brosse tournée.
|
// Et maintenant on dessine la brosse tournée.
|
||||||
Dessiner_quad_texture_preview(X1,Y1, 0, 0,
|
Dessiner_quad_texture_preview(X1,Y1, 0, 0,
|
||||||
X2,Y2,Brosse_Largeur-1, 0,
|
X2,Y2,Brosse_Largeur-1, 0,
|
||||||
X3,Y3, 0,Brosse_Hauteur-1,
|
X3,Y3, 0,Brosse_Hauteur-1,
|
||||||
|
|||||||
193
windows.c
193
windows.c
@ -25,6 +25,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <string.h> // strncpy() strlen()
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
@ -33,13 +34,13 @@
|
|||||||
#include "divers.h"
|
#include "divers.h"
|
||||||
#include "sdlscreen.h"
|
#include "sdlscreen.h"
|
||||||
|
|
||||||
// Affichage d'un pixel dans le menu (le menu doît être visible)
|
// Affichage d'un pixel dans le menu (le menu doit être visible)
|
||||||
void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur)
|
void Pixel_dans_barre_d_outil(word X,word Y,byte Couleur)
|
||||||
{
|
{
|
||||||
Block(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
|
Block(X*Menu_Facteur_X,(Y*Menu_Facteur_Y)+Menu_Ordonnee,Menu_Facteur_X,Menu_Facteur_Y,Couleur);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Affichage d'un pixel dans la fenêtre (la fenêtre doît être visible)
|
// Affichage d'un pixel dans la fenêtre (la fenêtre doit être visible)
|
||||||
|
|
||||||
void Pixel_dans_fenetre(word X,word Y,byte Couleur)
|
void Pixel_dans_fenetre(word X,word Y,byte Couleur)
|
||||||
{
|
{
|
||||||
@ -47,35 +48,35 @@ void Pixel_dans_fenetre(word X,word Y,byte Couleur)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -- Affichages de différents cadres dans une fenêtre -----------------------
|
// -- Affichages de différents cadres dans une fenêtre -----------------------
|
||||||
|
|
||||||
// -- Cadre général avec couleurs paramètrables --
|
// -- Cadre général avec couleurs paramètrables --
|
||||||
|
|
||||||
void Fenetre_Afficher_cadre_general(word Pos_X,word Pos_Y,word Largeur,word Hauteur,
|
void Fenetre_Afficher_cadre_general(word Pos_X,word Pos_Y,word Largeur,word Hauteur,
|
||||||
byte Couleur_HG,byte Couleur_BD,byte Couleur_S,byte Couleur_CHG,byte Couleur_CBD)
|
byte Couleur_HG,byte Couleur_BD,byte Couleur_S,byte Couleur_CHG,byte Couleur_CBD)
|
||||||
// Paramètres de couleurs:
|
// Paramètres de couleurs:
|
||||||
// Couleur_HG =Bords Haut et Gauche
|
// Couleur_HG =Bords Haut et Gauche
|
||||||
// Couleur_BD =Bords Bas et Droite
|
// Couleur_BD =Bords Bas et Droite
|
||||||
// Couleur_S =Coins Haut-Droite et Bas-Gauche
|
// Couleur_S =Coins Haut-Droite et Bas-Gauche
|
||||||
// Couleur_CHG=Coin Haut-Gauche
|
// Couleur_CHG=Coin Haut-Gauche
|
||||||
// Couleur_CBD=Coin Bas-Droite
|
// Couleur_CBD=Coin Bas-Droite
|
||||||
{
|
{
|
||||||
// Bord haut (sans les extrémités)
|
// Bord haut (sans les extrémités)
|
||||||
Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X),
|
Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X),
|
||||||
Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
Fenetre_Pos_Y+(Pos_Y*Menu_Facteur_Y),
|
||||||
(Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_HG);
|
(Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_HG);
|
||||||
|
|
||||||
// Bord bas (sans les extrémités)
|
// Bord bas (sans les extrémités)
|
||||||
Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X),
|
Block(Fenetre_Pos_X+((Pos_X+1)*Menu_Facteur_X),
|
||||||
Fenetre_Pos_Y+((Pos_Y+Hauteur-1)*Menu_Facteur_Y),
|
Fenetre_Pos_Y+((Pos_Y+Hauteur-1)*Menu_Facteur_Y),
|
||||||
(Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_BD);
|
(Largeur-2)*Menu_Facteur_X,Menu_Facteur_Y,Couleur_BD);
|
||||||
|
|
||||||
// Bord gauche (sans les extrémités)
|
// Bord gauche (sans les extrémités)
|
||||||
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),
|
Block(Fenetre_Pos_X+(Pos_X*Menu_Facteur_X),
|
||||||
Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y),
|
Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y),
|
||||||
Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_HG);
|
Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_HG);
|
||||||
|
|
||||||
// Bord droite (sans les extrémités)
|
// Bord droite (sans les extrémités)
|
||||||
Block(Fenetre_Pos_X+((Pos_X+Largeur-1)*Menu_Facteur_X),
|
Block(Fenetre_Pos_X+((Pos_X+Largeur-1)*Menu_Facteur_X),
|
||||||
Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y),
|
Fenetre_Pos_Y+((Pos_Y+1)*Menu_Facteur_Y),
|
||||||
Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_BD);
|
Menu_Facteur_X,(Hauteur-2)*Menu_Facteur_Y,Couleur_BD);
|
||||||
@ -97,21 +98,21 @@ void Fenetre_Afficher_cadre_mono(word Pos_X,word Pos_Y,word Largeur,word Hauteur
|
|||||||
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,Couleur,Couleur,Couleur,Couleur,Couleur);
|
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,Couleur,Couleur,Couleur,Couleur,Couleur);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Cadre creux: foncé en haut-gauche et clair en bas-droite --
|
// -- Cadre creux: foncé en haut-gauche et clair en bas-droite --
|
||||||
|
|
||||||
void Fenetre_Afficher_cadre_creux(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
void Fenetre_Afficher_cadre_creux(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
||||||
{
|
{
|
||||||
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Blanc,CM_Clair,CM_Fonce,CM_Blanc);
|
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Fonce,CM_Blanc,CM_Clair,CM_Fonce,CM_Blanc);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Cadre bombé: clair en haut-gauche et foncé en bas-droite --
|
// -- Cadre bombé: clair en haut-gauche et foncé en bas-droite --
|
||||||
|
|
||||||
void Fenetre_Afficher_cadre_bombe(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
void Fenetre_Afficher_cadre_bombe(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
||||||
{
|
{
|
||||||
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Blanc,CM_Fonce,CM_Clair,CM_Blanc,CM_Fonce);
|
Fenetre_Afficher_cadre_general(Pos_X,Pos_Y,Largeur,Hauteur,CM_Blanc,CM_Fonce,CM_Clair,CM_Blanc,CM_Fonce);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Cadre de séparation: un cadre bombé dans un cadre creux (3D!!!) --
|
// -- Cadre de séparation: un cadre bombé dans un cadre creux (3D!!!) --
|
||||||
|
|
||||||
void Fenetre_Afficher_cadre(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
void Fenetre_Afficher_cadre(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
||||||
{
|
{
|
||||||
@ -120,7 +121,7 @@ void Fenetre_Afficher_cadre(word Pos_X,word Pos_Y,word Largeur,word Hauteur)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//-- Affichages relatifs à la palette dans le menu ---------------------------
|
//-- Affichages relatifs à la palette dans le menu ---------------------------
|
||||||
|
|
||||||
// -- Affichage des couleurs courante (fore/back) de pinceau dans le menu --
|
// -- Affichage des couleurs courante (fore/back) de pinceau dans le menu --
|
||||||
|
|
||||||
@ -165,7 +166,7 @@ void Encadrer_couleur_menu(byte Couleur)
|
|||||||
Block(Debut_X,Debut_Y,Menu_Taille_couleur*Menu_Facteur_X,
|
Block(Debut_X,Debut_Y,Menu_Taille_couleur*Menu_Facteur_X,
|
||||||
Menu_Facteur_Y<<2,Fore_color);
|
Menu_Facteur_Y<<2,Fore_color);
|
||||||
|
|
||||||
UpdateRect(Debut_X,Debut_Y,Menu_Taille_couleur*Menu_Facteur_X,Menu_Facteur_Y*4); // TODO On met à jour toute la palette... peut mieux faire
|
UpdateRect(Debut_X,Debut_Y,Menu_Taille_couleur*Menu_Facteur_X,Menu_Facteur_Y*4); // TODO On met à jour toute la palette... peut mieux faire
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -297,13 +298,13 @@ void Afficher_menu(void)
|
|||||||
}
|
}
|
||||||
Print_nom_fichier();
|
Print_nom_fichier();
|
||||||
}
|
}
|
||||||
UpdateRect(0,Menu_Ordonnee,Largeur_ecran,HAUTEUR_MENU*Menu_Facteur_Y); // on met toute la largur à jour, ça inclut la palette et la zone d'étant avec le nom du fichier
|
UpdateRect(0,Menu_Ordonnee,Largeur_ecran,HAUTEUR_MENU*Menu_Facteur_Y); // on met toute la largur à jour, ça inclut la palette et la zone d'étant avec le nom du fichier
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Affichage de texte -----------------------------------------------------
|
// -- Affichage de texte -----------------------------------------------------
|
||||||
|
|
||||||
// -- Afficher une chaîne n'importe où à l'écran --
|
// -- Afficher une chaîne n'importe où à l'écran --
|
||||||
|
|
||||||
void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
||||||
{
|
{
|
||||||
@ -322,7 +323,7 @@ void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur
|
|||||||
Reel_X=0; // Position dans le buffer
|
Reel_X=0; // Position dans le buffer
|
||||||
for (Indice=0;Chaine[Indice]!='\0';Indice++)
|
for (Indice=0;Chaine[Indice]!='\0';Indice++)
|
||||||
{
|
{
|
||||||
// Pointeur sur le premier pixel du caractère
|
// Pointeur sur le premier pixel du caractère
|
||||||
Caractere=Fonte+(((unsigned char)Chaine[Indice])<<6);
|
Caractere=Fonte+(((unsigned char)Chaine[Indice])<<6);
|
||||||
for (Pos_X=0;Pos_X<8<<3;Pos_X+=1<<3)
|
for (Pos_X=0;Pos_X<8<<3;Pos_X+=1<<3)
|
||||||
for (Repeat_Menu_Facteur_X=0;Repeat_Menu_Facteur_X<Menu_Facteur_X*Pixel_width;Repeat_Menu_Facteur_X++)
|
for (Repeat_Menu_Facteur_X=0;Repeat_Menu_Facteur_X<Menu_Facteur_X*Pixel_width;Repeat_Menu_Facteur_X++)
|
||||||
@ -333,7 +334,7 @@ void Print_general(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher un caractère dans une fenêtre --
|
// -- Afficher un caractère dans une fenêtre --
|
||||||
|
|
||||||
void Print_char_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byte Couleur_texte,byte Couleur_fond)
|
void Print_char_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byte Couleur_texte,byte Couleur_fond)
|
||||||
{
|
{
|
||||||
@ -341,7 +342,7 @@ void Print_char_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byt
|
|||||||
byte *Carac;
|
byte *Carac;
|
||||||
Pos_X=(Pos_X*Menu_Facteur_X)+Fenetre_Pos_X;
|
Pos_X=(Pos_X*Menu_Facteur_X)+Fenetre_Pos_X;
|
||||||
Pos_Y=(Pos_Y*Menu_Facteur_Y)+Fenetre_Pos_Y;
|
Pos_Y=(Pos_Y*Menu_Facteur_Y)+Fenetre_Pos_Y;
|
||||||
// Premier pixel du caractère
|
// Premier pixel du caractère
|
||||||
Carac=Fonte + (Caractere<<6);
|
Carac=Fonte + (Caractere<<6);
|
||||||
for (X=0;X<8;X++)
|
for (X=0;X<8;X++)
|
||||||
for (Y=0;Y<8;Y++)
|
for (Y=0;Y<8;Y++)
|
||||||
@ -350,7 +351,7 @@ void Print_char_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byt
|
|||||||
(*(Carac+(X<<3)+Y)?Couleur_texte:Couleur_fond));
|
(*(Carac+(X<<3)+Y)?Couleur_texte:Couleur_fond));
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher un caractère sans fond dans une fenêtre --
|
// -- Afficher un caractère sans fond dans une fenêtre --
|
||||||
|
|
||||||
void Print_char_transparent_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byte Couleur)
|
void Print_char_transparent_dans_fenetre(short Pos_X,short Pos_Y,unsigned char Caractere,byte Couleur)
|
||||||
{
|
{
|
||||||
@ -368,7 +369,7 @@ void Print_char_transparent_dans_fenetre(short Pos_X,short Pos_Y,unsigned char C
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher une chaîne dans une fenêtre, avec taille maxi --
|
// -- Afficher une chaîne dans une fenêtre, avec taille maxi --
|
||||||
|
|
||||||
void Print_dans_fenetre_limite(short X,short Y,char * Chaine,byte Taille,byte Couleur_texte,byte Couleur_fond)
|
void Print_dans_fenetre_limite(short X,short Y,char * Chaine,byte Taille,byte Couleur_texte,byte Couleur_fond)
|
||||||
{
|
{
|
||||||
@ -383,7 +384,7 @@ void Print_dans_fenetre_limite(short X,short Y,char * Chaine,byte Taille,byte Co
|
|||||||
Print_dans_fenetre(X, Y, Chaine_affichee, Couleur_texte, Couleur_fond);
|
Print_dans_fenetre(X, Y, Chaine_affichee, Couleur_texte, Couleur_fond);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher une chaîne dans une fenêtre --
|
// -- Afficher une chaîne dans une fenêtre --
|
||||||
|
|
||||||
void Print_dans_fenetre(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
void Print_dans_fenetre(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
||||||
{
|
{
|
||||||
@ -393,7 +394,7 @@ void Print_dans_fenetre(short X,short Y,char * Chaine,byte Couleur_texte,byte Co
|
|||||||
UpdateRect(X*Menu_Facteur_X+Fenetre_Pos_X,Y*Menu_Facteur_Y+Fenetre_Pos_Y,8*Menu_Facteur_X*strlen(Chaine),8*Menu_Facteur_Y);
|
UpdateRect(X*Menu_Facteur_X+Fenetre_Pos_X,Y*Menu_Facteur_Y+Fenetre_Pos_Y,8*Menu_Facteur_X*strlen(Chaine),8*Menu_Facteur_Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher une chaîne dans le menu --
|
// -- Afficher une chaîne dans le menu --
|
||||||
|
|
||||||
void Print_dans_menu(char * Chaine, short Position)
|
void Print_dans_menu(char * Chaine, short Position)
|
||||||
{
|
{
|
||||||
@ -401,9 +402,9 @@ void Print_dans_menu(char * Chaine, short Position)
|
|||||||
UpdateRect((18+(Position<<3))*Menu_Facteur_X,Menu_Ordonnee_Texte,strlen(Chaine)*8*Menu_Facteur_X,8*Menu_Facteur_Y);
|
UpdateRect((18+(Position<<3))*Menu_Facteur_X,Menu_Ordonnee_Texte,strlen(Chaine)*8*Menu_Facteur_X,8*Menu_Facteur_Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Afficher les coordonnées du pinceau dans le menu --
|
// -- Afficher les coordonnées du pinceau dans le menu --
|
||||||
|
|
||||||
// Note : cette fonction n'affiche que les chiffres, pas les X: Y: qui sont dans la gestion principale, car elle est apellée très souvent.
|
// Note : cette fonction n'affiche que les chiffres, pas les X: Y: qui sont dans la gestion principale, car elle est apellée très souvent.
|
||||||
void Print_coordonnees(void)
|
void Print_coordonnees(void)
|
||||||
{
|
{
|
||||||
char Tempo[5];
|
char Tempo[5];
|
||||||
@ -444,7 +445,7 @@ void Print_nom_fichier(void)
|
|||||||
int Taille_nom;
|
int Taille_nom;
|
||||||
if (Menu_visible)
|
if (Menu_visible)
|
||||||
{
|
{
|
||||||
// Si le nom de fichier fait plus de 12 caractères, on n'affiche que les 12 derniers
|
// Si le nom de fichier fait plus de 12 caractères, on n'affiche que les 12 derniers
|
||||||
strncpy(Nom_affiche,Principal_Nom_fichier,12);
|
strncpy(Nom_affiche,Principal_Nom_fichier,12);
|
||||||
Taille_nom=strlen(Principal_Nom_fichier);
|
Taille_nom=strlen(Principal_Nom_fichier);
|
||||||
Nom_affiche[12]='\0';
|
Nom_affiche[12]='\0';
|
||||||
@ -463,11 +464,11 @@ void Print_nom_fichier(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fonction d'affichage d'une chaine numérique avec une fonte très fine
|
// Fonction d'affichage d'une chaine numérique avec une fonte très fine
|
||||||
// Spécialisée pour les compteurs RGB
|
// Spécialisée pour les compteurs RGB
|
||||||
void Print_compteur(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
void Print_compteur(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleur_fond)
|
||||||
{
|
{
|
||||||
// Macros pour écrire des litteraux binaires.
|
// Macros pour écrire des litteraux binaires.
|
||||||
// Ex: Ob(11110000) == 0xF0
|
// Ex: Ob(11110000) == 0xF0
|
||||||
#define Ob(x) ((unsigned)Ob_(0 ## x ## uL))
|
#define Ob(x) ((unsigned)Ob_(0 ## x ## uL))
|
||||||
#define Ob_(x) ((x & 1) | (x >> 2 & 2) | (x >> 4 & 4) | (x >> 6 & 8) | \
|
#define Ob_(x) ((x & 1) | (x >> 2 & 2) | (x >> 4 & 4) | (x >> 6 & 8) | \
|
||||||
@ -663,7 +664,7 @@ void Print_compteur(short X,short Y,char * Chaine,byte Couleur_texte,byte Couleu
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---- Fenêtre demandant de confirmer une action et renvoyant la réponse -----
|
//---- Fenêtre demandant de confirmer une action et renvoyant la réponse -----
|
||||||
byte Demande_de_confirmation(char * Message)
|
byte Demande_de_confirmation(char * Message)
|
||||||
{
|
{
|
||||||
short Bouton_clicke;
|
short Bouton_clicke;
|
||||||
@ -701,7 +702,7 @@ byte Demande_de_confirmation(char * Message)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
//---- Fenêtre avertissant de quelque chose et attendant un click sur OK -----
|
//---- Fenêtre avertissant de quelque chose et attendant un click sur OK -----
|
||||||
void Warning_message(char * Message)
|
void Warning_message(char * Message)
|
||||||
{
|
{
|
||||||
short Bouton_clicke;
|
short Bouton_clicke;
|
||||||
@ -773,7 +774,7 @@ void Afficher_pinceau_dans_menu(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default : // Pinceau
|
default : // Pinceau
|
||||||
// On efface le pinceau précédent
|
// On efface le pinceau précédent
|
||||||
for (Pos_menu_Y=2,Pos_Y=0;Pos_Y<HAUTEUR_SPRITE_MENU;Pos_menu_Y++,Pos_Y++)
|
for (Pos_menu_Y=2,Pos_Y=0;Pos_Y<HAUTEUR_SPRITE_MENU;Pos_menu_Y++,Pos_Y++)
|
||||||
for (Pos_menu_X=1,Pos_X=0;Pos_X<LARGEUR_SPRITE_MENU;Pos_menu_X++,Pos_X++)
|
for (Pos_menu_X=1,Pos_X=0;Pos_X<LARGEUR_SPRITE_MENU;Pos_menu_X++,Pos_X++)
|
||||||
{
|
{
|
||||||
@ -810,10 +811,10 @@ void Afficher_pinceau_dans_menu(void)
|
|||||||
UpdateRect(0,Menu_Ordonnee,LARGEUR_SPRITE_MENU*Menu_Facteur_X+3,HAUTEUR_SPRITE_MENU*Menu_Facteur_Y+3);
|
UpdateRect(0,Menu_Ordonnee,LARGEUR_SPRITE_MENU*Menu_Facteur_X+3,HAUTEUR_SPRITE_MENU*Menu_Facteur_Y+3);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Dessiner un pinceau prédéfini dans la fenêtre --
|
// -- Dessiner un pinceau prédéfini dans la fenêtre --
|
||||||
|
|
||||||
void Afficher_pinceau_dans_fenetre(word X,word Y,int Numero)
|
void Afficher_pinceau_dans_fenetre(word X,word Y,int Numero)
|
||||||
// Pinceau = 0..NB_SPRITES_PINCEAU-1 : Pinceau prédéfini
|
// Pinceau = 0..NB_SPRITES_PINCEAU-1 : Pinceau prédéfini
|
||||||
{
|
{
|
||||||
word Pos_X;
|
word Pos_X;
|
||||||
word Pos_Y;
|
word Pos_Y;
|
||||||
@ -834,7 +835,7 @@ void Afficher_pinceau_dans_fenetre(word X,word Y,int Numero)
|
|||||||
for (Pos_fenetre_X=0,Pos_X=0; Pos_X<Pinceau_predefini_Largeur[Numero]; Pos_fenetre_X++,Pos_X++)
|
for (Pos_fenetre_X=0,Pos_X=0; Pos_X<Pinceau_predefini_Largeur[Numero]; Pos_fenetre_X++,Pos_X++)
|
||||||
Block(Orig_X+Pos_fenetre_X*Taille_X,Orig_Y+Pos_fenetre_Y*Taille_Y,Taille_X,Taille_Y,(SPRITE_PINCEAU[Numero][Pos_Y][Pos_X])?CM_Noir:CM_Clair);
|
Block(Orig_X+Pos_fenetre_X*Taille_X,Orig_Y+Pos_fenetre_Y*Taille_Y,Taille_X,Taille_Y,(SPRITE_PINCEAU[Numero][Pos_Y][Pos_X])?CM_Noir:CM_Clair);
|
||||||
// On n'utilise pas Pixel_dans_fenetre() car on ne dessine pas
|
// On n'utilise pas Pixel_dans_fenetre() car on ne dessine pas
|
||||||
// forcément avec la même taille de pixel.
|
// forcément avec la même taille de pixel.
|
||||||
|
|
||||||
UpdateRect( ToWinX(Orig_X), ToWinY(Orig_Y),
|
UpdateRect( ToWinX(Orig_X), ToWinY(Orig_Y),
|
||||||
ToWinL(Pinceau_predefini_Largeur[Numero]),
|
ToWinL(Pinceau_predefini_Largeur[Numero]),
|
||||||
@ -857,16 +858,16 @@ void Dessiner_zigouigoui(word X,word Y, byte Couleur, short Sens)
|
|||||||
Pixel_dans_fenetre(X,Y+5,Couleur);
|
Pixel_dans_fenetre(X,Y+5,Couleur);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -- Dessiner un bloc de couleurs dégradé verticalement
|
// -- Dessiner un bloc de couleurs dégradé verticalement
|
||||||
|
|
||||||
void Bloc_degrade_dans_fenetre(word Pos_X,word Pos_Y,word Debut_block,word Fin_block)
|
void Bloc_degrade_dans_fenetre(word Pos_X,word Pos_Y,word Debut_block,word Fin_block)
|
||||||
{
|
{
|
||||||
word Total_lignes =Menu_Facteur_Y<<6; // <=> à 64 lignes fct(Menu_Facteur)
|
word Total_lignes =Menu_Facteur_Y<<6; // <=> à 64 lignes fct(Menu_Facteur)
|
||||||
word Nb_couleurs =(Debut_block<=Fin_block)?Fin_block-Debut_block+1:Debut_block-Fin_block+1;
|
word Nb_couleurs =(Debut_block<=Fin_block)?Fin_block-Debut_block+1:Debut_block-Fin_block+1;
|
||||||
word Ligne_en_cours=(Debut_block<=Fin_block)?0:Total_lignes-1;
|
word Ligne_en_cours=(Debut_block<=Fin_block)?0:Total_lignes-1;
|
||||||
|
|
||||||
word Debut_X =Fenetre_Pos_X+(Menu_Facteur_X*Pos_X);
|
word Debut_X =Fenetre_Pos_X+(Menu_Facteur_X*Pos_X);
|
||||||
word Largeur_ligne =Menu_Facteur_X<<4; // <=> à 16 pixels fct(Menu_Facteur)
|
word Largeur_ligne =Menu_Facteur_X<<4; // <=> à 16 pixels fct(Menu_Facteur)
|
||||||
|
|
||||||
word Debut_Y =Fenetre_Pos_Y+(Menu_Facteur_Y*Pos_Y);
|
word Debut_Y =Fenetre_Pos_Y+(Menu_Facteur_Y*Pos_Y);
|
||||||
word Fin_Y =Debut_Y+Total_lignes;
|
word Fin_Y =Debut_Y+Total_lignes;
|
||||||
@ -887,7 +888,7 @@ void Bloc_degrade_dans_fenetre(word Pos_X,word Pos_Y,word Debut_block,word Fin_b
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -- Dessiner un petit sprite représentant le type d'un drive --
|
// -- Dessiner un petit sprite représentant le type d'un drive --
|
||||||
|
|
||||||
void Fenetre_Afficher_sprite_drive(word Pos_X,word Pos_Y,byte Type)
|
void Fenetre_Afficher_sprite_drive(word Pos_X,word Pos_Y,byte Type)
|
||||||
{
|
{
|
||||||
@ -903,15 +904,15 @@ void Fenetre_Afficher_sprite_drive(word Pos_X,word Pos_Y,byte Type)
|
|||||||
|
|
||||||
void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
|
void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
|
||||||
{
|
{
|
||||||
// On part du principe qu'il n'y a que le bas d'une fenêtre qui puisse
|
// On part du principe qu'il n'y a que le bas d'une fenêtre qui puisse
|
||||||
// empiéter sur la palette... Et c'est déjà pas mal!
|
// empiéter sur la palette... Et c'est déjà pas mal!
|
||||||
byte Couleur,Vraie_couleur;
|
byte Couleur,Vraie_couleur;
|
||||||
word Debut_X,Debut_Y;
|
word Debut_X,Debut_Y;
|
||||||
word Fin_X,Fin_Y;
|
word Fin_X,Fin_Y;
|
||||||
word Largeur;
|
word Largeur;
|
||||||
word Hauteur;
|
word Hauteur;
|
||||||
word Coin_X=Fenetre_Pos_X+Fenetre_Largeur*Menu_Facteur_X; // |_ Coin bas-droit
|
word Coin_X=Fenetre_Pos_X+Fenetre_Largeur*Menu_Facteur_X; // |_ Coin bas-droit
|
||||||
word Coin_Y=Fenetre_Pos_Y+Fenetre_Hauteur*Menu_Facteur_Y; // | de la fenêtre +1
|
word Coin_Y=Fenetre_Pos_Y+Fenetre_Hauteur*Menu_Facteur_Y; // | de la fenêtre +1
|
||||||
|
|
||||||
|
|
||||||
if (Config.Couleurs_separees)
|
if (Config.Couleurs_separees)
|
||||||
@ -934,8 +935,8 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
|
|||||||
Fin_X=Debut_X+Largeur;
|
Fin_X=Debut_X+Largeur;
|
||||||
Fin_Y=Debut_Y+Hauteur;
|
Fin_Y=Debut_Y+Hauteur;
|
||||||
|
|
||||||
// On affiche le bloc en entier si on peut, sinon on le découpe autour
|
// On affiche le bloc en entier si on peut, sinon on le découpe autour
|
||||||
// de la fenêtre.
|
// de la fenêtre.
|
||||||
if ( (Debut_Y>=Coin_Y) || (Fin_X<=Fenetre_Pos_X) || (Debut_X>=Coin_X) )
|
if ( (Debut_Y>=Coin_Y) || (Fin_X<=Fenetre_Pos_X) || (Debut_X>=Coin_X) )
|
||||||
Block(Debut_X,Debut_Y,Largeur,Hauteur,Vraie_couleur);
|
Block(Debut_X,Debut_Y,Largeur,Hauteur,Vraie_couleur);
|
||||||
else
|
else
|
||||||
@ -989,12 +990,12 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
// Affichage du bloc directement dans le "buffer de fond" de la fenetre.
|
// Affichage du bloc directement dans le "buffer de fond" de la fenetre.
|
||||||
// Cela permet au bloc de couleur d'apparaitre si on déplace la fenetre.
|
// Cela permet au bloc de couleur d'apparaitre si on déplace la fenetre.
|
||||||
short Pos_X;
|
short Pos_X;
|
||||||
short Pos_Y;
|
short Pos_Y;
|
||||||
short Deb_X; // besoin d'une variable signée
|
short Deb_X; // besoin d'une variable signée
|
||||||
short Deb_Y; // besoin d'une variable signée
|
short Deb_Y; // besoin d'une variable signée
|
||||||
// Attention aux unités
|
// Attention aux unités
|
||||||
Deb_X = ((short)Debut_X - (short)Fenetre_Pos_X);
|
Deb_X = ((short)Debut_X - (short)Fenetre_Pos_X);
|
||||||
Deb_Y = ((short)Debut_Y - (short)Fenetre_Pos_Y);
|
Deb_Y = ((short)Debut_Y - (short)Fenetre_Pos_Y);
|
||||||
|
|
||||||
@ -1008,15 +1009,15 @@ void Afficher_palette_du_menu_en_evitant_la_fenetre(byte * Table)
|
|||||||
UpdateRect(LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),(HAUTEUR_MENU-9)*Menu_Facteur_Y);
|
UpdateRect(LARGEUR_MENU*Menu_Facteur_X,Menu_Ordonnee_avant_fenetre,Largeur_ecran-(LARGEUR_MENU*Menu_Facteur_X),(HAUTEUR_MENU-9)*Menu_Facteur_Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
// -------- Calcul des bornes de la partie d'image visible à l'écran ---------
|
// -------- Calcul des bornes de la partie d'image visible à l'écran ---------
|
||||||
void Calculer_limites(void)
|
void Calculer_limites(void)
|
||||||
/*
|
/*
|
||||||
Avant l'appel à cette fonction, les données de la loupe doivent être à jour.
|
Avant l'appel à cette fonction, les données de la loupe doivent être à jour.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
if (Loupe_Mode)
|
if (Loupe_Mode)
|
||||||
{
|
{
|
||||||
// -- Calcul des limites de la partie non zoomée de l'image --
|
// -- Calcul des limites de la partie non zoomée de l'image --
|
||||||
Limite_Haut =Principal_Decalage_Y;
|
Limite_Haut =Principal_Decalage_Y;
|
||||||
Limite_Gauche=Principal_Decalage_X;
|
Limite_Gauche=Principal_Decalage_X;
|
||||||
Limite_visible_Bas =Limite_Haut+Menu_Ordonnee-1;
|
Limite_visible_Bas =Limite_Haut+Menu_Ordonnee-1;
|
||||||
@ -1032,7 +1033,7 @@ void Calculer_limites(void)
|
|||||||
else
|
else
|
||||||
Limite_Droite=Limite_visible_Droite;
|
Limite_Droite=Limite_visible_Droite;
|
||||||
|
|
||||||
// -- Calcul des limites de la partie zoomée de l'image --
|
// -- Calcul des limites de la partie zoomée de l'image --
|
||||||
Limite_Haut_Zoom =Loupe_Decalage_Y;
|
Limite_Haut_Zoom =Loupe_Decalage_Y;
|
||||||
Limite_Gauche_Zoom=Loupe_Decalage_X;
|
Limite_Gauche_Zoom=Loupe_Decalage_X;
|
||||||
Limite_visible_Bas_Zoom =Limite_Haut_Zoom+Loupe_Hauteur-1;
|
Limite_visible_Bas_Zoom =Limite_Haut_Zoom+Loupe_Hauteur-1;
|
||||||
@ -1069,7 +1070,7 @@ void Calculer_limites(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -- Calculer les coordonnées du pinceau en fonction du snap et de la loupe -
|
// -- Calculer les coordonnées du pinceau en fonction du snap et de la loupe -
|
||||||
void Calculer_coordonnees_pinceau(void)
|
void Calculer_coordonnees_pinceau(void)
|
||||||
{
|
{
|
||||||
if ((Loupe_Mode) && (Mouse_X>=Principal_X_Zoom))
|
if ((Loupe_Mode) && (Mouse_X>=Principal_X_Zoom))
|
||||||
@ -1106,7 +1107,7 @@ void Afficher_limites_de_l_image(void)
|
|||||||
Bas_visible =Principal_Hauteur_image<Menu_Ordonnee;
|
Bas_visible =Principal_Hauteur_image<Menu_Ordonnee;
|
||||||
|
|
||||||
|
|
||||||
// On vérifie que la limite à droite est visible:
|
// On vérifie que la limite à droite est visible:
|
||||||
if (Droite_visible)
|
if (Droite_visible)
|
||||||
{
|
{
|
||||||
Debut=Limite_Haut;
|
Debut=Limite_Haut;
|
||||||
@ -1116,7 +1117,7 @@ void Afficher_limites_de_l_image(void)
|
|||||||
if (Bas_visible)
|
if (Bas_visible)
|
||||||
Fin++;
|
Fin++;
|
||||||
|
|
||||||
// Juste le temps d'afficher les limites, on étend les limites de la loupe
|
// Juste le temps d'afficher les limites, on étend les limites de la loupe
|
||||||
// aux limites visibles, car sinon Pixel_Preview ne voudra pas afficher.
|
// aux limites visibles, car sinon Pixel_Preview ne voudra pas afficher.
|
||||||
Ancienne_Limite_Zoom=Limite_Droite_Zoom;
|
Ancienne_Limite_Zoom=Limite_Droite_Zoom;
|
||||||
Limite_Droite_Zoom=Limite_visible_Droite_Zoom;
|
Limite_Droite_Zoom=Limite_visible_Droite_Zoom;
|
||||||
@ -1129,14 +1130,14 @@ void Afficher_limites_de_l_image(void)
|
|||||||
Limite_Droite_Zoom=Ancienne_Limite_Zoom;
|
Limite_Droite_Zoom=Ancienne_Limite_Zoom;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On vérifie que la limite en bas est visible:
|
// On vérifie que la limite en bas est visible:
|
||||||
if (Bas_visible)
|
if (Bas_visible)
|
||||||
{
|
{
|
||||||
Debut=Limite_Gauche;
|
Debut=Limite_Gauche;
|
||||||
Fin=(Limite_Droite<Principal_Largeur_image)?
|
Fin=(Limite_Droite<Principal_Largeur_image)?
|
||||||
Limite_Droite:Principal_Largeur_image;
|
Limite_Droite:Principal_Largeur_image;
|
||||||
|
|
||||||
// On étend également les limites en bas (comme pour la limite droit)
|
// On étend également les limites en bas (comme pour la limite droit)
|
||||||
Ancienne_Limite_Zoom=Limite_Bas_Zoom;
|
Ancienne_Limite_Zoom=Limite_Bas_Zoom;
|
||||||
Limite_Bas_Zoom=Limite_visible_Bas_Zoom;
|
Limite_Bas_Zoom=Limite_visible_Bas_Zoom;
|
||||||
|
|
||||||
@ -1152,7 +1153,7 @@ void Afficher_limites_de_l_image(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -- Recadrer la partie non-zoomée de l'image par rapport à la partie zoomée
|
// -- Recadrer la partie non-zoomée de l'image par rapport à la partie zoomée
|
||||||
// lorsqu'on scrolle en mode Loupe --
|
// lorsqu'on scrolle en mode Loupe --
|
||||||
void Recadrer_ecran_par_rapport_au_zoom(void)
|
void Recadrer_ecran_par_rapport_au_zoom(void)
|
||||||
{
|
{
|
||||||
@ -1186,7 +1187,7 @@ void Recadrer_ecran_par_rapport_au_zoom(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// - Calcul des données du split en fonction de la proportion de chaque zone -
|
// - Calcul des données du split en fonction de la proportion de chaque zone -
|
||||||
void Calculer_split(void)
|
void Calculer_split(void)
|
||||||
{
|
{
|
||||||
//short Temp;
|
//short Temp;
|
||||||
@ -1195,13 +1196,13 @@ void Calculer_split(void)
|
|||||||
Principal_X_Zoom=Largeur_ecran-(((Largeur_ecran+(Loupe_Facteur>>1)-X_theorique)/Loupe_Facteur)*Loupe_Facteur);
|
Principal_X_Zoom=Largeur_ecran-(((Largeur_ecran+(Loupe_Facteur>>1)-X_theorique)/Loupe_Facteur)*Loupe_Facteur);
|
||||||
Principal_Split=Principal_X_Zoom-(Menu_Facteur_X*LARGEUR_BARRE_SPLIT);
|
Principal_Split=Principal_X_Zoom-(Menu_Facteur_X*LARGEUR_BARRE_SPLIT);
|
||||||
|
|
||||||
// Correction en cas de débordement sur la gauche
|
// Correction en cas de débordement sur la gauche
|
||||||
while (Principal_Split*(Loupe_Facteur+1)<Largeur_ecran-(Menu_Facteur_X*LARGEUR_BARRE_SPLIT))
|
while (Principal_Split*(Loupe_Facteur+1)<Largeur_ecran-(Menu_Facteur_X*LARGEUR_BARRE_SPLIT))
|
||||||
{
|
{
|
||||||
Principal_Split+=Loupe_Facteur;
|
Principal_Split+=Loupe_Facteur;
|
||||||
Principal_X_Zoom+=Loupe_Facteur;
|
Principal_X_Zoom+=Loupe_Facteur;
|
||||||
}
|
}
|
||||||
// Correction en cas de débordement sur la droite
|
// Correction en cas de débordement sur la droite
|
||||||
X_theorique=Largeur_ecran-((NB_PIXELS_ZOOMES_MIN-1)*Loupe_Facteur);
|
X_theorique=Largeur_ecran-((NB_PIXELS_ZOOMES_MIN-1)*Loupe_Facteur);
|
||||||
while (Principal_X_Zoom>=X_theorique)
|
while (Principal_X_Zoom>=X_theorique)
|
||||||
{
|
{
|
||||||
@ -1215,7 +1216,7 @@ void Calculer_split(void)
|
|||||||
// -------------------- Calcul des information de la loupe -------------------
|
// -------------------- Calcul des information de la loupe -------------------
|
||||||
void Calculer_donnees_loupe(void)
|
void Calculer_donnees_loupe(void)
|
||||||
/*
|
/*
|
||||||
Après modification des données de la loupe, il faut recalculer les limites.
|
Après modification des données de la loupe, il faut recalculer les limites.
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
Calculer_split();
|
Calculer_split();
|
||||||
@ -1236,7 +1237,7 @@ void Calculer_donnees_loupe(void)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ------------ Changer le facteur de zoom et tout mettre à jour -------------
|
// ------------ Changer le facteur de zoom et tout mettre à jour -------------
|
||||||
void Changer_facteur_loupe(byte Indice_facteur)
|
void Changer_facteur_loupe(byte Indice_facteur)
|
||||||
{
|
{
|
||||||
short Centre_X;
|
short Centre_X;
|
||||||
@ -1251,11 +1252,11 @@ void Changer_facteur_loupe(byte Indice_facteur)
|
|||||||
|
|
||||||
if (Loupe_Mode)
|
if (Loupe_Mode)
|
||||||
{
|
{
|
||||||
// Recalculer le décalage de la loupe
|
// Recalculer le décalage de la loupe
|
||||||
// Centrage "brut" de lécran par rapport à la loupe
|
// Centrage "brut" de lécran par rapport à la loupe
|
||||||
Loupe_Decalage_X=Centre_X-(Loupe_Largeur>>1);
|
Loupe_Decalage_X=Centre_X-(Loupe_Largeur>>1);
|
||||||
Loupe_Decalage_Y=Centre_Y-(Loupe_Hauteur>>1);
|
Loupe_Decalage_Y=Centre_Y-(Loupe_Hauteur>>1);
|
||||||
// Correction en cas de débordement de l'image
|
// Correction en cas de débordement de l'image
|
||||||
if (Loupe_Decalage_X+Loupe_Largeur>Principal_Largeur_image)
|
if (Loupe_Decalage_X+Loupe_Largeur>Principal_Largeur_image)
|
||||||
Loupe_Decalage_X=Principal_Largeur_image-Loupe_Largeur;
|
Loupe_Decalage_X=Principal_Largeur_image-Loupe_Largeur;
|
||||||
if (Loupe_Decalage_Y+Loupe_Hauteur>Principal_Hauteur_image)
|
if (Loupe_Decalage_Y+Loupe_Hauteur>Principal_Hauteur_image)
|
||||||
@ -1279,7 +1280,7 @@ void Changer_facteur_loupe(byte Indice_facteur)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -- Afficher la barre de séparation entre les parties zoomées ou non en
|
// -- Afficher la barre de séparation entre les parties zoomées ou non en
|
||||||
// mode Loupe --
|
// mode Loupe --
|
||||||
|
|
||||||
void Afficher_barre_de_split(void)
|
void Afficher_barre_de_split(void)
|
||||||
@ -1303,11 +1304,11 @@ void Afficher_barre_de_split(void)
|
|||||||
Block(Principal_Split+Menu_Facteur_X,Menu_Facteur_Y,
|
Block(Principal_Split+Menu_Facteur_X,Menu_Facteur_Y,
|
||||||
Menu_Facteur_X,(Menu_Ordonnee-(Menu_Facteur_Y<<1)),CM_Blanc);
|
Menu_Facteur_X,(Menu_Ordonnee-(Menu_Facteur_Y<<1)),CM_Blanc);
|
||||||
|
|
||||||
// Bord droite (gris foncé)
|
// Bord droite (gris foncé)
|
||||||
Block(Principal_X_Zoom-(Menu_Facteur_X<<1),Menu_Facteur_Y,
|
Block(Principal_X_Zoom-(Menu_Facteur_X<<1),Menu_Facteur_Y,
|
||||||
Menu_Facteur_X,(Menu_Ordonnee-(Menu_Facteur_Y<<1)),CM_Fonce);
|
Menu_Facteur_X,(Menu_Ordonnee-(Menu_Facteur_Y<<1)),CM_Fonce);
|
||||||
|
|
||||||
// Bord bas (gris foncé)
|
// Bord bas (gris foncé)
|
||||||
Block(Principal_Split+(Menu_Facteur_X<<1),Menu_Ordonnee-Menu_Facteur_Y,
|
Block(Principal_Split+(Menu_Facteur_X<<1),Menu_Ordonnee-Menu_Facteur_Y,
|
||||||
(LARGEUR_BARRE_SPLIT-3)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce);
|
(LARGEUR_BARRE_SPLIT-3)*Menu_Facteur_X,Menu_Facteur_Y,CM_Fonce);
|
||||||
|
|
||||||
@ -1318,7 +1319,7 @@ void Afficher_barre_de_split(void)
|
|||||||
Block(Principal_X_Zoom-(Menu_Facteur_X<<1),0,
|
Block(Principal_X_Zoom-(Menu_Facteur_X<<1),0,
|
||||||
Menu_Facteur_X,Menu_Facteur_Y,CM_Clair);
|
Menu_Facteur_X,Menu_Facteur_Y,CM_Clair);
|
||||||
|
|
||||||
UpdateRect(Principal_Split,0,LARGEUR_BARRE_SPLIT*Menu_Facteur_X,Menu_Ordonnee); // On réaffiche toute la partie à gauche du split, ce qui permet d'effacer son ancienne position
|
UpdateRect(Principal_Split,0,LARGEUR_BARRE_SPLIT*Menu_Facteur_X,Menu_Ordonnee); // On réaffiche toute la partie à gauche du split, ce qui permet d'effacer son ancienne position
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1326,7 +1327,7 @@ void Afficher_barre_de_split(void)
|
|||||||
// -- Fonctions de manipulation du curseur -----------------------------------
|
// -- Fonctions de manipulation du curseur -----------------------------------
|
||||||
|
|
||||||
|
|
||||||
// -- Afficher une barre horizontale XOR zoomée
|
// -- Afficher une barre horizontale XOR zoomée
|
||||||
|
|
||||||
void Ligne_horizontale_XOR_Zoom(short Pos_X, short Pos_Y, short Largeur)
|
void Ligne_horizontale_XOR_Zoom(short Pos_X, short Pos_Y, short Largeur)
|
||||||
{
|
{
|
||||||
@ -1343,7 +1344,7 @@ void Ligne_horizontale_XOR_Zoom(short Pos_X, short Pos_Y, short Largeur)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -- Afficher une barre verticale XOR zoomée
|
// -- Afficher une barre verticale XOR zoomée
|
||||||
|
|
||||||
void Ligne_verticale_XOR_Zoom(short Pos_X, short Pos_Y, short Hauteur)
|
void Ligne_verticale_XOR_Zoom(short Pos_X, short Pos_Y, short Hauteur)
|
||||||
{
|
{
|
||||||
@ -1372,8 +1373,8 @@ void Afficher_curseur(void)
|
|||||||
short Pos_Y;
|
short Pos_Y;
|
||||||
short Compteur_X;
|
short Compteur_X;
|
||||||
short Compteur_Y;
|
short Compteur_Y;
|
||||||
//short Fin_Compteur_X; // Position X ou s'arrête l'affichage de la brosse/pinceau
|
//short Fin_Compteur_X; // Position X ou s'arrête l'affichage de la brosse/pinceau
|
||||||
//short Fin_Compteur_Y; // Position Y ou s'arrête l'affichage de la brosse/pinceau
|
//short Fin_Compteur_Y; // Position Y ou s'arrête l'affichage de la brosse/pinceau
|
||||||
int Temp;
|
int Temp;
|
||||||
byte Couleur;
|
byte Couleur;
|
||||||
float cosA,sinA;
|
float cosA,sinA;
|
||||||
@ -1464,7 +1465,7 @@ void Afficher_curseur(void)
|
|||||||
if (Fin_Y<3)
|
if (Fin_Y<3)
|
||||||
Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,3-Fin_Y);
|
Ligne_verticale_XOR (Mouse_X,Mouse_Y+3,3-Fin_Y);
|
||||||
|
|
||||||
// Petites barres aux extrémités
|
// Petites barres aux extrémités
|
||||||
|
|
||||||
Debut_X=(!Mouse_X);
|
Debut_X=(!Mouse_X);
|
||||||
Debut_Y=(!Mouse_Y);
|
Debut_Y=(!Mouse_Y);
|
||||||
@ -1560,7 +1561,7 @@ void Afficher_curseur(void)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case FORME_CURSEUR_RECTANGLE_XOR :
|
case FORME_CURSEUR_RECTANGLE_XOR :
|
||||||
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
|
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
|
||||||
|
|
||||||
// Petite croix au centre
|
// Petite croix au centre
|
||||||
Debut_X=(Mouse_X-3);
|
Debut_X=(Mouse_X-3);
|
||||||
@ -1669,7 +1670,7 @@ void Afficher_curseur(void)
|
|||||||
void Effacer_curseur(void)
|
void Effacer_curseur(void)
|
||||||
{
|
{
|
||||||
byte Forme;
|
byte Forme;
|
||||||
int Debut_X; // int car sont parfois négatifs ! (quand on dessine sur un bord)
|
int Debut_X; // int car sont parfois négatifs ! (quand on dessine sur un bord)
|
||||||
int Debut_Y;
|
int Debut_Y;
|
||||||
short Fin_X;
|
short Fin_X;
|
||||||
short Fin_Y;
|
short Fin_Y;
|
||||||
@ -1677,8 +1678,8 @@ void Effacer_curseur(void)
|
|||||||
int Pos_Y;
|
int Pos_Y;
|
||||||
short Compteur_X;
|
short Compteur_X;
|
||||||
short Compteur_Y;
|
short Compteur_Y;
|
||||||
//short Fin_Compteur_X; // Position X ou s'arrête l'affichage de la brosse/pinceau
|
//short Fin_Compteur_X; // Position X ou s'arrête l'affichage de la brosse/pinceau
|
||||||
//short Fin_Compteur_Y; // Position Y ou s'arrête l'affichage de la brosse/pinceau
|
//short Fin_Compteur_Y; // Position Y ou s'arrête l'affichage de la brosse/pinceau
|
||||||
int Temp;
|
int Temp;
|
||||||
//byte Couleur;
|
//byte Couleur;
|
||||||
float cosA,sinA;
|
float cosA,sinA;
|
||||||
@ -1856,7 +1857,7 @@ void Effacer_curseur(void)
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
case FORME_CURSEUR_RECTANGLE_XOR :
|
case FORME_CURSEUR_RECTANGLE_XOR :
|
||||||
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
|
// !!! Cette forme ne peut pas être utilisée en mode Loupe !!!
|
||||||
|
|
||||||
// Petite croix au centre
|
// Petite croix au centre
|
||||||
Debut_X=(Mouse_X-3);
|
Debut_X=(Mouse_X-3);
|
||||||
@ -1972,7 +1973,7 @@ void Afficher_ecran(void)
|
|||||||
word Largeur;
|
word Largeur;
|
||||||
word Hauteur;
|
word Hauteur;
|
||||||
|
|
||||||
// ---/\/\/\ Partie non zoomée: /\/\/\---
|
// ---/\/\/\ Partie non zoomée: /\/\/\---
|
||||||
if (Loupe_Mode)
|
if (Loupe_Mode)
|
||||||
{
|
{
|
||||||
if (Principal_Largeur_image<Principal_Split)
|
if (Principal_Largeur_image<Principal_Split)
|
||||||
@ -1993,7 +1994,7 @@ void Afficher_ecran(void)
|
|||||||
Hauteur=Menu_Ordonnee;
|
Hauteur=Menu_Ordonnee;
|
||||||
Display_screen(Largeur,Hauteur,Principal_Largeur_image);
|
Display_screen(Largeur,Hauteur,Principal_Largeur_image);
|
||||||
|
|
||||||
// Effacement de la partie non-image dans la partie non zoomée:
|
// Effacement de la partie non-image dans la partie non zoomée:
|
||||||
if (Loupe_Mode)
|
if (Loupe_Mode)
|
||||||
{
|
{
|
||||||
if (Principal_Largeur_image<Principal_Split && Principal_Largeur_image < Largeur_ecran)
|
if (Principal_Largeur_image<Principal_Split && Principal_Largeur_image < Largeur_ecran)
|
||||||
@ -2007,7 +2008,7 @@ void Afficher_ecran(void)
|
|||||||
if (Principal_Hauteur_image<Menu_Ordonnee)
|
if (Principal_Hauteur_image<Menu_Ordonnee)
|
||||||
Block(0,Principal_Hauteur_image,Largeur,(Menu_Ordonnee-Hauteur),0);
|
Block(0,Principal_Hauteur_image,Largeur,(Menu_Ordonnee-Hauteur),0);
|
||||||
|
|
||||||
// ---/\/\/\ Partie zoomée: /\/\/\---
|
// ---/\/\/\ Partie zoomée: /\/\/\---
|
||||||
if (Loupe_Mode)
|
if (Loupe_Mode)
|
||||||
{
|
{
|
||||||
// Affichage de la barre de split
|
// Affichage de la barre de split
|
||||||
@ -2019,7 +2020,7 @@ void Afficher_ecran(void)
|
|||||||
else
|
else
|
||||||
Largeur=Loupe_Largeur;
|
Largeur=Loupe_Largeur;
|
||||||
|
|
||||||
// Calcul du nombre de lignes visibles de l'image zoomée
|
// Calcul du nombre de lignes visibles de l'image zoomée
|
||||||
if (Principal_Hauteur_image<Loupe_Hauteur)
|
if (Principal_Hauteur_image<Loupe_Hauteur)
|
||||||
Hauteur=Principal_Hauteur_image*Loupe_Facteur;
|
Hauteur=Principal_Hauteur_image*Loupe_Facteur;
|
||||||
else
|
else
|
||||||
@ -2027,7 +2028,7 @@ void Afficher_ecran(void)
|
|||||||
|
|
||||||
Display_zoomed_screen(Largeur,Hauteur,Principal_Largeur_image,Buffer_de_ligne_horizontale);
|
Display_zoomed_screen(Largeur,Hauteur,Principal_Largeur_image,Buffer_de_ligne_horizontale);
|
||||||
|
|
||||||
// Effacement de la partie non-image dans la partie zoomée:
|
// Effacement de la partie non-image dans la partie zoomée:
|
||||||
if (Principal_Largeur_image<Loupe_Largeur)
|
if (Principal_Largeur_image<Loupe_Largeur)
|
||||||
Block(Principal_X_Zoom+(Principal_Largeur_image*Loupe_Facteur),0,
|
Block(Principal_X_Zoom+(Principal_Largeur_image*Loupe_Facteur),0,
|
||||||
(Loupe_Largeur-Principal_Largeur_image)*Loupe_Facteur,
|
(Loupe_Largeur-Principal_Largeur_image)*Loupe_Facteur,
|
||||||
@ -2039,7 +2040,7 @@ void Afficher_ecran(void)
|
|||||||
// ---/\/\/\ Affichage des limites /\/\/\---
|
// ---/\/\/\ Affichage des limites /\/\/\---
|
||||||
if (Config.Afficher_limites_image)
|
if (Config.Afficher_limites_image)
|
||||||
Afficher_limites_de_l_image();
|
Afficher_limites_de_l_image();
|
||||||
UpdateRect(0,0,Largeur_ecran,Menu_Ordonnee); // TODO On peut faire plus fin, en évitant de mettre à jour la partie à droite du split quand on est en mode loupe. Mais c'est pas vraiment intéressant ?
|
UpdateRect(0,0,Largeur_ecran,Menu_Ordonnee); // TODO On peut faire plus fin, en évitant de mettre à jour la partie à droite du split quand on est en mode loupe. Mais c'est pas vraiment intéressant ?
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -2170,7 +2171,7 @@ byte Old_Trans;
|
|||||||
void Remap_pixel(byte * Pix)
|
void Remap_pixel(byte * Pix)
|
||||||
{
|
{
|
||||||
if (*Pix==Old_Clair) // On commence par tester le Gris clair
|
if (*Pix==Old_Clair) // On commence par tester le Gris clair
|
||||||
*Pix=CM_Clair; // qui est pas mal utilisé.
|
*Pix=CM_Clair; // qui est pas mal utilisé.
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (*Pix==Old_Noir) // Puis le Noir...
|
if (*Pix==Old_Noir) // Puis le Noir...
|
||||||
@ -2204,7 +2205,7 @@ void Remapper_ecran_apres_changement_couleurs_menu(void)
|
|||||||
if ( (CM_Clair!=Old_Clair) || (CM_Fonce!=Old_Fonce) || (CM_Blanc!=Old_Blanc) || (CM_Noir !=Old_Noir )
|
if ( (CM_Clair!=Old_Clair) || (CM_Fonce!=Old_Fonce) || (CM_Blanc!=Old_Blanc) || (CM_Noir !=Old_Noir )
|
||||||
|| (CM_Trans!=Old_Trans) )
|
|| (CM_Trans!=Old_Trans) )
|
||||||
{
|
{
|
||||||
// Création de la table de conversion
|
// Création de la table de conversion
|
||||||
for (Indice=0; Indice<256; Indice++)
|
for (Indice=0; Indice<256; Indice++)
|
||||||
Table_de_conversion[Indice]=Indice;
|
Table_de_conversion[Indice]=Indice;
|
||||||
|
|
||||||
@ -2213,7 +2214,7 @@ void Remapper_ecran_apres_changement_couleurs_menu(void)
|
|||||||
Table_de_conversion[Old_Clair]=CM_Clair;
|
Table_de_conversion[Old_Clair]=CM_Clair;
|
||||||
Table_de_conversion[Old_Blanc]=CM_Blanc;
|
Table_de_conversion[Old_Blanc]=CM_Blanc;
|
||||||
|
|
||||||
// Remappage de l'écran
|
// Remappage de l'écran
|
||||||
|
|
||||||
Temp=Fenetre_Hauteur*Menu_Facteur_Y;
|
Temp=Fenetre_Hauteur*Menu_Facteur_Y;
|
||||||
|
|
||||||
@ -2230,11 +2231,11 @@ void Remapper_ecran_apres_changement_couleurs_menu(void)
|
|||||||
// Remappage de la partie du fond de la fenetre qui cacherait le menu...
|
// Remappage de la partie du fond de la fenetre qui cacherait le menu...
|
||||||
Remappe_fond_fenetres(Table_de_conversion, Menu_Ordonnee_avant_fenetre, Hauteur_ecran);
|
Remappe_fond_fenetres(Table_de_conversion, Menu_Ordonnee_avant_fenetre, Hauteur_ecran);
|
||||||
/*
|
/*
|
||||||
Il faudrait peut-être remapper les pointillés délimitant l'image.
|
Il faudrait peut-être remapper les pointillés délimitant l'image.
|
||||||
Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe.
|
Mais ça va être chiant parce qu'ils peuvent être affichés en mode Loupe.
|
||||||
Mais de toutes façons, c'est franchement facultatif...
|
Mais de toutes façons, c'est franchement facultatif...
|
||||||
*/
|
*/
|
||||||
// On passe la table juste pour ne rafficher que les couleurs modifiées
|
// On passe la table juste pour ne rafficher que les couleurs modifiées
|
||||||
Afficher_palette_du_menu_en_evitant_la_fenetre(Table_de_conversion);
|
Afficher_palette_du_menu_en_evitant_la_fenetre(Table_de_conversion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2282,7 +2283,7 @@ void Calculer_couleurs_menu_optimales(struct Composantes * Palette)
|
|||||||
CM_Clair=Table[2];
|
CM_Clair=Table[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recherche du gris foncé
|
// Recherche du gris foncé
|
||||||
Calculer_les_4_meilleures_couleurs_pour_1_couleur_du_menu
|
Calculer_les_4_meilleures_couleurs_pour_1_couleur_du_menu
|
||||||
(Coul_menu_pref[1].R, Coul_menu_pref[1].V, Coul_menu_pref[1].B,Palette,Table);
|
(Coul_menu_pref[1].R, Coul_menu_pref[1].V, Coul_menu_pref[1].B,Palette,Table);
|
||||||
if ( (CM_Noir!=Table[0]) && (CM_Blanc!=Table[0]) && (CM_Clair!=Table[0]) )
|
if ( (CM_Noir!=Table[0]) && (CM_Blanc!=Table[0]) && (CM_Clair!=Table[0]) )
|
||||||
@ -2300,7 +2301,7 @@ void Calculer_couleurs_menu_optimales(struct Composantes * Palette)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// C'est peu probable mais il est possible que CM_Clair soit plus foncée que
|
// C'est peu probable mais il est possible que CM_Clair soit plus foncée que
|
||||||
// CM_Fonce. Dans ce cas, on les inverse.
|
// CM_Fonce. Dans ce cas, on les inverse.
|
||||||
if ( ((Palette[CM_Clair].R*30)+(Palette[CM_Clair].V*59)+(Palette[CM_Clair].B*11)) <
|
if ( ((Palette[CM_Clair].R*30)+(Palette[CM_Clair].V*59)+(Palette[CM_Clair].B*11)) <
|
||||||
((Palette[CM_Fonce].R*30)+(Palette[CM_Fonce].V*59)+(Palette[CM_Fonce].B*11)) )
|
((Palette[CM_Fonce].R*30)+(Palette[CM_Fonce].V*59)+(Palette[CM_Fonce].B*11)) )
|
||||||
@ -2310,7 +2311,7 @@ void Calculer_couleurs_menu_optimales(struct Composantes * Palette)
|
|||||||
CM_Fonce=I;
|
CM_Fonce=I;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On cherche une couleur de transparence différente des 4 autres.
|
// On cherche une couleur de transparence différente des 4 autres.
|
||||||
for (CM_Trans=0; ((CM_Trans==CM_Noir) || (CM_Trans==CM_Fonce) ||
|
for (CM_Trans=0; ((CM_Trans==CM_Noir) || (CM_Trans==CM_Fonce) ||
|
||||||
(CM_Trans==CM_Clair) || (CM_Trans==CM_Blanc)); CM_Trans++);
|
(CM_Trans==CM_Clair) || (CM_Trans==CM_Blanc)); CM_Trans++);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user