www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

vesaGraphique.c (2738B)


      1 #include <module.h>
      2 #include <types.h>
      3 #include <math.h>
      4 #include <pc/vesaGraphique/vesaGraphique.h>
      5 #include <demarrage/multiboot/multiboot.h>
      6 #include <interfaceUtilisateur/police/police.h>
      7 #include <interfaceUtilisateur/console/console.h>
      8 
      9 MODULE(VesaGraphique);
     10 
     11 DEPENDANCE_MODULE(VesaGraphique, Multiboot);
     12 DEPENDANCE_MODULE(VesaGraphique, Console);
     13 DEPENDANCE_MODULE(VesaGraphique, Police);
     14 
     15 extern EtatMultiboot* etatMultiboot;
     16 
     17 
     18 void setPixel32 (uint32 x, uint32 y, uint32 couleur) {
     19 	etatVesaGraphique->memoireVideo[x + 1024*y].rvb = couleur;
     20 }
     21 
     22 void ligne (uint32 x1, uint32 y1, uint32 x2, uint32 y2, uint32 couleur) {
     23 	uint32 mdx2, mdy2, dx2, dy2;
     24 	int32 err, dx, dy;
     25 	
     26 	setPixel32 (x2, y2, couleur);
     27 	
     28 	dx = x2 - x1;
     29 	dy = y2 - y1;
     30 	
     31 	if (abs(dx) > abs(dy)) { // y++ ou y-- ou y=y à chaque tour
     32 				err = - abs(dx);
     33 				mdx2 = 2 * err;
     34 				dy2 = 2 * abs(dy);
     35 				
     36 				for (; x1 != x2; x1 += sign(dx)) {
     37 					setPixel32 (x1, y1, couleur);
     38 					err += dy2;
     39 					if (err >= 0) {
     40 						err += mdx2;
     41 						y1 += sign(dy);
     42 					}
     43 				}
     44 	} else { // x++ ou x-- ou x=x à chaque tour
     45 				err = - abs(dy);
     46 				mdy2 = 2 * err;
     47 				dx2 = 2 * abs(dx);
     48 				
     49 				for (; y1 != y2; y1 += sign(dy)) {
     50 					setPixel32 (x1, y1, couleur);
     51 					err += dx2;
     52 					if (err >= 0) {
     53 						err += mdy2;
     54 						x1 += sign(dx);
     55 					}
     56 				}		
     57 	}
     58 }
     59 
     60 void rectanglePlein (uint32 x1, uint32 y1, uint32 x2, uint32 y2, uint32 couleur) {
     61 	uint32 y;
     62 	for (; x1 <= x2; x1++)
     63 		for (y = y1; y <= y2; y++)
     64 			setPixel32(x1, y, couleur);
     65 }
     66 
     67 void rectangleContour (uint32 x1, uint32 y1, uint32 x2, uint32 y2, uint32 couleur) {
     68 	uint32 x;
     69 	for (x = x1; x <= x2; x++) {
     70 		setPixel32(x, y1, couleur);
     71 		setPixel32(x, y2, couleur);
     72 	}
     73 	
     74 	for (; y1 <= y2; y1++) {
     75 		setPixel32(x1, y1, couleur);
     76 		setPixel32(x2, y1, couleur);
     77 	}
     78 }
     79 
     80 
     81 void vesaGraphiqueAfficherCaractereCouleurPosition(char caractere, uint32 couleurAv, uint32 couleurAr, uint32 x, uint32 y) {
     82 	policeAfficherCaractereCouleurPosition(caractere, couleurAv, couleurAr, x * 8, y * 15);
     83 	caractere = caractere;
     84 	couleurAv = couleurAv;
     85 	couleurAr = couleurAr;
     86 	x = x;
     87 	y = y;
     88 }
     89 
     90 
     91 void initVesaGraphique (void** etat) {
     92 	*etat = etatVesaGraphique;
     93 	
     94 	/* Passage en mode graphique. Actuellement effectué par grub (avec le patch pour VBE) */
     95 	
     96 	etatVesaGraphique->memoireVideo = etatMultiboot->InfoMultiboot->vbeModeInfo->linearAddress;
     97 	
     98 	etatVesaGraphique->console.x = 0;
     99 	etatVesaGraphique->console.y = 0;
    100 	etatVesaGraphique->console.largeur = 1024 / 8;
    101 	etatVesaGraphique->console.hauteur = 768 / 15;
    102 	etatVesaGraphique->console.fonctionAffichage = vesaGraphiqueAfficherCaractereCouleurPosition;
    103 	
    104 	definirConsoleActive(&etatVesaGraphique->console);
    105 }
    106 
    107 void deinitVesaGraphique (void** etat) {
    108 	*etat = NULL;
    109 }