inline void StressTestTopologicalSort(const std::vector<Edge> &list_of_edges, int vertices_amount) { try { if (StupidIsSircle(vertices_amount, list_of_edges)) return; std::vector<int> topologically_ordered_vertices = GetTopologicallyOrderedVerties(list_of_edges, vertices_amount); if (topologically_ordered_vertices.size() != vertices_amount) throw std::logic_error("FAIL"); auto graph = MakeCompactGraph(list_of_edges, vertices_amount); for (int i = 0; i < topologically_ordered_vertices.size() - 1; ++i) { for (int j = i + 1; j < topologically_ordered_vertices.size(); ++j) { if (graph->HasEdge(topologically_ordered_vertices[j], topologically_ordered_vertices[i])) throw std::logic_error("FAIL"); } } } catch (const std::exception& ex) { throw std::logic_error("TestTopologicalSort: " + std::string(ex.what())); } }
FWL_WidgetHit IFWL_Widget::HitTest(FX_FLOAT fx, FX_FLOAT fy) { CFX_RectF rtClient; GetClientRect(rtClient); if (rtClient.Contains(fx, fy)) return FWL_WidgetHit::Client; if (HasEdge()) { CFX_RectF rtEdge; GetEdgeRect(rtEdge); if (rtEdge.Contains(fx, fy)) return FWL_WidgetHit::Edge; } if (HasBorder()) { CFX_RectF rtRelative; GetRelativeRect(rtRelative); if (rtRelative.Contains(fx, fy)) return FWL_WidgetHit::Border; } return FWL_WidgetHit::Unknown; }
void IFWL_DateTimePicker::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return; if (!m_pProperties->m_pThemeProvider) return; IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; if (HasBorder()) DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); if (HasEdge()) DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); if (!m_rtBtn.IsEmpty()) DrawDropDownButton(pGraphics, pTheme, pMatrix); if (m_pWidgetMgr->IsFormDisabled()) { DisForm_DrawWidget(pGraphics, pMatrix); return; } }
/* Add an edge from i to j with the value EV. throw out of range exception if i or j > size of graph. Return false if edge already exists. */ bool AddEdge(int origin, int destination, EV value) { if (origin >= graph_.size()) { throw std::out_of_range("Origin index is out of range: " + std::to_string(origin)); } if (destination >= graph_.size()) { throw std::out_of_range("Origin index is out of range: " + std::to_string(destination)); } // Check if edge is already there. if (HasEdge(origin, destination)) { return false; } // Add the edge. graph_[origin].edges.emplace_back(value, destination); return true; }
FWL_ERR CFWL_ScrollBarImp::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return FWL_ERR_Indefinite; if (!m_pProperties->m_pThemeProvider) return FWL_ERR_Indefinite; IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; if (HasBorder()) { DrawBorder(pGraphics, FWL_PART_SCB_Border, pTheme, pMatrix); } if (HasEdge()) { DrawEdge(pGraphics, FWL_PART_SCB_Edge, pTheme, pMatrix); } DrawTrack(pGraphics, pTheme, TRUE, pMatrix); DrawTrack(pGraphics, pTheme, FALSE, pMatrix); DrawArrowBtn(pGraphics, pTheme, TRUE, pMatrix); DrawArrowBtn(pGraphics, pTheme, FALSE, pMatrix); DrawThumb(pGraphics, pTheme, pMatrix); return FWL_ERR_Succeeded; }
FWL_ERR CFWL_DateTimePickerImp::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return FWL_ERR_Indefinite; if (!m_pProperties->m_pThemeProvider) return FWL_ERR_Indefinite; IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; if (HasBorder()) { DrawBorder(pGraphics, FWL_PART_DTP_Border, pTheme, pMatrix); } if (HasEdge()) { DrawEdge(pGraphics, FWL_PART_DTP_Edge, pTheme, pMatrix); } if (!m_rtBtn.IsEmpty()) { DrawDropDownButton(pGraphics, pTheme, pMatrix); } if (m_pWidgetMgr->IsFormDisabled()) { return DisForm_DrawWidget(pGraphics, pMatrix); } return FWL_ERR_Succeeded; }
VOID CClientWnd::OnChildOpenClose(BOOL bOpen) { _ExIf(m_bScrabble, OnPlayScrabble()); if (bOpen) { m_uChildNum++; if (m_uChildNum == 1) { EnableCommand(); CMainWnd::EnableCommand(IDM_Play_Synchronize, FALSE); CMainWnd::EnableCommand(IDM_Play_Scrabble, FALSE); } else if (m_uChildNum == 2) { CMainWnd::EnableCommand(IDM_Play_Synchronize, TRUE); CMainWnd::EnableCommand(IDM_Play_Scrabble, TRUE); } } else { m_uChildNum--; if (m_uChildNum <= 1) { if (m_uChildNum == 0) { // 保存子窗口最大化状态 BOOL bMaximized = (HasEdge() == FALSE); CIni::SetInt(INI_MaxOnOpen, bMaximized); _ExIf(bMaximized, SetEdge()); EnableCommand(FALSE); } CMainWnd::EnableCommand(IDM_Play_Synchronize, FALSE); CMainWnd::EnableCommand(IDM_Play_Scrabble, FALSE); } } }
inline void TestMakeGraphForTwoSAT(const std::vector<Conjunct>& conjunctions, int variables_amount) { try { auto graph = MakeGraphForTwoSAT(conjunctions, variables_amount); for (int i = 0; i < conjunctions.size(); ++i) { int positive_of_conjunct_1 = conjunctions[i].is_positive_[0] ? conjunctions[i].variable_[0] : variables_amount + conjunctions[i].variable_[0]; int positive_of_conjunct_2 = conjunctions[i].is_positive_[1] ? conjunctions[i].variable_[1] : variables_amount + conjunctions[i].variable_[1]; int negative_of_conjunct_1 = conjunctions[i].is_positive_[0] ? variables_amount + conjunctions[i].variable_[0] : conjunctions[i].variable_[0]; int negative_of_conjunct_2 = conjunctions[i].is_positive_[1] ? variables_amount + conjunctions[i].variable_[1] : conjunctions[i].variable_[1]; bool edge_not_1_to_2 = graph->HasEdge(negative_of_conjunct_1, positive_of_conjunct_2); bool edge_not_2_to_1 = graph->HasEdge(negative_of_conjunct_2, positive_of_conjunct_1); if(!(edge_not_1_to_2 && edge_not_2_to_1)) throw std::logic_error("FAIL"); } } catch (const std::exception& ex) { throw std::logic_error("TestTarjan: " + std::string(ex.what())); } }
FWL_ERR CFWL_PushButtonImp::DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) { if (!pGraphics) return FWL_ERR_Indefinite; if (!m_pProperties->m_pThemeProvider) return FWL_ERR_Indefinite; IFWL_PushButtonDP* pData = static_cast<IFWL_PushButtonDP*>(m_pProperties->m_pDataProvider); CFX_DIBitmap* pPicture = NULL; IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; if (HasBorder()) { DrawBorder(pGraphics, FWL_PART_PSB_Border, m_pProperties->m_pThemeProvider, pMatrix); } if (HasEdge()) { DrawEdge(pGraphics, FWL_PART_PSB_Edge, m_pProperties->m_pThemeProvider, pMatrix); } DrawBkground(pGraphics, m_pProperties->m_pThemeProvider, pMatrix); CFX_Matrix matrix; matrix.Concat(*pMatrix); FX_FLOAT iPicwidth = 0; FX_FLOAT ipicheight = 0; CFX_WideString wsCaption; if (pData) { pData->GetCaption(m_pInterface, wsCaption); } CFX_RectF rtText; rtText.Set(0, 0, 0, 0); if (!wsCaption.IsEmpty()) { CalcTextRect(wsCaption, pTheme, 0, m_iTTOAlign, rtText); } switch (m_pProperties->m_dwStyleExes & FWL_STYLEEXT_PSB_ModeMask) { case FWL_STYLEEXT_PSB_TextOnly: DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); break; case FWL_STYLEEXT_PSB_IconOnly: if (pData) { pPicture = pData->GetPicture(m_pInterface); } if (pPicture) { CFX_PointF point; switch (m_iTTOAlign) { case 0: { point.x = m_rtClient.left; point.y = m_rtClient.top; break; } case 1: { point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top; break; } case 2: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top; break; case 4: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 5: point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 6: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; break; case 8: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; case 9: point.x = m_rtClient.left + (m_rtClient.width / 2 - pPicture->GetWidth() / 2); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; case 10: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth(); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); break; } pGraphics->DrawImage(pPicture, point, &matrix); } break; case FWL_STYLEEXT_PSB_TextIcon: if (pPicture) { CFX_PointF point; switch (m_iTTOAlign) { case 0: { point.x = m_rtClient.left; point.y = m_rtClient.top; iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; } case 1: { point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top; iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; } case 2: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top; iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; ipicheight = pPicture->GetHeight() / 2 - m_rtCaption.top - rtText.height / 2; break; case 4: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = m_rtClient.left + pPicture->GetWidth() - 7; break; case 5: point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; break; case 6: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top + m_rtClient.height / 2 - pPicture->GetHeight() / 2; iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; break; case 8: point.x = m_rtClient.left; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = (FX_FLOAT)(pPicture->GetWidth() - 7); ipicheight -= rtText.height / 2; break; case 9: point.x = m_rtClient.left + (m_rtClient.width / 2 - (pPicture->GetWidth() + rtText.width) / 2); point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = pPicture->GetWidth() - ((m_rtClient.width) / 2 - rtText.width / 2 - point.x) + rtText.width / 2 - 7; ipicheight -= rtText.height / 2; break; case 10: point.x = m_rtClient.left + m_rtClient.width - pPicture->GetWidth() - rtText.width; point.y = m_rtClient.top + m_rtClient.height - pPicture->GetHeight(); iPicwidth = m_rtClient.left + m_rtClient.width - point.x - pPicture->GetWidth() - rtText.width + 7; ipicheight -= rtText.height / 2; break; } pGraphics->DrawImage(pPicture, point, &matrix); } matrix.e += m_rtClient.left + iPicwidth; matrix.f += m_rtClient.top + ipicheight; DrawText(pGraphics, m_pProperties->m_pThemeProvider, &matrix); break; } return FWL_ERR_Succeeded; }