void G2DTestSystemDriver::SetupFrame () { if (state_sptr == 0) { EventOutlet->Broadcast (csevQuit (object_reg)); return; } appState curstate = state [state_sptr - 1]; switch (curstate) { case stInit: case stStartup: case stContextInfo: case stWindowFixed: case stWindowResize: case stCustomCursor: case stCustomIcon: case stAlphaTest: case stTestUnicode1: case stTestUnicode2: case stTestFreetype: case stTestLineDraw: case stTestLinePerf: case stTestTextDraw: case stTestTextDraw2: case stPixelClipTest: case stLineClipTest: case stBoxClipTest: case stFontClipTest: case stBlitTest: { if (!myG3D->BeginDraw (CSDRAW_2DGRAPHICS)) break; myG2D->Clear (black); LeaveState (); switch (curstate) { case stInit: fontLarge = GetFont (CSFONT_LARGE); fontItalic = GetFont (CSFONT_ITALIC); fontCourier = GetFont (CSFONT_COURIER); fontSmall = GetFont (CSFONT_SMALL); { csRef<iVFS> vfs = csQueryRegistry<iVFS> (object_reg); csRef<iImageIO> iio = csQueryRegistry<iImageIO> (object_reg); if (vfs.IsValid () && iio.IsValid ()) { csRef<iFile> testFile = vfs->Open ("/lib/g2dtest/up.png", VFS_FILE_READ); if (testFile.IsValid ()) { csRef<iDataBuffer> fileData = testFile->GetAllData (); blitTestImage = iio->Load (fileData, CS_IMGFMT_TRUECOLOR | CS_IMGFMT_ALPHA); } testFile = vfs->Open ("/lib/std/cslogo2.png", VFS_FILE_READ); if (testFile.IsValid ()) { csRef<iDataBuffer> fileData = testFile->GetAllData (); alphaBlitImage = iio->Load (fileData, CS_IMGFMT_TRUECOLOR | CS_IMGFMT_ALPHA); } } } EnterState (stStartup); break; case stStartup: DrawStartupScreen (); EnterState (stContextInfo); EnterState (stPause, 5000); break; case stContextInfo: DrawContextInfoScreen (); EnterState (stWindowFixed); EnterState (stWaitKey); break; case stWindowFixed: DrawWindowScreen (); EnterState (stWindowResize); EnterState (stWaitKey); break; case stWindowResize: DrawWindowResizeScreen (); EnterState (stCustomCursor); EnterState (stWaitKey); break; case stCustomCursor: DrawCustomCursorScreen (); SetCustomCursor (); if (lastkey9) EnterState (stCustomIcon); else EnterState (stCustomCursor); break; case stCustomIcon: SetNormalCursor (); SetCustomIcon (); DrawCustomIconScreen (); EnterState (stAlphaTest); EnterState (stWaitKey); break; case stAlphaTest: DrawAlphaTestScreen (); EnterState (stTestUnicode1); EnterState (stWaitKey); break; case stTestUnicode1: DrawUnicodeTest1 (); EnterState (stTestUnicode2); EnterState (stWaitKey); break; case stTestUnicode2: DrawUnicodeTest2 (); EnterState (stTestFreetype); EnterState (stWaitKey); break; case stTestFreetype: DrawFreetypeTest (); EnterState (stTestLineDraw); EnterState (stWaitKey); break; case stTestLineDraw: DrawLineTest (); EnterState (stTestLinePerf); EnterState (stWaitKey); break; case stTestLinePerf: DrawLinePerf (); if (lastkey2) EnterState (stTestTextDraw); else EnterState (stTestLinePerf); break; case stTestTextDraw: DrawTextTest (); if (lastkey3) EnterState (stTestTextDraw2); else EnterState (stTestTextDraw); break; case stTestTextDraw2: DrawTextTest2 (); if (lastkey4) EnterState (stPixelClipTest); else EnterState (stTestTextDraw2); break; case stPixelClipTest: PixelClipTest (); if (lastkey5) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stLineClipTest); } else EnterState (stPixelClipTest); break; case stLineClipTest: LineClipTest (); if (lastkey6) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stBoxClipTest); } else EnterState (stLineClipTest); break; case stBoxClipTest: BoxClipTest (); if (lastkey7) { myG2D->SetClipRect(0,0,myG2D->GetWidth(), myG2D->GetHeight()); EnterState (stFontClipTest); } else EnterState (stBoxClipTest); break; case stFontClipTest: FontClipTest (); if (lastkey8) EnterState (stBlitTest); else EnterState (stFontClipTest); break; case stBlitTest: BlitTest (); EnterState (stWaitKey); break; default: break; } break; } case stPause: if (int (csGetTicks () - timer) > 0) LeaveState (); else csSleep (1); break; case stWaitKey: if (lastkey) { LeaveState (); SwitchBB = false; } else { if (SwitchBB) { myG2D->Print (0); csSleep (200); } else csSleep (1); } break; } }
void CKey::OnLButtonUp(const UINT nFlags, CPoint point) { if (m_nKeyType == PUSHED_KEY) { SetKeyType(NORMAL_KEY); } CKeyboardLayout *parent = reinterpret_cast<CKeyboardLayout *>(GetParent()); ClientToScreen(&point); if (m_nKeyType == REMAPPED_PUSHED_KEY) { if (m_nKey == parent->GetPointedKey(point)) { KeyboardLayout *pKeyboardLayout = parent->GetKeyboardLayout(m_nKey); if (pKeyboardLayout) { CString szWindowText; parent->GetDlgItem(pKeyboardLayout->nBaseControlID)->GetWindowText(szWindowText); SetWindowText(szWindowText); parent->ToolTip()->UpdateTipText(parent->GetToolTipID(pKeyboardLayout->nToolTipID), this); ScanCodeMapping mapping = {{0, 0}, {pKeyboardLayout->scancode.nScanCode, pKeyboardLayout->scancode.nPrefix}}; parent->SetScanCodeMap(m_HkeyType, mapping); } SetKeyType(ORIGINAL_KEY); } else { SetKeyType(REMAPPED_KEY); } } int nPointedKey = parent->GetPointedKey(point); if (m_nDroppableKey && nPointedKey) { if (m_nDroppableKey != nPointedKey) { reinterpret_cast<CKey*>(parent->GetDlgItem(m_nDroppableKey))->SetKeyType(m_nDroppableKeyType); if (IsDroppableKey(nPointedKey)) { m_nDroppableKey = nPointedKey; } else { m_nDroppableKey = 0; } } if (m_nDroppableKey) { KeyboardLayout *pKeyboardLayout = parent->GetKeyboardLayout(m_nDroppableKey); KeyboardLayout *pBaseKeyboardLayout = parent->GetKeyboardLayout(m_nKey); if (pKeyboardLayout && pBaseKeyboardLayout) { CString szWindowText; GetWindowText(szWindowText); parent->GetDlgItem(pKeyboardLayout->nCurrentControlID)->SetWindowText(szWindowText); parent->ToolTip()->UpdateTipText(parent->GetToolTipID(pBaseKeyboardLayout->nToolTipID), parent->GetDlgItem(pKeyboardLayout->nCurrentControlID)); reinterpret_cast<CKey *>(parent->GetDlgItem(pKeyboardLayout->nBaseControlID))->SetKeyType(NORMAL_KEY); reinterpret_cast<CKey*>(parent->GetDlgItem(pKeyboardLayout->nCurrentControlID))->SetKeyType(REMAPPED_KEY); ScanCodeMapping mapping = {{pBaseKeyboardLayout->scancode.nScanCode, pBaseKeyboardLayout->scancode.nPrefix}, {pKeyboardLayout->scancode.nScanCode, pKeyboardLayout->scancode.nPrefix}}; parent->SetScanCodeMap(m_HkeyType, mapping); } } } m_nDroppableKey = 0; m_nDroppableKeyType = NORMAL_KEY; SetNormalCursor(); CButton::OnLButtonUp(nFlags, point); }