\82«ã\82¦ã\83³ã\82¿/å\8d\98ç´\94å¢\97å\8a å¾\8cä¸\8då¤\89ã\82«ã\82¦ã\83³ã\82¿.cs - RSS feed" href="/view?p=strokestylet/CsWin10Desktop3.git;a=rss;f=FDK24/%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF/%C3%A5%C2%8D%C2%98%C3%A7%C2%B4%C2%94%C3%A5%C2%A2%C2%97%C3%A5%C2%8A%C2%A0%C3%A5%C2%BE%C2%8C%C3%A4%C2%B8%C2%8D%C3%A5%C2%A4%C2%89%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF.cs" type="application/rss+xml" /> \82«ã\82¦ã\83³ã\82¿/å\8d\98ç´\94å¢\97å\8a å¾\8cä¸\8då¤\89ã\82«ã\82¦ã\83³ã\82¿.cs - RSS feed (no merges)" href="/view?p=strokestylet/CsWin10Desktop3.git;a=rss;f=FDK24/%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF/%C3%A5%C2%8D%C2%98%C3%A7%C2%B4%C2%94%C3%A5%C2%A2%C2%97%C3%A5%C2%8A%C2%A0%C3%A5%C2%BE%C2%8C%C3%A4%C2%B8%C2%8D%C3%A5%C2%A4%C2%89%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF.cs;opt=--no-merges" type="application/rss+xml" /> \82«ã\82¦ã\83³ã\82¿/å\8d\98ç´\94å¢\97å\8a å¾\8cä¸\8då¤\89ã\82«ã\82¦ã\83³ã\82¿.cs - Atom feed" href="/view?p=strokestylet/CsWin10Desktop3.git;a=atom;f=FDK24/%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF/%C3%A5%C2%8D%C2%98%C3%A7%C2%B4%C2%94%C3%A5%C2%A2%C2%97%C3%A5%C2%8A%C2%A0%C3%A5%C2%BE%C2%8C%C3%A4%C2%B8%C2%8D%C3%A5%C2%A4%C2%89%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF.cs" type="application/atom+xml" /> \82«ã\82¦ã\83³ã\82¿/å\8d\98ç´\94å¢\97å\8a å¾\8cä¸\8då¤\89ã\82«ã\82¦ã\83³ã\82¿.cs - Atom feed (no merges)" href="/view?p=strokestylet/CsWin10Desktop3.git;a=atom;f=FDK24/%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF/%C3%A5%C2%8D%C2%98%C3%A7%C2%B4%C2%94%C3%A5%C2%A2%C2%97%C3%A5%C2%8A%C2%A0%C3%A5%C2%BE%C2%8C%C3%A4%C2%B8%C2%8D%C3%A5%C2%A4%C2%89%C3%A3%C2%82%C2%AB%C3%A3%C2%82%C2%A6%C3%A3%C2%83%C2%B3%C3%A3%C2%82%C2%BF.cs;opt=--no-merges" type="application/atom+xml" />

OSDN Git Service

文字列テクスチャクラスで文字列が表示されないバグを修正。
[strokestylet/CsWin10Desktop3.git] / FDK24 / ã\82«ã\82¦ã\83³ã\82¿ / å\8d\98ç´\94å¢\97å\8a å¾\8cä¸\8då¤\89ã\82«ã\82¦ã\83³ã\82¿.cs
1 using System;
2 using System.Diagnostics;
3
4 namespace FDK.カウンタ
5 {
6         /// <summary>
7         /// ある int 型整数を、開始値から終了値まで、一定間隔で単純増加させるカウンタ。
8         /// 終了値に達したら、それ以降は終了値を維持する(不変)。
9         /// </summary>
10         public class 単純増加後不変カウンタ
11         {
12                 /// <summary>
13                 /// カウンタを進行し、現在の値を取得する。
14                 /// </summary>
15                 public int 現在値
16                 {
17                         get
18                         {
19                                 lock( this.排他利用 )
20                                 {
21                                         this.進行する();
22                                         return this.bs_現在値;
23                                 }
24                         }
25                 }
26                 /// <summary>
27                 /// カウンタを進行し、現在の値を割合(0.0:開始値 ~ 1.0:終了値)に変換して取得する。
28                 /// </summary>
29                 public float 現在値の割合
30                 {
31                         get
32                         {
33                                 lock( this.排他利用 )
34                                 {
35                                         Debug.Assert( 0 != ( this.bs_終了値 - this.bs_開始値 ) );
36                                         this.進行する();
37                                         return (float) ( this.bs_現在値 - this.bs_開始値 ) / (float) ( this.bs_終了値 - this.bs_開始値 );
38                                 }
39                         }
40                 }
41                 public int 開始値
42                 {
43                         get
44                         {
45                                 lock( this.排他利用 )
46                                 {
47                                         return this.bs_開始値;
48                                 }
49                         }
50                 }
51                 public int 終了値
52                 {
53                         get
54                         {
55                                 lock( this.排他利用 )
56                                 {
57                                         return this.bs_終了値;
58                                 }
59                         }
60                 }
61                 /// <summary>
62                 /// カウンタを進行し、その結果、カウンタの進行がまだ動作中なら true を返す。(終了値に達しているかどうかは無関係。)
63                 /// </summary>
64                 public bool 動作中である
65                 {
66                         get
67                         {
68                                 lock( this.排他利用 )
69                                 {
70                                         this.進行する();        // 終了してるかどうか判定する前に、溜まってる進行を全部消化する。
71                                         return this.bs_動作中;
72                                 }
73                         }
74                 }
75                 /// <summary>
76                 /// カウンタの進行が一時停止されているなら true を返す。(終了値に達しているかどうかは無関係。)
77                 /// </summary>
78                 public bool 停止中である
79                         => !this.動作中である;
80                 /// <summary>
81                 /// カウンタを進行し、その結果、現在値が終了値に達していたら true を返す。
82                 /// </summary>
83                 public bool 終了値に達した
84                 {
85                         get
86                         {
87                                 lock( this.排他利用 )
88                                 {
89                                         this.進行する();
90                                         return ( this.bs_現在値 >= this.bs_終了値 );
91                                 }
92                         }
93                 }
94                 /// <summary>
95                 /// カウンタを進行し、その結果、まだ現在値が終了値に達していないら true を返す。
96                 /// </summary>
97                 public bool 終了値に達していない
98                         => !this.終了値に達した;
99
100                 /// <summary>
101                 /// コンストラクタ(1) 初期化のみ行い、カウンタは開始しない。
102                 /// </summary>
103                 public 単純増加後不変カウンタ()
104                 {
105                         this.間隔ms = QPCTimer.未使用;
106                         this.定間隔進行 = null;
107
108                         this.bs_開始値 = 0;
109                         this.bs_終了値 = 0;
110                         this.bs_現在値 = 0;
111                         this.bs_動作中 = false;
112                 }
113                 /// <summary>
114                 /// コンストラクタ(2) 初期化と同時にカウンタを開始する。
115                 /// </summary>
116                 public 単純増加後不変カウンタ( int 最初の値, int 最後の値, long 値をひとつ増加させるのにかける時間ms = 1000 ) : this()
117                 {
118                         this.開始する( 最初の値, 最後の値, 値をひとつ増加させるのにかける時間ms );
119                 }
120
121                 public void 開始する( int 最初の値, int 最後の値, long 値をひとつ増加させるのにかける時間ms = 1000 )
122                 {
123                         lock( this.排他利用 )
124                         {
125                                 this.間隔ms = 値をひとつ増加させるのにかける時間ms;
126                                 this.定間隔進行 = new 定間隔進行(); // 同時に開始する。
127                                 this.bs_開始値 = 最初の値;
128                                 this.bs_終了値 = System.Math.Max( 最初の値, 最後の値 );    // 逆転禁止。
129                                 this.bs_現在値 = 最初の値;
130                                 this.bs_動作中 = true;
131                         }
132                 }
133                 public void 一時停止する()
134                 {
135                         lock( this.排他利用 )
136                         {
137                                 this.定間隔進行.経過時間の計測を一時停止する();
138                                 this.bs_動作中 = false;
139                         }
140                 }
141                 public void 再開する()
142                 {
143                         lock( this.排他利用 )
144                         {
145                                 this.定間隔進行.経過時間の計測を再開する();
146                                 this.bs_動作中 = true;
147                         }
148                 }
149
150                 private long 間隔ms = QPCTimer.未使用;
151                 private 定間隔進行 定間隔進行 = null;
152                 private readonly object 排他利用 = new object();
153
154                 /// <summary>
155                 /// 前回のこのメソッドの呼び出しからの経過時間をもとに、必要なだけ現在値を増加させる。
156                 /// カウント値が終了値に達している場合は、それ以上増加しない(終了値を維持する)。
157                 /// </summary>
158                 private void 進行する()
159                 {
160                         if( QPCTimer.未使用 == this.間隔ms )
161                                 return; // 開始されていないなら無視。
162
163                         lock( this.排他利用 )
164                         {
165                                 this.定間隔進行?.経過時間の分だけ進行する( this.間隔ms, () => {
166
167                                         if( this.bs_動作中 )
168                                         {
169                                                 if( this.bs_現在値 < this.bs_終了値 ) // 終了値以降、現在値は不変。
170                                                         this.bs_現在値++;
171                                         }
172
173                                 } );
174                         }
175                 }
176
177                 #region " バックストア。"
178                 //---------------------------------
179                 private int bs_開始値 = 0;
180                 private int bs_終了値 = 0;
181                 private int bs_現在値 = 0;
182                 private bool bs_動作中 = false;
183                 //---------------------------------
184                 #endregion
185         }
186 }