crabs_firewall-3.0.1 ©2005-2011 - Christophe CAZAJUS (crabs-mettre_le_signe_at-crabs-world.com)
1 /* 2 **============================================================================= 3 ** crabs_firewall-3.0.1 : Firewall-Masquerade avec interface http 4 ** Copyright (C) 2005-2011 : Christophe CAZAJUS (crabs-mettre_le_signe_at-crabs-world.com) 5 ** 6 ** Ce source fait partie d'un projet logiciel libre. Vous pouvez le distribuer 7 ** et/ou le modifier en respectant les termes de la GNU General Public License 8 ** version 2 ou (suite a votre propre choix) une version ulterieure. 9 ** 10 ** Ce programme est distribue dans l'espoir qu'il puisse etre utile, mais 11 ** sans aucune garantie, meme si il est associe a un produit qui vous en 12 ** propose une. Conformez-vous a la GNU General Public License pour avoir 13 ** plus de precisions. 14 ** 15 ** L'auteur ne peut etre tenu responsable de l'utilisation faite des 16 ** composantes associees a ce projet (en partie ou dans leur totalite). 17 ** 18 ** Une copie du fichier de la GNU GPL est fournie dans le repertoire DOC 19 ** de ce projet sous le nom gnu_gpl.txt 20 ** 21 **============================================================================= 22 */ 23 #include "graph.h" 24 #include <string.h> 25 26 char THE_FONT[] = "/usr/share/fonts/TTF/DejaVuSans.ttf" ; 27 28 void CGgraph::dessineTitre( gdImagePtr im, int col ) 29 { 30 int h,w,brect[8]; 31 char* err = textSize( titre, THE_FONT, 10, w, h ) ; 32 if ( err ) 33 printf( "ERR: %s\n", err ) ; 34 else 35 { 36 int x = ( W - w ) / 2 , y = margeH + h -1 ; 37 err = gdImageStringFT(im,brect,col,THE_FONT,10,0.,x,y,titre); 38 if ( err ) printf( "ERR: %s\n", err ) ; 39 margeH += h+3 ; 40 } 41 } 42 43 void CGgraph::dessineLegende( gdImagePtr im ) 44 { 45 int w[NbCourbe], h[NbCourbe], wsum, hmax, brect[8], nbc=0 ; 46 char nom[NbCourbe][128] ; 47 wsum = 0 ; hmax = 0 ; 48 for( int i=0; i<NbCourbe; i++ ) 49 { 50 if ( !crb[i].valeur ) continue ; 51 nbc++ ; 52 if ( crb[i].nom[0] ) 53 strcpy( nom[i], crb[i].nom ) ; 54 else 55 crb[i].valeur->getNom( nom[i] ) ; 56 char* err = textSize( nom[i], THE_FONT, 10, w[i], h[i] ) ; 57 if ( err ) return ; 58 wsum+= w[i] + 20 ; hmax = Max( 2, hmax, h[i] ) ; 59 } 60 if ( nbc <= 1 ) return ; 61 int nbligne = 1 + wsum / W ; 62 int y0 = H - ( hmax+8)*nbligne + hmax ; 63 wsum = 0 ; 64 for( int i=0; i<NbCourbe; i++ ) 65 { 66 if ( !crb[i].valeur ) continue ; 67 int col = gdImageColorResolve(im,crb[i].R,crb[i].G,crb[i].B) ; 68 wsum+= 10 ; 69 char* err = gdImageStringFT(im,brect,col,THE_FONT,10,0.,wsum,y0,nom[i]); 70 wsum+= w[i] + 10 ; 71 if ( wsum > W -10 ) { wsum = 0 ; y0+= hmax+8 ; } 72 } 73 margeB = ( hmax+8)*nbligne + 8 ; 74 } 75 76 void CGgraph::dessineValeurAxe( gdImagePtr im ) 77 { 78 char val[64] ; int wxmax, hxmax, w1, w2, h, h1, h2, brect[8] ; 79 int fsz=8 ; 80 double vmax, vmin ; 81 // taille des labels des X 82 axeX->getMinMax( vmax, vmin ) ; 83 axeX->textValeur( vmin, val, sizeof(val) ) ; 84 char* err = textSize( val, THE_FONT, fsz, w1, h1 ) ; if (err) return ; 85 axeX->textValeur( vmax, val, sizeof(val) ) ; 86 err = textSize( val, THE_FONT, fsz, w2, h2 ) ; if (err) return ; 87 wxmax = Max( 2, w1, w2 ) ; hxmax = Max( 2, h1, h2 ) ; 88 89 // taille des labels des Y 90 int wgmax=0, wdmax=0 ; bool gauche=true ; 91 wgmax = wdmax = wxmax / 2 ; 92 for( int i=0; i<NbAxeY; i++ ) 93 { 94 if ( !axeY[i] ) continue ; 95 axeY[i]->getMinMax( vmax, vmin ) ; 96 axeY[i]->textValeur( vmax, val, sizeof(val) ) ; 97 err = textSize( val, THE_FONT, fsz, w1, h ) ; if (err) return ; 98 axeY[i]->textValeur( vmin, val, sizeof(val) ) ; 99 err = textSize( val, THE_FONT, fsz, w2, h ) ; if (err) return ; 100 if ( gauche ) 101 wgmax = Max( 3, wgmax, w1, w2 ), gauche=false ; 102 else 103 wdmax = Max( 3, wdmax, w1, w2 ), gauche=true ; 104 } 105 margeG = wgmax + 15 ; margeD = wdmax + 5 ; 106 // Pour le grapheur on fixe les marges 107 margeG = 70 ; margeD = 25 ; 108 int y0 = H - margeB ; int y1=margeH ; 109 margeB += hxmax + 8 ; 110 111 double dW = (double)W ; double margeX = (double)( margeG + margeD ) ; 112 double dxmin, dxmax ; axeX->getMinMax( dxmin, dxmax ) ; 113 if ( dxmin==dxmax ) { dxmax+=0.1 ; axeX->setMax( dxmax ) ; } 114 double AX = (dW-margeX) / ( dxmax - dxmin ) ; 115 double BX = margeG ; double DX = dxmin ; 116 int nb = axeX->getNb() ; 117 int delta = ( W - margeG - margeD ) / wxmax / 2 ; 118 double dx = ( dxmax - dxmin ) / ((double)delta) ; 119 axeX->textValeur( dxmin, val, sizeof(val) ) ; 120 dessineTexte( im, val, margeG, y0, mCX, THE_FONT, fsz ) ; 121 axeX->textValeur( dxmax, val, sizeof(val) ) ; 122 dessineTexte( im, val, W-margeD, y0, mCX, THE_FONT, fsz ) ; 123 dxmax -= dx/2 ; 124 for( double v=dxmin+dx; v<=dxmax; v+=dx ) 125 { 126 axeX->textValeur( v, val, sizeof(val) ) ; 127 double x = AX * ( v - DX ) + BX ; int ix=(int)x ; 128 dessineTexte( im, val, ix, y0, mCX, THE_FONT, fsz ) ; 129 gdImageLine( im, ix, margeH, ix, H-margeB+4, caxe ) ; 130 } 131 132 double dH = (double)H ; double margeY = (double)( margeH + margeB ) ; 133 gauche=true; bool premier = true ; 134 for( int i=0; i<NbAxeY; i++ ) 135 { 136 if ( !axeY[i] ) continue ; 137 CGserie* Y = axeY[i] ; 138 double dymin, dymax ; Y->getMinMax( dymin, dymax ) ; 139 if ( dymin == dymax ) { dymax+=1.0 ; Y->setMax( dymax ) ; } 140 double AY = (dH-margeY) / ( dymin - dymax ) ; 141 double BY = margeH ; double DY = dymax ; 142 nb = Y->getNb() ; 143 delta = ( H - margeH - margeB ) / h / 4 ; 144 double dy = ( dymax - dymin ) / ((double)delta) ; 145 int x, mode ; 146 if ( gauche ) 147 x = margeG - 5 , mode = mCY|mDX ; 148 else 149 x = W-margeD + 5 , mode = mCY|mGX ; 150 Y->textValeur( dymin, val, sizeof(val) ) ; 151 dessineTexte( im, val, x, H-margeB, mode, THE_FONT, fsz ) ; 152 Y->textValeur( dymax, val, sizeof(val) ) ; 153 dessineTexte( im, val, x, margeH, mode, THE_FONT, fsz ) ; 154 dymax -= dy/2 ; 155 for( double v=dymin+dy; v<=dymax; v+=dy ) 156 { 157 Y->textValeur( v, val, sizeof(val) ) ; 158 double y = AY * ( v - DY ) + BY ; int iy=(int)y ; 159 dessineTexte( im, val, x, iy, mode, THE_FONT, fsz ) ; 160 if ( premier ) 161 gdImageLine( im, margeG-3,iy, W-margeD+3,iy , caxe ) ; 162 } 163 gauche =! gauche ; premier = false ; 164 } 165 } 166
Date de génération : 22/09/2011 21:48