/// <summary> /// Create outline that frames both gauges and energy display into a cohesive panel. /// </summary> /// <returns>S_OK on success, otherwise failure code.</returns> HRESULT AudioPanel::CreatePanelOutline() { HRESULT hr = m_pD2DFactory->CreatePathGeometry(&m_pPanelOutline); // Create panel outline path if (SUCCEEDED(hr)) { ID2D1GeometrySink *pGeometrySink = NULL; hr = m_pPanelOutline->Open(&pGeometrySink); if (SUCCEEDED(hr)) { /// Draw left wave display frame pGeometrySink->BeginFigure(D2D1::Point2F(0.15f,0.0353f), D2D1_FIGURE_BEGIN_FILLED); pGeometrySink->AddLine(D2D1::Point2F(0.13f,0.0353f)); pGeometrySink->AddLine(D2D1::Point2F(0.13f,0.2203f)); pGeometrySink->AddLine(D2D1::Point2F(0.2280f,0.2203f)); // Draw gauge outline pGeometrySink->AddLine(D2D1::Point2F(0.1270f,0.3021f)); pGeometrySink->AddArc(D2D1::ArcSegment(D2D1::Point2F(0.8730f,0.3021f), D2D1::SizeF(0.48f,0.48f), 102, D2D1_SWEEP_DIRECTION_COUNTER_CLOCKWISE, D2D1_ARC_SIZE_SMALL)); pGeometrySink->AddLine(D2D1::Point2F(0.7720f,0.2203f)); pGeometrySink->AddArc(D2D1::ArcSegment(D2D1::Point2F(0.2280f,0.2203f), D2D1::SizeF(0.35f,0.35f), 102, D2D1_SWEEP_DIRECTION_CLOCKWISE, D2D1_ARC_SIZE_SMALL)); // Reposition geometry without drawing pGeometrySink->SetSegmentFlags(D2D1_PATH_SEGMENT_FORCE_UNSTROKED); pGeometrySink->AddLine(D2D1::Point2F(0.7720f,0.2203f)); pGeometrySink->SetSegmentFlags(D2D1_PATH_SEGMENT_NONE); // Draw right wave display frame pGeometrySink->AddLine(D2D1::Point2F(0.87f,0.2203f)); pGeometrySink->AddLine(D2D1::Point2F(0.87f,0.0353f)); pGeometrySink->AddLine(D2D1::Point2F(0.85f,0.0353f)); pGeometrySink->EndFigure(D2D1_FIGURE_END_OPEN); hr = pGeometrySink->Close(); // Create panel outline brush if (SUCCEEDED(hr)) { hr = m_pRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::LightGray), &m_pPanelOutlineStroke); } } SafeRelease(pGeometrySink); } return hr; }
void STDMETHODCALLTYPE SetSegmentFlags(D2D1_PATH_SEGMENT vertexFlags) { if( m_BaseSink ) m_BaseSink->SetSegmentFlags(vertexFlags); }