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);
  }
}
Пример #2
0
/**\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 );
}
Пример #3
0
/**\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;
}
Пример #4
0
// 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 );
}
Пример #5
0
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));
}