diff --git a/common/base_struct.cpp b/common/base_struct.cpp index c109c095d0..2b942f77d9 100644 --- a/common/base_struct.cpp +++ b/common/base_struct.cpp @@ -342,6 +342,7 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, if( m_TextDrawings == NULL ) /* pointeur sur la liste des segments de dessin */ CreateDrawData(); + if( m_TextDrawings == NULL ) return; @@ -349,6 +350,7 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, width = m_Width / zoom; if( display_mode == FILAIRE ) width = 0; + /* choix de la couleur du texte : */ if( draw_mode != -1 ) GRSetDrawMode( DC, draw_mode ); @@ -370,12 +372,15 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, { int anchor_size = 2 * zoom; anchor_color &= MASKCOLOR; + /* calcul de la position du texte */ int cX = m_Pos.x - offset.x; int cY = m_Pos.y - offset.y; + /* trace ancre du texte */ GRLine( &panel->m_ClipBox, DC, cX - anchor_size, cY, cX + anchor_size, cY, 0, anchor_color ); + GRLine( &panel->m_ClipBox, DC, cX, cY - anchor_size, cX, cY + anchor_size, 0, anchor_color ); } @@ -385,15 +390,14 @@ void EDA_TextStruct::Draw( WinEDA_DrawPanel* panel, wxDC* DC, nbpoints = m_TextDrawings[jj]; if( nbpoints > 50 ) nbpoints = 50; + for( kk = 0, ll = 0; (kk < nbpoints) && (ii < m_TextDrawingsSize); kk++ ) { - coord[ll] = m_TextDrawings[ii] + offset.x + m_Pos.x; - ll++; ii++; - coord[ll] = m_TextDrawings[ii] + offset.y + m_Pos.y; - ll++; ii++; + coord[ll++] = m_TextDrawings[ii++] + offset.x + m_Pos.x; + coord[ll++] = m_TextDrawings[ii++] + offset.y + m_Pos.y; } - jj = ii; ii++; + jj = ii++; if( width > 2 ) { @@ -544,8 +548,13 @@ void EDA_TextStruct::CreateDrawData() m_ZoomLevelDrawable = m_Size.x / 3; dx = (espacement * nbchar) / 2; dy = size_v / 2; /* Decalage du debut du texte / centre */ - ux0 = cX - dx; uy0 = cY; - dx += cX; dy = cY; + + ux0 = cX - dx; + uy0 = cY; + + dx += cX; + dy = cY; + RotatePoint( &ux0, &uy0, cX, cY, m_Orient ); RotatePoint( &dx, &dy, cX, cY, m_Orient ); @@ -582,9 +591,10 @@ void EDA_TextStruct::CreateDrawData() coord = (int*) realloc( coord, coord_count_max * sizeof(int) ); } coord[jj] = nbpoints; - jj = ii; ii++; + jj = ii++; } - plume = f_cod; nbpoints = 0; + plume = f_cod; + nbpoints = 0; break; case 'D': @@ -600,14 +610,20 @@ void EDA_TextStruct::CreateDrawData() f_cod = *ptcar; k2 = f_cod; /* trace sur axe H */ k2 = (k2 * size_h) / 9; - dx = k2 + ox; dy = k1 + oy; + + dx = k2 + ox; + dy = k1 + oy; + RotatePoint( &dx, &dy, cX, cY, m_Orient ); if( ii >= coord_count_max ) { coord_count_max *= 2; coord = (int*) realloc( coord, coord_count_max * sizeof(int) ); } - coord[ii] = dx; ii++; coord[ii] = dy; ii++; + + coord[ii++] = dx; + coord[ii++] = dy; + nbpoints++; break; } @@ -618,7 +634,8 @@ void EDA_TextStruct::CreateDrawData() /* end boucle for = end trace de 1 caractere */ - ptr++; ox += espacement; + ptr++; + ox += espacement; } /* end trace du texte */ @@ -661,13 +678,16 @@ bool EDA_Rect::Inside( const wxPoint& point ) if( size.x < 0 ) { - size.x = -size.x; rel_posx += size.x; + size.x = -size.x; + rel_posx += size.x; } if( size.y < 0 ) { - size.y = -size.y; rel_posy += size.y; + size.y = -size.y; + rel_posy += size.y; } + return (rel_posx >= 0) && (rel_posy >= 0) && ( rel_posy <= size.y) && ( rel_posx <= size.x) diff --git a/common/drawtxt.cpp b/common/drawtxt.cpp index 0b89ab6b1b..487b2ab9d5 100644 --- a/common/drawtxt.cpp +++ b/common/drawtxt.cpp @@ -1,6 +1,6 @@ - /*************************************************/ - /* drawtxt.cpp : Function to draw and plot texts */ - /*************************************************/ +/*************************************************/ +/* drawtxt.cpp : Function to draw and plot texts */ +/*************************************************/ #include "fctsys.h" #include "gr_basic.h" @@ -22,391 +22,454 @@ /****************************************************************************/ -void DrawGraphicText(WinEDA_DrawPanel * panel, wxDC * DC, - const wxPoint & Pos, int gcolor, const wxString & Text, - int orient, const wxSize & Size, int h_justify, int v_justify, int width) +void DrawGraphicText( WinEDA_DrawPanel* panel, wxDC* DC, + const wxPoint& Pos, int gcolor, const wxString& Text, + int orient, const wxSize& Size, int h_justify, int v_justify, int width ) /*****************************************************************************/ + /* Draw a graphic text (like module texts) - Text = text to draw - Pos = text position (according to h_justify, v_justify) - Size = text size (size.x or size.y can be < 0 for mirrored texts) - orient = angle in 0.1 degree - mode_color = GR_OR, GR_XOR.. - h_justify = horizontal justification (Left, center, right) - v_justify = vertical justification (bottom, center, top) - width = line width (pen width) (default = 0) - if width < 0 : draw segments in sketch mode, width = abs(width) -*/ + * Text = text to draw + * Pos = text position (according to h_justify, v_justify) + * Size = text size (size.x or size.y can be < 0 for mirrored texts) + * orient = angle in 0.1 degree + * mode_color = GR_OR, GR_XOR.. + * h_justify = horizontal justification (Left, center, right) + * v_justify = vertical justification (bottom, center, top) + * width = line width (pen width) (default = 0) + * if width < 0 : draw segments in sketch mode, width = abs(width) + */ { -int ii, kk,nbchar, AsciiCode, endcar; -int k1 , k2, x0, y0; -int zoom; -int size_h , size_v , espacement ; -SH_CODE f_cod , plume = 'U'; -const SH_CODE * ptcar; -int ptr; -int ux0, uy0, dx, dy; // Draw coordinate for segments to draw. also used in some other calculation -int cX, cY; // Texte center -int ox, oy; // Draw coordinates for the current char -int coord[100]; // Buffer coordinate used to draw polylines (char shapes) -bool sketch_mode = FALSE; - - zoom = panel->GetZoom(); + int ii, kk, nbchar, AsciiCode, endcar; + int k1, k2, x0, y0; + int zoom; + int size_h, size_v, espacement; + SH_CODE f_cod, plume = 'U'; + const SH_CODE* ptcar; + int ptr; + int ux0, uy0, dx, dy; // Draw coordinate for segments to draw. also used in some other calculation + int cX, cY; // Texte center + int ox, oy; // Draw coordinates for the current char + int coord[100]; // Buffer coordinate used to draw polylines (char shapes) + bool sketch_mode = FALSE; - size_h = Size.x; - size_v = Size.y; + zoom = panel->GetZoom(); - if ( width < 0 ) - { - width = - width; - sketch_mode = TRUE; - } - kk = 0 ; ptr = 0; /* ptr = text index */ + size_h = Size.x; + size_v = Size.y; - nbchar = Text.Len(); - if ( nbchar == 0 ) return; + if( width < 0 ) + { + width = -width; + sketch_mode = TRUE; + } + kk = 0; + ptr = 0; /* ptr = text index */ - espacement = (10 * size_h ) / 9; // this is the pitch between chars - ox = cX = Pos.x; oy = cY = Pos.y; + nbchar = Text.Len(); + if( nbchar == 0 ) + return; - /* Do not draw the text if out of draw area! */ - if ( panel ) - { - int xm, ym, ll, xc, yc; - int textsize = ABS(espacement); - ll = (textsize * nbchar) / zoom; - xc = GRMapX(cX); - yc = GRMapY(cY); - x0 = panel->m_ClipBox.GetX() - ll; - y0 = panel->m_ClipBox.GetY() -ll ; - xm = panel->m_ClipBox.GetRight() + ll; - ym = panel->m_ClipBox.GetBottom() + ll; - if ( xc < x0 ) return; - if ( yc < y0 ) return; - if ( xc > xm ) return; - if ( yc > ym ) return; - } + espacement = (10 * size_h ) / 9; // this is the pitch between chars + ox = cX = Pos.x; + oy = cY = Pos.y; + + /* Do not draw the text if out of draw area! */ + if( panel ) + { + int xm, ym, ll, xc, yc; + int textsize = ABS( espacement ); + ll = (textsize * nbchar) / zoom; + + xc = GRMapX( cX ); + yc = GRMapY( cY ); + + x0 = panel->m_ClipBox.GetX() - ll; + y0 = panel->m_ClipBox.GetY() - ll; + xm = panel->m_ClipBox.GetRight() + ll; + ym = panel->m_ClipBox.GetBottom() + ll; + + if( xc < x0 ) + return; + if( yc < y0 ) + return; + if( xc > xm ) + return; + if( yc > ym ) + return; + } - /* Compute the position ux0, uy0 of the first letter , next */ - dx = (espacement * nbchar) / 2; - dy = size_v / 2; /* dx, dy = draw offset between first letter and text center */ + /* Compute the position ux0, uy0 of the first letter , next */ + dx = (espacement * nbchar) / 2; + dy = size_v / 2; /* dx, dy = draw offset between first letter and text center */ - ux0 = uy0 = 0; /* Decalage du centre du texte / coord de ref */ + ux0 = uy0 = 0; /* Decalage du centre du texte / coord de ref */ - if( (orient == 0) || (orient == 1800) ) /* Horizontal Text */ - { - switch(h_justify) - { - case GR_TEXT_HJUSTIFY_CENTER: - break; + if( (orient == 0) || (orient == 1800) ) /* Horizontal Text */ + { + switch( h_justify ) + { + case GR_TEXT_HJUSTIFY_CENTER: + break; - case GR_TEXT_HJUSTIFY_RIGHT: - ux0 = - dx; - break; + case GR_TEXT_HJUSTIFY_RIGHT: + ux0 = -dx; + break; - case GR_TEXT_HJUSTIFY_LEFT: - ux0 = dx; - break; - } + case GR_TEXT_HJUSTIFY_LEFT: + ux0 = dx; + break; + } - switch(v_justify) - { - case GR_TEXT_VJUSTIFY_CENTER: - break; + switch( v_justify ) + { + case GR_TEXT_VJUSTIFY_CENTER: + break; - case GR_TEXT_VJUSTIFY_TOP: - uy0 = dy; - break; + case GR_TEXT_VJUSTIFY_TOP: + uy0 = dy; + break; - case GR_TEXT_VJUSTIFY_BOTTOM: - uy0 = -dy; - break; - } - } + case GR_TEXT_VJUSTIFY_BOTTOM: + uy0 = -dy; + break; + } + } + else /* Vertical Text */ + { + switch( h_justify ) + { + case GR_TEXT_HJUSTIFY_CENTER: + break; - else /* Vertical Text */ - { - switch(h_justify) - { - case GR_TEXT_HJUSTIFY_CENTER: - break; + case GR_TEXT_HJUSTIFY_RIGHT: + ux0 = -dy; + break; - case GR_TEXT_HJUSTIFY_RIGHT: - ux0 = - dy; - break; + case GR_TEXT_HJUSTIFY_LEFT: + ux0 = dy; + break; + } - case GR_TEXT_HJUSTIFY_LEFT: - ux0 = dy; - break; - } + switch( v_justify ) + { + case GR_TEXT_VJUSTIFY_CENTER: + break; - switch(v_justify) - { - case GR_TEXT_VJUSTIFY_CENTER: - break; + case GR_TEXT_VJUSTIFY_TOP: + uy0 = dx; + break; - case GR_TEXT_VJUSTIFY_TOP: - uy0 = dx; - break; + case GR_TEXT_VJUSTIFY_BOTTOM: + uy0 = -dx; + break; + } + } + + cX += ux0; + cY += uy0; + + ox = cX - dx; + oy = cY + dy; - case GR_TEXT_VJUSTIFY_BOTTOM: - uy0 = -dx; - break; - } - } - cX += ux0; cY += uy0; - ox = cX - dx; ; oy = cY + dy; + if( (Size.x / zoom) == 0 ) + return; - if( (Size.x/zoom) == 0 ) return; + if( ABS( (Size.x / zoom) ) < 3 ) /* chars trop petits pour etre dessines */ + { /* le texte est symbolise par une barre */ + dx = (espacement * nbchar) / 2; + dy = size_v / 2; /* Decalage du debut du texte / centre */ - if( ABS((Size.x/zoom)) < 3) /* chars trop petits pour etre dessines */ - { /* le texte est symbolise par une barre */ - dx = (espacement * nbchar) / 2; - dy = size_v / 2; /* Decalage du debut du texte / centre */ + ux0 = cX - dx; + uy0 = cY; + + dx += cX; + dy = cY; + + RotatePoint( &ux0, &uy0, cX, cY, orient ); + RotatePoint( &dx, &dy, cX, cY, orient ); + + GRLine( &panel->m_ClipBox, DC, ux0, uy0, dx, dy, width, gcolor ); - ux0 = cX - dx; uy0 = cY; - dx += cX; dy = cY; - RotatePoint(&ux0, &uy0, cX, cY, orient); - RotatePoint(&dx, &dy, cX, cY, orient); - GRLine(&panel->m_ClipBox, DC, ux0, uy0, dx, dy, width, gcolor); - - return; - } + return; + } #if 0 -dx = (espacement * nbchar) / 2; -dy = size_v / 2; /* Decalage du debut du texte / centre */ -ux0 = cX - dx; uy0 = cY; -dx += cX; dy = cY; -RotatePoint(&ux0, &uy0, cX, cY, orient); -RotatePoint(&dx, &dy, cX, cY, orient); -DC->SetTextForeground( wxColour( - ColorRefs[gcolor].r, - ColorRefs[gcolor].g, - ColorRefs[gcolor].b) ); -DC->DrawRotatedText(Text, GRMapX(ux0), GRMapY(uy0), (double) orient / 10.0); -return; + dx = (espacement * nbchar) / 2; + dy = size_v / 2;/* Decalage du debut du texte / centre */ + + ux0 = cX - dx; + uy0 = cY; + + dx += cX; + dy = cY; + + RotatePoint( &ux0, &uy0, cX, cY, orient ); + RotatePoint( &dx, &dy, cX, cY, orient ); + + DC->SetTextForeground( wxColour( + ColorRefs[gcolor].r, + ColorRefs[gcolor].g, + ColorRefs[gcolor].b ) ); + + DC->DrawRotatedText( Text, GRMapX( ux0 ), GRMapY( uy0 ), (double) orient / 10.0 ); + return; #endif - while(kk++ < nbchar) - { - x0 = 0 ; y0 = 0 ; - AsciiCode = Text.GetChar(ptr) & 255; - ptcar = graphic_fonte_shape[AsciiCode] ; /* ptcar pointe la description - du caractere a dessiner */ + while( kk++ < nbchar ) + { + x0 = 0; y0 = 0; + AsciiCode = Text.GetChar( ptr ) & 255; + ptcar = graphic_fonte_shape[AsciiCode]; /* ptcar pointe la description + * du caractere a dessiner */ - for(ii = 0, endcar = FALSE; ! endcar; ptcar++) - { - f_cod = *ptcar ; /* get code n de la forme selectionnee */ - switch(f_cod) - { - case 'X' : - endcar = TRUE;/* fin du caractere */ - break; + for( ii = 0, endcar = FALSE; !endcar; ptcar++ ) + { + f_cod = *ptcar; - case 'U' : - if(ii && (plume == 'D' ) ) - { - if ( width <= 1 ) - GRPoly(&panel->m_ClipBox, DC, ii /2, coord, 0, 0, - gcolor, gcolor); - else if ( sketch_mode ) - { - int ik, * coordptr; - coordptr = coord; - for ( ik = 0; ik < (ii-2); ik += 2, coordptr+= 2) - GRCSegm(&panel->m_ClipBox, DC, *coordptr, *(coordptr+1), - *(coordptr+2), *(coordptr+3), width, gcolor) ; - } - - else - GRPoly(&panel->m_ClipBox, DC, ii /2, coord, 0, - width, gcolor, gcolor); - } - plume = f_cod; ii = 0; - break; + /* get code n de la forme selectionnee */ + switch( f_cod ) + { + case 'X': + endcar = TRUE; /* fin du caractere */ + break; - case 'D' : plume = f_cod ; break ; + case 'U': + if( ii && (plume == 'D' ) ) + { + if( width <= 1 ) + GRPoly( &panel->m_ClipBox, DC, ii / 2, coord, 0, 0, + gcolor, gcolor ); + else if( sketch_mode ) + { + int ik, * coordptr; + coordptr = coord; + for( ik = 0; ik < (ii - 2); ik += 2, coordptr += 2 ) + GRCSegm( &panel->m_ClipBox, DC, *coordptr, *(coordptr + 1), + *(coordptr + 2), *(coordptr + 3), width, gcolor ); + } + else + GRPoly( &panel->m_ClipBox, DC, ii / 2, coord, 0, + width, gcolor, gcolor ); + } + plume = f_cod; ii = 0; + break; - default : - { - k1 = f_cod; /* trace sur axe V */ - k1 = - ((k1 * size_v) / 9) ; - ptcar++ ; - f_cod = *ptcar ; - k2 = f_cod; /* trace sur axe H */ - k2 = (k2 * size_h) / 9 ; - dx = k2 + ox; dy = k1 + oy; - RotatePoint(&dx, &dy, cX, cY, orient); - coord[ii] = dx; ii++; coord[ii] = dy; ii++; - break ; - } - } /* end switch */ - } /* end boucle for = end trace de 1 caractere */ + case 'D': + plume = f_cod; + break; - ptr++; ox += espacement; - } /* end trace du texte */ + default: + { + k1 = f_cod; /* trace sur axe V */ + k1 = -( (k1 * size_v) / 9 ); + + ptcar++; + f_cod = *ptcar; + + k2 = f_cod; /* trace sur axe H */ + k2 = (k2 * size_h) / 9; + dx = k2 + ox; dy = k1 + oy; + + RotatePoint( &dx, &dy, cX, cY, orient ); + coord[ii++] = dx; + coord[ii++] = dy; + break; + } + } + /* end switch */ + } + + /* end boucle for = end trace de 1 caractere */ + + ptr++; ox += espacement; + } + + /* end trace du texte */ } /******************************************************************************************/ -void PlotGraphicText(int format_plot, const wxPoint & Pos, int gcolor, - const wxString & Text, - int orient, const wxSize & Size, int h_justify, int v_justify) +void PlotGraphicText( int format_plot, const wxPoint& Pos, int gcolor, + const wxString& Text, + int orient, const wxSize& Size, int h_justify, int v_justify ) /******************************************************************************************/ + /* - id DrawGraphicText, for plot graphic text -*/ + * id DrawGraphicText, for plot graphic text + */ { -int kk, nbchar, end, AsciiCode; -int k1 , k2 , x0 , y0, ox, oy ; -int size_h , size_v , espacement ; -SH_CODE f_cod , plume = 'U'; -const SH_CODE * ptcar; -int ptr; -int ux0, uy0, dx, dy; // Coord de trace des segments de texte & variables de calcul */ -int cX, cY; // Centre du texte -void (*FctPlume)(wxPoint pos, int state); - - switch ( format_plot) - { - case PLOT_FORMAT_POST: - FctPlume = LineTo_PS; - break; + int kk, nbchar, end, AsciiCode; + int k1, k2, x0, y0, ox, oy; + int size_h, size_v, espacement; + SH_CODE f_cod, plume = 'U'; + const SH_CODE* ptcar; + int ptr; + int ux0, uy0, dx, dy; // Coord de trace des segments de texte & variables de calcul */ + int cX, cY; // Centre du texte - case PLOT_FORMAT_HPGL: - FctPlume = Move_Plume_HPGL; - break; + void (*FctPlume)( wxPoint pos, int state ); - case PLOT_FORMAT_GERBER: - default: - return; - } + switch( format_plot ) + { + case PLOT_FORMAT_POST: + FctPlume = LineTo_PS; + break; - if ( (gcolor >= 0) && (format_plot == PLOT_FORMAT_POST) ) - SetColorMapPS ( gcolor ); + case PLOT_FORMAT_HPGL: + FctPlume = Move_Plume_HPGL; + break; - size_h = Size.x; - size_v = Size.y; - if(size_h == 0) size_h = DEFAULT_SIZE_TEXT; - if(size_v == 0) size_v = DEFAULT_SIZE_TEXT; + case PLOT_FORMAT_GERBER: + default: + return; + } - kk = 0 ; ptr = 0; /* ptr = text index */ + if( (gcolor >= 0) && (format_plot == PLOT_FORMAT_POST) ) + SetColorMapPS( gcolor ); - /* calcul de la position du debut des textes: ox et oy */ - nbchar = Text.Len(); + size_h = Size.x; + size_v = Size.y; + if( size_h == 0 ) + size_h = DEFAULT_SIZE_TEXT; + if( size_v == 0 ) + size_v = DEFAULT_SIZE_TEXT; - espacement = (10 * size_h ) / 9; - ox = cX = Pos.x; oy = cY = Pos.y; + kk = 0; + ptr = 0; /* ptr = text index */ - /* Calcul du cadrage du texte */ - dx = (espacement * nbchar) / 2; - dy = size_v / 2; /* Decalage du debut du texte / centre */ + /* calcul de la position du debut des textes: ox et oy */ + nbchar = Text.Len(); - ux0 = uy0 = 0; /* Decalage du centre du texte / ccord de ref */ + espacement = (10 * size_h ) / 9; + ox = cX = Pos.x; + oy = cY = Pos.y; - if( (orient == 0) || (orient == 1800) ) /* Texte Horizontal */ - { - switch(h_justify) - { - case GR_TEXT_HJUSTIFY_CENTER: - break; + /* Calcul du cadrage du texte */ + dx = (espacement * nbchar) / 2; + dy = size_v / 2; /* Decalage du debut du texte / centre */ - case GR_TEXT_HJUSTIFY_RIGHT: - ux0 = - dx; - break; + ux0 = uy0 = 0; /* Decalage du centre du texte / ccord de ref */ - case GR_TEXT_HJUSTIFY_LEFT: - ux0 = dx; - break; - } + if( (orient == 0) || (orient == 1800) ) /* Texte Horizontal */ + { + switch( h_justify ) + { + case GR_TEXT_HJUSTIFY_CENTER: + break; - switch(v_justify) - { - case GR_TEXT_VJUSTIFY_CENTER: - break; + case GR_TEXT_HJUSTIFY_RIGHT: + ux0 = -dx; + break; - case GR_TEXT_VJUSTIFY_TOP: - uy0 = dy; - break; + case GR_TEXT_HJUSTIFY_LEFT: + ux0 = dx; + break; + } - case GR_TEXT_VJUSTIFY_BOTTOM: - uy0 = -dy; - break; - } - } + switch( v_justify ) + { + case GR_TEXT_VJUSTIFY_CENTER: + break; - else /* Texte Vertical */ - { - switch(h_justify) - { - case GR_TEXT_HJUSTIFY_CENTER: - break; + case GR_TEXT_VJUSTIFY_TOP: + uy0 = dy; + break; - case GR_TEXT_HJUSTIFY_RIGHT: - ux0 = -dy; - break; + case GR_TEXT_VJUSTIFY_BOTTOM: + uy0 = -dy; + break; + } + } + else /* Texte Vertical */ + { + switch( h_justify ) + { + case GR_TEXT_HJUSTIFY_CENTER: + break; - case GR_TEXT_HJUSTIFY_LEFT: - ux0 = dy; - break; - } + case GR_TEXT_HJUSTIFY_RIGHT: + ux0 = -dy; + break; - switch(v_justify) - { - case GR_TEXT_VJUSTIFY_CENTER: - break; + case GR_TEXT_HJUSTIFY_LEFT: + ux0 = dy; + break; + } - case GR_TEXT_VJUSTIFY_TOP: - uy0 = dx; - break; + switch( v_justify ) + { + case GR_TEXT_VJUSTIFY_CENTER: + break; - case GR_TEXT_VJUSTIFY_BOTTOM: - uy0 = -dx; - break; - } - } - cX += ux0; cY += uy0; /* cX, cY = coord du centre du texte */ - ox = -dx; oy = +dy; /* ox, oy = coord debut texte, relativement au centre */ + case GR_TEXT_VJUSTIFY_TOP: + uy0 = dx; + break; - FctPlume(wxPoint(0,0), 'Z'); + case GR_TEXT_VJUSTIFY_BOTTOM: + uy0 = -dx; + break; + } + } + + cX += ux0; + cY += uy0; /* cX, cY = coord du centre du texte */ + + ox = -dx; + oy = +dy; /* ox, oy = coord debut texte, relativement au centre */ - while(kk++ < nbchar) - { - AsciiCode = Text.GetChar(ptr) & 255; - ptcar = graphic_fonte_shape[AsciiCode] ; /* ptcar pointe la description - du caractere a dessiner */ + FctPlume( wxPoint( 0, 0 ), 'Z' ); - for(end = 0 ; end == 0; ptcar++) - { - f_cod = *ptcar ; /* get code n de la forme selectionnee */ - switch(f_cod) - { - case 'X' : end = 1 ;/* fin du caractere */ + while( kk++ < nbchar ) + { + AsciiCode = Text.GetChar( ptr ) & 255; + ptcar = graphic_fonte_shape[AsciiCode]; /* ptcar pointe la description + * du caractere a dessiner */ - case 'U' : - case 'D' : plume = f_cod ; break ; + for( end = 0; end == 0; ptcar++ ) + { + f_cod = *ptcar; - default : - k1 = f_cod ; /* trace sur axe V */ - k1 = -(k1 * size_v) / 9 ; - ptcar++ ; - f_cod = *ptcar; - k2 = f_cod; /* trace sur axe H */ - k2 = (k2 * size_h) / 9 ; - dx = k2 + ox; dy = k1 + oy; - RotatePoint(&dx, &dy, orient); - FctPlume(wxPoint(cX + dx, cY + dy), plume); - x0 = k2 ; y0 = k1 ; - break ; - } /* end switch */ - } /* end boucle for = end trace de 1 caractere */ + /* get code n de la forme selectionnee */ + switch( f_cod ) + { + case 'X': + end = 1; /* fin du caractere */ - FctPlume(wxPoint(0,0), 'Z'); - ptr++; ox += espacement; - } /* end trace du texte */ - FctPlume(wxPoint(0,0), 'Z'); + case 'U': + case 'D': + plume = f_cod; break; + + default: + k1 = f_cod; /* trace sur axe V */ + k1 = -(k1 * size_v) / 9; + ptcar++; + f_cod = *ptcar; + + k2 = f_cod; /* trace sur axe H */ + k2 = (k2 * size_h) / 9; + + dx = k2 + ox; + dy = k1 + oy; + + RotatePoint( &dx, &dy, orient ); + FctPlume( wxPoint( cX + dx, cY + dy ), plume ); + + x0 = k2; + y0 = k1; + break; + } + + /* end switch */ + } + + /* end boucle for = end trace de 1 caractere */ + + FctPlume( wxPoint( 0, 0 ), 'Z' ); + ptr++; ox += espacement; + } + + /* end trace du texte */ + FctPlume( wxPoint( 0, 0 ), 'Z' ); } -