⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wg__painter_8cpp-source.html

📁 一个小巧的嵌入式图形系统wGUI, 可以用VC编译
💻 HTML
📖 第 1 页 / 共 3 页
字号:
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&lt;short int&gt;(x);00115      Rect.y = static_cast&lt;short int&gt;(std::min(yStart, yEnd));00116      Rect.w = 1;00117      Rect.h = static_cast&lt;short int&gt;(std::max(yEnd - yStart + 1, yStart - yEnd + 1));00118      SDL_FillRect(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>, &amp;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>-&gt;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>&amp; Rect, <span class="keywordtype">bool</span> bFilled, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>&amp; BorderColor, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>&amp; 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>-&gt;<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>-&gt;<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>, &amp;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>-&gt;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>&amp; Point1, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CPoint.html">CPoint</a>&amp; Point2, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>&amp; 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 &lt;= 1 &amp;&amp; iSlope &gt;= -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>() &lt; 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>() &lt; 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 &lt;= 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&lt;int&gt;(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>() &lt; 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>() &lt; 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 &lt;= 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&lt;int&gt;(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>&amp; Point, <span class="keyword">const</span> <a class="code" href="classwGui_1_1CRGBColor.html">CRGBColor</a>&amp; 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>-&gt;<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>-&gt;w, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;h).HitTest(RealPoint) == CRect::RELPOS_INSIDE)00181      {00182           <a class="code" href="classwGui_1_1CPainter.html#b0">LockSurface</a>();00183           Uint8* PixelOffset = static_cast&lt;Uint8*&gt;(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;pixels) +00184                <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;format-&gt;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>-&gt;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>-&gt;format-&gt;BytesPerPixel)00186           {00187           <span class="keywordflow">case</span> 1: <span class="comment">// 8 bpp</span>00188                *reinterpret_cast&lt;Uint8*&gt;(PixelOffset) = static_cast&lt;Uint8&gt;(<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>-&gt;format));00189                <span class="keywordflow">break</span>;00190           <span class="keywordflow">case</span> 2: <span class="comment">// 16 bpp</span>00191                *reinterpret_cast&lt;Uint16*&gt;(PixelOffset) = static_cast&lt;Uint16&gt;(<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>-&gt;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>-&gt;format);00196                Uint8* pPixelSource = reinterpret_cast&lt;Uint8*&gt;(&amp;PixelColor);00197                Uint8* pPixelDest = reinterpret_cast&lt;Uint8*&gt;(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&lt;Uint32*&gt;(PixelOffset) = static_cast&lt;Uint32&gt;(<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>-&gt;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>&amp; 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>-&gt;<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>-&gt;w, <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;h).HitTest(RealPoint) == CRect::RELPOS_INSIDE)00220      {00221           Uint8* PixelOffset = static_cast&lt;Uint8*&gt;(<a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;pixels) +00222                <a class="code" href="classwGui_1_1CPainter.html#n0">m_pSurface</a>-&gt;format-&gt;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>-&gt;pitch * RealPoint.<a class="code" href="classwGui_1_1CPoint.html#a7">YPos</a>();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -