Salome HOME
*** empty log message ***
[modules/gui.git] / src / GLViewer / GLViewer_Text.cxx
1 /***************************************************************************
2 **  Class:   GLViewer_Text
3 **  Descr:   Substitution of Prs3d_Text for OpenGL
4 **  Module:  GLViewer
5 **  Created: UI team, 10.07.03
6 ****************************************************************************/
7
8 //#include <GLViewerAfx.h>
9 #include "GLViewer_Text.h"
10
11 GLViewer_Text::GLViewer_Text( const QString& text, float xPos, float yPos, const QColor& color )
12 {
13   myText = text;
14   myXPos = xPos;
15   myYPos = yPos;
16   myColor = color;
17   myQFont = QFont::defaultFont();
18   mySeparator = 2;
19   myDTF = DTF_BITMAP;
20 }
21
22 GLViewer_Text::GLViewer_Text( const QString& text, float xPos, float yPos, const QColor& color, QFont theFont, int theSeparator )
23 {
24   myText = text;
25   myXPos = xPos;
26   myYPos = yPos;
27   myColor = color;
28   myQFont = theFont;
29   mySeparator = theSeparator;
30   myDTF = DTF_BITMAP;
31 }
32
33 GLViewer_Text::~GLViewer_Text()
34 {
35 }
36
37 int GLViewer_Text::getWidth()
38 {
39     int aResult = 0;
40     QFontMetrics aFM( myQFont );
41     for( uint i = 0; i < myText.length(); i++ )
42         aResult += aFM.width( myText.at(i) ) + mySeparator;
43     return aResult;
44 }
45
46 int GLViewer_Text::getHeight()
47 {
48     QFontMetrics aFM( myQFont );
49     return aFM.height();
50 }
51
52 QByteArray GLViewer_Text::getByteCopy() const
53 {
54     int i;
55     int aSize = 5*sizeof( int ) + myText.length();
56
57     int aR = myColor.red();
58     int aG = myColor.green();
59     int aB = myColor.blue();
60     const char* aStr = myText.data();
61
62     int anISize = sizeof( int );    
63     QByteArray aResult( aSize );
64
65     char* aPointer = (char*)&myXPos;
66     for( i = 0; i < anISize; i++, aPointer++ )
67         aResult[i] = *aPointer;
68     aPointer = (char*)&myYPos;
69     for( ; i < 2*anISize; i++, aPointer++ )
70         aResult[i] = *aPointer;
71
72     aPointer = (char*)&aR;
73     for( ; i < 3*anISize; i++, aPointer++ )
74         aResult[i] = *aPointer;
75     aPointer = (char*)&aG;
76     for( ; i < 4*anISize; i++, aPointer++ )
77         aResult[i] = *aPointer;
78     aPointer = (char*)&aB;
79     for( ; i < 5*anISize; i++, aPointer++ )
80         aResult[i] = *aPointer;
81
82     int aTextSize = myText.length();
83     aPointer = (char*)&aTextSize;
84     for( ; i < 6*anISize; i++, aPointer++ )
85         aResult[i] = *aPointer;
86
87     for( i = 0; i < aTextSize; i++ )
88         aResult[6*anISize + i] = aStr[i];
89
90     aPointer = (char*)&mySeparator;
91     for( ; i < 7*anISize + aTextSize; i++, aPointer++ )
92         aResult[i] = *aPointer;
93
94     const char* aFontStr = myQFont.toString().data();
95     int aFontSize = myQFont.toString().length();
96
97     for( i = 0; i < aFontSize; i++ )
98         aResult[7*anISize + aTextSize + i] = aFontStr[i];
99
100     return aResult;
101 }
102
103 GLViewer_Text* GLViewer_Text::fromByteCopy( QByteArray theBuf )
104 {
105     int i = 0;
106     int aSize = (int)theBuf.size();
107     int aR = 0, aG = 0, aB = 0;
108
109     int xPos = 0, yPos = 0;
110
111     int anISize = sizeof( int );
112     char* aPointer = (char*)&xPos;
113     for ( i = 0; i < anISize; i++, aPointer++ )
114         *aPointer = theBuf[i];
115
116     aPointer = (char*)&yPos;
117     for ( ; i < 2*anISize; i++, aPointer++ )
118         *aPointer = theBuf[i];
119
120     aPointer = (char*)&aR;
121     for( ; i < 3*anISize; i++, aPointer++ )
122         *aPointer = theBuf[i];
123     aPointer = (char*)&aG;
124     for( ; i < 4*anISize; i++, aPointer++ )
125         *aPointer = theBuf[i];
126     aPointer = (char*)&aB;
127     for( ; i < 5*anISize; i++, aPointer++ )
128         *aPointer = theBuf[i];
129
130     int aTextSize = 0;
131     aPointer = (char*)&aTextSize;
132     for( ; i < 6*anISize; i++, aPointer++ )
133         *aPointer = theBuf[i];
134
135     QString aText;
136     for( ; i < 6*anISize + aTextSize; i++ )
137     {
138         QChar aChar( theBuf[i] );
139         aText += aChar;
140     }
141
142     int aSeparator = 0;
143     aPointer = (char*)&aSeparator;
144     for( ; i < 7*anISize + aTextSize; i++, aPointer++ )
145         *aPointer = theBuf[i];
146
147     QString aFontStr;
148     for( ; i < aSize; i++ )
149     {
150         QChar aChar( theBuf[i] );
151         aFontStr += aChar;
152     }
153     QFont aFont;
154
155     if( !aFont.fromString( aFontStr ) )
156         return NULL;    
157
158     GLViewer_Text* aGlText = new GLViewer_Text( aText, xPos, yPos, QColor( aR,aG,aB ), aFont, aSeparator  );
159
160     return aGlText;    
161 }