PrinterUnitConvert.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. //
  2. // System.Drawing.Printing.PrinterUnitConvert.cs
  3. //
  4. // Authors:
  5. // Martin Willemoes Hansen ([email protected])
  6. // Herve Poussineau ([email protected])
  7. //
  8. // (C) 2003 Martin Willemoes Hansen
  9. //
  10. namespace System.Drawing.Printing
  11. {
  12. public sealed class PrinterUnitConvert
  13. {
  14. private PrinterUnitConvert ()
  15. {
  16. }
  17. public static double Convert (double value,
  18. PrinterUnit fromUnit,
  19. PrinterUnit toUnit)
  20. {
  21. switch (fromUnit)
  22. {
  23. case PrinterUnit.Display:
  24. switch (toUnit)
  25. {
  26. case PrinterUnit.Display: return value;
  27. case PrinterUnit.ThousandthsOfAnInch: return value * 10;
  28. case PrinterUnit.HundredthsOfAMillimeter: return value * 2.54;
  29. case PrinterUnit.TenthsOfAMillimeter: return value * .254;
  30. }
  31. break;
  32. case PrinterUnit.ThousandthsOfAnInch:
  33. switch (toUnit)
  34. {
  35. case PrinterUnit.Display: return value / 10;
  36. case PrinterUnit.ThousandthsOfAnInch: return value;
  37. case PrinterUnit.HundredthsOfAMillimeter: return value * .254;
  38. case PrinterUnit.TenthsOfAMillimeter: return value * .0254;
  39. }
  40. break;
  41. case PrinterUnit.HundredthsOfAMillimeter:
  42. switch (toUnit)
  43. {
  44. case PrinterUnit.Display: return value / 2.54;
  45. case PrinterUnit.ThousandthsOfAnInch: return value / .254;
  46. case PrinterUnit.HundredthsOfAMillimeter: return value;
  47. case PrinterUnit.TenthsOfAMillimeter: return value / 10;
  48. }
  49. break;
  50. case PrinterUnit.TenthsOfAMillimeter:
  51. switch (toUnit)
  52. {
  53. case PrinterUnit.Display: return value / .254;
  54. case PrinterUnit.ThousandthsOfAnInch: return value / .0254;
  55. case PrinterUnit.HundredthsOfAMillimeter: return value * 10;
  56. case PrinterUnit.TenthsOfAMillimeter: return value;
  57. }
  58. break;
  59. }
  60. // should never happen
  61. throw new NotImplementedException();
  62. }
  63. public static int Convert (int value,
  64. PrinterUnit fromUnit,
  65. PrinterUnit toUnit)
  66. {
  67. return (int)Convert((double)value, fromUnit, toUnit);
  68. }
  69. public static Margins Convert (Margins value,
  70. PrinterUnit fromUnit,
  71. PrinterUnit toUnit)
  72. {
  73. return new Margins(
  74. Convert(value.Left, fromUnit, toUnit),
  75. Convert(value.Right, fromUnit, toUnit),
  76. Convert(value.Top, fromUnit, toUnit),
  77. Convert(value.Bottom, fromUnit, toUnit));
  78. }
  79. public static Point Convert (Point value,
  80. PrinterUnit fromUnit,
  81. PrinterUnit toUnit)
  82. {
  83. return new Point(
  84. Convert(value.X, fromUnit, toUnit),
  85. Convert(value.Y, fromUnit, toUnit));
  86. }
  87. public static Rectangle Convert (Rectangle value,
  88. PrinterUnit fromUnit,
  89. PrinterUnit toUnit)
  90. {
  91. return new Rectangle(
  92. Convert(value.X, fromUnit, toUnit),
  93. Convert(value.Y, fromUnit, toUnit),
  94. Convert(value.Width, fromUnit, toUnit),
  95. Convert(value.Height, fromUnit, toUnit));
  96. }
  97. public static Size Convert (Size value,
  98. PrinterUnit fromUnit,
  99. PrinterUnit toUnit)
  100. {
  101. return new Size(
  102. Convert(value.Width, fromUnit, toUnit),
  103. Convert(value.Height, fromUnit, toUnit));
  104. }
  105. }
  106. }