📄 wg__editbox_8cpp-source.html
字号:
00287 <span class="keywordflow">if</span> (pMouseMessage && <a class="code" href="classwGui_1_1CWindow.html#n7">m_bVisible</a> && !<a class="code" href="classwGui_1_1CEditBox.html#n7">m_bReadOnly</a>)00288 {00289 <span class="comment">//If the cursor is within the control then check to see if we've already</span>00290 <span class="comment">// set the cursor to the I Beam, if we have, don't do anything. If we</span>00291 <span class="comment">// havent, set it to the ibeam.</span>00292 <span class="comment">//Else if it's outside the control and the I Beam cursor is set, set it</span>00293 <span class="comment">// back to a normal cursor.</span>00294 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CWindow.html#n1">m_WindowRect</a>.<a class="code" href="classwGui_1_1CRect.html#a32">HitTest</a>(pMouseMessage-><a class="code" href="classwGui_1_1CMouseMessage.html#m0">Point</a>) == CRect::RELPOS_INSIDE && !<a class="code" href="classwGui_1_1CEditBox.html#n10">m_bLastMouseMoveInside</a>)00295 {00296 <a class="code" href="classwGui_1_1CEditBox.html#n10">m_bLastMouseMoveInside</a> = <span class="keyword">true</span>;00297 <a class="code" href="classwGui_1_1CwgCursorResourceHandle.html">CwgCursorResourceHandle</a> IBeamHandle(WGRES_IBEAM_CURSOR);00298 CApplication::Instance()->SetMouseCursor(&IBeamHandle);00299 }00300 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CWindow.html#n1">m_WindowRect</a>.<a class="code" href="classwGui_1_1CRect.html#a32">HitTest</a>(pMouseMessage-><a class="code" href="classwGui_1_1CMouseMessage.html#m0">Point</a>) != CRect::RELPOS_INSIDE && <a class="code" href="classwGui_1_1CEditBox.html#n10">m_bLastMouseMoveInside</a>)00301 {00302 <a class="code" href="classwGui_1_1CEditBox.html#n10">m_bLastMouseMoveInside</a>= <span class="keyword">false</span>;00303 CApplication::Instance()->SetMouseCursor();00304 }00305 00306 <span class="keywordflow">if</span> (m_bMouseDown)00307 {00308 <a class="code" href="classwGui_1_1CPoint.html">CPoint</a> Offset;00309 std::vector<CRect> CharRects;00310 <a class="code" href="classwGui_1_1CEditBox.html#n1">m_pRenderedString</a>->GetMetrics(0, &Offset, &CharRects);00311 00312 <span class="keywordtype">int</span> xDelta = abs(pMouseMessage-><a class="code" href="classwGui_1_1CMouseMessage.html#m0">Point</a>.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() - (CharRects[0].Left() + Offset.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + SubRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>() + <a class="code" href="classwGui_1_1CEditBox.html#n6">m_ScrollOffset</a>));00313 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> CursorPos = 0;00314 <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i < <a class="code" href="classwGui_1_1CEditBox.html#n1">m_pRenderedString</a>->GetLength(); ++i)00315 {00316 <span class="keywordflow">if</span> (abs(pMouseMessage-><a class="code" href="classwGui_1_1CMouseMessage.html#m0">Point</a>.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() - (CharRects[i].Right() + Offset.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + SubRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>() + <a class="code" href="classwGui_1_1CEditBox.html#n6">m_ScrollOffset</a>)) < xDelta)00317 {00318 xDelta = abs(pMouseMessage-><a class="code" href="classwGui_1_1CMouseMessage.html#m0">Point</a>.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() - (CharRects[i].Right() + Offset.<a class="code" href="classwGui_1_1CPoint.html#a6">XPos</a>() + SubRect.<a class="code" href="classwGui_1_1CRect.html#a10">Left</a>() + <a class="code" href="classwGui_1_1CEditBox.html#n6">m_ScrollOffset</a>));00319 CursorPos = i + 1;00320 }00321 }00322 00323 <span class="keywordflow">if</span> (CursorPos < <a class="code" href="classwGui_1_1CEditBox.html#n5">m_DragStart</a>)00324 {00325 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = <a class="code" href="classwGui_1_1CEditBox.html#n5">m_DragStart</a> - CursorPos;00326 <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> = CursorPos;00327 }00328 <span class="keywordflow">else</span>00329 {00330 <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> = <a class="code" href="classwGui_1_1CEditBox.html#n5">m_DragStart</a>;00331 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = CursorPos - <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a>;00332 }00333 bHandled = <span class="keyword">true</span>;00334 <a class="code" href="classwGui_1_1CWindow.html#a23">StartDrawProc</a>();00335 }00336 }00337 <span class="keywordflow">break</span>;00338 }00339 <span class="keywordflow">case</span> CMessage::KEYBOARD_KEYDOWN:00340 <span class="keywordflow">if</span> (m_bVisible)00341 {00342 <a class="code" href="classwGui_1_1CKeyboardMessage.html">CKeyboardMessage</a>* pKeyboardMessage = dynamic_cast<CKeyboardMessage*>(pMessage);00343 <span class="keywordflow">if</span> (pKeyboardMessage && pMessage-><a class="code" href="classwGui_1_1CMessage.html#a3">Destination</a>() == <span class="keyword">this</span> && !<a class="code" href="classwGui_1_1CEditBox.html#n7">m_bReadOnly</a>)00344 {00345 std::string sBuffer = <a class="code" href="classwGui_1_1CWindow.html#n0">m_sWindowText</a>;00346 00347 <span class="keywordflow">switch</span>(pKeyboardMessage-><a class="code" href="classwGui_1_1CKeyboardMessage.html#m2">Key</a>)00348 {00349 <span class="keywordflow">case</span> SDLK_BACKSPACE:00350 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> > 0)00351 {00352 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> > 0)00353 {00354 <a class="code" href="classwGui_1_1CEditBox.html#b0">SelDelete</a>(&sBuffer);00355 }00356 <span class="keywordflow">else</span>00357 {00358 sBuffer.erase(--<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a>, 1);00359 }00360 }00361 <span class="keywordflow">break</span>;00362 00363 <span class="keywordflow">case</span> SDLK_DELETE:00364 <span class="keywordflow">if</span> (static_cast<unsigned int>(m_SelStart) < sBuffer.length())00365 {00366 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> > 0)00367 {00368 <a class="code" href="classwGui_1_1CEditBox.html#b0">SelDelete</a>(&sBuffer);00369 }00370 <span class="keywordflow">else</span>00371 {00372 sBuffer.erase(<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a>, 1);00373 }00374 }00375 <span class="keywordflow">break</span>;00376 00377 <span class="keywordflow">case</span> SDLK_LEFT:00378 <span class="keywordflow">if</span> (pKeyboardMessage-><a class="code" href="classwGui_1_1CKeyboardMessage.html#m1">Modifiers</a> & KMOD_SHIFT) <span class="comment">//Shift modifier</span>00379 {00380 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> > 0)00381 {00382 <span class="keywordflow">if</span> ((<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> > 0) || ((<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> - abs(<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a>)) > 0))00383 {00384 <span class="keywordflow">if</span> (pKeyboardMessage-><a class="code" href="classwGui_1_1CKeyboardMessage.html#m1">Modifiers</a> & KMOD_CTRL)00385 {00386 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pos = static_cast<unsigned int>(sBuffer.rfind(<span class="stringliteral">" "</span>, (<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> + <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a>) - 1));00387 <span class="keywordflow">if</span> (pos != std::string::npos)00388 {00389 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = pos - <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a>;00390 }00391 <span class="keywordflow">else</span>00392 {00393 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> * -1;00394 }00395 }00396 <span class="keywordflow">else</span>00397 {00398 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a>--;00399 }00400 }00401 }00402 }00403 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> != 0)00404 {00405 <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> < 0)00406 {00407 <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> = <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> + <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a>;00408 }00409 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = 0;00410 00411 }00412 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> > 0)00413 {00414 <span class="keywordflow">if</span> (pKeyboardMessage-><a class="code" href="classwGui_1_1CKeyboardMessage.html#m1">Modifiers</a> & KMOD_CTRL)00415 {00416 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pos = static_cast<unsigned int>(sBuffer.rfind(<span class="stringliteral">" "</span>, <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> - 1));00417 <span class="keywordflow">if</span> (pos != std::string::npos)00418 {00419 <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> = pos;00420 }00421 <span class="keywordflow">else</span>00422 {00423 <a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a> = 0;00424 }00425 }00426 <span class="keywordflow">else</span>00427 {00428 --<a class="code" href="classwGui_1_1CEditBox.html#n3">m_SelStart</a>;00429 }00430 <a class="code" href="classwGui_1_1CEditBox.html#n4">m_SelLength</a> = 0;00431 }00432 <span class="keywordflow">break</span>;00433 <span class="keywordflow">case</span> SDLK_RIGHT:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -