diff options
author | crupest <crupest@outlook.com> | 2019-03-24 19:06:17 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-03-24 19:06:17 +0800 |
commit | 79d1d76509dbf6cf9c79f8eb55968535982975aa (patch) | |
tree | 322ed87621506f2e56f4887c73370db769843a29 /src/graph/graph_util.hpp | |
parent | e8be3841457853daefc26d0ca00256ad8c44f593 (diff) | |
download | cru-79d1d76509dbf6cf9c79f8eb55968535982975aa.tar.gz cru-79d1d76509dbf6cf9c79f8eb55968535982975aa.tar.bz2 cru-79d1d76509dbf6cf9c79f8eb55968535982975aa.zip |
...
Diffstat (limited to 'src/graph/graph_util.hpp')
-rw-r--r-- | src/graph/graph_util.hpp | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/graph/graph_util.hpp b/src/graph/graph_util.hpp new file mode 100644 index 00000000..2d5be5f3 --- /dev/null +++ b/src/graph/graph_util.hpp @@ -0,0 +1,63 @@ +#pragma once +#include "pre.hpp" + +#include <d2d1_1.h> +#include <functional> + +#include "exception.hpp" +#include "graph_manager.hpp" + +namespace cru::graph { +struct Dpi { + float x; + float y; +}; + +inline Dpi GetDpi() { + Dpi dpi; + GraphManager::GetInstance()->GetD2D1Factory()->GetDesktopDpi(&dpi.x, &dpi.y); + return dpi; +} + +inline int DipToPixelInternal(const float dip, const float dpi) { + return static_cast<int>(dip * dpi / 96.0f); +} + +inline int DipToPixelX(const float dip_x) { + return DipToPixelInternal(dip_x, GetDpi().x); +} + +inline int DipToPixelY(const float dip_y) { + return DipToPixelInternal(dip_y, GetDpi().y); +} + +inline float DipToPixelInternal(const int pixel, const float dpi) { + return static_cast<float>(pixel) * 96.0f / dpi; +} + +inline float PixelToDipX(const int pixel_x) { + return DipToPixelInternal(pixel_x, GetDpi().x); +} + +inline float PixelToDipY(const int pixel_y) { + return DipToPixelInternal(pixel_y, GetDpi().y); +} + +inline void WithTransform( + ID2D1RenderTarget* render_target, const D2D1_MATRIX_3X2_F matrix, + const std::function<void(ID2D1RenderTarget*)>& action) { + D2D1_MATRIX_3X2_F old_transform; + render_target->GetTransform(&old_transform); + render_target->SetTransform(old_transform * matrix); + action(render_target); + render_target->SetTransform(old_transform); +} + +inline ID2D1SolidColorBrush* CreateSolidColorBrush(const D2D1_COLOR_F& color) { + ID2D1SolidColorBrush* brush; + ThrowIfFailed(GraphManager::GetInstance() + ->GetD2D1DeviceContext() + ->CreateSolidColorBrush(color, &brush)); + return brush; +} +} // namespace cru::graph |