/ src / modules / MeasureTool / MeasureToolCore / Measurement.h
Measurement.h
 1  #pragma once
 2  #include "pch.h"
 3  
 4  #include <dcommon.h>
 5  #include <windef.h>
 6  #include <iosfwd>
 7  
 8  struct Measurement
 9  {
10      enum Unit
11      {
12          Pixel = 1,
13          Inch = 2,
14          Centimetre = 4,
15          Millimetre = 8,
16      };
17  
18      D2D1_RECT_F rect = {}; // corners are inclusive
19  
20      float px2mmRatio = 0;
21      static winrt::hstring abbreviations[4]; // Abbreviations of units.
22  
23      Measurement(const Measurement&) = default;
24      Measurement& operator=(const Measurement&) = default;
25  
26      explicit Measurement(D2D1_RECT_F d2dRect, float px2mmRatio);
27      explicit Measurement(RECT winRect, float px2mmRatio);
28  
29      float Width(const Unit units) const;
30      float Height(const Unit units) const;
31  
32      struct PrintResult
33      {
34          size_t crossSymbolPos[2] = {};
35          size_t strLen = {};
36      };
37  
38      static void InitResources();
39      static Unit GetUnitFromIndex(int index);
40      static const wchar_t* GetUnitAbbreviation(const Unit units);
41  
42      PrintResult Print(wchar_t* buf,
43                        const size_t bufSize,
44                        const bool printWidth,
45                        const bool printHeight,
46                        const int units) const;
47  
48      void PrintToStream(std::wostream& stream,
49                         const bool prependNewLine,
50                         const bool printWidth,
51                         const bool printHeight,
52                         const Unit units) const;
53  };