📄 emulator.cpp
字号:
{ wxString msg; msg.Printf( _T("wxEmulator is an environment for testing embedded X11 apps.\n")); wxMessageBox(msg, _T("About wxEmulator"), wxOK | wxICON_INFORMATION, this);}void wxEmulatorFrame::OnCloseWindow(wxCloseEvent& WXUNUSED(event)){#ifdef __WXX11__ if (wxGetApp().m_xnestWindow) { wxGetApp().m_xnestWindow->SetHandle((WXWindow) NULL); }#endif this->Destroy(); if (wxGetApp().m_xnestPID > 0) { wxKill(wxGetApp().m_xnestPID); wxGetApp().m_xnestPID = 0; }}IMPLEMENT_CLASS(wxEmulatorContainer, wxWindow)BEGIN_EVENT_TABLE(wxEmulatorContainer, wxWindow) EVT_SIZE(wxEmulatorContainer::OnSize) EVT_PAINT(wxEmulatorContainer::OnPaint) EVT_ERASE_BACKGROUND(wxEmulatorContainer::OnEraseBackground)END_EVENT_TABLE()wxEmulatorContainer::wxEmulatorContainer(wxWindow* parent, wxWindowID id): wxWindow(parent, id, wxDefaultPosition, wxDefaultSize){}void wxEmulatorContainer::OnSize(wxSizeEvent& WXUNUSED(event)){ DoResize();}void wxEmulatorContainer::DoResize(){ wxSize sz = GetClientSize(); if (wxGetApp().m_xnestWindow#ifdef __WXX11__ && wxGetApp().m_xnestWindow->GetMainWindow()#endif ) { int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x; int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y; int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0)); int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0)); x += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.x; y += wxGetApp().m_emulatorInfo.m_emulatorScreenPosition.y; wxGetApp().m_xnestWindow->Move(x, y); } Refresh();}void wxEmulatorContainer::OnPaint(wxPaintEvent& WXUNUSED(event)){ wxPaintDC dc(this); wxSize sz = GetClientSize(); if (wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap.Ok()) { int deviceWidth = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.x; int deviceHeight = wxGetApp().m_emulatorInfo.m_emulatorDeviceSize.y; int x = wxMax(0, (int) ((sz.x - deviceWidth)/2.0)); int y = wxMax(0, (int) ((sz.y - deviceHeight)/2.0)); dc.DrawBitmap(wxGetApp().m_emulatorInfo.m_emulatorBackgroundBitmap, x, y); }}void wxEmulatorContainer::OnEraseBackground(wxEraseEvent& event){ wxDC* dc wxDUMMY_INITIALIZE(NULL); if (event.GetDC()) { dc = event.GetDC(); } else { dc = new wxClientDC(this); } dc->SetBackground(wxBrush(wxGetApp().m_emulatorInfo.m_emulatorBackgroundColour, wxSOLID)); dc->Clear(); if (!event.GetDC()) delete dc;}// Information about the emulator decorationsvoid wxEmulatorInfo::Copy(const wxEmulatorInfo& info){ m_emulatorFilename = info.m_emulatorFilename; m_emulatorTitle = info.m_emulatorTitle; m_emulatorDescription = info.m_emulatorDescription; m_emulatorScreenPosition = info.m_emulatorScreenPosition; m_emulatorScreenSize = info.m_emulatorScreenSize; m_emulatorBackgroundBitmap = info.m_emulatorBackgroundBitmap; m_emulatorBackgroundBitmapName = info.m_emulatorBackgroundBitmapName; m_emulatorBackgroundColour = info.m_emulatorBackgroundColour; m_emulatorDeviceSize = info.m_emulatorDeviceSize;}// Initialisationvoid wxEmulatorInfo::Init(){ m_emulatorDeviceSize = wxSize(260, 340); m_emulatorScreenSize = wxSize(240, 320);}// Loads bitmapsbool wxEmulatorInfo::Load(const wxString& appDir){ // Try to find absolute path wxString absoluteConfigPath = m_emulatorFilename; if ( !::wxIsAbsolutePath(absoluteConfigPath) ) { wxString currDir = wxGetCwd(); absoluteConfigPath = currDir + wxString(wxFILE_SEP_PATH) + m_emulatorFilename; if ( !wxFile::Exists(absoluteConfigPath) ) { absoluteConfigPath = appDir + wxString(wxFILE_SEP_PATH) + m_emulatorFilename; } } if ( !wxFile::Exists(absoluteConfigPath) ) { wxString str; str.Printf( wxT("Could not find config file %s"), absoluteConfigPath.c_str() ); wxMessageBox(str); return false; } wxString rootPath = wxPathOnly(absoluteConfigPath); { wxFileConfig config(wxT("wxEmulator"), wxT("wxWidgets"), absoluteConfigPath, wxEmptyString, wxCONFIG_USE_LOCAL_FILE); config.Read(wxT("/General/title"), & m_emulatorTitle); config.Read(wxT("/General/description"), & m_emulatorDescription); config.Read(wxT("/General/backgroundBitmap"), & m_emulatorBackgroundBitmapName); wxString colString; if (config.Read(wxT("/General/backgroundColour"), & colString) || config.Read(wxT("/General/backgroundColor"), & colString) ) { m_emulatorBackgroundColour = wxHexStringToColour(colString); } int x = 0, y = 0, w = 0, h = 0, dw = 0, dh = 0; config.Read(wxT("/General/screenX"), & x); config.Read(wxT("/General/screenY"), & y); config.Read(wxT("/General/screenWidth"), & w); config.Read(wxT("/General/screenHeight"), & h); if (config.Read(wxT("/General/deviceWidth"), & dw) && config.Read(wxT("/General/deviceHeight"), & dh)) { m_emulatorDeviceSize = wxSize(dw, dh); } m_emulatorScreenPosition = wxPoint(x, y); m_emulatorScreenSize = wxSize(w, h); } if (!m_emulatorBackgroundBitmapName.empty()) { wxString absoluteBackgroundBitmapName = rootPath + wxString(wxFILE_SEP_PATH) + m_emulatorBackgroundBitmapName; if ( !wxFile::Exists(absoluteBackgroundBitmapName) ) { wxString str; str.Printf( wxT("Could not find bitmap %s"), absoluteBackgroundBitmapName.c_str() ); wxMessageBox(str); return false; } wxBitmapType type = wxDetermineImageType(m_emulatorBackgroundBitmapName); if (type == wxBITMAP_TYPE_INVALID) return false; if (!m_emulatorBackgroundBitmap.LoadFile(m_emulatorBackgroundBitmapName, type)) { wxString str; str.Printf( wxT("Could not load bitmap file %s"), m_emulatorBackgroundBitmapName.c_str() ); wxMessageBox(str); return false; } m_emulatorDeviceSize = wxSize(m_emulatorBackgroundBitmap.GetWidth(), m_emulatorBackgroundBitmap.GetHeight()); } return true;}// Returns the image type, or -1, determined from the extension.wxBitmapType wxDetermineImageType(const wxString& filename){ wxString path, name, ext; wxSplitPath(filename, & path, & name, & ext); ext.MakeLower(); if (ext == _T("jpg") || ext == _T("jpeg")) return wxBITMAP_TYPE_JPEG; if (ext == _T("gif")) return wxBITMAP_TYPE_GIF; if (ext == _T("bmp")) return wxBITMAP_TYPE_BMP; if (ext == _T("png")) return wxBITMAP_TYPE_PNG; if (ext == _T("pcx")) return wxBITMAP_TYPE_PCX; if (ext == _T("tif") || ext == _T("tiff")) return wxBITMAP_TYPE_TIF; return wxBITMAP_TYPE_INVALID;}// Convert a colour to a 6-digit hex stringwxString wxColourToHexString(const wxColour& col){ wxString hex; hex += wxDecToHex(col.Red()); hex += wxDecToHex(col.Green()); hex += wxDecToHex(col.Blue()); return hex;}// Convert 6-digit hex string to a colourwxColour wxHexStringToColour(const wxString& hex){ unsigned char r = (unsigned char)wxHexToDec(hex.Mid(0, 2)); unsigned char g = (unsigned char)wxHexToDec(hex.Mid(2, 2)); unsigned char b = (unsigned char)wxHexToDec(hex.Mid(4, 2)); return wxColour(r, g, b);}// Find the absolute path where this application has been run from.// argv0 is wxTheApp->argv[0]// cwd is the current working directory (at startup)// appVariableName is the name of a variable containing the directory for this app, e.g.// MYAPPDIR. This is checked first.wxString wxFindAppPath(const wxString& argv0, const wxString& cwd, const wxString& appVariableName){ wxString str; // Try appVariableName if (!appVariableName.empty()) { str = wxGetenv(appVariableName); if (!str.empty()) return str; } if (wxIsAbsolutePath(argv0)) return wxPathOnly(argv0); else { // Is it a relative path? wxString currentDir(cwd); if (!wxEndsWithPathSeparator(currentDir)) currentDir += wxFILE_SEP_PATH; str = currentDir + argv0; if ( wxFile::Exists(str) ) return wxPathOnly(str); } // OK, it's neither an absolute path nor a relative path. // Search PATH. wxPathList pathList; pathList.AddEnvList(wxT("PATH")); str = pathList.FindAbsoluteValidPath(argv0); if (!str.empty()) return wxPathOnly(str); // Failed return wxEmptyString;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -