70 lines
1.7 KiB
C++
70 lines
1.7 KiB
C++
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
#include "pch.h"
|
|
#include "NearestPointRenderer.h"
|
|
#include "DirectXHelper.h"
|
|
|
|
using namespace D2D1;
|
|
using namespace GraphControl::DX;
|
|
using namespace std;
|
|
using namespace Windows::Foundation;
|
|
|
|
namespace
|
|
{
|
|
const ColorF c_DefaultPointColor = ColorF::Black;
|
|
constexpr float c_NearestPointRadius = 3;
|
|
}
|
|
|
|
NearestPointRenderer::NearestPointRenderer(DeviceResources* deviceResources)
|
|
: m_deviceResources{ deviceResources }
|
|
, m_color{ c_DefaultPointColor }
|
|
, m_ellipse{ D2D1_POINT_2F{ 0, 0 }, c_NearestPointRadius, c_NearestPointRadius }
|
|
{
|
|
CreateDeviceDependentResources();
|
|
}
|
|
|
|
void NearestPointRenderer::CreateDeviceDependentResources()
|
|
{
|
|
CreateBrush();
|
|
}
|
|
|
|
void NearestPointRenderer::ReleaseDeviceDependentResources()
|
|
{
|
|
m_brush.Reset();
|
|
}
|
|
|
|
void NearestPointRenderer::Render(const Point& location)
|
|
{
|
|
if (ID2D1DeviceContext* context = m_deviceResources->GetD2DDeviceContext())
|
|
{
|
|
m_ellipse.point.x = location.X;
|
|
m_ellipse.point.y = location.Y;
|
|
|
|
context->BeginDraw();
|
|
context->FillEllipse(m_ellipse, m_brush.Get());
|
|
|
|
// Ignore D2DERR_RECREATE_TARGET here. This error indicates that the device
|
|
// is lost. It will be handled during the next call to Present.
|
|
HRESULT hr = context->EndDraw();
|
|
if (hr != D2DERR_RECREATE_TARGET)
|
|
{
|
|
ThrowIfFailed(hr);
|
|
}
|
|
}
|
|
}
|
|
|
|
void NearestPointRenderer::SetColor(const ColorF& color)
|
|
{
|
|
m_color = color;
|
|
CreateBrush();
|
|
}
|
|
|
|
void NearestPointRenderer::CreateBrush()
|
|
{
|
|
m_brush.Reset();
|
|
ThrowIfFailed(
|
|
m_deviceResources->GetD2DDeviceContext()->CreateSolidColorBrush(m_color, &m_brush)
|
|
);
|
|
}
|