1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179
| // bibliotheques
#include <SDL.h>
#include <SDL_thread.h>
#include <SDL_image.h>
#include <stdio.h>
#include <string>
#include <SDL_ttf.h>
// dimension ecran
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
// declaration de variables
SDL_Window* gWindow = NULL;
SDL_Renderer* gRenderer = NULL;
TTF_Font *arial = NULL;
SDL_Rect* clip = NULL;
double angle = 0.0;
SDL_Point* center = NULL;
SDL_RendererFlip flip = SDL_FLIP_NONE;
class bouton_type1
{
//private:
public:
SDL_Texture* texture_texte_bouton;
// dimension bouton
int mWidth;
int mHeight;
// coordonnées bouton
int x;
int y;
// declaration initialisation de la couleur
SDL_Color couleur_texte_bouton;
// declaration initialisation d une chaine de caractere
std::string texte_bouton;
//Initializes variables
// constructeur
bouton_type1 (int x_bis, int y_bis, std::string texte_bouton_bis, SDL_Color couleur_texte_bouton_bis);
//Deallocates memory
// destructeur
~bouton_type1 ();
// affchage du bouton
void affichage_bouton_type1 ();
};
bouton_type1::bouton_type1 (int x_bis, int y_bis, std::string texte_bouton_bis, SDL_Color couleur_texte_bouton_bis)
{
x = x_bis;
y = y_bis;
texte_bouton = texte_bouton_bis;
couleur_texte_bouton = couleur_texte_bouton_bis;
}
bouton_type1::~bouton_type1 ()
{
SDL_DestroyTexture( texture_texte_bouton );
texture_texte_bouton = NULL;
mWidth = 0;
mHeight = 0;
x = 0;
y = 0;
texte_bouton = ""; // std::string is not a pointer type. it cannot be made "null."
}
void bouton_type1::affichage_bouton_type1()
{
// declaration initialisation d une structure utilisee pour contenir un ensemble de pixels
// ecriture du texte:
// - avec TTF_RenderText_Solid:
SDL_Surface* surface_texte_bouton = TTF_RenderText_Solid(arial, texte_bouton.c_str(), couleur_texte_bouton);
// conversion en texture d 1 SDL_Surface
// dessin du texte
SDL_Texture* texture_texte_bouton = SDL_CreateTextureFromSurface(gRenderer, surface_texte_bouton);
// nettoyage de l ecran <=> couleur de fond de la fenetre
SDL_SetRenderDrawColor( gRenderer,127, 255, 0, 1 );
SDL_RenderClear( gRenderer );
//Get image dimensions
mWidth = surface_texte_bouton->w;
mHeight = surface_texte_bouton->h;
//Set rendering space and render to screen
SDL_Rect cadre_bouton = { x, y, mWidth, mHeight };
// definition couleur de remplissage du rectangle bouton
SDL_SetRenderDrawColor( gRenderer, 255, 20, 147, 1 );
SDL_RenderFillRect( gRenderer, &cadre_bouton );
//Render to screen
//SDL_RenderCopyEx( gRenderer, mTexture_1, clip, &cadre_bouton, angle, center, flip );
SDL_RenderCopyEx( gRenderer, texture_texte_bouton, clip, &cadre_bouton, angle, center, flip );
}
// fonction principale
int main( int argc, char* args[] )
{
// initialisation SDL
SDL_Init( SDL_INIT_VIDEO );
// qualite de la mise a l echelle
SDL_SetHint( SDL_HINT_RENDER_SCALE_QUALITY, "1" );
// creation d une fenetre
gWindow = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
// creation d'un SDL_Renderer (pinceau) utilisant l'acceleration materielle
gRenderer = SDL_CreateRenderer( gWindow, -1, SDL_RENDERER_ACCELERATED );
// selection d'une couleur de nettoyage
SDL_SetRenderDrawColor( gRenderer, 0xFF, 0xFF, 0xFF, 0xFF );
// initialisation de la police
TTF_Init();
TTF_Font* arial = TTF_OpenFont("arial.ttf", 12);
if( arial == NULL )
{
printf( "Failed to load arial font: %s\n", TTF_GetError() );
}
// declaration initialisation de la couleur
int x_1 = 25;
int y_1 = 25;
std::string texte_bouton_1 = "texte du bouton 1";
SDL_Color couleur_texte_bouton_1 = {6, 49, 196};
// appel du constructeur: creation de l objet bouton_1
bouton_type1 bouton1 (x_1, y_1, texte_bouton_1, couleur_texte_bouton_1);
// appel de la fonction
bouton1.affichage_bouton_type1();
// mise a jour de l affichage de la fenetre
SDL_RenderPresent( gRenderer );
// structure stockant les information sur les evenements
SDL_Event e;
bool quit = false;
// gestion de l evenement quit
while( !quit )
{
// gerer les événements en file d attente
while( SDL_PollEvent( &e ) != 0 ) // <=> la queue des evenement n est pas vide
{
// si l utilisateur choisit quit
if( e.type == SDL_QUIT )
{
quit = true;
}
}
}
// liberation font
TTF_CloseFont( arial );
arial = NULL;
// liberation fenetre
SDL_DestroyRenderer( gRenderer );
SDL_DestroyWindow( gWindow );
gWindow = NULL;
gRenderer = NULL;
// quitter les SDL subsystems
TTF_Quit();
SDL_Quit();
return 0;
} |
Partager