wxFontRefData::~wxFontRefData() { wxLogTrace("mgl_font", "destructing fntrefdata %p, library is %p", this, m_library); if ( m_library ) m_library->DecRef(); }
S3D::SGTYPES S3D::ReadTag( std::istream& aFile, std::string& aName ) { char schar; aFile.get( schar ); if( '[' != schar ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] corrupt data; missing left bracket at position "; ostr << aFile.tellg(); wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return S3D::SGTYPE_END; } std::string name; aFile.get( schar ); while( ']' != schar && aFile.good() ) { name.push_back( schar ); aFile.get( schar ); } if( schar != ']' ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] corrupt data; could not find right bracket"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return S3D::SGTYPE_END; } aName = name; size_t upos = name.find( '_' ); if( std::string::npos == upos ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] corrupt data; no underscore in name '"; ostr << name << "'"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return S3D::SGTYPE_END; } name = name.substr( 0, upos ); S3D::SGTYPES types[S3D::SGTYPE_END] = { SGTYPE_TRANSFORM, SGTYPE_APPEARANCE, SGTYPE_COLORS, SGTYPE_COLORINDEX, SGTYPE_FACESET, SGTYPE_COORDS, SGTYPE_COORDINDEX, SGTYPE_NORMALS, SGTYPE_SHAPE }; for( int i = 0; i < S3D::SGTYPE_END; ++i ) { if( !name.compare( S3D::GetNodeTypeName( types[i] ) ) ) return types[i]; } #ifdef DEBUG do { std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] corrupt data; no node type matching '"; ostr << name << "'"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); } while( 0 ); #endif return S3D::SGTYPE_END; }
void PNS_KICAD_IFACE::UpdateNet( int aNetCode ) { wxLogTrace( "PNS", "Update-net %d", aNetCode ); }
bool SCH_EDIT_FRAME::LoadOneEEFile( SCH_SCREEN* aScreen, const wxString& aFullFileName, bool append ) { char name1[256]; bool itemLoaded = false; SCH_ITEM* item; wxString msgDiag; // Error and log messages char* line; wxFileName fn; if( aScreen == NULL ) return false; if( aFullFileName.IsEmpty() ) return false; fn = aFullFileName; CheckForAutoSaveFile( fn, SchematicBackupFileExtension ); wxLogTrace( traceAutoSave, wxT( "Loading schematic file " ) + aFullFileName ); aScreen->SetCurItem( NULL ); if( !append ) aScreen->SetFileName( aFullFileName ); wxString fname = Prj().AbsolutePath( aFullFileName ); #ifdef __WINDOWS__ fname.Replace( wxT("/"), wxT("\\") ); #else fname.Replace( wxT("\\"), wxT("/") ); #endif FILE* f = wxFopen( fname, wxT( "rt" ) ); if( !f ) { msgDiag.Printf( _( "Failed to open '%s'" ), GetChars( aFullFileName ) ); DisplayError( this, msgDiag ); return false; } // reader now owns the open FILE. FILE_LINE_READER reader( f, aFullFileName ); msgDiag.Printf( _( "Loading '%s'" ), GetChars( aScreen->GetFileName() ) ); PrintMsg( msgDiag ); if( !reader.ReadLine() || strncmp( (char*)reader + 9, SCHEMATIC_HEAD_STRING, sizeof( SCHEMATIC_HEAD_STRING ) - 1 ) != 0 ) { msgDiag.Printf( _( "'%s' is NOT an Eeschema file!" ), GetChars( aFullFileName ) ); DisplayError( this, msgDiag ); return false; } line = reader.Line(); // get the file version here. char *strversion = line + 9 + sizeof( SCHEMATIC_HEAD_STRING ); // Skip blanks while( *strversion && *strversion < '0' ) strversion++; int version = atoi( strversion ); if( version > EESCHEMA_VERSION ) { msgDiag.Printf( _( "'%s' was created by a more recent version of Eeschema and may not" " load correctly. Please consider updating!" ), GetChars( aFullFileName ) ); DisplayInfoMessage( this, msgDiag ); } #if 0 // Compile it if the new version is unreadable by previous Eeschema versions else if( version < EESCHEMA_VERSION ) { MsgDiag = aFullFileName + _( " was created by an older version of \ Eeschema. It will be stored in the new file format when you save this file \ again." ); DisplayInfoMessage( this, MsgDiag ); }
CWidgetUsage::~CWidgetUsage() { wxLogTrace(wxT("Function Start/End"), wxT("CWidgetUsage::~CWidgetUsage - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CWidgetUsage::~CWidgetUsage - Function End")); }
// once we get signaled to read, actuall event reading occurs void wxFSWSourceHandler::OnReadWaiting() { wxLogTrace(wxTRACE_FSWATCHER, "--- OnReadWaiting ---"); m_service->ReadEvents(); }
// set data functions STDMETHODIMP wxIDataObject::SetData(FORMATETC *pformatetc, STGMEDIUM *pmedium, BOOL fRelease) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::SetData")); switch ( pmedium->tymed ) { case TYMED_GDI: m_pDataObject->SetData(wxDF_BITMAP, 0, &pmedium->hBitmap); break; case TYMED_ENHMF: m_pDataObject->SetData(wxDF_ENHMETAFILE, 0, &pmedium->hEnhMetaFile); break; case TYMED_ISTREAM: // check if this format is supported if ( !m_pDataObject->IsSupported(pformatetc->cfFormat, wxDataObject::Set) ) { // As this is not a supported format (content data), assume it // is system data and save it. return SaveSystemData(pformatetc, pmedium, fRelease); } break; case TYMED_MFPICT: // fall through - we pass METAFILEPICT through HGLOBAL case TYMED_HGLOBAL: { wxDataFormat format = pformatetc->cfFormat; format = HtmlFormatFixup(format); // check if this format is supported if ( !m_pDataObject->IsSupported(format, wxDataObject::Set) ) { // As above, assume that unsupported format must be system // data and just save it. return SaveSystemData(pformatetc, pmedium, fRelease); } // copy data const void *pBuf = GlobalLock(pmedium->hGlobal); if ( pBuf == NULL ) { wxLogLastError(wxT("GlobalLock")); return E_OUTOFMEMORY; } // we've got a problem with SetData() here because the base // class version requires the size parameter which we don't // have anywhere in OLE data transfer - so we need to // synthetise it for known formats and we suppose that all data // in custom formats starts with a DWORD containing the size size_t size; switch ( format ) { case wxDF_HTML: case CF_TEXT: case CF_OEMTEXT: size = strlen((const char *)pBuf); break; #if !(defined(__BORLANDC__) && (__BORLANDC__ < 0x500)) case CF_UNICODETEXT: #if ( defined(__BORLANDC__) && (__BORLANDC__ > 0x530) ) size = std::wcslen((const wchar_t *)pBuf) * sizeof(wchar_t); #else size = wxWcslen((const wchar_t *)pBuf) * sizeof(wchar_t); #endif break; #endif case CF_BITMAP: #ifndef __WXWINCE__ case CF_HDROP: // these formats don't use size at all, anyhow (but // pass data by handle, which is always a single DWORD) size = 0; break; #endif case CF_DIB: // the handler will calculate size itself (it's too // complicated to do it here) size = 0; break; #ifndef __WXWINCE__ case CF_METAFILEPICT: size = sizeof(METAFILEPICT); break; #endif default: pBuf = m_pDataObject-> GetSizeFromBuffer(pBuf, &size, format); size -= m_pDataObject->GetBufferOffset(format); } bool ok = m_pDataObject->SetData(format, size, pBuf); GlobalUnlock(pmedium->hGlobal); if ( !ok ) { return E_UNEXPECTED; } } break; default: return DV_E_TYMED; } if ( fRelease ) { // we own the medium, so we must release it - but do *not* free any // data we pass by handle because we have copied it elsewhere switch ( pmedium->tymed ) { case TYMED_GDI: pmedium->hBitmap = 0; break; case TYMED_MFPICT: pmedium->hMetaFilePict = 0; break; case TYMED_ENHMF: pmedium->hEnhMetaFile = 0; break; } ReleaseStgMedium(pmedium); } return S_OK; }
WXDLLEXPORT void wxLogQueryInterface(const wxChar *szInterface, REFIID riid) { wxLogTrace(wxTRACE_OleCalls, wxT("%s::QueryInterface (iid = %s)"), szInterface, GetIidName(riid).c_str()); }
WXDLLEXPORT void wxLogAddRef(const wxChar *szInterface, ULONG cRef) { wxLogTrace(wxTRACE_OleCalls, wxT("After %s::AddRef: m_cRef = %d"), szInterface, cRef + 1); }
ITEM* TOOL_BASE::pickSingleItem( const VECTOR2I& aWhere, int aNet, int aLayer, bool aIgnorePads, const std::vector<ITEM*> aAvoidItems) { int tl = getView()->GetTopLayer(); if( aLayer > 0 ) tl = aLayer; static const int candidateCount = 5; ITEM* prioritized[candidateCount]; int dist[candidateCount]; for( int i = 0; i < candidateCount; i++ ) { prioritized[i] = 0; dist[i] = std::numeric_limits<int>::max(); } ITEM_SET candidates = m_router->QueryHoverItems( aWhere ); for( ITEM* item : candidates.Items() ) { if( !item->IsRoutable() ) continue; if( !IsCopperLayer( item->Layers().Start() ) ) continue; if( std::find( aAvoidItems.begin(), aAvoidItems.end(), item ) != aAvoidItems.end() ) continue; // fixme: this causes flicker with live loop removal... //if( item->Parent() && !item->Parent()->ViewIsVisible() ) // continue; if( aNet <= 0 || item->Net() == aNet ) { if( item->OfKind( ITEM::VIA_T | ITEM::SOLID_T ) ) { if( item->OfKind( ITEM::SOLID_T ) && aIgnorePads ) continue; int itemDist = ( item->Shape()->Centre() - aWhere ).SquaredEuclideanNorm(); if( !prioritized[2] || itemDist < dist[2] ) { prioritized[2] = item; dist[2] = itemDist; } if( item->Layers().Overlaps( tl ) && itemDist < dist[0] ) { prioritized[0] = item; dist[0] = itemDist; } } else { if( !prioritized[3] ) prioritized[3] = item; if( item->Layers().Overlaps( tl ) ) prioritized[1] = item; } } // Allow unconnected items as last resort in RM_MarkObstacles mode else if ( item->Net() == 0 && m_router->Settings().Mode() == RM_MarkObstacles ) { if( item->OfKind( ITEM::SOLID_T ) && aIgnorePads ) continue; if( item->Layers().Overlaps( tl ) ) prioritized[4] = item; } } ITEM* rv = NULL; for( int i = 0; i < candidateCount; i++ ) { ITEM* item = prioritized[i]; if( displayOptions()->m_ContrastModeDisplay ) if( item && !item->Layers().Overlaps( tl ) ) item = NULL; if( item && ( aLayer < 0 || item->Layers().Overlaps( aLayer ) ) ) { rv = item; break; } } if( rv ) { wxLogTrace( "PNS", "%s, layer : %d, tl: %d", rv->KindStr().c_str(), rv->Layers().Start(), tl ); } return rv; }
bool CBOINCGUIApp::SetActiveGUI(int iGUISelection, bool bShowWindow) { wxLogTrace(wxT("Function Start/End"), wxT("CBOINCGUIApp::SetActiveGUI - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CBOINCGUIApp::SetActiveGUI - GUI Selection: '%d', Show: %d'"), iGUISelection, (int)bShowWindow); CBOINCBaseFrame* pNewFrame = NULL; CBOINCBaseFrame* pOldFrame = m_pFrame; wxInt32 iTop = 0; wxInt32 iLeft = 0; wxInt32 iHeight = 0; wxInt32 iWidth = 0; // Create the new window if ((iGUISelection != m_iGUISelected) || !m_pFrame) { // Retrieve the desired window state before creating the // desired frames if (BOINC_ADVANCEDGUI == iGUISelection) { m_pConfig->SetPath(wxT("/")); m_pConfig->Read(wxT("YPos"), &iTop, 30); m_pConfig->Read(wxT("XPos"), &iLeft, 30); m_pConfig->Read(wxT("Width"), &iWidth, 800); m_pConfig->Read(wxT("Height"), &iHeight, 600); // Guard against a rare situation where registry values are zero if (iWidth < 50) iWidth = 800; if (iHeight < 50) iHeight = 600; } else { m_pConfig->SetPath(wxT("/Simple")); m_pConfig->Read(wxT("YPos"), &iTop, 30); m_pConfig->Read(wxT("XPos"), &iLeft, 30); // We don't save Simple View's width & height since it's // window is not resizable, so don't try to read them #ifdef __WXMAC__ // m_pConfig->Read(wxT("Width"), &iWidth, 409); // m_pConfig->Read(wxT("Height"), &iHeight, 561); iWidth = 409; iHeight = 561; #else // m_pConfig->Read(wxT("Width"), &iWidth, 416); // m_pConfig->Read(wxT("Height"), &iHeight, 570); iWidth = 416; iHeight = 570; #endif } // Make sure that the new window is going to be visible // on a screen #ifdef __WXMAC__ if (!IsWindowOnScreen(iLeft, iTop, iWidth, iHeight)) { iTop = iLeft = 30; } #else // If either co-ordinate is less then 0 then set it equal to 0 to ensure // it displays on the screen. if ( iLeft < 0 ) iLeft = 30; if ( iTop < 0 ) iTop = 30; // Read the size of the screen wxInt32 iMaxWidth = wxSystemSettings::GetMetric( wxSYS_SCREEN_X ); wxInt32 iMaxHeight = wxSystemSettings::GetMetric( wxSYS_SCREEN_Y ); // Max sure that it doesn't go off to the right or bottom if ( iLeft + iWidth > iMaxWidth ) iLeft = iMaxWidth - iWidth; if ( iTop + iHeight > iMaxHeight ) iTop = iMaxHeight - iHeight; #endif // Create the main window // if (BOINC_ADVANCEDGUI == iGUISelection) { // Initialize the advanced gui window pNewFrame = new CAdvancedFrame( m_pSkinManager->GetAdvanced()->GetApplicationName(), m_pSkinManager->GetAdvanced()->GetApplicationIcon(), m_pSkinManager->GetAdvanced()->GetApplicationIcon32(), wxPoint(iLeft, iTop), wxSize(iWidth, iHeight) ); } else { // Initialize the simple gui window pNewFrame = new CSimpleFrame( m_pSkinManager->GetAdvanced()->GetApplicationName(), m_pSkinManager->GetAdvanced()->GetApplicationIcon(), m_pSkinManager->GetAdvanced()->GetApplicationIcon32(), wxPoint(iLeft, iTop), wxSize(iWidth, iHeight) ); } wxASSERT(pNewFrame); if (pNewFrame) { SetTopWindow(pNewFrame); // Store the new frame for future use m_pFrame = pNewFrame; // Hide the old one if it exists. We must do this // after updating m_pFrame to prevent Mac OSX from // hiding the application if (pOldFrame) pOldFrame->Hide(); // Delete the old one if it exists if (pOldFrame) pOldFrame->Destroy(); if (iGUISelection != m_iGUISelected) { m_iGUISelected = iGUISelection; m_pConfig->SetPath(wxT("/")); m_pConfig->Write(wxT("GUISelection"), iGUISelection); m_pConfig->Flush(); } } } // Show the new frame if needed if (m_pFrame && bShowWindow) { if (m_pEventLog) { m_pEventLog->Show(); m_pEventLog->Raise(); #ifdef __WXMSW__ ::SetForegroundWindow((HWND)m_pEventLog->GetHWND()); #endif } if (!m_pFrame->IsShown()) { m_pFrame->Show(); } if (m_pFrame->IsIconized()) { m_pFrame->Maximize(false); } m_pFrame->Raise(); #ifdef __WXMSW__ ::SetForegroundWindow((HWND)m_pFrame->GetHWND()); #endif } wxLogTrace(wxT("Function Start/End"), wxT("CBOINCGUIApp::SetActiveGUI - Function End")); return true; }
bool wxSetFocusToChild(wxWindow *win, wxWindow **childLastFocused) { wxCHECK_MSG( win, false, wxT("wxSetFocusToChild(): invalid window") ); // wxCHECK_MSG( childLastFocused, false, // wxT("wxSetFocusToChild(): NULL child poonter") ); if ( childLastFocused && *childLastFocused ) { // It might happen that the window got reparented if ( (*childLastFocused)->GetParent() == win ) { // And it also could have become hidden in the meanwhile // We want to focus on the deepest widget visible wxWindow *deepestVisibleWindow = NULL; while ( *childLastFocused ) { if ( (*childLastFocused)->IsShown() ) { if ( !deepestVisibleWindow ) deepestVisibleWindow = *childLastFocused; } else deepestVisibleWindow = NULL; *childLastFocused = (*childLastFocused)->GetParent(); } if ( deepestVisibleWindow ) { *childLastFocused = deepestVisibleWindow; wxLogTrace(TRACE_FOCUS, wxT("SetFocusToChild() => last child (0x%p)."), (*childLastFocused)->GetHandle()); // not SetFocusFromKbd(): we're restoring focus back to the old // window and not setting it as the result of a kbd action (*childLastFocused)->SetFocus(); return true; } } else { // it doesn't count as such any more *childLastFocused = NULL; } } // set the focus to the first child who wants it wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); while ( node ) { wxWindow *child = node->GetData(); node = node->GetNext(); // skip special windows: if ( !win->IsClientAreaChild(child) ) continue; if ( child->CanAcceptFocusFromKeyboard() && !child->IsTopLevel() ) { #if defined(__WXMSW__) && wxUSE_RADIOBTN // If a radiobutton is the first focusable child, search for the // selected radiobutton in the same group wxRadioButton* btn = wxDynamicCast(child, wxRadioButton); if (btn) { wxRadioButton* selected = wxGetSelectedButtonInGroup(btn); if (selected) child = selected; } #endif // __WXMSW__ wxLogTrace(TRACE_FOCUS, wxT("SetFocusToChild() => first child (0x%p)."), child->GetHandle()); if (childLastFocused) *childLastFocused = child; child->SetFocusFromKbd(); return true; } } return false; }
void CGarbageCollector::RecycleProjects() { BSLERRCODE rc; std::vector<CProject*> oProjects; std::vector<CApp*> oApps; std::vector<CAppVersion*> oAppVersions; std::vector<CTask*> oTasks; std::vector<CTaskInstance*> oTaskInstances; std::vector<CProject*>::iterator iterProjects; std::vector<CApp*>::iterator iterApps; std::vector<CAppVersion*>::iterator iterAppVersions; std::vector<CTask*>::iterator iterTasks; std::vector<CTaskInstance*>::iterator iterTaskInstances; CProject* pProject = NULL; CApp* pApp = NULL; CAppVersion* pAppVersion = NULL; CTask* pTask = NULL; CTaskInstance* pTaskInstance = NULL; CRPCProfile* pRPCProfile = NULL; CSyncProfile* pSyncProfile = NULL; wxDateTime dtExpirationDate = wxDateTime((time_t)0); wxDateTime dtRPCCompletedDate = wxDateTime((time_t)0); wxUint32 uiInterval = 0; bool bAppFound = false; bool bAppVersionFound = false; bool bTaskFound = false; bool bTaskInstanceFound = false; rc = m_pHost->FindSyncProfile(CBSLClient::AutoSyncPropertyStateUpdateInterval, &pSyncProfile); if (BSLERR_SUCCESS != rc) return; if (!pSyncProfile) return; rc = m_pHost->FindRPCProfile(CLASSINFO(CRPCSyncState)->GetClassName(), &pRPCProfile); if (BSLERR_SUCCESS != rc) return; if (!pRPCProfile) return; uiInterval = pSyncProfile->GetValue(); if (!uiInterval) return; dtRPCCompletedDate = pRPCProfile->GetLastRequestTime() + pRPCProfile->GetTotalDuration(); rc = m_pHost->EnumerateProjects(oProjects); if (BSLERR_SUCCESS != rc) return; rc = m_pHost->EnumerateApps(oApps); if (BSLERR_SUCCESS != rc) return; rc = m_pHost->EnumerateAppVersions(oAppVersions); if (BSLERR_SUCCESS != rc) return; rc = m_pHost->EnumerateTasks(oTasks); if (BSLERR_SUCCESS != rc) return; rc = m_pHost->EnumerateTaskInstances(oTaskInstances); if (BSLERR_SUCCESS != rc) return; for (iterProjects = oProjects.begin(); iterProjects != oProjects.end(); ++iterProjects) { pProject = *iterProjects; // An item is deemed expired if it wasn't refreshed the last time the synchronize // RPC was called. // dtExpirationDate = pProject->GetLastModifiedTime() + wxTimeSpan(0, 0, uiInterval, 0) + wxTimeSpan(0, 0, 0, 250); if ((m_dtNow > dtExpirationDate) && (dtRPCCompletedDate > dtExpirationDate)) { // Sanity Check: Make sure that no task instances refer to this project bTaskInstanceFound = false; for (iterTaskInstances = oTaskInstances.begin(); iterTaskInstances != oTaskInstances.end(); ++iterTaskInstances) { pTaskInstance = *iterTaskInstances; if (pTaskInstance->GetProjectHandle() == pProject->GetProjectHandle()) { bTaskInstanceFound = true; } } // Sanity Check: Make sure that no tasks refer to this project bTaskFound = false; for (iterTasks = oTasks.begin(); iterTasks != oTasks.end(); ++iterTasks) { pTask = *iterTasks; if (pTask->GetProjectHandle() == pProject->GetProjectHandle()) { bTaskFound = true; } } // Sanity Check: Make sure that no app versions refer to this project bAppVersionFound = false; for (iterAppVersions = oAppVersions.begin(); iterAppVersions != oAppVersions.end(); ++iterAppVersions) { pAppVersion = *iterAppVersions; if (pAppVersion->GetProjectHandle() == pProject->GetProjectHandle()) { bAppVersionFound = true; } } // Sanity Check: Make sure that no apps refer to this project bAppFound = false; for (iterApps = oApps.begin(); iterApps != oApps.end(); ++iterApps) { pApp = *iterApps; if (pApp->GetProjectHandle() == pProject->GetProjectHandle()) { bAppFound = true; } } if (!bTaskInstanceFound && !bTaskFound && !bAppVersionFound && !bAppFound) { wxLogTrace(wxT("Function Status"), wxT("CGarbageCollector::RecycleProjects - Recycle '%p', dtNow: '%s', dtExpirationDate: '%s', dtRPCCompletedDate: '%s'"), pApp, m_dtNow.Format(wxT("%H:%M:%S.%l")).c_str(), dtRPCCompletedDate.Format(wxT("%H:%M:%S.%l")).c_str(), dtExpirationDate.Format(wxT("%H:%M:%S.%l")).c_str() ); m_pHost->DeleteProject(pProject); } } } }
long wxTaskBarIconEx::WindowProc( WXHWND hWnd, unsigned int msg, unsigned int wParam, long lParam ) { wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function Begin")); wxEventType eventType = 0; long lReturnValue = 0; if ( WM_CLOSE == msg ) { wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_CLOSE Detected")); wxCloseEvent eventClose(wxEVT_CLOSE_WINDOW); ProcessEvent(eventClose); if ( !eventClose.GetSkipped() ) lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam); else lReturnValue = 0; } else if ( WM_TASKBARCREATED == msg ) { wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARCREATED Detected")); eventType = wxEVT_TASKBAR_CREATED; } else if ( WM_TASKBARSHUTDOWN == msg ) { wxLogTrace(wxT("Function Status"), wxT("wxTaskBarIconEx::WindowProc - WM_TASKBARSHUTDOWN Detected")); eventType = wxEVT_TASKBAR_SHUTDOWN; } if (msg != sm_taskbarMsg) lReturnValue = DefWindowProc((HWND) hWnd, msg, wParam, lParam); if ( 0 == eventType ) { switch (lParam) { case WM_LBUTTONDOWN: eventType = wxEVT_TASKBAR_LEFT_DOWN; break; case WM_LBUTTONUP: eventType = wxEVT_TASKBAR_LEFT_UP; break; case WM_RBUTTONDOWN: eventType = wxEVT_TASKBAR_RIGHT_DOWN; break; case WM_RBUTTONUP: eventType = wxEVT_TASKBAR_RIGHT_UP; break; case WM_LBUTTONDBLCLK: eventType = wxEVT_TASKBAR_LEFT_DCLICK; break; case WM_RBUTTONDBLCLK: eventType = wxEVT_TASKBAR_RIGHT_DCLICK; break; case WM_MOUSEMOVE: eventType = wxEVT_TASKBAR_MOVE; break; case WM_CONTEXTMENU: eventType = wxEVT_TASKBAR_CONTEXT_MENU; break; case NIN_SELECT: eventType = wxEVT_TASKBAR_SELECT; break; case NIN_KEYSELECT: eventType = wxEVT_TASKBAR_KEY_SELECT; break; case NIN_BALLOONSHOW: eventType = wxEVT_TASKBAR_BALLOON_SHOW; break; case NIN_BALLOONHIDE: eventType = wxEVT_TASKBAR_BALLOON_HIDE; break; case NIN_BALLOONTIMEOUT: eventType = wxEVT_TASKBAR_BALLOON_TIMEOUT; break; case NIN_BALLOONUSERCLICK: eventType = wxEVT_TASKBAR_BALLOON_USERCLICK; break; } } if (eventType) { wxTaskBarIconExEvent event(eventType, this); ProcessEvent(event); lReturnValue = 0; } wxLogTrace(wxT("Function Start/End"), wxT("wxTaskBarIconEx::WindowProc - Function End")); return lReturnValue; }
void ProcessNativeEvent(const inotify_event& inevt) { wxLogTrace(wxTRACE_FSWATCHER, InotifyEventToString(inevt)); // after removing inotify watch we get IN_IGNORED for it, but the watch // will be already removed from our list at that time if (inevt.mask & IN_IGNORED) { return; } // get watch entry for this event wxFSWatchEntryDescriptors::iterator it = m_watchMap.find(inevt.wd); wxCHECK_RET(it != m_watchMap.end(), "Watch descriptor not present in the watch map!"); wxFSWatchEntry& watch = *(it->second); int nativeFlags = inevt.mask; int flags = Native2WatcherFlags(nativeFlags); // check out for error/warning condition if (flags & wxFSW_EVENT_WARNING || flags & wxFSW_EVENT_ERROR) { wxString errMsg = GetErrorDescription(Watcher2NativeFlags(flags)); wxFileSystemWatcherEvent event(flags, errMsg); SendEvent(event); } // filter out ignored events and those not asked for. // we never filter out warnings or exceptions else if ((flags == 0) || !(flags & watch.GetFlags())) { return; } // renames else if (nativeFlags & IN_MOVE) { wxInotifyCookies::iterator it = m_cookies.find(inevt.cookie); if ( it == m_cookies.end() ) { int size = sizeof(inevt) + inevt.len; inotify_event* e = (inotify_event*) operator new (size); memcpy(e, &inevt, size); wxInotifyCookies::value_type val(e->cookie, e); m_cookies.insert(val); } else { inotify_event& oldinevt = *(it->second); wxFileSystemWatcherEvent event(flags); if ( inevt.mask & IN_MOVED_FROM ) { event.SetPath(GetEventPath(watch, inevt)); event.SetNewPath(GetEventPath(watch, oldinevt)); } else { event.SetPath(GetEventPath(watch, oldinevt)); event.SetNewPath(GetEventPath(watch, inevt)); } SendEvent(event); m_cookies.erase(it); delete &oldinevt; } } // every other kind of event else { wxFileName path = GetEventPath(watch, inevt); wxFileSystemWatcherEvent event(flags, path, path); SendEvent(event); } }
WXDLLEXPORT void wxLogRelease(const wxChar *szInterface, ULONG cRef) { wxLogTrace(wxTRACE_OleCalls, wxT("After %s::Release: m_cRef = %d"), szInterface, cRef - 1); }
void SendEvent(wxFileSystemWatcherEvent& evt) { wxLogTrace(wxTRACE_FSWATCHER, evt.ToString()); m_watcher->GetOwner()->ProcessEvent(evt); }
void CWidgetProjects::OnResumeProjects(wxCommandEvent& WXUNUSED(event)) { wxLogTrace(wxT("Function Start/End"), wxT("CWidgetActiveTasks::OnResumeProjects - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CWidgetActiveTasks::OnResumeProjects - Function End")); }
// get data functions STDMETHODIMP wxIDataObject::GetData(FORMATETC *pformatetcIn, STGMEDIUM *pmedium) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::GetData")); // is data is in our format? HRESULT hr = QueryGetData(pformatetcIn); if ( FAILED(hr) ) return hr; // for the bitmaps and metafiles we use the handles instead of global memory // to pass the data wxDataFormat format = (wxDataFormat::NativeFormat)pformatetcIn->cfFormat; format = HtmlFormatFixup(format); // is this system data? if ( GetSystemData(format, pmedium) ) { // pmedium is already filled with corresponding data, so we're ready. return S_OK; } switch ( format ) { case wxDF_BITMAP: pmedium->tymed = TYMED_GDI; break; case wxDF_ENHMETAFILE: pmedium->tymed = TYMED_ENHMF; break; #ifndef __WXWINCE__ case wxDF_METAFILE: pmedium->hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, sizeof(METAFILEPICT)); if ( !pmedium->hGlobal ) { wxLogLastError(wxT("GlobalAlloc")); return E_OUTOFMEMORY; } pmedium->tymed = TYMED_MFPICT; break; #endif default: // alloc memory size_t size = m_pDataObject->GetDataSize(format); if ( !size ) { // it probably means that the method is just not implemented wxLogDebug(wxT("Invalid data size - can't be 0")); return DV_E_FORMATETC; } // we may need extra space for the buffer size size += m_pDataObject->GetBufferOffset( format ); HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE | GMEM_SHARE, size); if ( hGlobal == NULL ) { wxLogLastError(wxT("GlobalAlloc")); return E_OUTOFMEMORY; } // copy data pmedium->tymed = TYMED_HGLOBAL; pmedium->hGlobal = hGlobal; } pmedium->pUnkForRelease = NULL; // do copy the data hr = GetDataHere(pformatetcIn, pmedium); if ( FAILED(hr) ) { // free resources we allocated if ( pmedium->tymed & (TYMED_HGLOBAL | TYMED_MFPICT) ) { GlobalFree(pmedium->hGlobal); } return hr; } return S_OK; }
void CWidgetProjects::OnSuspendProjects(wxCommandEvent& WXUNUSED(event)) { wxLogTrace(wxT("Function Start/End"), wxT("CWidgetProjects::OnSuspendProjects - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CWidgetProjects::OnSuspendProjects - Function End")); }
// information functions STDMETHODIMP wxIDataObject::QueryGetData(FORMATETC *pformatetc) { // do we accept data in this format? if ( pformatetc == NULL ) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: invalid ptr.")); return E_INVALIDARG; } // the only one allowed by current COM implementation if ( pformatetc->lindex != -1 ) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: bad lindex %ld"), pformatetc->lindex); return DV_E_LINDEX; } // we don't support anything other (THUMBNAIL, ICON, DOCPRINT...) if ( pformatetc->dwAspect != DVASPECT_CONTENT ) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: bad dwAspect %ld"), pformatetc->dwAspect); return DV_E_DVASPECT; } // and now check the type of data requested wxDataFormat format = pformatetc->cfFormat; format = HtmlFormatFixup(format); if ( m_pDataObject->IsSupportedFormat(format) ) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: %s ok"), wxGetFormatName(format)); } else if ( HasSystemData(format) ) { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: %s ok (system data)"), wxGetFormatName(format)); // this is system data, so no further checks needed. return S_OK; } else { wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: %s unsupported"), wxGetFormatName(format)); return DV_E_FORMATETC; } // we only transfer data by global memory, except for some particular cases DWORD tymed = pformatetc->tymed; if ( (format == wxDF_BITMAP && !(tymed & TYMED_GDI)) && !(tymed & TYMED_HGLOBAL) ) { // it's not what we're waiting for wxLogTrace(wxTRACE_OleCalls, wxT("wxIDataObject::QueryGetData: %s != %s"), GetTymedName(tymed), GetTymedName(format == wxDF_BITMAP ? TYMED_GDI : TYMED_HGLOBAL)); return DV_E_TYMED; } return S_OK; }
bool wxClipboard::GetData( wxDataObject& data ) { #if wxUSE_OLE_CLIPBOARD IDataObject *pDataObject = NULL; HRESULT hr = OleGetClipboard(&pDataObject); if ( FAILED(hr) || !pDataObject ) { wxLogSysError(hr, _("Failed to get data from the clipboard")); return false; } // build the list of supported formats size_t nFormats = data.GetFormatCount(wxDataObject::Set); wxDataFormat format; wxDataFormat *formats; if ( nFormats == 1 ) { // the most common case formats = &format; } else { // bad luck, need to alloc mem formats = new wxDataFormat[nFormats]; } data.GetAllFormats(formats, wxDataObject::Set); // get the data for the given formats FORMATETC formatEtc; CLIPFORMAT cf; bool result = false; // enumerate all explicit formats on the clipboard. // note that this does not include implicit / synthetic (automatically // converted) formats. #ifdef __WXDEBUG__ // get the format enumerator IEnumFORMATETC *pEnumFormatEtc = NULL; hr = pDataObject->EnumFormatEtc(DATADIR_GET, &pEnumFormatEtc); if ( FAILED(hr) || !pEnumFormatEtc ) { wxLogSysError(hr, _("Failed to retrieve the supported clipboard formats")); } else { // ask for the supported formats and see if there are any we support for ( ;; ) { ULONG nCount; hr = pEnumFormatEtc->Next(1, &formatEtc, &nCount); // don't use FAILED() because S_FALSE would pass it if ( hr != S_OK ) { // no more formats break; } cf = formatEtc.cfFormat; wxLogTrace(wxTRACE_OleCalls, wxT("Object on the clipboard supports format %s."), wxDataObject::GetFormatName(cf)); } pEnumFormatEtc->Release(); } #endif // Debug STGMEDIUM medium; // stop at the first valid format found on the clipboard for ( size_t n = 0; !result && (n < nFormats); n++ ) { // convert to NativeFormat Id cf = formats[n].GetFormatId(); // if the format is not available, try the next one // this test includes implicit / sythetic formats if ( !::IsClipboardFormatAvailable(cf) ) continue; formatEtc.cfFormat = cf; formatEtc.ptd = NULL; formatEtc.dwAspect = DVASPECT_CONTENT; formatEtc.lindex = -1; // use the appropriate tymed switch ( formatEtc.cfFormat ) { case CF_BITMAP: formatEtc.tymed = TYMED_GDI; break; #ifndef __WXWINCE__ case CF_METAFILEPICT: formatEtc.tymed = TYMED_MFPICT; break; case CF_ENHMETAFILE: formatEtc.tymed = TYMED_ENHMF; break; #endif default: formatEtc.tymed = TYMED_HGLOBAL; } // try to get data hr = pDataObject->GetData(&formatEtc, &medium); if ( FAILED(hr) ) { // try other tymed for GDI objects if ( formatEtc.cfFormat == CF_BITMAP ) { formatEtc.tymed = TYMED_HGLOBAL; hr = pDataObject->GetData(&formatEtc, &medium); } } if ( SUCCEEDED(hr) ) { // pass the data to the data object hr = data.GetInterface()->SetData(&formatEtc, &medium, true); if ( FAILED(hr) ) { wxLogDebug(wxT("Failed to set data in wxIDataObject")); // IDataObject only takes the ownership of data if it // successfully got it - which is not the case here ReleaseStgMedium(&medium); } else { result = true; } } //else: unsupported tymed? } if ( formats != &format ) { delete [] formats; } //else: we didn't allocate any memory // clean up and return pDataObject->Release(); return result; #elif wxUSE_DATAOBJ wxCHECK_MSG( wxIsClipboardOpened(), false, wxT("clipboard not open") ); wxDataFormat format = data.GetPreferredFormat(); switch ( format ) { case wxDF_TEXT: case wxDF_OEMTEXT: { wxTextDataObject& textDataObject = (wxTextDataObject &)data; char* s = (char*)wxGetClipboardData(format); if ( !s ) return false; textDataObject.SetText(wxString::FromAscii(s)); delete [] s; return true; } case wxDF_BITMAP: case wxDF_DIB: { wxBitmapDataObject& bitmapDataObject = (wxBitmapDataObject &)data; wxBitmap* bitmap = (wxBitmap *)wxGetClipboardData(data.GetPreferredFormat()); if ( !bitmap ) return false; bitmapDataObject.SetBitmap(*bitmap); delete bitmap; return true; } #if wxUSE_METAFILE case wxDF_METAFILE: { wxMetafileDataObject& metaFileDataObject = (wxMetafileDataObject &)data; wxMetafile* metaFile = (wxMetafile *)wxGetClipboardData(wxDF_METAFILE); if ( !metaFile ) return false; metaFileDataObject.SetMetafile(*metaFile); delete metaFile; return true; } #endif // wxUSE_METAFILE } return false; #else // !wxUSE_DATAOBJ wxFAIL_MSG( wxT("no clipboard implementation") ); return false; #endif // wxUSE_OLE_CLIPBOARD/wxUSE_DATAOBJ }
void wxIOCPThread::SendEvent(wxFileSystemWatcherEvent& evt) { wxLogTrace(wxTRACE_FSWATCHER, "[iocp] EVT: %s", evt.ToString()); m_service->SendEvent(evt); }
void EDA_BASE_FRAME::CheckForAutoSaveFile( const wxFileName& aFileName, const wxString& aBackupFileExtension ) { wxCHECK_RET( aFileName.IsOk(), wxT( "Invalid file name!" ) ); wxCHECK_RET( !aBackupFileExtension.IsEmpty(), wxT( "Invalid backup file extension!" ) ); wxFileName autoSaveFileName = aFileName; // Check for auto save file. autoSaveFileName.SetName( AUTOSAVE_PREFIX_FILENAME + aFileName.GetName() ); wxLogTrace( traceAutoSave, wxT( "Checking for auto save file " ) + autoSaveFileName.GetFullPath() ); if( !autoSaveFileName.FileExists() ) return; wxString msg = wxString::Format( _( "Well this is potentially embarrassing!\n" "It appears that the last time you were editing the file\n" "'%s'\n" "it was not saved properly. Do you wish to restore the last saved edits you made?" ), GetChars( aFileName.GetFullName() ) ); int response = wxMessageBox( msg, Pgm().App().GetAppName(), wxYES_NO | wxICON_QUESTION, this ); // Make a backup of the current file, delete the file, and rename the auto save file to // the file name. if( response == wxYES ) { // Get the backup file name. wxFileName backupFileName = aFileName; backupFileName.SetExt( aBackupFileExtension ); // If an old backup file exists, delete it. If an old copy of the file exists, rename // it to the backup file name if( aFileName.FileExists() ) { // Remove the old file backup file. if( backupFileName.FileExists() ) wxRemoveFile( backupFileName.GetFullPath() ); // Rename the old file to the backup file name. if( !wxRenameFile( aFileName.GetFullPath(), backupFileName.GetFullPath() ) ) { msg.Printf( _( "Could not create backup file <%s>" ), GetChars( backupFileName.GetFullPath() ) ); wxMessageBox( msg ); } } if( !wxRenameFile( autoSaveFileName.GetFullPath(), aFileName.GetFullPath() ) ) { wxMessageBox( _( "The auto save file could not be renamed to the board file name." ), Pgm().App().GetAppName(), wxOK | wxICON_EXCLAMATION, this ); } } else { wxLogTrace( traceAutoSave, wxT( "Removing auto save file " ) + autoSaveFileName.GetFullPath() ); // Remove the auto save file when using the previous file as is. wxRemoveFile( autoSaveFileName.GetFullPath() ); } }
void CWidgetUsage::OnUsageProperties(wxCommandEvent& WXUNUSED(event)) { wxLogTrace(wxT("Function Start/End"), wxT("CWidgetUsage::OnUsageProperties - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CWidgetUsage::OnUsageProperties - Function End")); }
CWidgetEventLog::~CWidgetEventLog() { wxLogTrace(wxT("Function Start/End"), wxT("CWidgetEventLog::~CWidgetEventLog - Function Begin")); wxLogTrace(wxT("Function Start/End"), wxT("CWidgetEventLog::~CWidgetEventLog - Function End")); }
bool S3D::CalcTriangleNormals( std::vector< SGPOINT > coords, std::vector< int >& index, std::vector< SGVECTOR >& norms ) { size_t vsize = coords.size(); if( vsize < 3 ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] invalid vertex set (fewer than 3 vertices)"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return false; } size_t isize = index.size(); if( 0 != isize % 3 || index.empty() ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] invalid index set (not multiple of 3)"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return false; } if( !norms.empty() ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] normals set is not empty"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return false; } std::map< int, std::list< glm::dvec3 > >vmap; int p1, p2, p3; // create the map of indices to facet sets for( size_t i = 0; i < isize; ) { p1 = index[i++]; p2 = index[i++]; p3 = index[i++]; if( p1 < 0 || p1 >= (int)vsize || p2 < 0 || p2 >= (int)vsize || p3 < 0 || p3 >= (int)vsize ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [INFO] invalid index set; index out of bounds"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return false; } glm::dvec3 tri; glm::dvec3 trip[3]; trip[0] = glm::dvec3( coords[p1].x, coords[p1].y, coords[p1].z ); trip[1] = glm::dvec3( coords[p2].x, coords[p2].y, coords[p2].z ); trip[2] = glm::dvec3( coords[p3].x, coords[p3].y, coords[p3].z ); calcTriad( trip, tri ); std::map< int, std::list< glm::dvec3 > >::iterator ip = vmap.find( p1 ); if( ip != vmap.end() ) { ip->second.push_back( tri ); } else { vmap.insert( std::pair < int, std::list < glm::dvec3 > > ( p1, std::list < glm::dvec3 >( 1, tri ) ) ); } ip = vmap.find( p2 ); if( ip != vmap.end() ) { ip->second.push_back( tri ); } else { vmap.insert( std::pair < int, std::list < glm::dvec3 > > ( p2, std::list < glm::dvec3 >( 1, tri ) ) ); } ip = vmap.find( p3 ); if( ip != vmap.end() ) { ip->second.push_back( tri ); } else { vmap.insert( std::pair < int, std::list < glm::dvec3 > > ( p3, std::list < glm::dvec3 >( 1, tri ) ) ); } } std::map< int, std::list< glm::dvec3 > >::iterator sM = vmap.begin(); std::map< int, std::list< glm::dvec3 > >::iterator eM = vmap.end(); size_t idx = 0; while( sM != eM ) { size_t item = sM->first; // assign any skipped coordinates a normal of (0,0,1) while( item > idx ) { norms.push_back( SGVECTOR( 0, 0, 1 ) ); ++idx; } std::list< glm::dvec3 >::iterator sT = sM->second.begin(); std::list< glm::dvec3 >::iterator eT = sM->second.end(); glm::dvec3 norm( 0.0, 0.0, 0.0 ); while( sT != eT ) { norm += *sT; ++sT; } norms.push_back( SGVECTOR( norm.x, norm.y, norm.z ) ); ++idx; ++sM; } if( norms.size() != coords.size() ) { #ifdef DEBUG std::ostringstream ostr; ostr << __FILE__ << ": " << __FUNCTION__ << ": " << __LINE__ << "\n"; ostr << " * [BUG] number of normals does not equal number of vertices"; wxLogTrace( MASK_3D_SG, "%s\n", ostr.str().c_str() ); #endif return false; } return true; }
void EDA_DRAW_FRAME::AdjustScrollBars( const wxPoint& aCenterPositionIU ) { BASE_SCREEN* screen = GetScreen(); if( !screen || !m_canvas ) return; double scale = screen->GetScalingFactor(); wxLogTrace( traceScrollSettings, wxT( "Center Position = ( %d, %d ), scale = %.10g" ), aCenterPositionIU.x, aCenterPositionIU.y, scale ); // Calculate the portion of the drawing that can be displayed in the // client area at the current zoom level. // visible viewport in device units ~ pixels wxSize clientSizeDU = m_canvas->GetClientSize(); // Size of the client window in IU DSIZE clientSizeIU( clientSizeDU.x / scale, clientSizeDU.y / scale ); // Full drawing or "page" rectangle in internal units DBOX pageRectIU( wxPoint( 0, 0 ), wxSize( GetPageSizeIU().x, GetPageSizeIU().y ) ); // The upper left corner of the client rectangle in internal units. double xIU = aCenterPositionIU.x - clientSizeIU.x / 2.0; double yIU = aCenterPositionIU.y - clientSizeIU.y / 2.0; // If drawn around the center, adjust the client rectangle accordingly. if( screen->m_Center ) { // half page offset. xIU += pageRectIU.GetWidth() / 2.0; yIU += pageRectIU.GetHeight() / 2.0; } DBOX clientRectIU( wxPoint( xIU, yIU ), wxSize( clientSizeIU.x, clientSizeIU.y ) ); wxPoint centerPositionIU; // put "int" limits on the clientRect if( clientRectIU.GetLeft() < VIRT_MIN ) clientRectIU.MoveLeftTo( VIRT_MIN ); if( clientRectIU.GetTop() < VIRT_MIN ) clientRectIU.MoveTopTo( VIRT_MIN ); if( clientRectIU.GetRight() > VIRT_MAX ) clientRectIU.MoveRightTo( VIRT_MAX ); if( clientRectIU.GetBottom() > VIRT_MAX ) clientRectIU.MoveBottomTo( VIRT_MAX ); centerPositionIU.x = KiROUND( clientRectIU.GetX() + clientRectIU.GetWidth() / 2 ); centerPositionIU.y = KiROUND( clientRectIU.GetY() + clientRectIU.GetHeight() / 2 ); if( screen->m_Center ) { centerPositionIU.x -= KiROUND( pageRectIU.GetWidth() / 2.0 ); centerPositionIU.y -= KiROUND( pageRectIU.GetHeight() / 2.0 ); } DSIZE virtualSizeIU; if( pageRectIU.GetLeft() < clientRectIU.GetLeft() && pageRectIU.GetRight() > clientRectIU.GetRight() ) { virtualSizeIU.x = pageRectIU.GetSize().x; } else { double pageCenterX = pageRectIU.GetX() + ( pageRectIU.GetWidth() / 2 ); double clientCenterX = clientRectIU.GetX() + ( clientRectIU.GetWidth() / 2 ); if( clientRectIU.GetWidth() > pageRectIU.GetWidth() ) { if( pageCenterX > clientCenterX ) virtualSizeIU.x = ( pageCenterX - clientRectIU.GetLeft() ) * 2; else if( pageCenterX < clientCenterX ) virtualSizeIU.x = ( clientRectIU.GetRight() - pageCenterX ) * 2; else virtualSizeIU.x = clientRectIU.GetWidth(); } else { if( pageCenterX > clientCenterX ) virtualSizeIU.x = pageRectIU.GetWidth() + ( (pageRectIU.GetLeft() - clientRectIU.GetLeft() ) * 2 ); else if( pageCenterX < clientCenterX ) virtualSizeIU.x = pageRectIU.GetWidth() + ( (clientRectIU.GetRight() - pageRectIU.GetRight() ) * 2 ); else virtualSizeIU.x = pageRectIU.GetWidth(); } } if( pageRectIU.GetTop() < clientRectIU.GetTop() && pageRectIU.GetBottom() > clientRectIU.GetBottom() ) { virtualSizeIU.y = pageRectIU.GetSize().y; } else { double pageCenterY = pageRectIU.GetY() + ( pageRectIU.GetHeight() / 2 ); double clientCenterY = clientRectIU.GetY() + ( clientRectIU.GetHeight() / 2 ); if( clientRectIU.GetHeight() > pageRectIU.GetHeight() ) { if( pageCenterY > clientCenterY ) virtualSizeIU.y = ( pageCenterY - clientRectIU.GetTop() ) * 2; else if( pageCenterY < clientCenterY ) virtualSizeIU.y = ( clientRectIU.GetBottom() - pageCenterY ) * 2; else virtualSizeIU.y = clientRectIU.GetHeight(); } else { if( pageCenterY > clientCenterY ) virtualSizeIU.y = pageRectIU.GetHeight() + ( ( pageRectIU.GetTop() - clientRectIU.GetTop() ) * 2 ); else if( pageCenterY < clientCenterY ) virtualSizeIU.y = pageRectIU.GetHeight() + ( ( clientRectIU.GetBottom() - pageRectIU.GetBottom() ) * 2 ); else virtualSizeIU.y = pageRectIU.GetHeight(); } } // put "int" limits on the virtualSizeIU virtualSizeIU.x = std::min( virtualSizeIU.x, MAX_AXIS ); virtualSizeIU.y = std::min( virtualSizeIU.y, MAX_AXIS ); if( screen->m_Center ) { screen->m_DrawOrg.x = -KiROUND( virtualSizeIU.x / 2.0 ); screen->m_DrawOrg.y = -KiROUND( virtualSizeIU.y / 2.0 ); } else { screen->m_DrawOrg.x = -KiROUND( ( virtualSizeIU.x - pageRectIU.GetWidth() ) / 2.0 ); screen->m_DrawOrg.y = -KiROUND( ( virtualSizeIU.y - pageRectIU.GetHeight() ) / 2.0 ); } /* Always set scrollbar pixels per unit to 1 unless you want the zoom * around cursor to jump around. This reported problem occurs when the * zoom point is not on a pixel per unit increment. If you set the * pixels per unit to 10, you have potential for the zoom point to * jump around +/-5 pixels from the nearest grid point. */ screen->m_ScrollPixelsPerUnitX = screen->m_ScrollPixelsPerUnitY = 1; // Number of scroll bar units for the given zoom level in device units. double unitsX = virtualSizeIU.x * scale; double unitsY = virtualSizeIU.y * scale; // Calculate the scroll bar position in internal units to place the // center position at the center of client rectangle. SetScrollCenterPosition( centerPositionIU ); double posX = centerPositionIU.x - clientRectIU.GetWidth() / 2.0 - screen->m_DrawOrg.x; double posY = centerPositionIU.y - clientRectIU.GetHeight() / 2.0 - screen->m_DrawOrg.y; // Convert scroll bar position to device units. posX = KiROUND( posX * scale ); posY = KiROUND( posY * scale ); if( posX < 0 ) { wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %.10g" ), posX ); posX = 0; } if( posX > unitsX ) { wxLogTrace( traceScrollSettings, wxT( "Required scroll bar X position %.10g" ), posX ); posX = unitsX; } if( posY < 0 ) { wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %.10g" ), posY ); posY = 0; } if( posY > unitsY ) { wxLogTrace( traceScrollSettings, wxT( "Required scroll bar Y position %.10g" ), posY ); posY = unitsY; } screen->m_ScrollbarPos = wxPoint( KiROUND( posX ), KiROUND( posY ) ); screen->m_ScrollbarNumber = wxSize( KiROUND( unitsX ), KiROUND( unitsY ) ); wxLogTrace( traceScrollSettings, wxT( "Drawing = (%.10g, %.10g), Client = (%.10g, %.10g), Offset = (%d, %d), SetScrollbars(%d, %d, %d, %d, %d, %d)" ), virtualSizeIU.x, virtualSizeIU.y, clientSizeIU.x, clientSizeIU.y, screen->m_DrawOrg.x, screen->m_DrawOrg.y, screen->m_ScrollPixelsPerUnitX, screen->m_ScrollPixelsPerUnitY, screen->m_ScrollbarNumber.x, screen->m_ScrollbarNumber.y, screen->m_ScrollbarPos.x, screen->m_ScrollbarPos.y ); bool noRefresh = true; m_canvas->SetScrollbars( screen->m_ScrollPixelsPerUnitX, screen->m_ScrollPixelsPerUnitY, screen->m_ScrollbarNumber.x, screen->m_ScrollbarNumber.y, screen->m_ScrollbarPos.x, screen->m_ScrollbarPos.y, noRefresh ); }
std::unique_ptr<PNS::SOLID> PNS_KICAD_IFACE::syncPad( D_PAD* aPad ) { LAYER_RANGE layers( 0, MAX_CU_LAYERS - 1 ); // ignore non-copper pads if( ( aPad->GetLayerSet() & LSET::AllCuMask()).none() ) return NULL; switch( aPad->GetAttribute() ) { case PAD_ATTRIB_STANDARD: break; case PAD_ATTRIB_SMD: case PAD_ATTRIB_HOLE_NOT_PLATED: case PAD_ATTRIB_CONN: { LSET lmsk = aPad->GetLayerSet(); bool is_copper = false; for( int i = 0; i < MAX_CU_LAYERS; i++ ) { if( lmsk[i] ) { is_copper = true; if( aPad->GetAttribute() != PAD_ATTRIB_HOLE_NOT_PLATED ) layers = LAYER_RANGE( i ); break; } } if( !is_copper ) return NULL; } break; default: wxLogTrace( "PNS", "unsupported pad type 0x%x", aPad->GetAttribute() ); return NULL; } std::unique_ptr< PNS::SOLID > solid( new PNS::SOLID ); solid->SetLayers( layers ); solid->SetNet( aPad->GetNetCode() ); solid->SetParent( aPad ); wxPoint wx_c = aPad->ShapePos(); wxSize wx_sz = aPad->GetSize(); wxPoint offset = aPad->GetOffset(); VECTOR2I c( wx_c.x, wx_c.y ); VECTOR2I sz( wx_sz.x, wx_sz.y ); RotatePoint( &offset, aPad->GetOrientation() ); solid->SetPos( VECTOR2I( c.x - offset.x, c.y - offset.y ) ); solid->SetOffset( VECTOR2I( offset.x, offset.y ) ); double orient = aPad->GetOrientation() / 10.0; if( aPad->GetShape() == PAD_SHAPE_CIRCLE ) { solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) ); } else if( aPad->GetShape() == PAD_SHAPE_CUSTOM ) { SHAPE_POLY_SET outline; outline.Append( aPad->GetCustomShapeAsPolygon() ); aPad->CustomShapeAsPolygonToBoardPosition( &outline, wx_c, aPad->GetOrientation() ); SHAPE_CONVEX* shape = new SHAPE_CONVEX(); // We use the convex hull of the pad shape, because PnS knows // only convex shapes. std::vector<wxPoint> convex_hull; BuildConvexHull( convex_hull, outline ); for( unsigned ii = 0; ii < convex_hull.size(); ii++ ) shape->Append( convex_hull[ii] ); solid->SetShape( shape ); } else { if( orient == 0.0 || orient == 90.0 || orient == 180.0 || orient == 270.0 ) { if( orient == 90.0 || orient == 270.0 ) sz = VECTOR2I( sz.y, sz.x ); switch( aPad->GetShape() ) { case PAD_SHAPE_OVAL: if( sz.x == sz.y ) solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) ); else { VECTOR2I delta; if( sz.x > sz.y ) delta = VECTOR2I( ( sz.x - sz.y ) / 2, 0 ); else delta = VECTOR2I( 0, ( sz.y - sz.x ) / 2 ); SHAPE_SEGMENT* shape = new SHAPE_SEGMENT( c - delta, c + delta, std::min( sz.x, sz.y ) ); solid->SetShape( shape ); } break; case PAD_SHAPE_RECT: solid->SetShape( new SHAPE_RECT( c - sz / 2, sz.x, sz.y ) ); break; case PAD_SHAPE_TRAPEZOID: { wxPoint coords[4]; aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() ); SHAPE_CONVEX* shape = new SHAPE_CONVEX(); for( int ii = 0; ii < 4; ii++ ) { shape->Append( wx_c + coords[ii] ); } solid->SetShape( shape ); break; } case PAD_SHAPE_ROUNDRECT: { SHAPE_POLY_SET outline; const int segmentToCircleCount = 64; aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ), segmentToCircleCount, 1.0 ); // TransformRoundRectToPolygon creates only one convex polygon SHAPE_LINE_CHAIN& poly = outline.Outline( 0 ); SHAPE_CONVEX* shape = new SHAPE_CONVEX(); for( int ii = 0; ii < poly.PointCount(); ++ii ) { shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) ); } solid->SetShape( shape ); } break; default: wxLogTrace( "PNS", "unsupported pad shape" ); return nullptr; } } else { switch( aPad->GetShape() ) { // PAD_SHAPE_CIRCLE and PAD_SHAPE_CUSTOM already handled above case PAD_SHAPE_OVAL: if( sz.x == sz.y ) solid->SetShape( new SHAPE_CIRCLE( c, sz.x / 2 ) ); else { wxPoint start; wxPoint end; wxPoint corner; SHAPE_CONVEX* shape = new SHAPE_CONVEX(); int w = aPad->BuildSegmentFromOvalShape( start, end, 0.0, wxSize( 0, 0 ) ); if( start.y == 0 ) corner = wxPoint( start.x, -( w / 2 ) ); else corner = wxPoint( w / 2, start.y ); RotatePoint( &start, aPad->GetOrientation() ); RotatePoint( &corner, aPad->GetOrientation() ); shape->Append( wx_c + corner ); for( int rot = 100; rot <= 1800; rot += 100 ) { wxPoint p( corner ); RotatePoint( &p, start, rot ); shape->Append( wx_c + p ); } if( end.y == 0 ) corner = wxPoint( end.x, w / 2 ); else corner = wxPoint( -( w / 2 ), end.y ); RotatePoint( &end, aPad->GetOrientation() ); RotatePoint( &corner, aPad->GetOrientation() ); shape->Append( wx_c + corner ); for( int rot = 100; rot <= 1800; rot += 100 ) { wxPoint p( corner ); RotatePoint( &p, end, rot ); shape->Append( wx_c + p ); } solid->SetShape( shape ); } break; case PAD_SHAPE_RECT: case PAD_SHAPE_TRAPEZOID: { wxPoint coords[4]; aPad->BuildPadPolygon( coords, wxSize( 0, 0 ), aPad->GetOrientation() ); SHAPE_CONVEX* shape = new SHAPE_CONVEX(); for( int ii = 0; ii < 4; ii++ ) { shape->Append( wx_c + coords[ii] ); } solid->SetShape( shape ); break; } case PAD_SHAPE_ROUNDRECT: { SHAPE_POLY_SET outline; const int segmentToCircleCount = 32; aPad->BuildPadShapePolygon( outline, wxSize( 0, 0 ), segmentToCircleCount, 1.0 ); // TransformRoundRectToPolygon creates only one convex polygon SHAPE_LINE_CHAIN& poly = outline.Outline( 0 ); SHAPE_CONVEX* shape = new SHAPE_CONVEX(); for( int ii = 0; ii < poly.PointCount(); ++ii ) { shape->Append( wxPoint( poly.Point( ii ).x, poly.Point( ii ).y ) ); } solid->SetShape( shape ); break; } default: wxLogTrace( "PNS", "unsupported pad shape" ); return nullptr; } } } return solid; }
wxRect wxWindow::ScrollNoRefresh(int dx, int dy, const wxRect *rectTotal) { wxASSERT_MSG( !dx || !dy, _T("can't be used for diag scrolling") ); // the rect to refresh (which we will calculate) wxRect rect; if ( !dx && !dy ) { // nothing to do return rect; } // calculate the part of the window which we can just redraw in the new // location wxSize sizeTotal = rectTotal ? rectTotal->GetSize() : GetClientSize(); wxLogTrace(_T("scroll"), _T("rect is %dx%d, scroll by %d, %d"), sizeTotal.x, sizeTotal.y, dx, dy); // the initial and end point of the region we move in client coords wxPoint ptSource, ptDest; if ( rectTotal ) { ptSource = rectTotal->GetPosition(); ptDest = rectTotal->GetPosition(); } // the size of this region wxSize size; size.x = sizeTotal.x - abs(dx); size.y = sizeTotal.y - abs(dy); if ( size.x <= 0 || size.y <= 0 ) { // just redraw everything as nothing of the displayed image will stay wxLogTrace(_T("scroll"), _T("refreshing everything")); rect = rectTotal ? *rectTotal : wxRect(0, 0, sizeTotal.x, sizeTotal.y); } else // move the part which doesn't change to the new location { // note that when we scroll the canvas in some direction we move the // block which doesn't need to be refreshed in the opposite direction if ( dx < 0 ) { // scroll to the right, move to the left ptSource.x -= dx; } else { // scroll to the left, move to the right ptDest.x += dx; } if ( dy < 0 ) { // scroll down, move up ptSource.y -= dy; } else { // scroll up, move down ptDest.y += dy; } #if wxUSE_CARET // we need to hide the caret before moving or it will erase itself at // the wrong (old) location wxCaret *caret = GetCaret(); if ( caret ) caret->Hide(); #endif // wxUSE_CARET // do move wxClientDC dc(this); wxBitmap bmp(size.x, size.y); wxMemoryDC dcMem; dcMem.SelectObject(bmp); dcMem.Blit(wxPoint(0,0), size, &dc, ptSource #if defined(__WXGTK__) && !defined(wxHAS_WORKING_GTK_DC_BLIT) + GetClientAreaOrigin() #endif // broken wxGTK wxDC::Blit ); dc.Blit(ptDest, size, &dcMem, wxPoint(0,0)); wxLogTrace(_T("scroll"), _T("Blit: (%d, %d) of size %dx%d -> (%d, %d)"), ptSource.x, ptSource.y, size.x, size.y, ptDest.x, ptDest.y); // and now repaint the uncovered area // FIXME: We repaint the intersection of these rectangles twice - is // it bad? I don't think so as it is rare to scroll the window // diagonally anyhow and so adding extra logic to compute // rectangle intersection is probably not worth the effort rect.x = ptSource.x; rect.y = ptSource.y; if ( dx ) { if ( dx < 0 ) { // refresh the area along the right border rect.x += size.x + dx; rect.width = -dx; } else { // refresh the area along the left border rect.width = dx; } rect.height = sizeTotal.y; wxLogTrace(_T("scroll"), _T("refreshing (%d, %d)-(%d, %d)"), rect.x, rect.y, rect.GetRight() + 1, rect.GetBottom() + 1); } if ( dy ) { if ( dy < 0 ) { // refresh the area along the bottom border rect.y += size.y + dy; rect.height = -dy; } else { // refresh the area along the top border rect.height = dy; } rect.width = sizeTotal.x; wxLogTrace(_T("scroll"), _T("refreshing (%d, %d)-(%d, %d)"), rect.x, rect.y, rect.GetRight() + 1, rect.GetBottom() + 1); } #if wxUSE_CARET if ( caret ) caret->Show(); #endif // wxUSE_CARET } return rect; }