📄 wg__painter_8cpp-source.html
字号:
00108 {00109 <span class="keywordflow">throw</span>(<a class="code" href="classwGui_1_1Wg__Ex__Range.html">Wg_Ex_Range</a>(<span class="stringliteral">"CPainter::DrawVLine : Out of range - converting int to short int!"</span>));00110 }00111 <span class="preprocessor">#endif // MSVC6</span>00112 <span class="preprocessor"></span><span class="preprocessor">#endif // WIN32</span>00113 <span class="preprocessor"></span> SDL_Rect Rect;00114 Rect.x = static_cast<short int>(x);00115 Rect.y = static_cast<short int>(std::min(yStart, yEnd));00116 Rect.w = 1;00117 Rect.h = static_cast<short int>(std::max(yEnd - yStart + 1, yStart - yEnd + 1));00118 SDL_FillRect(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>, &Rect, LineColor.<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format));00119 }00120 00121 <a name="l00122"></a><a class="code" href="classwGui_1_1CPainter.html#a5">00122</a> <span class="keywordtype">void</span> CPainter::DrawRect(<span class="keyword">const</span> <a class="code" href="classwGui_1_1CRect.html">CRect</a>& Rect, <span class="keywordtype">bool</span> bFilled, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>& BorderColor, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>& FillColor)00123 {00124 <a class="code" href="classwGui_1_1CRect.html">CRect</a> RealRect((<a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a> != 0) ? Rect + <a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a>-><a class="code" href="classwGui_1_1CWindow.html#a5">GetClientRect</a>().<a class="code" href="classwGui_1_1CRect.html#a13">TopLeft</a>() : Rect);00125 <span class="keywordflow">if</span> (m_pWindow)00126 {00127 RealRect.<a class="code" href="classwGui_1_1CRect.html#a31">ClipTo</a>(<a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a>-><a class="code" href="classwGui_1_1CWindow.html#a5">GetClientRect</a>());00128 }00129 <span class="keywordflow">if</span> (!bFilled || (BorderColor != FillColor))00130 {00131 <a class="code" href="classwGui_1_1CPainter.html#a3">DrawHLine</a>(RealRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a11">Right</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a9">Top</a>(), BorderColor);00132 <a class="code" href="classwGui_1_1CPainter.html#a3">DrawHLine</a>(RealRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a11">Right</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a12">Bottom</a>(), BorderColor);00133 <a class="code" href="classwGui_1_1CPainter.html#a4">DrawVLine</a>(RealRect.<a class="code" href="classwGui_1_1CRect.html#a9">Top</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a12">Bottom</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>(), BorderColor);00134 <a class="code" href="classwGui_1_1CPainter.html#a4">DrawVLine</a>(RealRect.<a class="code" href="classwGui_1_1CRect.html#a9">Top</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a12">Bottom</a>(), RealRect.<a class="code" href="classwGui_1_1CRect.html#a11">Right</a>(), BorderColor);00135 RealRect.<a class="code" href="classwGui_1_1CRect.html#a28">Grow</a>(-1); <span class="comment">//In case we have to fill the rect, then it's ready to go.</span>00136 }00137 00138 <span class="keywordflow">if</span> (bFilled)00139 {00140 SDL_Rect FillRect = RealRect.<a class="code" href="classwGui_1_1CRect.html#a22">SDLRect</a>();00141 SDL_FillRect(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>, &FillRect, FillColor.<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format));00142 }00143 }00144 00145 <a name="l00146"></a><a class="code" href="classwGui_1_1CPainter.html#a6">00146</a> <span class="keywordtype">void</span> CPainter::DrawLine(<span class="keyword">const</span> <a class="code" href="classwGui_1_1CPoint.html">CPoint</a>& Point1, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CPoint.html">CPoint</a>& Point2, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>& LineColor)00147 {00148 <span class="keywordflow">if</span> (Point1.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() == Point2.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>())00149 {00150 <a class="code" href="classwGui_1_1CPainter.html#a4">DrawVLine</a>(Point1.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>(), Point2.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>(), Point1.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>(), LineColor);00151 }00152 <span class="keywordflow">else</span>00153 {00154 <span class="keywordtype">double</span> iSlope = double(Point2.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>() - Point1.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>()) / (Point2.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() - Point1.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>());00155 <span class="keywordflow">if</span> (iSlope <= 1 && iSlope >= -1)00156 {00157 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> StartPoint = (Point1.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() < Point2.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>()) ? Point1 : Point2;00158 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> EndPoint = (Point1.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() < Point2.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>()) ? Point2 : Point1;00159 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> x = StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>(); x <= EndPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>(); ++x)00160 {00161 <a class="code" href="classwGui_1_1CPainter.html#a7">DrawPoint</a>(<a class="code" href="classwGui_1_1CPoint.html">CPoint</a>(x, static_cast<int>(StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>() + (x - StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>()) * iSlope)), LineColor);00162 }00163 }00164 <span class="keywordflow">else</span>00165 {00166 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> StartPoint = (Point1.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>() < Point2.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>()) ? Point1 : Point2;00167 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> EndPoint = (Point1.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>() < Point2.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>()) ? Point2 : Point1;00168 <span class="keywordflow">for</span> (<span class="keywordtype">int</span> y = StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>(); y <= EndPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>(); ++y)00169 {00170 <a class="code" href="classwGui_1_1CPainter.html#a7">DrawPoint</a>(<a class="code" href="classwGui_1_1CPoint.html">CPoint</a>(static_cast<int>(StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + (y - StartPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>()) / iSlope), y), LineColor);00171 }00172 }00173 }00174 }00175 00176 <a name="l00177"></a><a class="code" href="classwGui_1_1CPainter.html#a7">00177</a> <span class="keywordtype">void</span> CPainter::DrawPoint(<span class="keyword">const</span> <a class="code" href="classwGui_1_1CPoint.html">CPoint</a>& Point, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>& PointColor)00178 {00179 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> RealPoint = (<a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a> != 0) ? Point + <a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a>-><a class="code" href="classwGui_1_1CWindow.html#a5">GetClientRect</a>().<a class="code" href="classwGui_1_1CRect.html#a13">TopLeft</a>() : Point;00180 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CRect.html">CRect</a>(0, 0, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->w, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->h).HitTest(RealPoint) == CRect::RELPOS_INSIDE)00181 {00182 <a class="code" href="classwGui_1_1CPainter.html#b0">LockSurface</a>();00183 Uint8* PixelOffset = static_cast<Uint8*>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->pixels) +00184 <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format->BytesPerPixel * RealPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->pitch * RealPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>();00185 <span class="keywordflow">switch</span> (<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format->BytesPerPixel)00186 {00187 <span class="keywordflow">case</span> 1: <span class="comment">// 8 bpp</span>00188 *reinterpret_cast<Uint8*>(PixelOffset) = static_cast<Uint8>(<a class="code" href="classwGui_1_1CPainter.html#b2">MixColor</a>(<a class="code" href="classwGui_1_1CPainter.html#a8">ReadPoint</a>(Point), PointColor).<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format));00189 <span class="keywordflow">break</span>;00190 <span class="keywordflow">case</span> 2: <span class="comment">// 16 bpp</span>00191 *reinterpret_cast<Uint16*>(PixelOffset) = static_cast<Uint16>(<a class="code" href="classwGui_1_1CPainter.html#b2">MixColor</a>(<a class="code" href="classwGui_1_1CPainter.html#a8">ReadPoint</a>(Point), PointColor).<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format));00192 <span class="keywordflow">break</span>;00193 <span class="keywordflow">case</span> 3: <span class="comment">// 24 bpp</span>00194 {00195 Uint32 PixelColor = <a class="code" href="classwGui_1_1CPainter.html#b2">MixColor</a>(<a class="code" href="classwGui_1_1CPainter.html#a8">ReadPoint</a>(Point), PointColor).<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format);00196 Uint8* pPixelSource = reinterpret_cast<Uint8*>(&PixelColor);00197 Uint8* pPixelDest = reinterpret_cast<Uint8*>(PixelOffset);00198 *pPixelDest = *pPixelSource;00199 *(++pPixelDest) = *(++pPixelSource);00200 *(++pPixelDest) = *(++pPixelSource);00201 <span class="keywordflow">break</span>;00202 }00203 <span class="keywordflow">case</span> 4: <span class="comment">// 32 bpp</span>00204 *reinterpret_cast<Uint32*>(PixelOffset) = static_cast<Uint32>(<a class="code" href="classwGui_1_1CPainter.html#b2">MixColor</a>(<a class="code" href="classwGui_1_1CPainter.html#a8">ReadPoint</a>(Point), PointColor).<a class="code" href="classwGui_1_1CRGBColor.html#a2">SDLColor</a>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format));00205 <span class="keywordflow">break</span>;00206 <span class="keywordflow">default</span>:00207 <span class="keywordflow">throw</span>(<a class="code" href="classwGui_1_1Wg__Ex__SDL.html">Wg_Ex_SDL</a>(<span class="stringliteral">"CPainter::DrawPoint : Unrecognized BytesPerPixel."</span>));00208 <span class="keywordflow">break</span>;00209 }00210 <a class="code" href="classwGui_1_1CPainter.html#b1">UnlockSurface</a>();00211 }00212 }00213 00214 <a name="l00215"></a><a class="code" href="classwGui_1_1CPainter.html#a8">00215</a> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a> CPainter::ReadPoint(<span class="keyword">const</span> <a class="code" href="classwGui_1_1CPoint.html">CPoint</a>& Point)00216 {00217 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> RealPoint = (<a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a> != 0) ? Point + <a class="code" href="classwGui_1_1CPainter.html#n1">m_pWindow</a>-><a class="code" href="classwGui_1_1CWindow.html#a5">GetClientRect</a>().<a class="code" href="classwGui_1_1CRect.html#a13">TopLeft</a>() : Point;00218 Uint32 PixelColor = 0;00219 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CRect.html">CRect</a>(0, 0, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->w, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->h).HitTest(RealPoint) == CRect::RELPOS_INSIDE)00220 {00221 Uint8* PixelOffset = static_cast<Uint8*>(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->pixels) +00222 <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->format->BytesPerPixel * RealPoint.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>->pitch * RealPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -