void touchmind::view::linkedge::impl::ArrowLinkEdgeView::CreateDeviceDependentResources( touchmind::Context *pContext, ID2D1RenderTarget *pRenderTarget) { if (GetLinkModel().expired()) { return; } auto link = GetLinkModel().lock(); if (!link->IsValid()) { return; } auto linkEdge = link->GetEdge(GetEdgeId()); auto node = link->GetNode(GetEdgeId()); if (linkEdge->IsRepaintRequired(GetRepaintCounter()) || m_pArrowGeometry == nullptr || m_pBrush == nullptr) { ID2D1Factory *pD2DFactory = pContext->GetD2DFactory(); D2D1_POINT_2F point0 = link->GetEdgePoint(GetEdgeId()); std::vector<D2D1_POINT_2F> points; view::GeometryBuilder::CalculateArrowPoints(point0, linkEdge->GetMarkerSize() + link->GetLineWidth(), linkEdge->GetMarkerSize() + link->GetLineWidth(), linkEdge->GetAngle(), node->GetAncestorPosition(), points); m_pArrowGeometry = nullptr; CHK_RES(m_pArrowGeometry, view::GeometryBuilder::CreatePathGeometryFromPoints(pD2DFactory, points, &m_pArrowGeometry)); m_pBrush = nullptr; CHK_RES(m_pBrush, pRenderTarget->CreateSolidColorBrush(link->GetLineColor(), D2D1::BrushProperties(), &m_pBrush)); SetRepaintCounter(linkEdge); } }
/**\brief Draws the scrollbar. */ void Scrollbar::Draw( int relx, int rely ){ int x, y; x = GetX() + relx; y = GetY() + rely; // Draw the Background bitmaps[0] -> DrawTiled( x, y, w, h ); // Draw the Arrows bitmaps[1] -> Draw( x, y ); bitmaps[2] -> Draw( x, y + h - bitmaps[2]->GetHeight() ); // Draw the Marker bitmaps[3] -> Draw( x, y + MarkerPosToPixel() ); bitmaps[4] -> DrawTiled( x, y + MarkerPosToPixel() + bitmaps[3]->GetHeight(), w, GetMarkerSize() - bitmaps[3]->GetHeight() - bitmaps[5]->GetHeight() ); bitmaps[5] -> Draw( x, y + MarkerPosToPixel() + GetMarkerSize() - bitmaps[5]->GetHeight() ); Widget::Draw( relx, rely ); }
/**\brief Calculates the marker position in pixel offset. */ int Scrollbar::MarkerPosToPixel( void ){ int markerpos; int effectivelen; float posratio; // 0 - 1 ratio of marker position effectivelen = this->h - GetMarkerSize() - bitmaps[1]->GetHeight() - bitmaps[2]->GetHeight(); posratio = TO_FLOAT(pos) / TO_FLOAT(maxpos - (this-> h )); markerpos = bitmaps[1]->GetHeight() + static_cast<int>(effectivelen* posratio); return markerpos; }
// Add a popup menu for the different marker types and frequencies void CXYChart::AddMarkerPopup( CMenu *addMenu, LPCTSTR titleString, int dataID, int startVal ) { CMenu subMenu; int i, markerShape, freq; CString string; UINT flag; subMenu.CreatePopupMenu(); // Marker shape markerShape = GetMarkerType( dataID ); flag = GetPopupCheckedFlag( markerShape == kXYMarkerNone ); addMenu->AppendMenu( MF_STRING | flag, startVal+kXYMarkerNone, _T("No marker")); flag = GetPopupCheckedFlag( markerShape == kXYMarkerCircle ); addMenu->AppendMenu( MF_STRING | flag, startVal+kXYMarkerCircle, _T("Circle marker")); flag = GetPopupCheckedFlag( markerShape == kXYMarkerSquare ); addMenu->AppendMenu( MF_STRING | flag, startVal+kXYMarkerSquare, _T("Square marker")); flag = GetPopupCheckedFlag( markerShape == kXYMarkerTriangle ); addMenu->AppendMenu( MF_STRING | flag, startVal+kXYMarkerTriangle, _T("Triangle marker")); flag = GetPopupCheckedFlag( markerShape == kXYMarkerX ); addMenu->AppendMenu( MF_STRING | flag, startVal+kXYMarkerX, _T("X marker")); addMenu->AppendMenu( MF_SEPARATOR); flag = GetPopupCheckedFlag( GetMarkerFillState( dataID ) ); addMenu->AppendMenu( MF_STRING | flag, startVal+kMenuMarkerFill, _T("Filled marker")); addMenu->AppendMenu( MF_SEPARATOR); // Marker size for( i = 0; i < nMarkerSizes; i++ ) { flag = GetPopupCheckedFlag( GetMarkerSize( dataID ) == 10*(i+1) ); string.Format( _T("%d"), i+1 ); subMenu.AppendMenu( MF_STRING | flag, startVal+i+kMenuMarkerSize, string ); } addMenu->AppendMenu( MF_POPUP, (UINT) subMenu.GetSafeHmenu(), _T("Marker size")); // Marker frequency freq = abs(GetMarkerFrequency( dataID )); if( freq == 1 ) freq = 10; flag = GetPopupCheckedFlag( GetMarkerFrequency( dataID ) == 1 ); addMenu->AppendMenu( MF_STRING | flag, startVal+kMenuMarkerFrequency, _T("Mark every point")); flag = GetPopupCheckedFlag( (GetMarkerFrequency( dataID )) > 1 ); string.Format( _T("Mark every %d points"), freq ); addMenu->AppendMenu( MF_STRING | flag, startVal+kMenuMarkerFrequency+1, string ); flag = GetPopupCheckedFlag( (GetMarkerFrequency( dataID )) < 0 ); string.Format( _T("Mark %d points"), freq ); addMenu->AppendMenu( MF_STRING | flag, startVal+kMenuMarkerFrequency+2, string ); }
void touchmind::print::XPSPrint::_PrintLinkEdge( const std::shared_ptr<touchmind::model::link::LinkModel> &link, EDGE_ID edgeId ) { auto linkEdge = link->GetEdge(edgeId); if (linkEdge->GetStyle() == EDGE_STYLE_NORMAL) { return; } FLOAT markerSize = linkEdge->GetMarkerSize(); auto node = link->GetNode(edgeId); D2D1_POINT_2F point0 = link->GetEdgePoint(edgeId); NODE_SIDE nodeSide = link->GetNode(edgeId)->GetAncestorPosition(); CComPtr<IXpsOMVisualCollection> canvasVisuals = nullptr; CHK_HR(m_pXpsCanvas->GetVisuals(&canvasVisuals)); COLORREF colorref = util::ColorUtil::ToColorref(link->GetLineColor()); CComPtr<IXpsOMSolidColorBrush> strokeBrush = nullptr; XPS_COLOR bodyColor; bodyColor.colorType = XPS_COLOR_TYPE_SRGB; bodyColor.value.sRGB.alpha = 0xFF; bodyColor.value.sRGB.red = GetRValue(colorref); bodyColor.value.sRGB.green = GetGValue(colorref); bodyColor.value.sRGB.blue = GetBValue(colorref); CHK_RES(strokeBrush, m_pXpsFactory->CreateSolidColorBrush(&bodyColor, nullptr, &strokeBrush)); CComPtr<IXpsOMGeometryFigure> xpsFigure = nullptr; if (linkEdge->GetStyle() == EDGE_STYLE_CIRCLE) { FLOAT shift = (nodeSide == NODE_SIDE_RIGHT ? markerSize / 2.0f : -markerSize / 2.0f); XPSGeometryBuilder::CreateCircleGeometry( m_pXpsFactory, D2D1::Point2F(point0.x + shift, point0.y), markerSize / 2.0f, &xpsFigure); } else { std::vector<D2D1_POINT_2F> points; view::GeometryBuilder::CalculateArrowPoints( point0, linkEdge->GetMarkerSize() + link->GetLineWidth(), linkEdge->GetMarkerSize() + link->GetLineWidth(), linkEdge->GetAngle(), node->GetAncestorPosition(), points); XPSGeometryBuilder::CreatePathGeometryFromPoints( m_pXpsFactory, points, &xpsFigure); } CComPtr<IXpsOMGeometry> xpsGeometry = nullptr; CHK_RES(xpsGeometry, m_pXpsFactory->CreateGeometry(&xpsGeometry)); CComPtr<IXpsOMGeometryFigureCollection> xpsFigureCollection = nullptr; CHK_HR(xpsGeometry->GetFigures(&xpsFigureCollection)); CHK_HR(xpsFigureCollection->Append(xpsFigure)); CComPtr<IXpsOMPath> xpsPath = nullptr; CHK_RES(xpsPath, m_pXpsFactory->CreatePath(&xpsPath)); CHK_HR(xpsPath->SetFillBrushLocal(strokeBrush)); CHK_HR(xpsPath->SetGeometryLocal(xpsGeometry)); CHK_HR(canvasVisuals->Append(xpsPath)); }