OSDN Git Service

#36373 NowLoading画面 (#STAGEFILE) のFullHD画像対応。これに伴い、プレビュー表示や動画表示の拡大率や座標値の算出部分をリファクタしています。
[dtxmania/dtxmania.git] / DTXManiaプロジェクト / コード / 全体 / CPreviewMagnifier.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Diagnostics;\r
5 \r
6 namespace DTXMania\r
7 {\r
8         public class CPreviewMagnifier\r
9         {\r
10 \r
11                 #region [ プロパティ(拡大率等の取得) ]\r
12                 /// <summary>\r
13                 /// 拡大後のwidth\r
14                 /// </summary>\r
15                 public int width;\r
16                 /// <summary>\r
17                 /// 拡大後のheight\r
18                 /// </summary>\r
19                 public int height;\r
20                 /// <summary>\r
21                 /// 拡大後のX拡大率\r
22                 /// </summary>\r
23                 public float magX;\r
24                 /// <summary>\r
25                 /// 拡大後のY拡大率\r
26                 /// </summary>\r
27                 public float magY;\r
28 \r
29                 public int px;\r
30                 public int py;\r
31 \r
32                 /// <summary>\r
33                 /// プレビュー画像向けの拡大率か(それとも、演奏画面向けの拡大率か)\r
34                 /// </summary>\r
35                 public enum EPreviewType : int\r
36                 {\r
37                         MusicSelect = 0,                        // 選曲画面\r
38                         PlayingFront = 1,                       // 演奏画面(ウインドウ表示の動画)\r
39                         PlayingBackground = 2           // 演奏画面(背景全画面表示の動画)\r
40                 }\r
41                 public EPreviewType ePreviewType;\r
42                 #endregion\r
43 \r
44                 #region [ 定数定義 ]\r
45                 // 配列の0,1要素はそれぞれ, Preview用, 演奏画面用\r
46                 private int[] WIDTH_VGA_SET = { 204, 278, 640 };                     // VGA版DTXManiaのプレビュー画像width値\r
47                 private int[] HEIGHT_VGA_SET = { 269, 355, 1920 };                      // VGA版DTXManiaのプレビュー画像height値\r
48                 private int[] WIDTH_HD_SET = { 400, 400, 1920 };                      // HD版DTXManiaのプレビュー画像width値\r
49                 private int[] HEIGHT_HD_SET = { 400, 600, 1080 }; // 600は仮                                                          // HD版DTXManiaのプレビュー画像height値\r
50                 private int[] WIDTH_FHD_LIMIT = { 320, 320, 640 };                     // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
51                 private int[] HEIGHT_FHD_LIMIT = { 416, 416, 480 };                      // VGA版/FullHD版どちらのプレビュー画像とみなすかのwidth閾値\r
52                 private int[] WIDTH_FHD_SET = { (int)(204 * Scale.X), (int)(278 * Scale.X), 1920 }; // FHD版DTXManiaのプレビュー画像height値\r
53                 private int[] HEIGHT_FHD_SET = { (int)(269 * Scale.Y), (int)(355 * Scale.Y), 1080 };  // FHD版DTXManiaのプレビュー画像height値\r
54                 #endregion\r
55 \r
56 \r
57                 #region [ コンストラクタ ]\r
58                 /// <summary>\r
59                 /// コンストラクタ\r
60                 /// </summary>\r
61                 public CPreviewMagnifier()\r
62                 {\r
63                 }\r
64                 public CPreviewMagnifier(EPreviewType _ePreviewType)\r
65                 {\r
66                         CPreviewMagnifier_initializer(_ePreviewType, 0, 0);\r
67                 }\r
68                 public CPreviewMagnifier( EPreviewType _ePreviewType, int _px, int _py )\r
69                 {\r
70                         CPreviewMagnifier_initializer( _ePreviewType, _px, _py );\r
71                 }\r
72                 private void CPreviewMagnifier_initializer( EPreviewType _ePreviewType, int _px, int _py)\r
73                 {\r
74                         this.ePreviewType = _ePreviewType;\r
75                         this.px = _px;\r
76                         this.py = _py;\r
77                 }\r
78                 #endregion\r
79 \r
80                 /// <summary>\r
81                 /// 拡大率の取得\r
82                 /// </summary>\r
83                 /// <param name="width_org">元の幅</param>\r
84                 /// <param name="height_org">元の高さ</param>\r
85                 /// <param name="magX_org">元の拡大率(幅)</param>\r
86                 /// <param name="magY_org">元の拡大率(高さ)</param>\r
87                 /// <remarks>出力はプロパティで得てください。</remarks>\r
88                 public void GetMagnifier(int width_org, int height_org, float magX_org, float magY_org)\r
89                 {\r
90                         //bool bIsPreview = ( this.ePreviewType == EPreviewType.MusicSelect );\r
91 \r
92                         // #35820 画像サイズに関係なく、プレビュー領域に合わせる add ikanick 15.12.08\r
93                         // #36176 プレビュー画像については、前仕様(204x269)画像はアスペクト比を維持する change ikanick 16.03.20\r
94 \r
95                         if ( this.ePreviewType == EPreviewType.PlayingBackground )      // フル背景動画に限り、上位指定の表示座標を無視する\r
96                         {\r
97                                 this.px = this.py = 0;\r
98                         }\r
99 \r
100                         #region [ アスペクト比を維持した拡大縮小 ]\r
101                         this.width = width_org;\r
102                         this.height = height_org;\r
103                         this.magX = magX_org * width_fhd_set / width_org;\r
104                         this.magY = magY_org * height_fhd_set / height_org;\r
105 \r
106                         if ( magX > magY )\r
107                         {\r
108                                 magX = magY;\r
109                                 px += (int) ( ( width_fhd_set - ( width_org * magY ) ) / 2 );\r
110                         }\r
111                         else\r
112                         {\r
113                                 magY = magX;\r
114                                 py += (int) ( ( height_fhd_set - ( height_org * magX ) ) / 2 );\r
115                         }\r
116                         #endregion\r
117                 }\r
118 \r
119                 #region [ bIsPreviewによる配列→定数読み替え ]\r
120                 private int width_vga_set\r
121                 {\r
122                         get\r
123                         {\r
124                                 return WIDTH_VGA_SET[ (int)ePreviewType ];\r
125                         }\r
126                 }\r
127                 private int height_vga_set\r
128                 {\r
129                         get\r
130                         {\r
131                                 return HEIGHT_VGA_SET[ (int)ePreviewType ];\r
132                         }\r
133                 }\r
134                 private int width_hd_set\r
135                 {\r
136                         get\r
137                         {\r
138                                 return WIDTH_HD_SET[ (int)ePreviewType ];\r
139                         }\r
140                 }\r
141                 private int height_hd_set\r
142                 {\r
143                         get\r
144                         {\r
145                                 return HEIGHT_HD_SET[ (int)ePreviewType ];\r
146                         }\r
147                 }\r
148                 private int width_fhd_limit\r
149                 {\r
150                         get\r
151                         {\r
152                                 return WIDTH_FHD_LIMIT[ (int)ePreviewType ];\r
153                         }\r
154                 }\r
155                 private int height_fhd_limit\r
156                 {\r
157                         get\r
158                         {\r
159                                 return HEIGHT_FHD_LIMIT[ (int)ePreviewType ];\r
160                         }\r
161                 }\r
162                 private int width_fhd_set\r
163                 {\r
164                         get\r
165                         {\r
166                                 return WIDTH_FHD_SET[ (int)ePreviewType ];\r
167                         }\r
168                 }\r
169                 private int height_fhd_set\r
170                 {\r
171                         get\r
172                         {\r
173                                 return HEIGHT_FHD_SET[ (int)ePreviewType ];\r
174                         }\r
175                 }\r
176                 #endregion\r
177         }\r
178 }\r