cscope 15 $HOME/Code/research/ui/toolkit/test 0000375447
@../include/Application.h
1 #�agm�
��
2
~"Comm�.h
"
3
~"Obje�.h
"
4
BEGIN_NAMESPACE
7 �as�
cA�li�ti�
:
public
Obje�
9
public
:
10
A�li�ti�
();
11 ~
A�li�ti�
();
12
exec
();
13
m��e�ed
:
14
��t
();
15
bo�
hasS��ed
();
16
m�iv�e
:
17
gameLo�
();
18
n�m�Lo�
();
19
A�li�ti�D�a
*
mm_d�a
;
23
gEND_NAMESPACE
@../include/Common.h
1 #�agm�
��
35
~<�r�g
>
36
~<ve��
>
37
~<m�
>
38
~<mu�x
>
39
~<un�d�ed_m�
>
40
~<c�d�t
>
41
~<mem�y
>
48 #i�de�
NO_NAMESPACE
49
#NAMESPACE
Lu�
)
50
#BEGIN_NAMESPACE
�me�a�
NAMESPACE
{
)
51
#END_NAMESPACE
};
)
52
#USING_NAMESPACE
us�g
�me�a�
NAMESPACE
;
53 #��
)
54
#NAMESPACE
)
55
#BEGIN_NAMESPACE
)
56
#END_NAMESPACE
)
57
#USING_NAMESPACE
)
62
#USE_RETINA
1
)
65 #ifde�
USE_RETINA
67
bo�
c_u�R��a
;
68
c_�t�aS��
;
73
�me�a�
g�d
75
g�m��e
<
�ass
gC
>
76
cڡex�
�ut�
size
(cڡ
C
&
c
�->
de�ty�
(c.size())
78
gc
.
size
();
80
g�m��e
<
�ass
gT
,
g�d
::
size_t
N
>
81
cڡex�
�d
::
size_t
size
(cڡ
T
(&
��y
)[
N
]�
n�x��
83
N
;
88
#ARRAY_SIZE
(
��y
�\
)
89
g�d
::
$size
(
��y
)
92
#STATIC_ASSERT
(
c�d�i�
,
�me
�\
)
93
`��ic_as��
(
c�d�i�
, #name);
96
#ENUM_AS_FLAGS
(�\
)
97
�l�e
ݔ��
|(
a
,
b
�{
��ic_��
<>(��ic_��<>��| s�tic_��<>(b));
}
} \
98
�l�e
gݔ��
|=(&
a
,
gb
�{
ga
=
��ic_��
<>(��ic_��<>��| s�tic_��<>(
b
)); } \
99
�l�e
gݔ��
&=(&
a
,
gb
�{
ga
=
��ic_��
<>(��ic_��<>��& s�tic_��<>(
b
)); } \
100
�l�e
gݔ��
~(
ga
�{
g��ic_��
<>(~static_cast<>(a)); }
109
#DEBUG_PRINT
(
fmt
, ...�\
)
110
�r�tf
(
�d�r
, "%s(%d): "
fmt
,
__FILE__
,
__LINE__
,
__VA_ARGS__
)
120
BEGIN_NAMESPACE
123
g�m��e
<
ty��me
gT
>
124
T
$�amp
(
T
a_v�
, T
a_m�
, T
a_max
)
126
�d
::
`m�
(�d::
`max
(
a_v�
,
a_m�
),
a_max
);
127
}
}
130
g�m��e
<
ty��me
gT
>
131
T
$˽
(
T
v0
, T
v1
, T
t
)
133 (
`T
(1�-
t
�*
v0
+� *
v1
;
134
}
}
137
sSize
139
mm_width
;
140
mm_height
;
144
sPo�t
146
mm_x
;
147
mm_y
;
151
sRe��g�
154
Po�t
mm_pos�i�
;
157
mm_x
;
158
mm_y
;
162
Size
mm_size
;
165
mm_width
;
166
mm_height
;
172
g�m��e
<
ty��me
gT
>
173
�ass
gSh�edP�
:
public
�d
::
sh�ed_�r
<
T
>
175
public
:
176
Sh�edP�
(
T
*
�wI�m
�:
�d
::
sh�ed_�r
<T>(newItem) {}
180
g�m��e
<
ty��me
gT
>
181
�ass
gW�kP�
:
public
�d
::
w�k_�r
<
T
>
187 �as�
cP�ym�phicC�ssBa�
189
mpublic
:
190
P�ym�phicC�ssBa�
() = ;
191
mv�tu�
~
P�ym�phicC�ssBa�
() = ;
192
P�ym�phicC�ssBa�
(const PolymorphicClassBase&) = ;
193
P�ym�phicC�ssBa�
(PolymorphicClassBase&&) = ;
194
mP�ym�phicC�ssBa�
&
mݔ��
=(cڡ
P�ym�phicC�ssBa�
&) = ;
195
mP�ym�phicC�ssBa�
&
mݔ��
=(
P�ym�phicC�ssBa�
&&) = ;
199 �as�
cI����Ba�
:
public
P�ym�phicC�ssBa�
204 �as�
cAb���C�ssBa�
:
public
P�ym�phicC�ssBa�
213
g�m��e
<
ty��me
gT
>
214
�ass
gVe��
:
public
�d
::
ve��
<
T
>
216
public
:
217
Ve��
() {}
218
Ve��
(
size_t
_Cou�
, cڡ
T
&
_V�
�:
�d
::
ve��
<T>(_Cou�,
g_V�
) {}
346 �as�
cS��g
:
public
�d
::
�r�g
348
public
:
349
$S��g
() {}
350
$S��g
(cڡ *
fmt
, ...)
352
�d
::
ve��
<>
`�r
(50,'\0');
353
va_li�
�
;
354
n
= -1;
355 (
n
<�-1�|| (
`size_t
��>�
�r
.
`size
())) {
356
�r
.
`�size
((
n
<�-1�? (�r.
`size
() * 2) : (n + 1));
357
`va_��t
(
�
,
fmt
);
358
n
=
`v���tf
(
�r
.
`d�a
(), s�.
`size
(),
fmt
,
�
);
359
`va_�d
(
�
);
361 *
this
=
�r
.
`d�a
();
362
}
}
363
$S��g
(
�d
::
�r�g
a_�r
�: std::
$�r�g
(
a_�r
�{
}
}
364 cڡ
�d
::
�r�g
&
$toUtf8
(�cڡ { *
this
;
}
}
365
gS��g
&
gݔ��
=(
�d
::
�r�g
a_�r
�{ *((�d::�r�g*)
this
��a_�r; *
gthis
; }
366
gS��g
&
gݔ��
=(cڡ *
a_�r
�{ *((
�d
::
�r�g
*)
this
��a_�r; *
gthis
; }
367
ݔ��
cڡ*(�cڡ {
c_�r
(); }
371
g�m��e
<
ty��me
gT1
,�y��m�
gT2
>
372
�ass
gPa�
:
public
�d
::
��
<
T1
,
gT2
>
381
g�m��e
<
ty��me
gT1
,�y��m�
gT2
>
382
�ass
gM�
:
public
�d
::
m�
<
T1
,
gT2
>
384
gpublic
:
385
���
(
T1
key
,
T2
v�ue
�{
g�d
::
m�
<T1,
gT2
>::���(
�d
::
make_��
(key, value)); }
390
g�m��e
<
ty��me
gT1
,�y��m�
gT2
>
391
�ass
gHashM�
:
public
�d
::
un�d�ed_m�
<
T1
,
gT2
>
393
gpublic
:
394
���
(
T1
key
,
T2
v�ue
�{
g�d
::
un�d�ed_m�
<T1,
gT2
>::���(
�d
::
make_��
(key, value)); }
399
g�m��e
<
ty��me
gT
>
400
�ass
gDi�iڬy
:
public
�d
::
un�d�ed_m�
<
S��g
,
gT
>
402
gpublic
:
403
���
(
S��g
key
,
T
v�ue
�{
g�d
::
un�d�ed_m�
<S��g,
gT
>::���(
�d
::
make_��
(key, value)); }
407
g�m��e
<
ty��me
gKeyT
,�y��m�
gV�ueT
>
408
�ass
gCache
:
public
�d
::
un�d�ed_m�
<
KeyT
,
gV�ueT
>
410
gpublic
:
424
g�m��e
<
ty��me
gT1
,�y��m�
gT2
>
425 �as�
cBid�e�iڮM�
427
mpublic
:
428
size_t
$size
(�{
m_f�w�dM�
.
`size
(); }
430 cڡ
T2
&
$f�w�dF�d
(cڡ
T1
&
a
, cڡ
T2
&
def
) const {
431 (
m_f�w�dM�
.
`f�d
(
a
�!�m_f�w�dM�.
`�d
()�? m_f�w�dM�.f�d�)->
�c�d
:
def
;
432
}
}
434 cڡ
gT1
&
$�v��F�d
(cڡ
T2
&
b
, cڡ
T1
&
def
) const {
435 (
m_�v��M�
.
`f�d
(
b
�!�m_�v��M�.
`�d
()�? m_�v��M�.f�d(b)->
�c�d
:
def
;
436
}
}
438
$���
(
T1
a
,
T2
b
) {
439
m_f�w�dM�
.
`���
(
a
,
b
);
440
m_�v��M�
.
`���
(
b
,
a
);
441
}
}
442
g�iv�e
:
443
M�
<
T1
,
gT2
>
gm_f�w�dM�
;
444
gM�
<
gT2
,
gT1
>
gm_�v��M�
;
449
�ass
gSc�eLock
:
public
�d
::
unique_lock
<�d::
�cursive_mu�x
>
451
public
:
452
Sc�eLock
(
�d
::
�cursive_mu�x
&
a_mu�x
�: std::
unique_lock
<std::recursive_mutex>(a_mutex) {}
454
�m��e
<
ty��me
F
>
455
u�ocked
(
F
&&
a_func
)
457
u�ock
();
458
a_func
();
459
lock
();
464
g�m��e
<
ty��me
gT
>
465 �as�
cG��icFa��yI�m
467
mpublic
:
468
$G��icFa��yI�m
(cڡ *
a_�me
,
T
a_v�ue
)
469 :
`m_�me
(
a_�me
),
`m_v�ue
(
a_v�ue
),
`m_�xt
(
$g�Fa��yH�d
())
471
`g�Fa��yH�d
(
this
);
474 cڡ
G��icFa��yI�m
<
T
>*
`g�Fa��yH�d
(cڡ G��icFa��yI�m<T>*
�wV�ue
=
nuαr
);
476 cڡ *
m_�me
;
477
T
m_v�ue
;
478 cڡ
G��icFa��yI�m
<
T
>*
m_�xt
;
479
}
};
483
g�m��e
<
ty��me
gT
>
484 cڡ
gG��icFa��yI�m
<
gT
>* G��icFa��yI�m<T>::
g�Fa��yH�d
(cڡ
G��icFa��yI�m
<
T
>*
�wV�ue
)
486 cڡ
G��icFa��yI�m
<
T
>*
s_���yH�d
=
nuαr
;
487 i�(
g�wV�ue
!�
nuαr
)
488
s_���yH�d
=
�wV�ue
;
489
gs_���yH�d
;
493
g�m��e
<
ty��me
gT
>
494 �as�
cG��icFa��yI��t�
496
mpublic
:
497
G��icFa��yI��t�
(cڡ
G��icFa��yI�m
<
T
>*
a_v�ue
�:
$m_cu��t
(
a_v�ue
) { }
498
G��icFa��yI��t�
<
T
>&
ݔ��
++(�{
m_cu��t
= m_cu��t->
m_�xt
; *
this
;
}
}
499
bo�
gݔ��
!=(cڡ
G��icFa��yI��t�
<
T
>&
a_�h�
�{
m_cu��t
!=�_other.m_current; }
500 cڡ
gT
&
gݔ��
*(�{
gm_cu��t
->
gm_v�ue
; }
501
g�iv�e
:
502 cڡ
G��icFa��yI�m
<
T
>*
m_cu��t
;
506
g�m��e
<
ty��me
gT
>
507 �as�
cG��icFa��y
509
mpublic
:
510
G��icFa��yI��t�
<
T
>
$beg�
(�{
G��icFa��yI��t�
<
T
>(
G��icFa��yI�m
<T>::
`g�Fa��yH�d
()); }
511
G��icFa��yI��t�
<
T
>
$�d
(�{
G��icFa��yI��t�
<
T
>(
nuαr
);
}
}
610
END_NAMESPACE
614
�me�a�
g�d
616
g�m��e
<>
617
ghash
<
gNAMESPACE
::
S��g
>
619
size_t
ݔ��
()(cڡ
NAMESPACE
::
S��g
&
�r
�cڡ
n�x��
621
hash
<
�d
::
�r�g
>
h
;
622
h
(
�r
);
@../include/CommonWidgets.h
1 #�agm�
��
2
~"Comm�.h
"
3
~"Widg�.h
"
4
~"Prݔty.h
"
5
BEGIN_NAMESPACE
11
g�m��e
<
ty��me
gT
>
12 �as�
cAb���V�ueWidg�
:
public
Widg�
19
public
:
20
Ab���V�ueWidg�
(
Widg�
*
a_���
,
Ab���Prݔty
<
T
>&
a_v�ue
)
21 :
Widg�
(
a_���
, 0,
LP_V�ti�l
, 0, 0, 10, 10),
$v�ue
(
a_v�ue
)
23
`c���
(
v�ue
.
v�ueCh�ged
,
this
, &
Ab���V�ueWidg�
<
T
>::
��esh
);
25
$��esh
()
27
`���t
();
28
}
}
31
gAb���Prݔty
<
gT
>&
gv�ue
;
35
�me�a�
gd�a�s
37
Prݔty
<
bo�
>
g_u�ssig�dBo�
;
38
Prݔty
<
S��g
>
g_u�ssig�dS��g
;
44
�ass
gCheckab�Widg�
:
public
Ab���V�ueWidg�
<
bo�
>
46
public
:
47
Checkab�Widg�
(
Obje�
*
a_���
, cڡ *
a_�me
);
48
Checkab�Widg�
(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_v�ue
);
51
gAb���Prݔty
<
gbo�
>&
gchecked
;
56
#CLASS
(
T
,
P��tT
�\
)
57
�ass
gT
:
public
Inh��
<
P��tT
, T>
60
�ass
gHBox
:
public
Inh��
<
Widg�
, HBox>
62
gpublic
:
63
HBox
(
Obje�
*
a_���
, cڡ *
a_�me
�: HBox(
Obje�P�Ca�
<
Widg�
>(a_parent)) {}
64
HBox
(
Widg�
*
a_���
);
67
bo�
b�h
(
a
,
b
�{
g�ue
; }
68
g��
;
71
START_MEMBERS
72
REFLECT_MEMBER_FUNCTION
(
b�h
, "Test member function�eflected")
73
REFLECT_MEMBER
(
��
, "Test int�eflected")
74
gEND_MEMBERS
78
�ass
gVBox
:
public
Inh��
<
Widg�
, VBox>
80
gpublic
:
81
VBox
(
Obje�
*
a_���
, cڡ *
a_�me
�: VBox(
Obje�P�Ca�
<
Widg�
>(a_parent)) {}
82
VBox
(
Widg�
*
a_���
);
84
g��2
;
85
START_MEMBERS
86
ADD_MEMBER
(,
��
, "Test int member")
87
gEND_MEMBERS
92 �as�
cGrid
:
public
HBox
94
public
:
95
$Grid
(
Widg�
*
���
,
c�umns
�:
$HBox
(
���
)
97
v
=
�w
VBox
*[
c�umns
];
98
i
= 0; i <
c�umns
; i++)
99
v
[
i
] =
�w
`VBox
(
this
);
101 ~
$Grid
()
103
d��e
[]
v
;
104
}
}
105
VBox
**
gv
;
109 �as�
cGroupBoxS��r
:
public
Widg�
111
public
:
112
GroupBoxS��r
(
Widg�
*
a_���
);
113
m��e�ed
:
114
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
118
�ass
gGroupBox
:
public
Ab���V�ueWidg�
<
S��g
>
120
public
:
121
GroupBox
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_t��
);
122
gAb���Prݔty
<
gS��g
>&
gt��
;
123
gPrݔty
<
gbo�
>
gdi�b�d
;
124
g��e�ed
:
125
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
126
g�iv�e
:
127
GroupBoxS��r
m_t��S��
;
131 �as�
cHS��
:
public
Widg�
133
public
:
134
HS��
(
Widg�
*
a_���
);
135
m��e�ed
:
136
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
140 �as�
cVS��
:
public
Widg�
142
public
:
143
VS��
(
Widg�
*
a_���
);
144
m��e�ed
:
145
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
149
�ass
gLab�
:
public
Ab���V�ueWidg�
<
S��g
>
151
public
:
152
Lab�
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_�xt
);
153
gPrݔty
<
gbo�
>
gdi�b�d
;
157
gAb���Prݔty
<
gS��g
>&
g�xt
;
158
g��e�ed
:
159
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
160
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
164 �as�
cBu��
:
public
Widg�
166
public
:
167
Bu��
(
Widg�
*
a_���
, cڡ *
a_�xt
= "");
169
mA�i�
<
mbo�
>
ma�iv�ed
;
171
mPrݔty
<
mS��g
>
m�xt
;
174
mPrݔty
<
mbo�
>
mdi�b�d
;
175
mPrݔty
<
mbo�
>
mhasFocus
;
176
mPrݔty
<
mbo�
>
misDe�u�
;
178
m��e�ed
:
179
��esh
();
180
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
181
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
182
mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
183
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
184
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
186
m�iv�e
:
187
bo�
m_mou�DownInBu��
;
188
bo�
mm_mou�Ov�Bu��
;
192 �as�
cCheckBox
:
public
Checkab�Widg�
194
public
:
195
CheckBox
(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_checked
, cڡ *
a_�xt
= "");
196
v�tu�
togg�
();
197
mPrݔty
<
mS��g
>
m�xt
;
198
mPrݔty
<
mbo�
>
mdi�b�d
;
199
mPrݔty
<
mbo�
>
mhasFocus
;
200
mPrݔty
<
mbo�
>
misDe�u�
;
202
�TextCh�ged
(
S��g
a_�xt
);
203
m��e�ed
:
204
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
205
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
206
mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
207
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
208
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
209
m�iv�e
:
210
bo�
m_mou�DownInBu��
;
211
bo�
mm_mou�Ov�Bu��
;
215 �as�
cRadioBu��
:
public
Checkab�Widg�
217
public
:
218
RadioBu��
(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_checked
, cڡ *
a_�xt
= "");
219
v�tu�
togg�
();
220
mPrݔty
<
mS��g
>
m�xt
;
221
mPrݔty
<
mbo�
>
mdi�b�d
;
222
mPrݔty
<
mbo�
>
mhasFocus
;
223
mPrݔty
<
mbo�
>
misDe�u�
;
224
m��e�ed
:
225
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
226
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
227
mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
228
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
229
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
230
m�iv�e
:
231
bo�
m_mou�DownInBu��
;
232
bo�
mm_mou�Ov�Bu��
;
236
�ass
gL�eEd�
:
public
Ab���V�ueWidg�
<
S��g
>
238
public
:
239
L�eEd�
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_�xt
);
240
gAb���Prݔty
<
gS��g
>&
g�xt
;
241
gPrݔty
<
gbo�
>
gdi�b�d
;
242
gPrݔty
<
gbo�
>
ghasFocus
;
243
g��e�ed
:
244
��esh2
(�{
���t
(); }
245
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
246
tim�Ev�t
(
Tim�Ev�t
&
a_ev�t
);
247
keyEv�t
(
KeyEv�t
&
a_ev�t
);
248
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
249
mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
250
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
251
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
252
g�iv�e
:
253
bo�
m_mou�Ov�
;
254
Tim�Id
gm_tim�Id
;
255
bo�
gm_���On
;
256
size_t
gm_���Pos�i�
;
264 �as�
cR�ge
266
mpublic
:
268
$�tM�
(
u�t32_t
m
�{
m�
= m; }
269
$�tMax
(
u�t32_t
m
�{
max
= m;
}
}
270
$�tV�ue
(
u�t32_t
v
�{
v�
= v;
}
}
271
u�t32_t
$g�V�ue
(�{
v�
;
}
}
274
u�t32_t
$g�T�n��edV�ue
(
u�t32_t
a_m�
, u�t32_�
a_max
)
276
x
= (*
this
);
277
x
= (x * (
a_max
-
a_m�
)) >> 16;
278
x
+
a_m�
;
279
}
}
282
ݔ��
(�cڡ { ((
v�
-
m�
�<< 16�/ (
max
- m�);
}
}
283
ݔ��
(�cڡ {
x
= (*
this
); (x�/ 65535.0f;
}
}
285
g�iv�e
:
286
u�t32_t
v�
= 0;
287
u�t32_t
gm�
= 0;
288
u�t32_t
gmax
= 1UL<<31UL;
292
�ass
gSlid�R
:
public
Ab���V�ueWidg�
<
R�ge
>
294
public
:
295
Slid�R
(
Widg�
*
a_���
,
Ab���Prݔty
<
R�ge
>&
a_�id�V�ue
);
299
gPrݔty
<
gbo�
>
gdi�b�d
;
300
gPrݔty
<
gbo�
>
ghasFocus
;
301
g��e�ed
:
302
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
303
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
304
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
305
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
306
g�iv�e
:
307
bo�
m_mou�Ov�Slid�H�d�
;
308
bo�
gm_mou�DownInSlid�H�d�
;
309
�id�Width
();
310
Re��g�
�id�H�d�Re��g�
();
314
�ass
gSlid�
:
public
Ab���V�ueWidg�
<>
316
public
:
317
Slid�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_�id�V�ue
);
321
gPrݔty
<
gbo�
>
gdi�b�d
;
322
gPrݔty
<
gbo�
>
ghasFocus
;
323
g��e�ed
:
324
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
325
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
326
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
327
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
328
g�iv�e
:
329
bo�
m_mou�Ov�Slid�H�d�
;
330
bo�
gm_mou�DownInSlid�H�d�
;
331
�id�Width
();
332
Re��g�
�id�H�d�Re��g�
();
336 �as�
cGridSlid�
338
mpublic
:
339
GridSlid�
(
Grid
*
g
,
Ab���Prݔty
<>&
v�ue
, cڡ *
�me
)
341
m�b�
=
�me
;
342
�w
Lab�
(
g
->
v
[0],
�b�
);
343
�w
Slid�
(
g
->
v
[1],
v�ue
);
345
gPrݔty
<
gS��g
>
g�b�
;
350
�ass
gS��lB�
:
public
Ab���V�ueWidg�
<>
352
public
:
353
S��lB�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_s��lV�ue
);
355
gPrݔty
<>
gm�V�ue
;
356
gPrݔty
<>
gmaxV�ue
;
358
gPrݔty
<
gbo�
>
g���tiڮ
;
359
gPrݔty
<>
g�geSize
;
360
gPrݔty
<>
gl�eSize
;
362
gPrݔty
<
gbo�
>
gdi�b�d
;
363
gPrݔty
<
gbo�
>
ghasFocus
;
364
g��e�ed
:
365
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
366
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
367
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
368
g�iv�e
:
369
g�S��lB�H�d�Height
();
370
Re��g�
g�UpH�d�Re��g�
();
371
Re��g�
g�DownH�d�Re��g�
();
372
Re��g�
g�S��lH�d�Re��g�
();
373
bo�
gm_�H�d�
=
�l�
;
375
gm_moveS��V�ue
= -1;
380 �as�
cI�mLi�
382
mpublic
:
383
I�mLi�
(
Ab���Prݔty
<>&
a_v�ue
)
384 :
$cu��tIndex
(
a_v�ue
)
388
Ab���Prݔty
<>&
cu��tIndex
;
389
Prݔty
<
S��g
>
�xt
;
390
A�i�
<>
ch�ged
;
392
$addI�m
(
S��g
a_�emText
)
394
v�ue
=
cu��tIndex
.
`v�ue
();
395
m_�ems
.
`push_back
(
a_�emText
);
396 i�(
m_�ems
.
`size
(�>�(
size_t
)
v�ue
)
397
�xt
=
m_�ems
[
v�ue
];
398
}
}
400
$�moveI�m
(
S��g
a_�emText
)
403
}
}
406
gVe��
<
gS��g
>
gm_�ems
;
411 �as�
cLi�V�w
:
public
Widg�
413
public
:
414
Li�V�w
(
Widg�
*
a_���
,
I�mLi�
&
a_li�
);
415
m��e�ed
:
416
$��esh
()
418
`���t
();
420
`keyEv�t
(
KeyEv�t
&
a_ev�t
);
421
`��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
422
`mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
423
`mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
424
`mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
425
�iv�e
:
426
I�mLi�
&
m_li�
;
427
bo�
m_mou�Ov�
;
428
Po�t
m_mou�Pos
;
429
}
};
437
�ass
gComboBox
:
public
Ab���V�ueWidg�
<>
439
public
:
440
ComboBox
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_v�ue
);
442
Sig�l
ga�iv�ed
;
443
Sig�l
gd��iv�ed
;
446
gPrݔty
<
gbo�
>
gdi�b�d
;
447
gPrݔty
<
gbo�
>
ghasFocus
;
448
gPrݔty
<
gbo�
>
gisDe�u�
;
451
addI�m
(
S��g
a_�emText
);
452
li�Ch�ged
();
453
g��e�ed
:
454
��esh2
();
455
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
456
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
457
mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
458
mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
459
mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
460
keyEv�t
(
KeyEv�t
&
a_ev�t
);
461
g�iv�e
:
462
bo�
m_mou�DownInBu��
;
463
bo�
gm_mou�Ov�Bu��
;
464
bo�
gm_a�ive
=
�l�
;
468
Widg�
*
gm_dr�DownM�u
=
nuαr
;
469
I�mLi�
gm_li�
;
473
�ass
gProg�ssB�
:
public
Ab���V�ueWidg�
<>
475
public
:
476
Prog�ssB�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_v�ue
);
477
gPrݔty
<
gbo�
>
gdi�b�d
;
478
gAb���Prݔty
<>&
g�og�ss
;
479
g��e�ed
:
480
��esh2
();
481
sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
482
��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
486
gEND_NAMESPACE
@../include/Events.h
1 #�agm�
��
2
~"Comm�.h
"
3
BEGIN_NAMESPACE
6
eKey
8
mKey_a
,
9
mKey_b
,
10
mKey_c
,
11
mKey_A
,
12
mKey_B
,
13
mKey_C
,
15 #i�
_WIN32
16
mKey_Le�
= 0x25,
17
mKey_Up
= 0x26,
18
mKey_Right
= 0x27,
19
mKey_Down
= 0x28,
21
mKey_BackS��
= 8,
23
mKey_Le�
= 63234,
24
mKey_Up
= 63232,
25
mKey_Right
= 63235,
26
mKey_Down
= 63233,
28
mKey_BackS��
= 127,
31
mKey_D��e
= 46,
37
eMou�Bu��s
39
mMB_N�e
= 0,
40
mMB_Le�
= 1 << 0,
41
mMB_Midd�
= 1 << 1,
42
mMB_Right
= 1 << 2
44
$ENUM_AS_FLAGS
(
Mou�Bu��s
)
47
eKeyS��
49
KS_P�s�d
,
50
KS_R���d
54
eModif�rs
56
M_N�e
= 0,
57
M_Shi�
= 1 << 0,
58
M_Cڌ�
= 1 << 1,
59
M_A�
= 1 << 2,
60
M_OS
= 1 << 3
62
$ENUM_AS_FLAGS
(
Modif�rs
)
65
u���_t
tTim�Id
;
68
sBa�Ev�t
70
`ac��
(�{
m_ac��ed
=
�ue
; }
71
`�je�
(�{
m_ac��ed
=
�l�
; }
72
bo�
m_ac��ed
;
76
Mou�Ev�t
:
public
Ba�Ev�t
79
Po�t
m_�dPos�i�
;
82
m_�dX
;
83
m_�dY
;
86
Mou�Bu��s
m_�dBu��s
;
88
Po�t
m_pos�i�
;
91
m_x
;
92
m_y
;
95
Mou�Bu��s
m_bu��s
;
96
}
};
99
gWh�lEv�t
:
public
Ba�Ev�t
101
m_deg�esR٩i�
;
105
gKeyEv�t
:
public
Ba�Ev�t
107
Key
m_key
;
108
KeyS��
gm_��e
;
109
Modif�rs
gm_modif�rs
;
113
gPa�tEv�t
:
public
Ba�Ev�t
115
Re��g�
m_���g�
;
119
gTim�Ev�t
:
public
Ba�Ev�t
121
Tim�Id
m_tim�Id
;
125
gSizeEv�t
:
public
Ba�Ev�t
128
Size
m_�d
;
131
gm_�dWidth
;
132
gm_�dHeight
;
136
Size
gm_�w
;
139
gm_�wWidth
;
140
gm_�wHeight
;
146
sEv�t
148
eEv�tTy�
150
mET_Mou�Ev�t
,
151
mET_Wh�lEv�t
,
152
mET_KeyEv�t
,
153
mET_Pa�tEv�t
,
154
mET_Tim�Ev�t
,
155
mET_SizeEv�t
158
Ev�tTy�
mm_ty�
;
162
Ba�Ev�t
mm_comm�Ev�t
;
163
Mou�Ev�t
mm_mou�Ev�t
;
164
Wh�lEv�t
mm_wh�lEv�t
;
165
KeyEv�t
mm_keyEv�t
;
166
Pa�tEv�t
mm_��tEv�t
;
167
Tim�Ev�t
mm_tim�Ev�t
;
168
SizeEv�t
mm_sizeEv�t
;
173
gEND_NAMESPACE
@../include/Graphics.h
1 #�agm�
��
2
~"Comm�.h
"
3
BEGIN_NAMESPACE
6
ePix�F�m�
8
mPF_ARGB8888
,
9
mPF_ABGR8888
,
10
mPF_RGBA8888
,
11
mPF_BGRA8888
,
12
mPF_XRGB8888
,
13
mPF_XBGR8888
,
14
mPF_RGBX8888
,
15
mPF_BGRX8888
,
16
mPF_RGB888
,
17
mPF_BGR888
,
18
mPF_RGB565
,
19
mPF_XRGB1555
,
20
mPF_ARGB1555
,
21
mPF_YUV422
,
22
mPF_PAL8
,
23
mPF_PAL4
,
38
sPix�Buf�r
40
u�t32_t
*
mm_pix�s
;
41
mm_�rideBy�s
;
42
mm_width
;
43
mm_height
;
44
Pix�F�m�
mm_f�m�
;
45
bo�
mm_isR��a
;
49
eLogLev�
51
mLL_FATAL_ERROR
= 0,
52
mLL_CRITICAL_ERROR
,
53
mLL_ERROR
,
54
mLL_WARNING
,
55
mLL_DEBUG
,
56
mLL_VERBOSE_DEBUG
60
sF�tM�rics
62
mm_as��
;
63
mm_des��
;
64
mm_xHeight
;
65
mm_�pHeight
;
66
mm_l�eG�
;
70
sGlyphM�rics
72
mm_adv��Width
;
73
mm_��SideB�r�g
;
74
mm_rightSideB�r�g
;
75
mm_m�X
;
76
mm_m�Y
;
77
mm_maxX
;
78
mm_maxY
;
116
eG�d��Ty�
118
mRADIAL_GRADIENT
,
119
mCONICAL_GRADIENT
,
120
mLINEAR_GRADIENT
124
sG�d��St�
126
u�t32_t
mm_c��
;
127
mm_pos�i�
;
131
sG�d��
133
G�d��Ty�
mm_ty�
;
134
m�d
::
ve��
<
G�d��St�
>
m_g�d��St�s
;
137
mm_�ags
;
140
mm_���X
,
mm_���Y
;
141
mm_di���
;
142 }
mm_�d�l
;
144
mm_���X
,
mm_���Y
;
145 }
mm_c�ic
;
147
mm_x1
,
mm_y1
,
mm_x2
,
mm_y2
;
148 }
mm_l��r
;
149 }
mm_d�a
;
153
G�TextEx��s
(
Pix�Buf�r
*
a_�rg�
, cڡ *
a_f�tFam�y
,
a_size
, cڡ *
a_utf8S��g
, &
a_width
, &
a_height
);
154
F�tM�rics
G�F�tM�rics
();
155
GlyphM�rics
G�GlyphM�rics
(
u�t32_t
a_unicodeCh�a��
);
156
D�wText
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ *
a_f�tFam�y
,
a_size
,
a_x
,
a_y
, cڡ *
a_f�m��dUtf8S��g
,
a_�ags
= 0);
157
LogMes�ge
(
LogLev�
a_�v�
, cڡ *
a_f�m�S��g
, ...);
158
D�wRe��g�A�ha
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
);
159
D�wRe��g�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_�tA�ha
);
160
D�wE�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_smo�hEdge
);
161
D�wG�d��
(
Pix�Buf�r
*
a_�rg�
, cڡ
G�d��
&
a_g�d��
,
a_x
,
a_y
,
a_width
,
a_height
);
162
D�wL�e
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x1
,
a_y1
,
a_x2
,
a_y2
,
bo�
a_b�nd
);
163
D�wPix�s
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
);
164
D�wPix�sA�ha
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
);
165
D�wPix�sA�haB�nded
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
,
a_�pha
);
168
gEND_NAMESPACE
@../include/MemoryMapping.h
1 #�agm�
��
2
~"Comm�.h
"
3
BEGIN_NAMESPACE
7
gMem�yM�p�gD�a
;
8
Mem�yM�p�gD�a
*
Mem�yM�p�g_O�n
(cڡ *
f��ame
);
9 *
Mem�yM�p�g_G�Add�ss
(
Mem�yM�p�gD�a
*
m�p�g
);
10
u�t64_t
Mem�yM�p�g_G�Size
(
Mem�yM�p�gD�a
*
m�p�g
);
11
Mem�yM�p�g_Clo�
(
Mem�yM�p�gD�a
*
m�p�g
);
15 �as�
cMem�yM�p�g
17
mpublic
:
18
Mem�yM�p�g
(cڡ *
f��ame
);
19 ~
Mem�yM�p�g
();
20 *
add�ss
();
21
u�t64_t
size
();
22
m�iv�e
:
23
Mem�yM�p�gD�a
*
m_d�a
;
27
gEND_NAMESPACE
@../include/Object.h
1 #�agm�
��
2
~<li�
>
3
~<ty��fo
>
4
~<c�dlib
>
5
~<mem�y
>
6
~"Comm�.h
"
7
~"Prݔty.h
"
8 #ifde�
__GNUG__
9
~<cxxabi.h
>
11
BEGIN_NAMESPACE
96 �as�
cTy�Ut�
98
mpublic
:
99
S��g
$dem�g�
(cڡ *
�me
)
101 #i�
`def�ed
(
__GNUC__
�|| def�ed(
__��g__
)
102
��us
= -1;
103
�d
::
unique_�r
<, (*)(*)>
�s
{
abi
::
`__cxa_dem�g�
(
�me
,
NULL
, NULL, &
��us
), std::
�
};
104 (
��us
=�0�?
�s
.
`g�
(�:
�me
;
106
�me
;
109
}
};
112
g�m��e
<
�ass
gT
>
113 �as�
cTy�Info
115
mpublic
:
117
S��g
$��tyName
()
119 #i�
`def�ed
(
__GNUC__
�|| def�ed(
__��g__
)
120
S��g
�me
=
__PRETTY_FUNCTION__
;
122
S��g
�me
=
__FUNCTION__
;
125
size_t
pos1
=
�me
.
`f�d_f��_of
('<');
126 i�(
pos1
!�
�d
::
�r�g
::
�os
)
128
pos1
++;
129
size_t
pos2
=
pos1
;
130
d�th
= 0;
131 ;
pos2
<
�me
.
`size
();�os2++)
133 i�(
�me
.
`c_�r
()[
pos2
] == '<')
134
d�th
++;
135 i�(
�me
.
`c_�r
()[
pos2
] == '>') {
136
d�th
--;
137 i�(
d�th
< 0)
141
�me
=�ame.
`sub�r
(
pos1
,
pos2
-pos1);
144
�me
;
147 #i�de�
NO_RTTI
149
S��g
$�tiName
()
151
`ty�id
(
T
).
`�me
();
152
}
}
155
S��g
$�tiDem�g�dName
()
157
Ty�Ut�
::
`dem�g�
(
`�tiName
().
`c_�r
());
158
}
}
163
g�m��e
<
�ass
gT
>
164
S��g
$ty�Name
()
166
Ty�Info
<
T
>::
`��tyName
();
169
}
}
182
g�m��e
<
�ass
gT
>
183 �as�
cNu�ab�
185
mpublic
:
186
bo�
$hasV�ue
(�cڡ {
m_hasB�nS�
; }
187
T
$v�ue
(�cڡ {
`as��
(
m_hasB�nS�
);
m_v�ue
;
}
}
188
gT
&
$ݔ��
()(�{
`as��
(
m_hasB�nS�
);
m_v�ue
;
}
}
189
gNu�ab�
<
gT
>&
gݔ��
=(cڡ
T
&
a_�h�
�{
m_hasB�nS�
=
�ue
;
gm_v�ue
=�_�h�; *
gthis
; }
190
g�iv�e
:
191
bo�
m_hasB�nS�
=
�l�
;
192
T
gm_v�ue
;
196
g�m��e
<
�ass
gT
,
bo�
g��ed
=
�l�
>
197 �as�
cNu�ab�2
199
public
:
200
bo�
$hasV�ue
(�cڡ {
��ed
; }
201
T
$v�ue
(�cڡ {
`��ic_as��
(
��ed
, "�ed�t�b�assig�d��f��");
m_v�ue
;
}
}
202
gT
&
$ݔ��
()(�{
`��ic_as��
(
��ed
, "�ed�t�b�assig�d��f��");
m_v�ue
;
}
}
203
gNu�ab�2
<
gT
,
g�ue
>&
gݔ��
=(cڡ
T
&
a_�h�
�{
m_v�ue
=�_�h�; *((Nu�ab�2<T,�ue>*)
gthis
); }
204
g��e�ed
:
205
�nd
�ass
Nu�ab�2
<
T
,
g�l�
>;
206
�nd
�ass
gNu�ab�2
<
gT
,
g�ue
>;
207
T
gm_v�ue
;
213 �as�
cTy�
215
mpublic
:
216
$Ty�
(
a_ty�Id
�:
$m_ty�Id
(
a_ty�Id
) {}
218
bo�
$isV�id
() const
220
`g�Ty�IdM�
().
`cou�
(
m_ty�Id
) != 0;
221
}
}
223 cڡ
gS��g
&
$asS��g
() const
225
`g�Ty�IdM�
()[
m_ty�Id
];
226
}
}
228 cڡ *
$ݔ��
()() const
230
`asS��g
().
`c_�r
();
231
}
}
233
bo�
gݔ��
!=(cڡ
Ty�
&
a_�h�
�cڡ {
m_ty�Id
!=�_other.m_typeId; }
234
bo�
gݔ��
==(cڡ
Ty�
&
a_�h�
�cڡ {
m_ty�Id
==�_other.m_typeId; }
237
g�m��e
<
�ass
gT
>
238
�gi��Ty�
();
240
g�iv�e
:
241
M�
<,
gS��g
>&
$g�Ty�IdM�
()
243
M�
<,
S��g
>
ty�IdM�
;
244
ty�IdM�
;
245
}
}
247
gM�
<
gS��g
, >&
$g�Ty�NameM�
()
249
M�
<
S��g
, >
ty�NameM�
;
250
ty�NameM�
;
251
}
}
253
gm_ty�Id
;
259
g�m��e
<
ty��me
gT
>
260
Ty�
$ty�Of
(cڡ
T
&
obj
)
262
}
}
265
sMemb�
267 *
moff�t
;
268
S��g
mty�Name
;
269
S��g
mmemb�Name
;
270
S��g
mdes��ti�
;
274
�ass
gObje�
;
275 �as�
cRe�e�i�D�aI����
:
public
I����Ba�
277
public
:
278
v�tu�
$g�Ty�Id
() const = 0;
279
v�tu�
�d
::
�r�g
$g�Ty�
() const = 0;
280
v�tu�
size_t
$g�Size
() const = 0;
281
v�tu�
Obje�
*
$���
(
Obje�
*
a_���
= 0, cڡ *
a_�me
= 0) const = 0;
282
v�tu�
$de�roy
(
Obje�
*
o
) const = 0;
283
v�tu�
cڡ
M�
<
S��g
,
Memb�
>&
$g�Memb�sM�
() const = 0;
284
v�tu�
M�
<
S��g
,
Memb�
>&
$g�Memb�sM�N�Cڡ
() const = 0;
290 �as�
cMemb�Vis��
292
public
:
293
`Memb�Vis��
(
M�
<
S��g
,
Memb�
>&
a_memb�sM�
�:
$m_memb�sM�
(
a_memb�sM�
) { }
294
�m��e
<
ty��me
T
>
295
$ݔ��
()(cڡ *
�me
,
T
*
t
, cڡ *
desc
�{
m_memb�sM�
[�me] = { (*�,
ty�Name
<T>(),�ame, des�};
}
}
296
g�iv�e
:
297
M�
<
S��g
,
gMemb�
>&
gm_memb�sM�
;
303
g�m��e
<
ty��me
gP��tTy�
,�y��m�
gThisTy�
>
304 �as�
cInh��
:
public
P��tTy�
306
public
:
308
P��tTy�
tP��tT
;
309
mInh��
<
tP��tTy�
,
tThisTy�
>
tBa�T
;
310
ThisTy�
tThisT
;
313
m�m��e
<
mty��me
...
mTs
>
314
$Inh��
(
Ts
...
�gs
�:
$P��tT
(
�gs
...) {}
318
`��icTy�Id
();
319
$v�tu�Ty�Id
(�
ov�ride
{
ThisT
::
`��icTy�Id
();
}
}
321
Ty�
$g�Ty�
(�{
`Ty�
(
`v�tu�Ty�Id
());
}
}
328
g�m��e
<
ty��me
gT
>
329
bo�
$��icInh��s
(�{
`_�h��s
((
T
*)0);
}
}
332
g�m��e
<
ty��me
gT
>
333
bo�
$��icIs
(�{
`_is
((
T
*)0);
}
}
338
bo�
$isCheck
(
Tid
�
ov�ride
{
`��icTy�Id
(�=�Tid ||
P��tT
::
`isCheck
(Tid);
}
}
340
bo�
$�h��sCheck
(
Tid
�
ov�ride
{
P��tT
::
`isCheck
(Tid);
}
}
343
�gi��Inh����
(
M�
<
S��g
,S��g>&
�h����M�
)
346
g�h����M�
[
ty�Name
<
ThisT
>()] =�y�Name<
P��tT
>();
350
�gi��Memb�s
(
M�
<
S��g
,
Memb�
>&
memb�M�
)
353
Memb�Vis��
v
(
memb�M�
);
354
gThisT
::
vis�
(
v
);
357
g�iv�e
:
358
�m��e
<
ty��me
T
>
359
bo�
$_�h��s
(
T
*�{
P��tT
::
�m��e
��icInh��s
<T>();
}
}
360
bo�
$_�h��s
(
P��tT
*�{
�ue
;
}
}
362
g�m��e
<
ty��me
gT
>
363
bo�
$_is
(
T
*�{
P��tT
::
�m��e
��icIs
<T>();
}
}
364
bo�
$_is
(
ThisT
*�{
�ue
;
}
}
368 �as�
cNu�Obje�
370
mpublic
:
371
v�tu�
~
$Nu�Obje�
() {}
373
v�tu�
$v�tu�Ty�Id
(�{ -1;
}
}
375
g�m��e
<
ty��me
gT
>
376
bo�
$��icInh��s
(�{
�l�
;
}
}
378
g�m��e
<
ty��me
gT
>
379
bo�
$��icIs
(�{
�l�
;
}
}
381
g�m��e
<
ty��me
gT
>
382
$vis�
(
T
&
v
�{
}
}
384
v�tu�
bo�
$isCheck
(
Tid
�{
�l�
;
}
}
385
v�tu�
bo�
$�h��sCheck
(
Tid
�{
�l�
;
}
}
389
�ass
gObje�
:
public
Inh��
<
Nu�Obje�
, Object>
391
gpublic
:
393
Obje�
(Obje�*
a_���
=
nuαr
, cڡ *
a_�me
=�ullptr);
394
gv�tu�
~
Obje�
();
399
g�m��e
<
ty��me
gT
>
400
ty��me
g�d
::
�ab�_if
<
�d
::
is_ba�_of
<
Obje�
,
gT
>::
v�ue
,
gbo�
>::
ty�
401
�h��s
(�{
�h��sCheck
(
T
::
��icTy�Id
()); }
403
g�m��e
<
ty��me
gT
>
404
ty��me
g�d
::
�ab�_if
<
�d
::
is_ba�_of
<
Obje�
,
gT
>::
v�ue
,
gbo�
>::
ty�
405
is
(�{
isCheck
(
T
::
��icTy�Id
()); }
407
S��g
�me
(�cڡ {
gm_�me
; }
408
Obje�
*
���
(�cڡ {
gm_���
; }
410
g�m��e
<
ty��me
gT
>
411
T
*
���
() const;
415
g�m��e
<
ty��me
gT
>
416
g�d
::
li�
<
T
*>
ch�d�n
() const;
419
g�m��e
<
ty��me
gT
>
420
�gi��Obje�Ty�
();
422 cڡ
gM�
<
gS��g
,
gRe�e�i�D�aI����
*>&
obje�Ty�s
(�{
g�Re�e�i�D�aM�
(); }
424 cڡ
Re�e�i�D�aI����
*
g�Re�e�i�D�a
(cڡ *
ty�Name
�{
obje�Ty�s
().
�
(typeName); }
429 cڡ
gM�
<
gS��g
,S��g>&
g�Inh����M�
(�{
g�Inh����M�N�Cڡ
(); }
432
dumpRe�e�i�Inf�m�i�
();
435
g�NewTy�Id
(�{
gs_ty�Id
= 0; s_typeId++; }
437
g��e�ed
:
438
addCh�d
(
Obje�
*
a_obje�
);
439
v�tu�
ch�dAdded
(
Obje�
*
a_obje�
);
441
g�iv�e
:
442
S��g
m_�me
;
465
Obje�
*
gm_���
;
466
g�d
::
li�
<
Obje�
*>
m_ch�d�n
;
468
gM�
<
gS��g
,S��g>&
g�Inh����M�N�Cڡ
(�{ M�<S��g,S��g>
gm�
; map; }
469
gM�
<
gS��g
,
gRe�e�i�D�aI����
*>&
g�Re�e�i�D�aM�
();
515
g�m��e
<
ty��me
gT
, T>
gMemb�Proxy
;
518
g�m��e
<
ty��me
gT
,�y��m�
gR
,
gty��me
...
gArgs
,
$R
(
T
::*
mf
)(
Args
...)>
519
Memb�Proxy
<
$R
(
T
::*)(
Args
...),
mf
>
521
R
`��
(
T
&
obj
,
Args
&&...
�gs
)
523 (
obj
.*
mf
)(
�d
::
f�w�d
<
Args
>(
�gs
)...);
525 aut�
`g�
(�->
`R
(*)(
T
&,
Args
&&...)
527 &
��
;
529
}
};
532
g�m��e
<
ty��me
gT
,�y��m�
gR
,
R
T::*
mv
>
533
Memb�Proxy
<
R
T
::*,
gmv
>
535
R
*
g�
()
537 &(((
gT
*)
gnuαr
)->*
gmv
);
548
#START_MEMBERS
\
549
�m��e
<
ty��me
T
> \
550
`vis�
(
T
&
v
) \
552
P��tT
::
`vis�
(
v
);
)
554
#REFLECT_MEMBER
(
�me
,
desc
) \
555
`v
(#�me,
Memb�Proxy
<
`de�ty�
(&
ThisT
::
�me
),&ThisT::�me>::
`g�
(),
desc
);
)
557
#REFLECT_MEMBER_FUNCTION
(
�me
,
desc
) \
558
`REFLECT_MEMBER
(
�me
,
desc
)
)
560
#ADD_MEMBER
(
ty�
,
�me
,
desc
)
)
562
#END_MEMBERS
\
563 }
)
567
g�m��e
<
�ass
gT
>
568 �as�
cRe�e�i�D�a
:
public
Re�e�i�D�aI����
570
public
:
573
$Re�e�i�D�a
(
a_ty�Id
,
�d
::
�r�g
a_ty�Name
�:
`m_ty�Name
�_ty�Name),
$m_ty�Id
(
a_ty�Id
) { }
574 ~
$Re�e�i�D�a
(�{
}
}
575
$g�Ty�Id
(�cڡ
ov�ride
{
m_ty�Id
;
}
}
576
g�d
::
�r�g
$g�Ty�
(�cڡ
ov�ride
{
m_ty�Name
;
}
}
577
size_t
$g�Size
(�cڡ
ov�ride
{ (
T
);
}
}
578
Obje�
*
$���
(
Obje�
*
a_���
= 0, cڡ *
a_�me
= 0�cڡ
ov�ride
{
�w
`T
�_���,�_�me);
}
}
579
$de�roy
(
Obje�
*
o
�cڡ
ov�ride
{
d��e
o;
}
}
580 cڡ
gM�
<
gS��g
,
gMemb�
>&
$g�Memb�sM�
(�cڡ
ov�ride
{
`g�Memb�sM�N�Cڡ
();
}
}
581
gM�
<
gS��g
,
gMemb�
>&
$g�Memb�sM�N�Cڡ
(�cڡ
ov�ride
{
582
M�
<
S��g
,
Memb�
>
m�
;
583
m�
;
584
}
}
585
g�iv�e
:
586
�d
::
�r�g
m_ty�Name
;
587
gm_ty�Id
= -1;
591
g�m��e
<
ty��me
gT
>
592
gObje�
::
$�gi��Obje�Ty�
()
594
S��g
ty�S�
=
ty�Name
<
T
>();
595
`�r�tf
(
�d�r
, "Regi���g obje��y�: %s\n",
ty�S�
.
`c_�r
());
596 i�(
`g�Re�e�i�D�aM�
().
`cou�
(
ty�S�
)) {
597
`�r�tf
(
�d�r
, "E��,�egi���g��obje��y� (%s�mܐth� on�\n",
ty�S�
.
`c_�r
());
599
`g�Re�e�i�D�aM�
()[
ty�S�
] =
�w
Re�e�i�D�a
<
T
>(T::
`��icTy�Id
(),�ypeStr);
600
T
::
`�gi��Memb�s
(
`g�Re�e�i�D�aM�
()[
ty�S�
]->
`g�Memb�sM�N�Cڡ
());
601
T
::
`�gi��Inh����
(
`g�Inh����M�N�Cڡ
());
603
}
}
615
g�m��e
<
ty��me
gT
>
616
T
*
$Obje�P�Ca�
(
Obje�
*
a_obj
)
618 #i�de�
NO_RTTI
619
dy�mic_��
<
T
*>(
a_obj
);
623 i�(!
a_obj
) {
624
`��tf
("null object in ObjectPtrCast\n");
628 i�(
a_obj
->
is
<
T
>())
629
��ic_��
<
T
*>(
a_obj
);
630
ty�Id
=
a_obj
->
`v�tu�Ty�Id
();
631 cڡ *
�me
=
a_obj
->
`�me
().
`c_�r
();
632 i�(
ty�Id
!= 0)
633
`��tf
("Fa�ed ca�. Sour� obje� (%s�id: %i, De��y��nd id: %� %i\n", (
�me
�?�am�: "nu�",
ty�Id
,
ty�Name
<
T
>().
`c_�r
(), T::
`��icTy�Id
());
636
}
}
651
g�m��e
<
ty��me
gP��tTy�
,�y��m�
gThisTy�
>
652
gInh��
<
gP��tTy�
,
gThisTy�
>::
$��icTy�Id
()
654
s_ty�Id
=
Obje�
::
`g�NewTy�Id
();
655
s_ty�Id
;
656
}
}
659
g�m��e
<
�ass
gT
>
660
gTy�
::
$�gi��Ty�
()
662
S��g
�me
=
ty�Name
<
T
>();
663 i�(
`g�Ty�NameM�
().
`cou�
(
�me
))
665
`�r�tf
(
�d�r
, "ty��̗dy�egi��ed: %s\n",
�me
.
`c_�r
());
668
�wId
=
Obje�
::
`g�NewTy�Id
();
669
`g�Ty�IdM�
().
`���
(
�wId
,
�me
);
670
`g�Ty�NameM�
().
`���
(
�me
,
�wId
);
671
}
}
674
g�m��e
<
ty��me
gT
>
675
T
*
gObje�
::
$���
() const
677
Obje�P�Ca�
<
T
>(
m_���
);
678
}
}
681
g�m��e
<
ty��me
gT
>
682
g�d
::
li�
<
T
*>
Obje�
::
$ch�d�n
() const
684
�d
::
li�
<
T
*>
kids
;
685
Obje�
*
obj
:
m_ch�d�n
) {
686
T
*
kid
=
Obje�P�Ca�
<T>(
obj
);
687 i�(
kid
)
688
kids
.
`push_back
(
kid
);
690
kids
;
691
}
}
694
gEND_NAMESPACE
@../include/Painter.h
1 #�agm�
��
2
~"Widg�.h
"
3
~"G�phics.h
"
4
~"Comm�.h
"
5
BEGIN_NAMESPACE
8 �as�
cPixm�
:
public
Pa�tT�g�I����
10
public
:
11
Pixm�
(*
a_mem�yBuf�r
,
a_width
,
a_height
,
a_d�th
);
12
Pixm�
(cڡ *
a_f�eName
);
13 ~
Pixm�
();
15 cڡ
u�t32_t
*
$b�s
() const;
16
u�t32_t
$width
() const;
17
u�t32_t
$height
() const;
18
Size
$size
(�cڡ { (
Size
){ ()
`width
(), ()
`height
() }; }
20
Pix�Buf�r
&
$�rg�Buf�r
(�
ov�ride
;
21
$�rg�S��
(�
ov�ride
{ 1.0f;
}
}
23
g�iv�e
:
24
Pixm�D�a
*
m_d�a
;
28
eF�tSty�
30
mFS_N�m�
= 0,
31
mFS_I�lic
= 1<<0,
32
mFS_Oblique
= 1<<1,
33
mFS_S�ikeOut
= 1<<2,
34
mFS_Und�L�e
= 1<<3,
35
mFS_Ov�L�e
= 1<<4,
36
mFS_FixedP�ch
= 1<<5
53 �as�
cF�t
55
mpublic
:
56
$F�t
(�{
`In�
(); }
57
$F�t
(cڡ
F�t
&
a_�h�
�{
`In�
�_�h�.
�m�y
.
`v�ue
(),�_�h�.
po�tSize
.value(),
58
a_�h�
.
weight
.
`v�ue
(),�_�h�.
�y�
.value(),
59
a_�h�
.
��tch
.
`v�ue
());
}
}
60
gF�t
&
gݔ��
=(cڡ
F�t
&
a_�h�
�{
In�
�_�h�.
�m�y
.
v�ue
(),�_�h�.
po�tSize
.value(),
61
a_�h�
.
weight
.
v�ue
(),�_�h�.
�y�
.value(),
62
a_�h�
.
��tch
.
v�ue
());
63 *
gthis
; }
64
$F�t
(cڡ *
a_�m�y
�{
`In�
�_�m�y);
}
}
65
$F�t
(
a_po�tSize
�{
`In�
(
F�t
::
H�v�i�
,�_po�tSize);
}
}
66
$F�t
(
F�tSty�
a_�y�
�{
`In�
(
F�t
::
H�v�i�
, 12, 50,�_�y�);
}
}
67
$F�t
(cڡ *
a_�m�y
,
68
a_po�tSize
,
69
a_weight
= 50,
70
F�tSty�
a_�y�
=
FS_N�m�
,
71
a_��tch
= 100�{
`In�
(
a_�m�y
,
a_po�tSize
,
a_weight
,
a_�y�
,�_��tch);
}
}
73
gPrݔty
<
gS��g
>
g�m�y
;
74
gPrݔty
<>
gpo�tSize
;
75
gPrݔty
<>
gweight
;
76
gPrݔty
<
gF�tSty�
>
g�y�
;
77
gPrݔty
<>
g��tch
;
80
gPrݔty
<
gF�tM�rics
>
gm�rics
;
90 cڡ *
gH�v�i�
;
91 cڡ *
gTimes
;
92 cڡ *
gCour�r
;
93 cڡ *
gOldEnglish
;
94 cڡ *
gM�o�a�
;
95 cڡ *
gF��sy
;
96 cڡ *
gCursive
;
97 cڡ *
gUIF�t
;
99
g�iv�e
:
100
$In�
(cڡ *
a_�m�y
=
F�t
::
H�v�i�
,
a_po�tSize
= 12,
101
a_weight
= 50,
F�tSty�
a_�y�
=
FS_N�m�
,
a_��tch
= 100)
103
�m�y
=
a_�m�y
;
104
po�tSize
=
a_po�tSize
;
105
weight
=
a_weight
;
106
�y�
=
a_�y�
;
107
��tch
=
a_��tch
;
108
}
}
112
eBrushSty�
114
mBS_N�e
,
115
mBS_S�idC��
,
116
mBS_Pixm�
,
117
mBS_G�d��
121 �as�
cBrush
123
mpublic
:
124
$Brush
(�{
`In�
(); }
125
$Brush
(cڡ
Brush
&
a_�h�
�{
`In�
�_�h�.
�y�
.
`v�ue
(),�_�h�.
c��
.value(),
126
a_�h�
.
pixm�
.
`v�ue
(),�_�h�.
�ig�
.v�ue());
}
}
127
gBrush
&
gݔ��
=(cڡ
Brush
&
a_�h�
�{
In�
�_�h�.
�y�
.
v�ue
(),�_�h�.
c��
.value(),
128
a_�h�
.
pixm�
.
v�ue
(),�_�h�.
�ig�
.value());
129 *
gthis
; }
130
$Brush
(
u�t32_t
a_c��
�{
`In�
(
BS_S�idC��
,�_c��);
}
}
131
$Brush
(
Pixm�
*
a_pixm�
�{
`In�
(
BS_Pixm�
, 0,�_pixm�);
}
}
132
$Brush
(
Pixm�
*
a_pixm�
,
Po�t
a_�ig�
�{
`In�
(
BS_Pixm�
, 0,�_pixm�,�_�ig�);
}
}
133
$Brush
(
G�d��
a_g�d��
�{
}
}
135
gPrݔty
<
gBrushSty�
>
g�y�
;
136
gPrݔty
<
gu�t32_t
>
gc��
;
137
gPrݔty
<
gPixm�
*>
gpixm�
;
138
gPrݔty
<
gPo�t
>
g�ig�
;
140
g�iv�e
:
141
In�
(
BrushSty�
a_�y�
=
BS_N�e
,
u�t32_t
a_c��
= 0,
Pixm�
*
a_pixm�
= 0,
Po�t
a_�ig�
= {})
143
�y�
=
a_�y�
;
144
gc��
=
a_c��
;
145
gpixm�
=
a_pixm�
;
146
g�ig�
=
a_�ig�
;
151 �as�
cP�Sty�
153
mN�e
,
154
mS�id
,
155
mDًd
,
156
mDashed
,
157
mD�Dashed
161 �as�
cP�
163
mpublic
:
164
$P�
(�{
`In�
(); }
165
$P�
(cڡ
P�
&
a_�h�
�{
`In�
�_�h�.
�y�
.
`v�ue
(),
166
a_�h�
.
c��
.
`v�ue
(),
167
a_�h�
.
width
.
`v�ue
());
}
}
168
gP�
&
gݔ��
=(cڡ
P�
&
a_�h�
�{
In�
�_�h�.
�y�
.
v�ue
(),
169
a_�h�
.
c��
.
v�ue
(),
170
a_�h�
.
width
.
v�ue
());
171 *
gthis
; }
172
$P�
(
P�Sty�
a_�y�
�{
`In�
�_�y�);
}
}
173
$P�
(
u�t32_t
a_c��
�{
`In�
(
P�Sty�
::
S�id
,�_c��);
}
}
175
gPrݔty
<
gP�Sty�
>
g�y�
;
176
gPrݔty
<
gu�t32_t
>
gc��
;
177
gPrݔty
<
gu�t32_t
>
gwidth
;
179
g�iv�e
:
180
$In�
(
P�Sty�
a_�y�
= P�Sty�::
N�e
,
u�t32_t
a_c��
= 0, u�t32_�
a_width
= 1)
182
�y�
=
a_�y�
;
183
c��
=
a_c��
;
184
width
=
a_width
;
185
}
}
189 �as�
cPa��r
191
mpublic
:
192
Pa��r
();
193
Pa��r
(
Pa�tT�g�I����
*
a_w�dow
);
194 ~
Pa��r
();
200
�tP�
(
P�
a_�n
);
201
�tBrush
(
Brush
a_brush
);
202
�tF�t
(
F�t
a_f�t
);
204
�tP�
(
u�t32_t
a_c��
);
205
�tBrush
(
u�t32_t
a_c��
);
207
�tF�tFam�y
(cڡ *
a_f�tName
);
208
�tF�tSize
(
u�t32_t
a_size
);
211
d�wE�
(
a_x
,
a_y
,
a_width
,
a_height
);
212
d�wG�d��
(
a_x
,
a_y
,
G�d��
a_g�d��
,
a_width
,
a_height
);
213
d�wL�e
(
a_x
,
a_y
,
a_x2
,
a_y2
);
219
d�wPixm�
(
a_x
,
a_y
, cڡ
Pixm�
&
pixm�
,
a_x1
= 0,
a_y1
= 0,
a_x2
= -1,
a_y2
= -1,
bo�
a_�phaMask
=
�l�
);
220
d�wPixm�A�haB�nded
(
a_x
,
a_y
, cڡ
Pixm�
&
pixm�
,
a_x1
= 0,
a_y1
= 0,
a_x2
= -1,
a_y2
= -1,
a_�pha
= 0);
222
d�wPix�Buf�r
(
a_x
,
a_y
, cڡ
u�t8_t
*
a_pix�s
,
a_pix�sWidth
,
a_pix�sHeight
,
a_pix�sD�th
);
231
d�wRe��g�
(
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_�phaB�nd�g
=
�l�
);
232
d�wFocusRe��g�
(
a_x
,
a_y
,
a_width
,
a_height
);
233
d�wText
(
a_x
,
a_y
, cڡ
S��g
&
a_f�m��dUtf8S��g
,
a_�ags
= 0);
234
Size
�xtEx��s
(cڡ *
a_f�m��dUtf8S��g
);
237
$d�wRe��g�
(
Re��g�
a_���g�
,
bo�
a_�phaB�nd�g
=
�l�
)
239
`d�wRe��g�
(
a_���g�
.
m_x
,�_���g�.
m_y
,�_���g�.
m_width
,�_���g�.
m_height
,
a_�phaB�nd�g
);
242
$d�wFocusRe��g�
(
Re��g�
a_���g�
)
244
`d�wFocusRe��g�
(
a_���g�
.
m_x
,�_���g�.
m_y
,�_���g�.
m_width
,�_���g�.
m_height
);
245
}
}
247
g�m��e
<
gty��me
...
gTs
>
248
$d�wText
(
a_x
,
a_y
, cڡ *
a_utf8S��g
,
Ts
...
�gs
)
250
`d�wText
(
a_x
,
a_y
,
`S��g
(
a_utf8S��g
,
�gs
...));
251
}
}
253
g�m��e
<
gty��me
...
gTs
>
254
Size
$�xtEx��s
(cڡ *
a_utf8S��g
,
Ts
...
�gs
)
256
`�xtEx��s
(
`S��g
(
a_utf8S��g
,
�gs
...));
257
}
}
259
F�tM�rics
f�tM�rics
();
261
GlyphM�rics
glyphM�rics
(
u�t32_t
a_unicodeCh�a��
);
265
��t
();
266
g�iv�e
:
267
s��Argum�ts
(&
a_x
, &
a_y
, &
a_width
, &
a_height
);
268
Pa��rD�a
*
gm_d�a
;
272
gEND_NAMESPACE
@../include/Property.h
1 #�agm�
��
2
~"Sig�lSl�.h
"
3
~"Comm�.h
"
4
BEGIN_NAMESPACE
7
g�m��e
<
�ass
gT
>
8 �as�
cPrݔtyI����
:
public
I����Ba�
10
public
:
11
v�tu�
T
cڡ &
$g�
() const = 0;
12
v�tu�
`�t
(
T
a_�wV�ue
) = 0;
33
�m��e
<
�ass
T
>
34
�ass
Ab���Prݔty
:
public
PrݔtyI����
<
T
>
36
public
:
37
Ab���Prݔty
<
T
>&
ݔ��
=(T cڡ &
a_�wV�ue
)
41
`�tV�ue
(
a_�wV�ue
);
42 *
this
;
45
T
cڡ &
`ݔ��
()() const
47
`v�ue
();
50
`�tV�ue
(cڡ
T
&
a_�wV�ue
)
52
`�t
(
a_�wV�ue
);
53
`v�ueCh�ged
(
a_�wV�ue
);
63
T
cڡ &
`v�ue
() const
65
`g�
();
69
A�i�
<
T
>
v�ueCh�ged
;
71
��e�ed
:
72
v�tu�
T
cڡ &
`g�
() const = 0;
73
v�tu�
`�t
(
T
a_�wV�ue
) = 0;
74
}
};
86
g�m��e
<
�ass
gT
>
87
�ass
gPrݔty
:
public
Ab���Prݔty
<
T
>
89
public
:
90
Prݔty
() {}
91
Prݔty
(cڡ
T
&
v�
�:
m_v�ue
(val) {}
92
Prݔty
(cڡ Prݔty<
T
>&
�h�
�:
m_v�ue
(other.m_value) {}
94
Prݔty
<
T
>&
ݔ��
=(T cڡ &
a_�wV�ue
)
98
Ab���Prݔty
<
T
>::
�tV�ue
(
a_�wV�ue
);
99 *
gthis
;
102
g��e�ed
:
103
T
cڡ &
g�
(�cڡ {
m_v�ue
; }
104
�t
(
T
a_�wV�ue
�{
gm_v�ue
=�_newValue; }
106
g�iv�e
:
107
T
m_v�ue
;
111
gEND_NAMESPACE
@../include/Reflection.h
1 #�agm�
��
2
~"Obje�.h
"
3
BEGIN_NAMESPACE
19 �as�
cRe�e�i�
21
mpublic
:
22
�gi��Obje�Ty�s
();
26
gEND_NAMESPACE
@../include/SignalSlot.h
1 #�agm�
��
2
~"V���.h
"
3
~"Comm�.h
"
4
BEGIN_NAMESPACE
7 �as�
cInvokab�I����
:
public
I����Ba�
9
public
:
10
v�tu�
$ݔ��
()(
V���
&
a_��ms
) = 0;
14
�m��e
<
ty��me
M�hod
>
15 �as�
cS�ticFun�i�C�lback
:
public
Invokab�I����
17
public
:
18
$S�ticFun�i�C�lback
(
M�hod
a_m�hod
)
19 :
$m_m�hod
(
a_m�hod
)
22
v�tu�
$ݔ��
()(
V���
&
a_��ms
)
24 (*
m_m�hod
)(
a_��ms
);
25
}
}
26
g�iv�e
:
27
M�hod
m_m�hod
;
31
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
32 �as�
cM�hodC�lback
:
public
Invokab�I����
34
public
:
35
$M�hodC�lback
(
C�ss
*
a_obj
,
M�hod
a_m�hod
)
36 :
`m_obje�
(
a_obj
)
37 ,
$m_m�hod
(
a_m�hod
)
40
$M�hodC�lback
(
M�hodC�lback
cڡ&
a_�h�
)
42
m_obje�
=
a_�h�
.m_object;
44
m_m�hod
=
a_�h�
.m_method;
45
}
}
46
gM�hodC�lback
&
gݔ��
=(
M�hodC�lback
cڡ&
a_�h�
)
48
m_obje�
=
a_�h�
.m_object;
50
gm_m�hod
=
a_�h�
.
m_m�hod
;
51 *
gthis
;
53
v�tu�
$ݔ��
()(
V���
&
a_��ms
)
55 (
m_obje�
->*
m_m�hod
)(
a_��ms
);
56
}
}
57
g�iv�e
:
58
C�ss
*
m_obje�
;
59
M�hod
gm_m�hod
;
63 �as�
cSl�
65
mpublic
:
86
$Sl�
(�:
$m_��back
(0)
89 ~
$Sl�
()
91
}
}
112
�m��e
<
ty��me
M�hod
>
113
Sl�
(
M�hod
a_m�hod
,
V���
a_v
=
$V���
())
114 :
`m_��back
(
$�w
(
�a�m�tNewBuf�r
�
S�ticFun�i�C�lback
<
M�hod
>(
a_m�hod
)),
$m_v���
(
a_v
)
116
`STATIC_ASSERT
((
S�ticFun�i�C�lback
<
M�hod
>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
117
}
}
119
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
120
Sl�
(
C�ss
*
obje�
,
M�hod
a_m�hod
,
V���
a_v
=
$V���
())
121 :
`m_��back
(
$�w
(
�a�m�tNewBuf�r
�
M�hodC�lback
<
C�ss
,
M�hod
>(
obje�
,
a_m�hod
)),
$m_v���
(
a_v
)
123
`STATIC_ASSERT
((
M�hodC�lback
<
C�ss
,
M�hod
>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
124
}
}
128
$ݔ��
()()
130 (*
m_��back
)(
m_v���
);
131
}
}
133
$ݔ��
()(
V���
&
a_��ms
)
135 i�(
m_v���
.
`isV�id
())
136 (*
m_��back
)(
m_v���
);
138 (*
m_��back
)(
a_��ms
);
139
}
}
141
g�m��e
<
ty��me
gT
>
142
$ݔ��
()(cڡ
T
&
a_��ms
)
144
V���
`v
(
a_��ms
);
145 (*
this
)(
v
);
146
}
}
148
g�iv�e
:
149 #ifde�
_WIN32
150
�a�m�tNewBuf�r
[24];
152
g�a�m�tNewBuf�r
[32];
154
Invokab�I����
*
gm_��back
;
155
V���
gm_v���
;
159 �as�
cSig�l
161
mpublic
:
165
$Sig�l
(�:
$m_�sideInvok�i�
(
�l�
) {}
167
`addC���i�
(
Sh�edP�
<
Sl�
>&
a_d�eg�e
�{
m_c���i�Li�
.
`push_back
�_d�eg�e);
}
}
172
$disc���A�
(�{
m_c���i�Li�
.
`��r
();
}
}
173
bo�
disc���O�
(
Sh�edP�
<
Sl�
>&
a_d�eg�e
�{
g�ue
; }
175
$ݔ��
()()
177 i�(!
m_�sideInvok�i�
)
179
m_�sideInvok�i�
=
�ue
;
180
u�t32_t
i
= 0; i <
m_c���i�Li�
.
`size
(); i++)
181 (*
m_c���i�Li�
[
i
])();
182
m_�sideInvok�i�
=
�l�
;
184
}
}
186
$ݔ��
()(
V���
&
a_��m
)
188 i�(!
m_�sideInvok�i�
)
190
m_�sideInvok�i�
=
�ue
;
191
u�t32_t
i
= 0; i <
m_c���i�Li�
.
`size
(); i++)
192 (*
m_c���i�Li�
[
i
])(
a_��m
);
193
m_�sideInvok�i�
=
�l�
;
195
}
}
197
gSig�l
&
gݔ��
+=(
Sh�edP�
<
Sl�
>&
a_d�eg�e
)
199
addC���i�
(
a_d�eg�e
);
200 *
gthis
;
203
gSig�l
&
gݔ��
-=(
Sh�edP�
<
Sl�
>&
a_d�eg�e
)
205
disc���O�
(
a_d�eg�e
);
206 *
gthis
;
209
$�voke
(
V���
&
a_��m
)
211
`ݔ��
()(
a_��m
);
212
}
}
214
g�iv�e
:
215
Sig�l
(Sig��cڡ&
a_�h�
);
216
gSig�l
&
gݔ��
=(
Sig�l
cڡ &
a_�h�
);
217
bo�
gm_�sideInvok�i�
;
218
gVe��
<
gSh�edP�
<
gSl�
> >
gm_c���i�Li�
;
226
g�m��e
<
ty��me
gA�i�T
>
227 �as�
cInvokab�A�i�I����
:
public
I����Ba�
229
public
:
230
v�tu�
$ݔ��
()(cڡ
A�i�T
&
a_a�i�
) = 0;
234
�m��e
<>
235
�ass
Invokab�A�i�I����
<> :
public
I����Ba�
237
public
:
238
v�tu�
`ݔ��
()() = 0;
239
}
};
242
g�m��e
<
ty��me
gM�hod
,�y��m�
gA�i�T
>
243
�ass
gS�ticFun�i�A�i�C�lback
:
public
Invokab�A�i�I����
<
A�i�T
>
245
public
:
246
S�ticFun�i�A�i�C�lback
(
M�hod
a_m�hod
)
247 :
m_m�hod
(
a_m�hod
)
250
v�tu�
ݔ��
()(cڡ
A�i�T
&
a_a�i�
)
252 (*
m_m�hod
)(
a_a�i�
);
254
g�iv�e
:
255
M�hod
m_m�hod
;
259
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
,�y��m�
gA�i�T
>
260
�ass
gM�hodA�i�C�lback
:
public
Invokab�A�i�I����
<
A�i�T
>
262
public
:
263
M�hodA�i�C�lback
(
C�ss
*
a_obj
,
M�hod
a_m�hod
)
264 :
m_obje�
(
a_obj
)
265 ,
m_m�hod
(
a_m�hod
)
268
M�hodA�i�C�lback
(M�hodA�i�C�lback cڡ&
a_�h�
)
270
gm_obje�
=
a_�h�
.
m_obje�
;
272
gm_m�hod
=
a_�h�
.
m_m�hod
;
274
gM�hodA�i�C�lback
&
gݔ��
=(
M�hodA�i�C�lback
cڡ&
a_�h�
)
276
m_obje�
=
a_�h�
.m_object;
278
gm_m�hod
=
a_�h�
.
m_m�hod
;
279 *
gthis
;
281
v�tu�
ݔ��
()(cڡ
gA�i�T
&
ga_a�i�
)
283 (
gm_obje�
->*
gm_m�hod
)(
ga_a�i�
);
285
g�iv�e
:
286
C�ss
*
m_obje�
;
287
M�hod
gm_m�hod
;
291
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
292
�ass
gM�hodA�i�C�lback
<
gC�ss
,
gM�hod
, > :
public
Invokab�A�i�I����
<>
294
public
:
295
M�hodA�i�C�lback
(
C�ss
*
a_obj
,
M�hod
a_m�hod
)
296 :
m_obje�
(
a_obj
)
297 ,
m_m�hod
(
a_m�hod
)
300
M�hodA�i�C�lback
(M�hodA�i�C�lback cڡ&
a_�h�
)
302
gm_obje�
=
a_�h�
.
m_obje�
;
304
gm_m�hod
=
a_�h�
.
m_m�hod
;
306
gM�hodA�i�C�lback
&
gݔ��
=(
M�hodA�i�C�lback
cڡ&
a_�h�
)
308
m_obje�
=
a_�h�
.m_object;
310
gm_m�hod
=
a_�h�
.
m_m�hod
;
311 *
gthis
;
313
v�tu�
ݔ��
()()
315 (
gm_obje�
->*
gm_m�hod
)();
317
g�iv�e
:
318
C�ss
*
m_obje�
;
319
M�hod
gm_m�hod
;
323
g�m��e
<
ty��me
gA�i�T
>
324 �as�
cD�eg�e
326
mpublic
:
327
$D�eg�e
(�:
$m_��back
(0)
330 ~
$D�eg�e
()
332
}
}
334
�m��e
<
ty��me
M�hod
>
335
$D�eg�e
(
M�hod
a_m�hod
)
336 :
`m_��back
(
$�w
(
�a�m�tNewBuf�r
�
S�ticFun�i�A�i�C�lback
<
M�hod
,
A�i�T
>(
a_m�hod
))
338
`STATIC_ASSERT
((
S�ticFun�i�A�i�C�lback
<
M�hod
,
A�i�T
>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
339
}
}
341
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
342
$D�eg�e
(
C�ss
*
obje�
,
M�hod
a_m�hod
)
343 :
`m_��back
(
$�w
(
�a�m�tNewBuf�r
�
M�hodA�i�C�lback
<
C�ss
,
M�hod
,
A�i�T
>(
obje�
,
a_m�hod
))
345
`STATIC_ASSERT
((
M�hodA�i�C�lback
<
C�ss
,
M�hod
,
A�i�T
>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
346
}
}
350
$ݔ��
()(cڡ
A�i�T
&
a_a�i�
)
352 (*
m_��back
)(
a_a�i�
);
353
}
}
356
g�m��e
<
ty��me
gT
>
357
$ݔ��
()(cڡ
T
&
a_��ms
)
359 (*
this
)�(
A�i�T
)(
a_��ms
) );
360
}
}
362
g�iv�e
:
363 #ifde�
_WIN32
364
�a�m�tNewBuf�r
[24];
366
g�a�m�tNewBuf�r
[32];
368
gInvokab�A�i�I����
<
gA�i�T
> *
gm_��back
;
372
g�m��e
<>
373
�ass
gD�eg�e
<>
375
gpublic
:
376
D�eg�e
(�:
m_��back
(0)
379 ~
D�eg�e
()
383
�m��e
<
ty��me
M�hod
>
384
D�eg�e
(
M�hod
a_m�hod
)
385 :
m_��back
(
�w
(
�a�m�tNewBuf�r
�
S�ticFun�i�A�i�C�lback
<
M�hod
,>(
a_m�hod
))
387
STATIC_ASSERT
((
S�ticFun�i�A�i�C�lback
<
M�hod
,>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
390
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
391
D�eg�e
(
C�ss
*
obje�
,
M�hod
a_m�hod
)
392 :
m_��back
(
�w
(
�a�m�tNewBuf�r
�
M�hodA�i�C�lback
<
C�ss
,
M�hod
,>(
obje�
,
a_m�hod
))
394
STATIC_ASSERT
((
M�hodA�i�C�lback
<
C�ss
,
M�hod
,>�<�(
�a�m�tNewBuf�r
),
����Buf�rBize
);
399
ݔ��
()()
401 (*
gm_��back
)();
404
g�iv�e
:
405 #ifde�
_WIN32
406
�a�m�tNewBuf�r
[24];
408
g�a�m�tNewBuf�r
[32];
410
gInvokab�A�i�I����
<> *
gm_��back
;
414
g�m��e
<
ty��me
gA�i�T
>
415 �as�
cA�i�
417
mpublic
:
418
$A�i�
(�:
$m_�sideInvok�i�
(
�l�
) {}
421
$disc���A�
()
423
m_��m�ssC���i�Li�
.
`��r
();
424
m_c���i�Li�
.
`��r
();
425
}
}
427
$ݔ��
()(cڡ
A�i�T
&
a_��m
)
429 i�(!
m_�sideInvok�i�
)
431
m_�sideInvok�i�
=
�ue
;
432
u�t32_t
i
= 0; i <
m_��m�ssC���i�Li�
.
`size
(); i++)
433 (*
m_��m�ssC���i�Li�
[
i
])();
434
u�t32_t
i
= 0; i <
m_c���i�Li�
.
`size
(); i++)
435 (*
m_c���i�Li�
[
i
])(
a_��m
);
436
m_�sideInvok�i�
=
�l�
;
438
}
}
439
$�voke
(cڡ
A�i�T
&
a_a�i�
)
441
`ݔ��
()(
a_a�i�
);
442
}
}
444
gݔ��
+=(
Sh�edP�
<
D�eg�e
<> >&
a_d�eg�e
)
446
m_��m�ssC���i�Li�
.
push_back
(
a_d�eg�e
);
449
gݔ��
+=(
Sh�edP�
<
D�eg�e
<
A�i�T
> >&
a_d�eg�e
)
451
m_c���i�Li�
.
push_back
(
a_d�eg�e
);
455
gݔ��
-=(
Sh�edP�
<
D�eg�e
<
A�i�T
> >&
a_d�eg�e
)
460
ݔ��
-=(
Sh�edP�
<
D�eg�e
<> >&
a_d�eg�e
)
466
�iv�e
:
467
A�i�
(A�i�<
A�i�T
> cڡ&
a_�h�
);
468
gA�i�
&
gݔ��
=(
A�i�
<
A�i�T
> cڡ &
a_�h�
);
469
bo�
gm_�sideInvok�i�
;
470
gVe��
<
gSh�edP�
<
gD�eg�e
<
gA�i�T
> > >
gm_c���i�Li�
;
471
gVe��
<
gSh�edP�
<
gD�eg�e
<> > >
gm_��m�ssC���i�Li�
;
601
�l�e
$c���
(
Sig�l
&
a_sig�l
,
Sl�
&
a_��
)
603
Sh�edP�
<
Sl�
>
`��
(
�w
`Sl�
(
a_��
));
604
a_sig�l
.
`addC���i�
(
��
);
605
}
}
608
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
>
609
�l�e
c���
(
Sig�l
&
a_sig�l
,
C�ss
*
a_obje�
,
M�hod
a_m�hod
,
V���
a_v
=
$V���
())
611
Sh�edP�
<
Sl�
>
`��
(
�w
`Sl�
(
a_obje�
,
a_m�hod
,
a_v
));
612
a_sig�l
.
`addC���i�
(
��
);
613
}
}
616
g�m��e
<
�ass
gC�ss
,
ty��me
gM�hod
,�y��m�
gA�i�T
>
617
�l�e
c���
(
A�i�
<
A�i�T
>&
a_sig�l
,
C�ss
*
a_obje�
,
M�hod
a_m�hod
)
619
gSh�edP�
<
gD�eg�e
<
gA�i�T
> >
��
(
�w
D�eg�e
<
A�i�T
>(
a_obje�
,
a_m�hod
));
620
ga_sig�l
+�
��
;
623
g�m��e
<
�ass
gC�ss
,
ty��me
gA�i�T
>
624
�l�e
c���
(
A�i�
<
A�i�T
>&
a_sig�l
,
C�ss
*
a_obje�
, (C�ss::*
a_m�hod
)())
626
Sh�edP�
<
D�eg�e
<> >
`��
(
�w
D�eg�e<>(
a_obje�
,
a_m�hod
));
627
a_sig�l
+�
��
;
628
}
}
630
gEND_NAMESPACE
@../include/Test.h
1 #�agm�
��
2
~"Comm�.h
"
3
BEGIN_NAMESPACE
7
runUn�Te�s
(
a_v�bos�y
);
10 #i�
def�ed
(
NDEBUG
)
12
#UNIT_TEST
(
Te�Name
,
V�bo�
�\
)
13
gUn�Te�
##
$Te�Name
()
14
#CHECK
(
v�
�\
)
15 ((
v�
))
19
#UNIT_TEST
(
Te�Name
,
V�bo�
�\
)
20
Un�Te�
##
Te�Name
:
public
Un�Te�Ba�
\
22
Un�Te�
##
`Te�Name
(�:
`Un�Te�Ba�
(#Te�Name,
V�bo�
) {} \
23
`runTe�
(); \
24
}
}
gg_run
##
gTe�Name
; \
25
gUn�Te�
##
gTe�Name
::
$runTe�
()
26
#CHECK
(
v�
�\
)
27
`checkH��r
((
v�
), #v�,
__FILE__
,
__LINE__
)
33
sUn�Te�Ba�
35
`Un�Te�Ba�
(cڡ *
�me
,
a_v�bos�y
);
36
`checkH��r
(
bo�
�s
, cڡ *
�r
, cڡ *
f�e
,
l�e
);
37
v�tu�
`runTe�
() = 0;
38 cڡ *
��Name
;
39
�ssCou�
,
�Cou�
,
v�bo�
;
40
Un�Te�Ba�
*
�xtTe�
;
44
END_NAMESPACE
@../include/TrueType.h
1 #�agm�
��
2
~"Mem�yM�p�g.h
"
3
~"Comm�.h
"
4
BEGIN_NAMESPACE
7
sGlyph
9
sPo�t
11
�t16_t
mm_x
,
mm_y
;
15
sM�rics
17
u�t16_t
mm_adv��Width
;
18
�t16_t
mm_��SideB�r�g
;
22
Po�t
mm_m�
,
mm_max
;
23
�t16_t
width
(�cڡ {
mm_max
.
mm_x
-
mm_m�
.m_x; }
24
�t16_t
height
(�cڡ {
mm_max
.
mm_y
-
mm_m�
.m_y; }
25
�t16_t
rightSideB�r�g
(�cڡ {
mm_adv��Width
-
mm_��SideB�r�g
-
width
(); }
29
sOu��e
31
sCurve
33
Po�t
mm_cڌ�Po�ts
[3];
35
mVe��
<
mCurve
>
mm_l�es
;
38
M�rics
mm_m�rics
;
39
Ou��e
mm_ou��e
;
41 �as�
cCacheD�aI����
:
public
I����Ba�
44
mu�b�
CacheD�aI����
*
gm_u�rD�a
= 0;
49
sM�rics
59
�t16_t
mm_as��
;
60
�t16_t
mm_des��
;
61
�t16_t
mm_xHeight
;
62
�t16_t
mm_�pHeight
;
63
�t16_t
mm_l�eG�
;
68 �as�
cTrueTy�F�t
70
mpublic
:
71
TrueTy�F�t
(cڡ *
a_f�eName
);
72 ~
TrueTy�F�t
();
74
mGlyph
&
g�Glyph
(
u�t32_t
a_unicodeCh�a��
);
75
mM�rics
&
g�M�rics
();
76
g�K�n�gAdju�m�t
(
u�t32_t
a_��UnicodeCh�a��
, u�t32_�
a_rightUnicodeCh�a��
);
77
m�iv�e
:
78
F�tD�a
;
79
F�tD�a
*
mm_d�a
;
83
gTrueTy�F�t
&
g�F�t
(cڡ *
f�tFam�y
);
84
S��g
g�F�tName
(cڡ *
f�tFam�y
);
174
gEND_NAMESPACE
@../include/UiBuilder.h
1 #�agm�
��
2
~"V���.h
"
3
~"Prݔty.h
"
4
~"XmlP��r.h
"
5
~"Comm�.h
"
6
BEGIN_NAMESPACE
9
�ass
gWidg�
;
12
eWidg�Ty�
14
mWT_VBox
,
15
mWT_HBox
,
16
mWT_Lab�
,
17
mWT_RadioBu��
,
18
mWT_CheckBox
,
19
mWT_Bu��
,
20
mWT_Slid�
,
21
mWT_ComboBox
,
22
mWT_GroupBox
,
23
mWT_L�eEd�
,
24
mWT_VS��
,
25
mWT_HS��
,
26
mWT_Prog�ssB�
,
27
mWT_I�m
,
28
mWT_Unknown
32
sTy�dWidg�
34
Widg�Ty�
mm_ty�
;
35
Widg�
*
mm_widg�
;
39
g�m��e
<
ty��me
gT
>
40
T
*
$widg�_��
(
Ty�dWidg�
*
w
)
42 i�(
w
->
m_ty�
=�
T
::
Ty�
)
43
w
->
m_widg�
;
44
nuαr
;
45
}
}
48 �as�
cUiBu�d�
:
public
XmlC�sum�I����
50
public
:
51
UiBu�d�
(
Widg�
*
a_���
);
52 ~
UiBu�d�
();
54
�gi��Prݔty
(cڡ *
a_�me
,
Ab���Prݔty
<
bo�
>&
a_�ݔty
) {
55
addG��icPrݔty
(
a_�me
,
VT_boޗn_t
, (
Ab���Prݔty
<>*)&
a_�ݔty
);
57
�gi��Prݔty
(cڡ *
a_�me
,
Ab���Prݔty
<>&
a_�ݔty
) {
58
addG��icPrݔty
(
a_�me
,
VT_�t32_t
, (
Ab���Prݔty
<>*)&
a_�ݔty
);
60
�gi��Prݔty
(cڡ *
a_�me
,
Ab���Prݔty
<
S��g
>&
a_�ݔty
) {
61
addG��icPrݔty
(
a_�me
,
VT_S��g
, (
Ab���Prݔty
<>*)&
a_�ݔty
);
77
Ty�dWidg�
f�dWidg�
(cڡ *
a_�me
);
79
g��e�ed
:
80
c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
);
81
addG��icPrݔty
(cڡ *
a_�me
,
V���Ty�
a_ty�
,
Ab���Prݔty
<>*
a_�ݔty
);
82
g�iv�e
:
83
�ass
UiBu�d�D�a
*
m_d�a
;
87
gEND_NAMESPACE
@../include/Variant.h
1 #�agm�
��
2
~<c�r�g
>
3
~"Comm�.h
"
4
BEGIN_NAMESPACE
7
bo�
tboޗn_t
;
8
t��t32_t
;
9
t��t64_t
;
10 *
tpo��r_t
;
11 cڡ *
tc�r�g_t
;
12
g�d
::
t�r�g
t�r�g_t
;
15
�ass
gV���
;
21
eV���Ty�
23
#VARIANT_TYPES
\
)
24
VARIANT_MACRO
(
boޗn_t
) VARIANT_MACRO() \
25
VARIANT_MACRO
(
�t8_t
�VARIANT_MACRO(
�t16_t
�VARIANT_MACRO(
�t32_t
�VARIANT_MACRO(
�t64_t
) \
26
VARIANT_MACRO
(
u�t8_t
�VARIANT_MACRO(
u�t16_t
�VARIANT_MACRO(
u�t32_t
�VARIANT_MACRO(
u�t64_t
) \
27
VARIANT_MACRO
(
��t32_t
�VARIANT_MACRO(
��t64_t
�VARIANT_MACRO(
po��r_t
�VARIANT_MACRO(
c�r�g_t
) \
28
VARIANT_MACRO
(
S��g
�VARIANT_MACRO(
Widg�F�gs
)
30
#VARIANT_MACRO
(
ty�
�\
)
31
mVT_
##
mty�
,
32
mVARIANT_TYPES
33 #unde�
VARIANT_MACRO
34
mVT_Unknown
38
g�m��e
<
ty��me
gT
>
39
V���Ty�
v���Ty�FromTy�
();
42 cڡ
size_t
gmaxTy�Size
= 80;
45 �as�
cV���
47
mpublic
:
48
�m��e
<
ty��me
T
>
49
$�tV�ue
(cڡ
T
&
a_v�
)
51
m_ty�
=
v���Ty�FromTy�
<
T
>();
52
m_nu�
=
�l�
;
53
`STATIC_ASSERT
((
T
�<�
maxTy�Size
,
ty�TooBig
);
54
`mem�t
(
m_d�a
, 0,
maxTy�Size
);
55
`�w
(
m_d�a
)
`T
(
a_v�
);
58
�m��e
<
ty��me
T
>
59 cڡ
T
$v���_��
() const {
60
`STATIC_ASSERT
((
T
�<�
maxTy�Size
,
ty�TooBig
);
61 i�(
`V���Ty�
(
m_ty�
�=�
v���Ty�FromTy�
<
T
>())
64
uTemp
{
T
*
t
; cڡ *
d
; };
65
Temp
tmp
;
66
tmp
.
d
=
m_d�a
;
67
T
t
= *
tmp
.t;
69
t
;
72
`T
();
73
}
}
75
$V���
(�{
m_ty�
=
VT_Unknown
;
m_nu�
=
�ue
;
}
}
77 ~
$V���
()
79 i�(
m_ty�
=�
VT_S��g
) {
80
S��g
*
v
=
�����t_��
<S��g*>(
m_d�a
);
81
v
->~
`S��g
();
83
}
}
85
g�m��e
<
ty��me
gT
>
86
$V���
(cڡ
T
&
a_v�
�{
`�tV�ue
�_v�);
}
}
88
g�m��e
<
ty��me
gT
>
89
ݔ��
cڡ
$T
(�cڡ {
v���_��
<
T
>();
}
}
91
g�m��e
<
ty��me
gT
>
92 cڡ
T
$v�ue
(�cڡ {
v���_��
<
T
>();
}
}
94
ݔ��
cڡ *(�cڡ {
gm_�r
=
toS��g
(); m_�r.
c_�r
(); }
96
bo�
$isNu�
(�cڡ {
m_nu�
;
}
}
97
bo�
$isV�id
(�cڡ { !
m_nu�
&& (
m_ty�
!�
VT_Unknown
);
}
}
99
V���Ty�
$ty�
(�cڡ { (
V���Ty�
)
m_ty�
;
}
}
100 cڡ *
$ty�Name
() const;
102
bo�
ݔ��
==(cڡ
V���
&
v
�cڡ {
`com��Equ��y
(v);
}
}
103
bo�
gݔ��
!=(cڡ
V���
&
v
�cڡ { !
com��Equ��y
(v); }
106
bo�
$com��Equ��y
(cڡ
V���
&
v
�cڡ { (
m_ty�
=�v.m_ty��&& (
`memcmp
(
m_d�a
, v.m_d�a,
maxTy�Size
�=�0);
}
}
108
V���Ty�
�meToTy�
(cڡ *
a_�me
);
109 cڡ *
ty�ToName
(
V���Ty�
a_ty�
);
111
g�m��e
<
ty��me
gT
>
112
V���
$�omV�ue
(cڡ
T
&
v�ue
�{
`V���
(v�ue);
}
}
114
S��g
$toS��g
() const;
116
�iv�e
:
117
mu�b�
�d
::
�r�g
m_�r
;
118
m_d�a
[
maxTy�Size
];
119
u�t32_t
m_ty�
: 31;
120
u�t32_t
m_nu�
: 1;
121
}
};
163
gEND_NAMESPACE
@../include/Widget.h
1 #�agm�
��
2
~<li�
>
3
~"G�phics.h
"
4
~"Prݔty.h
"
5
~"Ev�ts.h
"
6
~"XmlP��r.h
"
7
~"Comm�.h
"
8
~"Obje�.h
"
9
BEGIN_NAMESPACE
12
eWidg�F�gs
14
mWF_N�e
= 0,
15
mWF_E��Background
= 1 << 0
17
$ENUM_AS_FLAGS
(
Widg�F�gs
)
20
eMou�S��
22
MS_Up
,
23
MS_Down
,
24
MS_Doub�Click
28
eLayoutP�icy
30
LP_H�izڏl
= 0,
31
LP_V�ti�l
= 1,
32
LP_Unm�aged
= 2
36 �as�
cPa�tT�g�I����
:
public
I����Ba�
38
public
:
39
v�tu�
Pix�Buf�r
&
`�rg�Buf�r
() = 0;
40
v�tu�
`�rg�S��
() = 0;
65
sSizeO�i�s
70
Size
m_m�imum
;
71
Size
m_�e�ed
;
72
Size
m_maximum
;
90
�ass
Widg�
:
public
Inh��
<
Obje�
,Widg�>,�ubli�
Pa�tT�g�I����
92
public
:
93
`Widg�
(
Obje�
*
a_���
, cڡ *
a_�me
);
94
`Widg�
(
Widg�
*
a_���
= 0, cڡ *
a_�me
= 0,
95
LayoutP�icy
a_�youtD�e�i�
=
LP_H�izڏl
,
a_x
= 0,
a_y
= 0,
a_width
= 10,
a_height
= 10);
96
v�tu�
~
`Widg�
();
97
`d�ayD��e
();
99
v�tu�
`���t
();
100
v�tu�
`upd�e
(
Re��g�
&
a_���g�
);
102
`width
();
103
`height
();
105
v�tu�
Re��g�
`w�ldGeom�ry
()
107
Re��g�
��
;
108
Widg�
*
widg�P��t
=
���
<Widget>();
109 i�(
widg�P��t
)
110
��
=
widg�P��t
->
`w�ldGeom�ry
();
111
��
.
m_x
+= m_x;
112
��
.
m_y
+= m_y;
113
��
;
116
v�tu�
`�tW�ldGeom�ry
(
Re��g�
a_��
)
118
Widg�
*
widg�P��t
=
���
<Widget>();
119 i�(
widg�P��t
)
120
widg�P��t
->
`�tW�ldGeom�ry
(
a_��
);
125
v�tu�
`�tNewSize
(
a_width
,
a_height
)
127
Widg�
*
widg�P��t
=
���
<Widget>();
128 i�(
widg�P��t
)
129
widg�P��t
->
`�tNewSize
(
a_width
,
a_height
);
131
`upd�eLayout
();
134
`�tGeom�ry
(
a_x
,
a_y
,
a_width
,
a_height
);
135
Re��g�
`���g�
()
137
Re��g�
r
= { {{0, 0}}, {{
`width
(),
`height
()}} }; �;
141
`�a�Background
(
i
= 0);
144
v�tu�
Tim�Id
`��tTim�
(
a_m�liSec�ds
);
145
v�tu�
`k�lTim�
(
Tim�Id
a_tim�Id
);
148
v�tu�
`glPa�t
();
151
Pix�Buf�r
&
`�rg�Buf�r
(�
ov�ride
153
m_�rg�
;
156
`�rg�S��
(�
ov�ride
158
m_comb�edS��
;
164
Prݔty
<
Widg�F�gs
>
�ags
;
165
Prݔty
<
u�t32_t
>
backgroundBrush
;
166
Prݔty
<>
�youtS�c�g
;
167
Prݔty
<>
�youtM�g�
;
168
Prݔty
<>
s��
;
170
START_MEMBERS
171
`REFLECT_MEMBER
(
�ags
, "widget flags")
172
`REFLECT_MEMBER
(
backgroundBrush
, "background brush is style�nd color�hat�he widget is cleared with")
173
`REFLECT_MEMBER
(
�youtS�c�g
, "spacing between child widgets")
174
`REFLECT_MEMBER
(
�youtM�g�
, "spacing�round�he border")
175
`REFLECT_MEMBER
(
s��
, "scale factor")
176
END_MEMBERS
178
��e�ed
:
179
`Widg�
(cڡ *
a_�me
,
bo�
a_ro�
);
182
v�tu�
`sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
184
v�tu�
`sizeEv�t
(
SizeEv�t
&
a_ev�t
);
185
v�tu�
`��tEv�t
(
Pa�tEv�t
&
a_ev�t
);
186
v�tu�
`tim�Ev�t
(
Tim�Ev�t
&
a_ev�t
);
187
v�tu�
`keyEv�t
(
KeyEv�t
&
a_ev�t
);
188
v�tu�
`mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
);
189
v�tu�
`mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
);
190
v�tu�
`mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
);
191
v�tu�
`wh�lEv�t
(
Wh�lEv�t
&
a_ev�t
);
193
v�tu�
`ev�t
(
Ev�t
&
a_ev�t
);
195
`upd�eLayout
();
196
�iv�e
:
197
`c���D�ayD��eWidg�s
(
�d
::
ve��
<
Widg�
*>&
a_widg�sToBeD��ed
) const;
198
`d��eD�ayD��eWidg�s
();
199
`s��dSizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
);
200
`upd�eS��
(
ign�ed
);
201
`upd�eT�g�
();
202
`ch�dAdded
(
Obje�
*
a_obje�
�
ov�ride
;
204
Pix�Buf�r
m_�rg�
;
205
m_x
,
m_y
;
206
m_w�dowX
,
m_w�dowY
;
207
m_g�lWidth
,
m_g�lHeight
;
211
bo�
m_w�ch�gMou�
;
212
bo�
m_mou�E��ed
;
213
bo�
m_d�ayD��e
;
214
m_comb�edS��
;
216
LayoutP�icy
m_�youtD�e�i�
;
218
`�tP��tHasUnm�agedCh�d
();
219
bo�
m_hasUnm�agedDes�nd�t
;
220
}
};
223
gEND_NAMESPACE
@../include/Window.h
1 #�agm�
��
2
~"Sig�lSl�.h
"
3
~"Widg�.h
"
4
~"Comm�.h
"
5
BEGIN_NAMESPACE
8
eW�dowF�gs
10
mWF_N�m�
= 0,
11
mWF_NoT��
= 1
15 �as�
cW�dow
:
public
Widg�
17
public
:
18
W�dow
(cڡ *
a_t��
,
bo�
a_fu�s��n
=
�l�
,
W�dowF�gs
a_�ags
=
WF_N�m�
);
19 ~
W�dow
();
26
Re��g�
$w�ldGeom�ry
(�
ov�ride
;
27
$�tW�ldGeom�ry
(
Re��g�
a_��
�
ov�ride
29
`�tNewSize
(
a_��
.
m_width
,�_��.
m_height
);
30
`�tPos�i�
(
a_��
.
m_x
,�_��.
m_y
);
35
`�sh�e
();
36
`�size
(
a_�wW
,
a_�wH
);
37
$�tNewSize
(
a_�wW
,
a_�wH
�
ov�ride
;
38
`�tPos�i�
(
a_x
,
a_y
);
39
`mou�Upd�e
(
a_x
,
a_y
,
a_bu��Mask
,
Mou�Bu��s
a_mou�Bu��
,
Mou�S��
a_mou�S��
);
40
`wh�lUpd�e
(
a_wh�lV�
);
41
`keyUpd�e
(
a_keyCode
,
bo�
a_keyDown
);
43
`��tUpd�e
();
44
$upd�e
(
Re��g�
&
a_���g�
�
ov�ride
;
45
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
�
ov�ride
;
47
`tim�Upd�e
(
Tim�Id
a_tim�Id
);
48
Tim�Id
$��tTim�
(
a_m�liSec�ds
�
ov�ride
;
49
$k�lTim�
(
Tim�Id
a_tim�Id
�
ov�ride
;
51
Pix�Buf�r
&
$�rg�Buf�r
(�
ov�ride
;
52
`d��iv�e
();
54
HWND__
*
tHWND
;
55
`���lize
(
HWND
a_hwnd
);
56
`��tGL
(
HWND
a_hwnd
);
57
`de�roy
(
HWND
a_hwnd
);
58
�iv�e
:
59
W�dowD�a
*
m_d�a
;
60
}
};
63
gEND_NAMESPACE
@../include/XmlParser.h
1 #�agm�
��
2
~"Comm�.h
"
3
BEGIN_NAMESPACE
6
eXmlTok�Ty�
8
mXT_Text
,
9
mXT_TagO�n
,
10
mXT_TagS��
,
11
mXT_TagEnd
,
12
mXT_A�ribu�Name
,
13
mXT_A�ribu�V�ue
,
14
mXT_Unknown
20
sXmlS��gSli�
22 cڡ *
mm_d�a
;
23
size_t
mm_�ngth
;
28 �as�
cXmlC�sum�I����
:
public
I����Ba�
30
public
:
31
v�tu�
c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
) = 0;
35 �as�
cXmlP��r
37
mpublic
:
38
XmlP��r
();
39 ~
XmlP��r
();
40
�r�XmlF�e
(cڡ *
a_f�eName
,
XmlC�sum�I����
&
a_c�sum�
);
41
�r�XmlD�a
(cڡ *
a_d�a
,
size_t
a_size
,
XmlC�sum�I����
&
a_c�sum�
);
45 �as�
cXmlDomT�eBu�d�
:
public
XmlC�sum�I����
47
public
:
48
XmlDomT�eBu�d�
();
49 ~
XmlDomT�eBu�d�
();
50
��tDomT�e
();
51
m��e�ed
:
52
c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
);
53
m�iv�e
:
54
�ass
XmlDomT�eBu�d�D�a
*
m_d�a
;
58
gEND_NAMESPACE
@../resources/CheckBoxTick.xbm
1
#CheckBoxTick_width
22
)
2
#CheckBoxTick_height
22
)
3
gCheckBoxTick_b�s
[] = {
@../resources/ComboBoxArrow.xbm
1
#ComboBoxA�ow_width
22
)
2
#ComboBoxA�ow_height
22
)
3
gComboBoxA�ow_b�s
[] = {
@../resources/Images.h
1 #�agm�
��
2
~"Comm�.h
"
3
gBEGIN_NAMESPACE
6
~"ComboBoxA�ow.xbm
"
7
~"S��lB�A�ow.xbm
"
8
~"CheckBoxTick.xbm
"
11
sXB�m�Image
13
mwidth
;
14
mheight
;
15
mb�s_�r_pix�
;
16 *
mpix�_d�a
;
20
XB�m�Image
gComboBoxA�ow
= {
ComboBoxA�ow_width
,
ComboBoxA�ow_height
, 2,
ComboBoxA�ow_b�s
};
21
XB�m�Image
gS��lB�A�ow
= {
S��lB�A�ow_width
,
S��lB�A�ow_height
, 2,
S��lB�A�ow_b�s
};
22
XB�m�Image
gCheckBoxTick
= {
CheckBoxTick_width
,
CheckBoxTick_height
, 2,
CheckBoxTick_b�s
};
25
gEND_NAMESPACE
@../resources/ScrollBarArrow.xbm
1
#S��lB�A�ow_width
22
)
2
#S��lB�A�ow_height
22
)
3
gS��lB�A�ow_b�s
[] = {
@../src/Application.cpp
2
~<�ime
>
5 #ifde�
_WIN32
6
#Re��g�
W�Re��g�
)
7
#WIN32_LEAN_AND_MEAN
8
~<w�dows.h
>
)
9 #unde�
Re��g�
13
~"A�li�ti�.h
"
14
~"W�dow.h
"
15
~"Comm�.h
"
18
BEGIN_NAMESPACE
21
sA�li�ti�D�a
23
bo�
m���d
;
24
ms��nW
,
ms��nH
;
25
�ock_t
mϡTick
;
26
W�dow
*
mma�W�dow
;
30 #ifde�
_WIN32
33
LRESULT
CALLBACK
Ma�WndProc
(
HWND
hwnd
,
UINT
uMsg
,
WPARAM
wP�am
,
LPARAM
lP�am
);
36
gA�li�ti�
::
$A�li�ti�
()
38
m_d�a
=
�w
A�li�ti�D�a
;
39
m_d�a
->
s��nW
=
`G�Sy�emM�rics
(
SM_CXSCREEN
);
40
m_d�a
->
s��nH
�
`G�Sy�emM�rics
(
SM_CYSCREEN
);
41
WNDCLASSEXW
wcx
= { (
WNDCLASSEXA
),
CS_OWNDC
|
CS_HREDRAW
|
CS_VREDRAW
,
Ma�WndProc
,
42 0, 0,
`G�Modu�H�d�
(0),
NULL
, NULL, NULL, NULL,
L
"MainWClass", NULL };
43
`Regi��C�ssExW
(&
wcx
);
46
}
}
49
gA�li�ti�
::~
$A�li�ti�
()
52
d��e
m_d�a
;
53
}
}
56
gA�li�ti�
::
$exec
()
58
`n�m�Lo�
();
60
}
}
63
gA�li�ti�
::
$n�m�Lo�
()
65
MSG
msg
;
66
`G�Mes�geW
(&
msg
,
NULL
, 0, 0))
68
`T�n��eMes�ge
(&
msg
);
69
`Di��chMes�geW
(&
msg
);
71
}
}
74
gA�li�ti�
::
$gameLo�
()
76
MSG
msg
;
77
�ue
)
80
`G�QueueS�tus
(
QS_ALLEVENTS
) )
81
`P�kMes�ge
(&
msg
,
NULL
, 0, 0,
PM_REMOVE
);
83
�ock_t
tick
=
`�ock
();
84
m_d�a
->
ϡTick
=
tick
;
86
SHORT
es��
=
`G�AsyncKeyS��
(
VK_ESCAPE
);
87 i��
es��
)
90
m_d�a
->
ma�W�dow
->
`���t
();
92
}
}
97
gEND_NAMESPACE
103
~<c�dlib
>
104
~<c�dio
>
105
~<uni�d.h
>
106
~"Obje�iveC.h
"
107
~<A�li�ti�S�vi�s/A�li�ti�S�vi�s.h
>
111
id
NSA�
;
112
�ass
gNSS��g
;
113
NSS��g
*
tNSRunLo�Mode
;
114
tNSEv�tMask
;
115 cڡ
NSEv�tMask
gNSAnyEv�tMask
=
UINT64_MAX
;
116
tNSA�li�ti�A�iv�i�P�icy
;
117 cڡ
NSA�li�ti�A�iv�i�P�icy
gNSA�li�ti�A�iv�i�P�icyRegu�r
= 0;
118
"C"
NSRunLo�Mode
NSDe�u�RunLo�Mode
;
121
gBEGIN_NAMESPACE
125
#OBJC_BEGIN_CLASS
(
�me
,
ba�
) \
126
Regi��
##
�me
##
`C�ss
() { \
127
C�ss
�wC�ss
; \
128
�wC�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
(#ba�), #�me, 0);
)
129
#OBJC_METHOD
(
func
,
im�
...) \
130
`BOOL
(*
func
##
Im�
)(
id
,
SEL
, id��[](id
_�lf
, SEL
_cmd
, id
_n�ifi�ti�
)->
BOOL
\
132
Obje�iveC
::
Obje�
_this
= Obje�iveC::
`Obje�
(
_�lf
); \
133
im�
\
135
`�ass_addM�hod
(
�wC�ss
,
`�l_g�Uid
(#fun�":"), (
IMP
)
func
##
Im�
, "i@:@");
)
136
#OBJC_MEMBER
(
typ
,
�me
) \
137
`�ass_addIv�
(
�wC�ss
, #�me, (
typ
), �yp), #typ);
)
138
#OBJC_END_CLASS
() \
139
`objc_�gi��C�ssPa�
(
�wC�ss
); \
140 }
)
145
Regi��W�dowC�ss
();
170 �as�
cShimA�li�ti�
:
public
A�li�ti�
172
public
:
173
$��t2
(�{
`��t
(); }
174
}
};
176
gA�li�ti�
::
$��t
()
178
m_d�a
->
���d
=
�ue
;
179
}
}
182
$OBJC_BEGIN_CLASS
(
A�D�eg�e
,
NSObje�
)
184
`OBJC_METHOD
(
��i�ti�DidF�ishLaunch�g
,
186 aut�
�pP�
=
_this
.
g�
<
ShimA�li�ti�
*>("m_applicationPtr");
187
�pP�
->
`��t2
();
189
YES
;
190
}
})
193
OBJC_MEMBER
(
A�li�ti�
*,
m_��i�ti�P�
);
194
$OBJC_END_CLASS
()
197
"C"
bo�
`NSA�li�ti�L�d
();
198
A�li�ti�
::
$A�li�ti�
()
201
`NSA�li�ti�L�d
();
204
m_d�a
=
�w
A�li�ti�D�a
;
205
m_d�a
->
���d
=
�l�
;
212
Obje�iveC
::
Obje�
�p
= Obje�iveC::
`Obje�
("NSApplication")["sharedApplication"]();
215
�p
["�tA�iv�i�P�icy:"](
NSA�li�ti�A�iv�i�P�icyRegu�r
);
217
`Regi��A�D�eg�eC�ss
();
219
`Regi��W�dowC�ss
();
221
Obje�iveC
::
Obje�
�pD�Obj
= Obje�iveC::
`Obje�
("AppDelegate")["alloc"]()["init"]();
222
�pD�Obj
.
`�t
("m_��i�ti�P�", (*)
this
);
224
�p
["�tD�eg�e:"](
�pD�Obj
.
m_obje�
);
226
`��tf
("waiting for AppDidFinishLaunching\n");
228
�p
["finishLaunching"]();
230 !
m_d�a
->
���d
)
234 aut�
ev�t
=
�p
["�xtEv�tM�ch�gMask:u��D�e:�Mode:dequeue:"](
NSAnyEv�tMask
,
n�
,
NSDe�u�RunLo�Mode
,
YES
);
235
�p
["�ndEv�t:"](
ev�t
.
m_obje�
);
236
�p
["updateWindows"]();
237
ev�t
["release"]();
241
Obje�iveC
::
Obje�
s
= Obje�iveC::
`Obje�
("NSString")["stringWithUTF8String:"]("");
242
Obje�iveC
::
Obje�
q
= Obje�iveC::
`Obje�
("NSString")["stringWithUTF8String:"]("q");
243
Obje�iveC
::
Obje�
�pS
= Obje�iveC::
`Obje�
("NSString")["stringWithUTF8String:"]("Application");
244
Obje�iveC
::
Obje�
aboutS
= Obje�iveC::
`Obje�
("NSString")["stringWithUTF8String:"]("About...");
245
Obje�iveC
::
Obje�
qu�S
= Obje�iveC::
`Obje�
("NSString")["stringWithUTF8String:"]("Quit");
246
Obje�iveC
::
Obje�
ma�M�u
= Obje�iveC::
`Obje�
("NSMenu")["alloc"]()["init"]();
247
Obje�iveC
::
Obje�
ma�A�M�uI�m
= Obje�iveC::
`Obje�
("NSM�uI�m")["�loc"]()["��W�hT��:a�i�:keyEquiv��t:"](
�pS
.
m_obje�
,
n�
,
s
.m_object);
248
ma�M�u
["addI�m:"](
ma�A�M�uI�m
.
m_obje�
);
249
Obje�iveC
::
Obje�
�pM�u
= Obje�iveC::
`Obje�
("NSMenu")["alloc"]()["init"]();
250
ma�A�M�uI�m
["�tSubm�u:"](
�pM�u
.
m_obje�
);
251
�pM�u
["addI�mW�hT��:a�i�:keyEquiv��t:"](
aboutS
.
m_obje�
,
n�
,
s
.m_object);
252
Obje�iveC
::
Obje�
m�uI�m
=
�pM�u
["addI�mW�hT��:a�i�:keyEquiv��t:"](
qu�S
.
m_obje�
,
`�l_g�Uid
("�rm��e:"),
q
.m_object);
253
m�uI�m
["setTag:"](10);
254
�p
["�tMa�M�u:"](
ma�M�u
);
266
`��tf
("finished waiting for AppDidFinishLaunching\n");
268
}
}
271
gA�li�ti�
::~
$A�li�ti�
()
274
d��e
m_d�a
;
275
}
}
278
gA�li�ti�
::
$exec
()
324
`��tf
("run�oop\n");
325 aut�
po�
=
Obje�iveC
::
`Obje�
("NSAutoreleasePool")["alloc"]()["init"]();
326
Obje�iveC
::
`Obje�
((
id
)
NSA�
)["run"]();
327
po�
["release"]();
329
}
}
332
gA�li�ti�
::
$n�m�Lo�
()
334
}
}
337
A�li�ti�
::
$gameLo�
()
339
}
}
345
END_NAMESPACE
@../src/CommonWidgets.cpp
2 �as�
cWidg�InfoBa�
4
mpublic
:
5
$Widg�InfoBa�
(cڡ *
a_de�
) {}
6
}
};
8
#CONCAT2
(
x
,
y
) \
9
x
##
y
)
11
#CONCAT
(
x
,
y
) \
12
`CONCAT2
(
x
,
y
)
)
14
#DECLARE_WIDGET_INFO
(
�me
,
x
) \
15
�me
:
public
Widg�InfoBa�
{ \
16
`�me
(�:
`Widg�InfoBa�
(
x
) {} \
17 }
`CONCAT
(
g_�gi��
,
�me
);
)
19
#DECLARE_WIDGET
(
de�
) \
20
de�
; \
21
`DECLARE_WIDGET_INFO
�
`CONCAT
(
Widg�Info
,
__COUNTER__
�, #de�)
)
24
~"Comm�Widg�s.h
"
25
~"W�dow.h
"
26
~"Pa��r.h
"
27
~"Prݔty.h
"
28
~"../�sour�s/Images.h
"
31
BEGIN_NAMESPACE
34
�me�a�
gd�a�s
36
gPrݔty
<
gbo�
>
gg_u�ssig�dBo�
;
37
gPrݔty
<
gS��g
>
gg_u�ssig�dS��g
;
41 cڡ
gs_de�u�F�tSize
= 7;
42 cڡ *
gs_de�u�F�tFam�y
=
F�t
::
UIF�t
;
45
eBu��S��
47
mDi�b�dS��
,
48
mN�m�S��
,
49
mDe�u�Bu��S��
,
50
mHov�S��
,
51
mD��s�dS��
55
gCheckab�Widg�
::
$Checkab�Widg�
(
Obje�
*
a_���
, cڡ *
a_�me
)
56 :
`Checkab�Widg�
(
Obje�P�Ca�
<
Widg�
>(
a_���
),
d�a�s
::
g_u�ssig�dBo�
)
58
}
}
61
Checkab�Widg�
::Checkab�Widg�(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_v�ue
)
62 :
Ab���V�ueWidg�
<
bo�
>(
a_���
,
ga_v�ue
),
$checked
(
a_v�ue
)
64
}
}
67
gHBox
::
$HBox
(
Widg�
*
a_���
)
68 :
`Ba�T
(
a_���
, "HBox",
LP_H�izڏl
)
70
}
}
73
gVBox
::
$VBox
(
Widg�
*
a_���
)
74 :
`Ba�T
(
a_���
, "VBox",
LP_V�ti�l
)
76
}
}
79
gGroupBoxS��r
::
$GroupBoxS��r
(
Widg�
*
a_���
)
80 :
`Widg�
(
a_���
, "GroupBox",
LP_V�ti�l
)
82
}
}
85
gGroupBoxS��r
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
87
SizeO�i�s
�ts
= { { 1, 8 }, { 1, 8 }, { 65536, 8 } };
88
a_sizeO�i�s
=
�ts
;
89
}
}
92
gGroupBox
::
GroupBox
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_t��
)
93 :
Ab���V�ueWidg�
<
S��g
>(
a_���
,
ga_t��
),
t��
(
a_t��
),
$m_t��S��
(
this
)
95
�youtM�g�
= 15;
96
}
}
99
gGroupBox
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
101
Pa��r
`p
(
this
);
102
S��g
�r
=
t��
.
`v�ue
();
103
p
.
`�tP�
(0x000000);
104
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
105
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
106
p
.
`d�wText
(15, 0,
�r
.
`d�a
());
107
Size
�xtSize
=
p
.
`�xtEx��s
(
�r
.
`d�a
());
108
w
=
�xtSize
.
m_width
;
109
h
=
�xtSize
.
m_height
;
111
p
.
`�tP�
(0xC0C0C0);
112
p
.
`d�wL�e
(3,
h
/2, 12, h/2);
113
p
.
`d�wL�e
(3,
h
/2, 3,
`height
() - 3);
114
p
.
`d�wL�e
(3,
`height
(�- 3,
`width
() -3, height() - 3);
115
p
.
`d�wL�e
(
`width
(�-3,
h
/2, width(�-3,
`height
() - 3);
116
p
.
`d�wL�e
(
w
+ 15 + 3,
h
/2,
`width
() -3, h/2);
117
}
}
120
gHS��
::
$HS��
(
Widg�
*
a_���
)
121 :
`Widg�
(
a_���
, "HS��",
LP_H�izڏl
)
123
}
}
126
gHS��
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
128
SizeO�i�s
�ts
= { { 64, 10 }, { 128, 10 }, { 65536, 65536 } };
129
a_sizeO�i�s
=
�ts
;
130
}
}
133
gVS��
::
$VS��
(
Widg�
*
a_���
)
134 :
`Widg�
(
a_���
, "VS��",
LP_V�ti�l
)
136
}
}
139
gVS��
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
141
SizeO�i�s
�ts
= { { 10, 64 }, { 10, 128 }, { 65536, 65536 } };
142
a_sizeO�i�s
=
�ts
;
143
}
}
146
gLab�
::
Lab�
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_�xt
)
147 :
Ab���V�ueWidg�
<
S��g
>(
a_���
,
ga_�xt
),
$�xt
(
a_�xt
)
149
�ags
=
WF_E��Background
;
151
di�b�d
=
�l�
;
152
}
}
155
gLab�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
157
Pa��r
`p
(
this
);
158
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
159
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
160
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
161
SizeO�i�s
�ts
= { {
�xtSize
.
m_width
+ 4, 20 }, {�extSize.m_width * 2 + 4, 32 }, {�extSize.m_width * 3 + 4, 48 } };
164
a_sizeO�i�s
=
�ts
;
165
}
}
168
gLab�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
170
Pa��r
`p
(
this
);
171
p
.
`�tP�
(
`di�b�d
() ? 0xFF838383 : 0xFF000000);
172
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
173
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
174
p
.
`d�wText
(1, 1,
`�xt
().
`d�a
());
175
}
}
178
gBu��
::
$Bu��
(
Widg�
*
a_���
, cڡ *
a_�xt
)
179 :
`Widg�
(
a_���
, "Bu��",
LP_V�ti�l
, 0, 0, 100, 32)
181
�xt
=
a_�xt
;
182
m_mou�DownInBu��
=
�l�
;
183
m_mou�Ov�Bu��
=
�l�
;
184
di�b�d
=
�l�
;
185
isDe�u�
=
�l�
;
186
hasFocus
=
�l�
;
189
`c���
(
�xt
.
v�ueCh�ged
,
this
, &
Bu��
::
��esh
);
190
`c���
(
di�b�d
.
v�ueCh�ged
,
this
, &
Bu��
::
��esh
);
191
`c���
(
isDe�u�
.
v�ueCh�ged
,
this
, &
Bu��
::
��esh
);
192
`c���
(
hasFocus
.
v�ueCh�ged
,
this
, &
Bu��
::
��esh
);
193
}
}
196
gBu��
::
$��esh
()
198
`���t
();
199
}
}
202
gBu��
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
204
Pa��r
`p
(
this
);
205
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
206
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
207
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
208
SizeO�i�s
�ts
= { {
�xtSize
.
m_width
+ 8, 20 }, {�extSize.m_width * 2 + 8, 21 }, {�extSize.m_width * 3 + 8, 24 } };
211
a_sizeO�i�s
=
�ts
;
212
}
}
215
gBu��
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
217
Pa��r
`p
(
this
);
219
bo�
d�wFocusRe�
= !
`di�b�d
(�&&
`hasFocus
();
220
Bu��S��
��e
=
N�m�S��
;
221 i�(
`di�b�d
())
222
��e
=
Di�b�dS��
;
223 i�(
m_mou�Ov�Bu��
&&
m_mou�DownInBu��
)
224
��e
=
D��s�dS��
;
225 i�(
m_mou�Ov�Bu��
!�
m_mou�DownInBu��
)
226
��e
=
Hov�S��
;
227 i�(
`isDe�u�
(�||
`hasFocus
())
228
��e
=
De�u�Bu��S��
;
230
u�t32_t
bgA1C�s
[5] = { 0xefefef, 0xf0f0f0, 0xf0f0f0, 0xecf4fc, 0xdaecfc };
231
u�t32_t
bgB1C�s
[5] = { 0xefefef, 0xe5e5e5, 0xe5e5e5, 0xdcecfc, 0xc4e0fc };
232
u�t32_t
edgeC�s
[5] = { 0xd9d9d9, 0xacacac, 0x3399ff, 0x7eb4ea, 0x569de5 };
233
u�t32_t
�xtC�s
[5] = { 0x838383, 0x000000, 0x000000, 0x000000, 0x000000 };
235
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
236
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
240
G�d��
g�d��
= {
LINEAR_GRADIENT
, { {
bgA1C�s
[()
��e
], 0.0 }, {
bgB1C�s
[()state], 1.0 } }, 0, { { 1, 0, 1 } } };
241
g�d��
.
m_d�a
.
m_l��r
.
m_y2
=
`height
() - 1;
242
p
.
`d�wG�d��
(1, 1,
g�d��
,
`width
(�- 2,
`height
() - 2);
244
p
.
`�tP�
(
�xtC�s
[()
��e
]);
245
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
246
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
248
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
249
p
.
`d�wText
((
`width
(�-
�xtSize
.
m_width
�/ 2, (
`height
(�-�extSize.
m_height
�/ 2,
`�xt
().
`d�a
());
251 i�(
d�wFocusRe�
)
252
p
.
`d�wFocusRe��g�
(2, 2,
`width
(�- 4,
`height
() - 4);
253
}
}
256
gBu��
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
258
m_mou�Ov�Bu��
=
�ue
;
259
`���t
();
260
}
}
263
gBu��
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
265
m_mou�Ov�Bu��
=
�l�
;
266
`���t
();
267
}
}
270
gBu��
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
272 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
273
m_mou�DownInBu��
=
�ue
;
275 i�(
a_ev�t
.
m_�dBu��s
&& !a_ev�t.
m_bu��s
)
278 i�(
m_mou�DownInBu��
&&
m_mou�Ov�Bu��
&& !
`di�b�d
())
279
`a�iv�ed
(
m_mou�DownInBu��
);
282 i�(!
a_ev�t
.
m_bu��s
)
283
m_mou�DownInBu��
=
�l�
;
285 i�(
a_ev�t
.
m_�dBu��s
!�a_ev�t.
m_bu��s
)
286
`���t
();
287
}
}
290
sGimpExp܋dImage
292
mwidth
;
293
mheight
;
294
mby�s_�r_pix�
;
295
mpix�_d�a
[11 * 11 * 4 + 1];
299 cڡ
GimpExp܋dImage
gg_checkBoxTickImage
=
327 cڡ
GimpExp܋dImage
gg_comboBoxH�d�Image
=
338 cڡ
GimpExp܋dImage
gg_s��lUpH�d�Image
=
351 cڡ
GimpExp܋dImage
gg_s��lDownH�d�Image
=
387
$d�wGimpExp܋dImage
(
Pa��r
&
p
,
x
,
y
, cڡ
GimpExp܋dImage
&
img
)
389
p
.
`d�wPix�Buf�r
(
x
,
y
,
img
.
pix�_d�a
, img.
width
, img.
height
, img.
by�s_�r_pix�
);
390
}
}
393
$d�wXB�m�Image
(
Pa��r
&
p
,
x
,
y
, cڡ
XB�m�Image
&
img
,
bo�
a_v�ti�lFl�
=
�l�
)
395
u�t32_t
*
tmpBuf
=
�w
u�t32_t[
img
.
width
* img.
height
];
396
�cBy�sP�Row
= ((
img
.
width
+ 15) / 16) * 2;
397
u�t32_t
*
tmpBufPix
=
tmpBuf
;
398
u�t8_t
*
�cL�e
= (u�t8_t*)
img
.
pix�_d�a
;
399 i�(
a_v�ti�lFl�
)
401
�cL�e
+�(
img
.
height
- 1�*
�cBy�sP�Row
;
402
�cBy�sP�Row
*= -1;
404
j
= 0; j <
img
.
height
; j++,
�cL�e
+�
�cBy�sP�Row
)
406
i
= 0; i <
img
.
width
; i++,
tmpBufPix
++)
408 *
tmpBufPix
= (
�cL�e
[
i
/ 8] & (1U << (i & 7))) ? 0xFF000000 : 0x00FFFFFF;
411
p
.
`d�wPix�Buf�r
(
x
,
y
, (
u�t8_t
*)
tmpBuf
,
img
.
width
, img.
height
, 4);
412
d��e
[]
tmpBuf
;
413
}
}
416
gCheckBox
::
CheckBox
(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_checked
, cڡ *
a_�xt
)
417 :
$Checkab�Widg�
(
a_���
,
a_checked
)
419
�xt
=
a_�xt
;
420
m_mou�DownInBu��
=
�l�
;
421
m_mou�Ov�Bu��
=
�l�
;
422
di�b�d
=
�l�
;
423
isDe�u�
=
�l�
;
424
hasFocus
=
�l�
;
425
checked
=
�l�
;
430
}
}
433
gCheckBox
::
$�TextCh�ged
(
S��g
a_�xt
)
437
}
}
441
CheckBox
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
443
Pa��r
`p
(
this
);
444
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
445
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
446
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
447
SizeO�i�s
�ts
= { {
�xtSize
.
m_width
*2 + 32, 20 }, {�extSize.m_width * 2 + 32, 21 }, {�extSize.m_width * 3 + 32, 24 } };
450
a_sizeO�i�s
=
�ts
;
451
}
}
454
gCheckBox
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
456
Pa��r
`p
(
this
);
458
bo�
d�wFocusRe�
= !
`di�b�d
(�&&
`hasFocus
();
459
Bu��S��
��e
=
N�m�S��
;
460 i�(
`di�b�d
())
461
��e
=
Di�b�dS��
;
462 i�(
m_mou�Ov�Bu��
&&
m_mou�DownInBu��
)
463
��e
=
D��s�dS��
;
464 i�(
m_mou�Ov�Bu��
!�
m_mou�DownInBu��
)
465
��e
=
Hov�S��
;
469
u�t32_t
bgA1C�s
[5] = { 0xe6e6e6, 0xffffff, 0, 0xf3f9ff, 0xd9ecff };
470
u�t32_t
edgeC�s
[5] = { 0xbcbcbc, 0x707070, 0, 0x3399ff, 0x007cde };
471
u�t32_t
�xtC�s
[5] = { 0x838383, 0x000000, 0, 0x000000, 0x000000 };
473
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
474
p
.
`d�wRe��g�
(3, 3, 13, 13);
475
p
.
`�tBrush
(
bgA1C�s
[()
��e
]);
476
p
.
`d�wRe��g�
(4, 4, 11, 11);
478 i�(
`checked
())
480 i�(
c_u�R��a
)
481
`d�wXB�m�Image
(
p
, 4, 4,
CheckBoxTick
);
483
`d�wGimpExp܋dImage
(
p
, 4, 4,
g_checkBoxTickImage
);
486
p
.
`�tP�
(
�xtC�s
[()
��e
]);
487
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
488
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
489
p
.
`d�wText
(18, 2,
`�xt
().
`d�a
());
491 i�(
d�wFocusRe�
)
493
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
494
p
.
`d�wFocusRe��g�
(18, 2,
�xtSize
.
m_width
+ 1,�extSize.
m_height
);
496
}
}
499
gCheckBox
::
$togg�
()
501
`��tf
("check box�oggled\n");
502
checked
= !
`checked
();
503
}
}
506
gCheckBox
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
508
m_mou�Ov�Bu��
=
�ue
;
509
`���t
();
510
}
}
513
gCheckBox
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
515
m_mou�Ov�Bu��
=
�l�
;
516
`���t
();
517
}
}
520
gCheckBox
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
522 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
523
m_mou�DownInBu��
=
�ue
;
525 i�(
a_ev�t
.
m_�dBu��s
&& !a_ev�t.
m_bu��s
)
528 i�(
m_mou�DownInBu��
&&
m_mou�Ov�Bu��
&& !
`di�b�d
())
529
`togg�
();
532 i�(!
a_ev�t
.
m_bu��s
)
533
m_mou�DownInBu��
=
�l�
;
535 i�(
a_ev�t
.
m_�dBu��s
!�a_ev�t.
m_bu��s
)
536
`���t
();
537
}
}
540
gRadioBu��
::
RadioBu��
(
Widg�
*
a_���
,
Ab���Prݔty
<
bo�
>&
a_checked
, cڡ *
a_�xt
)
541 :
$Checkab�Widg�
(
a_���
,
a_checked
)
543
�xt
=
a_�xt
;
544
m_mou�DownInBu��
=
�l�
;
545
m_mou�Ov�Bu��
=
�l�
;
546
di�b�d
=
�l�
;
547
isDe�u�
=
�l�
;
548
hasFocus
=
�l�
;
549
checked
=
�l�
;
550
}
}
553
gRadioBu��
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
555
Pa��r
`p
(
this
);
556
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
557
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
558
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
559
SizeO�i�s
�ts
= { {
�xtSize
.
m_width
+ 32, 20 }, {�extSize.m_width * 2 + 32, 21 }, {�extSize.m_width * 3 + 32, 24 } };
562
a_sizeO�i�s
=
�ts
;
563
}
}
566
gRadioBu��
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
568
Pa��r
`p
(
this
);
570
bo�
d�wFocusRe�
= !
`di�b�d
(�&&
`hasFocus
();
571
Bu��S��
��e
=
N�m�S��
;
572 i�(
`di�b�d
())
573
��e
=
Di�b�dS��
;
574 i�(
m_mou�Ov�Bu��
&&
m_mou�DownInBu��
)
575
��e
=
D��s�dS��
;
576 i�(
m_mou�Ov�Bu��
!�
m_mou�DownInBu��
)
577
��e
=
Hov�S��
;
581
u�t32_t
bgA1C�s
[5] = { 0xe6e6e6, 0xffffff, 0, 0xf3f9ff, 0xd9ecff };
582
u�t32_t
edgeC�s
[5] = { 0xbcbcbc, 0x707070, 0, 0x3399ff, 0x007cde };
583
u�t32_t
�xtC�s
[5] = { 0x838383, 0x000000, 0, 0x000000, 0x000000 };
585
p
.
`�tBrush
(0xff000000 |
edgeC�s
[()
��e
]);
586
p
.
`d�wE�
(3, 3, 13, 13);
587
p
.
`�tBrush
(0xff000000 |
bgA1C�s
[()
��e
]);
588
p
.
`d�wE�
(4, 4, 11, 11);
590 i�(
`checked
()) {
591
p
.
`�tBrush
(0xff000000 |
�xtC�s
[()
��e
]);
592
p
.
`d�wE�
(6, 6, 7, 7);
595
p
.
`�tP�
(
�xtC�s
[()
��e
]);
596
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
597
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
598
p
.
`d�wText
(18, 2,
`�xt
().
`d�a
());
600 i�(
d�wFocusRe�
)
602
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
603
p
.
`d�wFocusRe��g�
(18, 2,
�xtSize
.
m_width
+ 1,�extSize.
m_height
);
605
}
}
608
gRadioBu��
::
$togg�
()
610
`��tf
("radio button�oggled\n");
611 i�(!
`checked
())
612
checked
=
�ue
;
614
}
}
617
gRadioBu��
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
619
m_mou�Ov�Bu��
=
�ue
;
620
`���t
();
621
}
}
624
gRadioBu��
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
626
m_mou�Ov�Bu��
=
�l�
;
627
`���t
();
628
}
}
631
gRadioBu��
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
633 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
634
m_mou�DownInBu��
=
�ue
;
636 i�(
a_ev�t
.
m_�dBu��s
&& !a_ev�t.
m_bu��s
)
639 i�(
m_mou�DownInBu��
&&
m_mou�Ov�Bu��
&& !
`di�b�d
())
640
`togg�
();
643 i�(!
a_ev�t
.
m_bu��s
)
644
m_mou�DownInBu��
=
�l�
;
646 i�(
a_ev�t
.
m_�dBu��s
!�a_ev�t.
m_bu��s
)
647
`���t
();
648
}
}
651
gL�eEd�
::
L�eEd�
(
Widg�
*
a_���
,
Ab���Prݔty
<
S��g
>&
a_�xt
)
652 :
Ab���V�ueWidg�
<
S��g
>(
a_���
,
ga_�xt
),
$�xt
(
a_�xt
)
654
m_mou�Ov�
=
�l�
;
655
di�b�d
=
�l�
;
656
hasFocus
=
�l�
;
657
m_���Pos�i�
= 0;
660
`c���
(
�xt
.
v�ueCh�ged
,
this
, &
L�eEd�
::
��esh2
);
661
`c���
(
di�b�d
.
v�ueCh�ged
,
this
, &
L�eEd�
::
��esh2
);
662
`c���
(
hasFocus
.
v�ueCh�ged
,
this
, &
L�eEd�
::
��esh2
);
664
m_tim�Id
=
`��tTim�
(500);
665
}
}
668
gL�eEd�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
672
�n
= ()
`�xt
().
`toUtf8
().
`size
();
673
SizeO�i�s
�ts
= { {
�n
*8, 24 }, {�en*12+16, 28 }, {�en*12+32, 32 } };
674
a_sizeO�i�s
=
�ts
;
675
}
}
678
gL�eEd�
::
$tim�Ev�t
(
Tim�Ev�t
&
a_ev�t
)
680 i�(
a_ev�t
.
m_tim�Id
== m_timerId)
682
m_���On
= !m_carrotOn;
683
`���t
();
685
}
}
688
gL�eEd�
::
$keyEv�t
(
KeyEv�t
&
a_ev�t
)
690 i��
a_ev�t
.
m_��e
!�
KS_P�s�d
)
693
�d
::
�r�g
t
=
`�xt
().
`toUtf8
();
694 i��
a_ev�t
.
m_key
=�
Key_BackS��
)
696 i��
m_���Pos�i�
)
698
m_���Pos�i�
--;
699
�d
::
�r�g
t2
;
700 i�(
m_���Pos�i�
!�
t
.
`size
())
701
t2
=
t
.
`sub�r
(
m_���Pos�i�
+1, -1);
702
�xt
=
t
.
`sub�r
(0,
m_���Pos�i�
�+
t2
;
705 i��
a_ev�t
.
m_key
=�
Key_D��e
)
707 i��
m_���Pos�i�
!�
t
.
`size
() )
708
�xt
=
t
.
`sub�r
(0,
m_���Pos�i�
) +
709
t
.
`sub�r
(
m_���Pos�i�
+1, -1);
711 i��
a_ev�t
.
m_key
=�
Key_Le�
)
712
m_���Pos�i�
--;
713 i��
a_ev�t
.
m_key
=�
Key_Right
)
714
m_���Pos�i�
++;
715 i��((
a_ev�t
.
m_key
) >= 'a' && (a_event.m_key) <= 'z')
716 || ((
a_ev�t
.
m_key
) >= 'A' && (a_event.m_key) <= 'Z')
717 || ((
a_ev�t
.
m_key
) >= '0' && (a_event.m_key) <= '9') )
719 i��
m_���Pos�i�
!�
t
.
`size
() )
720
�xt
=
t
.
`sub�r
(0,
m_���Pos�i�
) +
721 (
a_ev�t
.
m_key
�+
t
.
`sub�r
(
m_���Pos�i�
, -1);
723
�xt
=
t
+ (
a_ev�t
.
m_key
);
724
m_���Pos�i�
++;
727
m_���Pos�i�
=
�amp
<>(m_���Pos�i�, 0, ()
`�xt
().
`toUtf8
().
`size
());
728
m_���On
=
�ue
;
729
`���t
();
730
}
}
733
gL�eEd�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
735
Pa��r
`p
(
this
);
738
��e
= 1;
739 i�(
`di�b�d
())
740
��e
= 0;
741 i�(
m_mou�Ov�
||
`hasFocus
())
742
��e
= 2;
744
u�t32_t
edgeC�s
[5] = { 0xd9d9d9, 0xacacac, 0x3399ff, 0x7eb4ea, 0x569de5 };
745
u�t32_t
�xtC�s
[5] = { 0x838383, 0x000000, 0x000000, 0x000000, 0x000000 };
747
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
748
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
750
p
.
`�tBrush
(0xffffff);
751
p
.
`d�wRe��g�
(1, 1,
`width
(�- 2,
`height
() - 2);
753
p
.
`�tP�
(
�xtC�s
[()
��e
]);
754
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
755
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
757
Size
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`d�a
());
758
p
.
`d�wText
(6, (
`height
(�-
�xtSize
.
m_height
�/ 2,
`�xt
().
`d�a
());
760
�xtSize
=
p
.
`�xtEx��s
(
`�xt
().
`toUtf8
().
`sub�r
(0,
m_���Pos�i�
).
`c_�r
());
761
���X
=
�xtSize
.
m_width
;
763
���X
-= 2;
764 i��
m_���On
)
765
p
.
`d�wL�e
(
���X
, 4, c�r�X,
`height
() - 4);
766
}
}
769
gL�eEd�
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
771
m_mou�Ov�
=
�ue
;
772
`���t
();
773
}
}
776
gL�eEd�
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
778
m_mou�Ov�
=
�l�
;
779
`���t
();
780
}
}
783
gL�eEd�
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
785 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
787
hasFocus
=
�ue
;
789
}
}
792
bo�
$isPo�tInsideRe��g�
(cڡ
Po�t
&
a_po�t
, cڡ
Re��g�
&
a_��
)
794 i��
a_po�t
.
m_x
>
a_��
.m_x
795 &&
a_po�t
.
m_x
< (
a_��
.m_x +�_��.
m_width
)
796 &&
a_po�t
.
m_y
>
a_��
.m_y
797 &&
a_po�t
.
m_y
< (
a_��
.m_y +�_��.
m_height
) )
798
�ue
;
799
�l�
;
800
}
}
804
gSlid�R
::
Slid�R
(
Widg�
*
a_���
,
Ab���Prݔty
<
R�ge
>&
a_�id�V�ue
)
805 :
Ab���V�ueWidg�
<
R�ge
>(
a_���
,
ga_�id�V�ue
)
807
gdi�b�d
=
�l�
;
808
gm_mou�Ov�Slid�H�d�
=
�l�
;
809
gm_mou�DownInSlid�H�d�
=
�l�
;
810
ghasFocus
=
�l�
;
814
gSlid�R
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
816
SizeO�i�s
�ts
= { { 32, 21 }, { 128, 21 }, { 65536, 21 } };
817
a_sizeO�i�s
=
�ts
;
818
}
}
821
gSlid�R
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
823
Pa��r
`p
(
this
);
827
Bu��S��
��e
=
N�m�S��
;
828 i�(
`di�b�d
())
829
��e
=
Di�b�dS��
;
830 i�(
m_mou�Ov�Slid�H�d�
&&
m_mou�DownInSlid�H�d�
)
831
��e
=
D��s�dS��
;
832 i�(
m_mou�Ov�Slid�H�d�
!�
m_mou�DownInSlid�H�d�
)
833
��e
=
Hov�S��
;
834 i�(
`hasFocus
())
835
��e
=
De�u�Bu��S��
;
837
u�t32_t
bgA1C�s
[5] = { 0xefefef, 0xf0f0f0, 0xf0f0f0, 0xecf4fc, 0xdaecfc };
838
u�t32_t
bgB1C�s
[5] = { 0xefefef, 0xe5e5e5, 0xe5e5e5, 0xdcecfc, 0xc4e0fc };
839
u�t32_t
edgeC�s
[5] = { 0xd9d9d9, 0xacacac, 0x3399ff, 0x7eb4ea, 0x569de5 };
843
p
.
`�tBrush
(0xd9d9d9);
844
p
.
`d�wRe��g�
(0, (
`height
()-4)/2,
`width
(), 4);
845
p
.
`�tBrush
(0xf0f0f0);
846
p
.
`d�wRe��g�
(1, ((
`height
()-4)/2)+1,
`width
()-2, 2);
849
pix�Pos
=
`�id�H�d�Re��g�
().
m_x
;
850
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
851
p
.
`d�wRe��g�
(
pix�Pos
, 0,
`�id�Width
(),
`height
());
852
G�d��
g�d��
= {
LINEAR_GRADIENT
, { {
bgA1C�s
[()
��e
], 0.0 }, {
bgB1C�s
[()state], 1.0 } }, 0, { { 1, 0, 1 } } };
853
g�d��
.
m_d�a
.
m_l��r
.
m_y2
=
`height
() - 1;
854
p
.
`d�wG�d��
(
pix�Pos
+1, 1,
g�d��
,
`�id�Width
(�- 2,
`height
() - 2);
855
}
}
858
gSlid�R
::
$�id�Width
()
861
}
}
864
Re��g�
gSlid�R
::
$�id�H�d�Re��g�
()
866
pix�Pos
= ((
`v�ue
()�* (
`width
(�-
`�id�Width
())) >> 16;
867
Re��g�
��
= { {{
pix�Pos
, 0 }}, {{
`�id�Width
(),
`height
() }} };
868
��
;
869
}
}
872
gSlid�R
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
874
m_mou�Ov�Slid�H�d�
=
�l�
;
875
`���t
();
876
}
}
879
gSlid�R
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
881
m_mou�Ov�Slid�H�d�
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
`�id�H�d�Re��g�
());
883 i�(!
a_ev�t
.
m_bu��s
)
884
m_mou�DownInSlid�H�d�
=
�l�
;
886 i�(
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
&&
m_mou�DownInSlid�H�d�
)
890
�t64_t
�wV�ue
= ((
`v�ue
()�* (
`width
(�-
`�id�Width
())�+ ((
a_ev�t
.
m_x
-�_ev�t.
m_�dX
) << 16);
891
R�ge
r
=
`v�ue
();
892
r
.
`�tV�ue
(
�amp
<>(
�wV�ue
/ (
`width
(�-
`�id�Width
()), 0, (1<<16)));
893
v�ue
=
r
;
896 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
898
m_mou�DownInSlid�H�d�
=
m_mou�Ov�Slid�H�d�
;
901
hasFocus
=
�ue
;
903
`���t
();
904
}
}
909
gSlid�
::
Slid�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_�id�V�ue
)
910 :
Ab���V�ueWidg�
<>(
a_���
,
ga_�id�V�ue
)
912
gdi�b�d
=
�l�
;
913
gm_mou�Ov�Slid�H�d�
=
�l�
;
914
gm_mou�DownInSlid�H�d�
=
�l�
;
915
ghasFocus
=
�l�
;
919
gSlid�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
921
SizeO�i�s
�ts
= { { 32, 21 }, { 128, 21 }, { 65536, 21 } };
922
a_sizeO�i�s
=
�ts
;
923
}
}
926
gSlid�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
928
Pa��r
`p
(
this
);
932
Bu��S��
��e
=
N�m�S��
;
933 i�(
`di�b�d
())
934
��e
=
Di�b�dS��
;
935 i�(
m_mou�Ov�Slid�H�d�
&&
m_mou�DownInSlid�H�d�
)
936
��e
=
D��s�dS��
;
937 i�(
m_mou�Ov�Slid�H�d�
!�
m_mou�DownInSlid�H�d�
)
938
��e
=
Hov�S��
;
939 i�(
`hasFocus
())
940
��e
=
De�u�Bu��S��
;
942
u�t32_t
bgA1C�s
[5] = { 0xefefef, 0xf0f0f0, 0xf0f0f0, 0xecf4fc, 0xdaecfc };
943
u�t32_t
bgB1C�s
[5] = { 0xefefef, 0xe5e5e5, 0xe5e5e5, 0xdcecfc, 0xc4e0fc };
944
u�t32_t
edgeC�s
[5] = { 0xd9d9d9, 0xacacac, 0x3399ff, 0x7eb4ea, 0x569de5 };
948
p
.
`�tBrush
(0xd9d9d9);
949
p
.
`d�wRe��g�
(0, (
`height
()-4)/2,
`width
(), 4);
950
p
.
`�tBrush
(0xf0f0f0);
951
p
.
`d�wRe��g�
(1, ((
`height
()-4)/2)+1,
`width
()-2, 2);
954
pix�Pos
=
`�id�H�d�Re��g�
().
m_x
;
955
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
956
p
.
`d�wRe��g�
(
pix�Pos
, 0,
`�id�Width
(),
`height
());
957
G�d��
g�d��
= {
LINEAR_GRADIENT
, { {
bgA1C�s
[()
��e
], 0.0 }, {
bgB1C�s
[()state], 1.0 } }, 0, { { 1, 0, 1 } } };
958
g�d��
.
m_d�a
.
m_l��r
.
m_y2
=
`height
() - 1;
959
p
.
`d�wG�d��
(
pix�Pos
+1, 1,
g�d��
,
`�id�Width
(�- 2,
`height
() - 2);
960
}
}
963
gSlid�
::
$�id�Width
()
966
}
}
969
Re��g�
gSlid�
::
$�id�H�d�Re��g�
()
971
pix�Pos
= (
`v�ue
(�* (
`width
(�-
`�id�Width
())) >> 16;
972
Re��g�
��
= { {{
pix�Pos
, 0 }}, {{
`�id�Width
(),
`height
() }} };
973
��
;
974
}
}
977
gSlid�
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
979
m_mou�Ov�Slid�H�d�
=
�l�
;
980
`���t
();
981
}
}
984
gSlid�
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
986
m_mou�Ov�Slid�H�d�
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
`�id�H�d�Re��g�
());
988 i�(!
a_ev�t
.
m_bu��s
)
989
m_mou�DownInSlid�H�d�
=
�l�
;
991 i�(
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
&&
m_mou�DownInSlid�H�d�
)
995
�t64_t
�wV�ue
= (
`v�ue
(�* (
`width
(�-
`�id�Width
())�+ ((
a_ev�t
.
m_x
-�_ev�t.
m_�dX
) << 16);
996
v�ue
=
�amp
<>(
�wV�ue
/ (
`width
(�-
`�id�Width
()), 0, (1<<16));
999 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
1001
m_mou�DownInSlid�H�d�
=
m_mou�Ov�Slid�H�d�
;
1004
hasFocus
=
�ue
;
1006
`���t
();
1007
}
}
1010
gS��lB�
::
S��lB�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_s��lV�ue
)
1011 :
Ab���V�ueWidg�
<>(
a_���
,
ga_s��lV�ue
)
1013
gv�ue
= 50;
1014
gm�V�ue
= 0;
1015
gmaxV�ue
= 100;
1016
g���tiڮ
=
�ue
;
1017
g�geSize
= 20;
1018
gl�eSize
= 1;
1019
gdi�b�d
=
�l�
;
1020
ghasFocus
=
�l�
;
1024
gS��lB�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
1026
SizeO�i�s
�ts
= { { 17, 64 }, { 17, 128 }, { 17, 65536 } };
1027
a_sizeO�i�s
=
�ts
;
1028
}
}
1031
gS��lB�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
1033
Pa��r
`p
(
this
);
1044
p
.
`�tBrush
(0xf0f0f0);
1045
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
1046
p
.
`�tBrush
(0xe8e8e8);
1047
p
.
`d�wRe��g�
(
`g�UpH�d�Re��g�
());
1048
p
.
`d�wRe��g�
(
`g�DownH�d�Re��g�
());
1049
p
.
`�tBrush
(0xd9d9d9);
1050
p
.
`d�wRe��g�
(
`g�S��lH�d�Re��g�
());
1052 i�(
c_u�R��a
) {
1053
`d�wXB�m�Image
(
p
, 3, 3,
S��lB�A�ow
);
1054
`d�wXB�m�Image
(
p
, 3,
`height
()-3-7,
S��lB�A�ow
,
�ue
);
1056
`d�wGimpExp܋dImage
(
p
, 5, 5,
g_s��lUpH�d�Image
);
1057
`d�wGimpExp܋dImage
(
p
, 5,
`height
()-5-7,
g_s��lDownH�d�Image
);
1059
}
}
1062
Re��g�
gS��lB�
::
$g�UpH�d�Re��g�
()
1064
Re��g�
��
= { {{ 0, 0 }}, {{
`width
(), 17 }} };
1065
��
;
1066
}
}
1069
Re��g�
gS��lB�
::
$g�DownH�d�Re��g�
()
1071
Re��g�
��
= { {{ 0,
`height
()-17 }}, {{
`width
(), 17 }} };
1072
��
;
1073
}
}
1076
gS��lB�
::
$g�S��lB�H�d�Height
()
1078 cڡ
m�S��lBu��Height
= 17;
1079
s��lBu��Height
=
m�S��lBu��Height
;
1080 i�(
`���tiڮ
())
1082
�rowHeight
= 17;
1083
v�ueR�ge
=
`maxV�ue
(�-
`m�V�ue
();
1084
s��lBu��Height
= ((
`height
(�-
�rowHeight
* 2�*
`�geSize
()�/ (
v�ueR�ge
+�ageSize());
1085
s��lBu��Height
=
�d
::
max
<>(
m�S��lBu��Height
, scrollButtonHeight);
1087
s��lBu��Height
;
1088
}
}
1091
Re��g�
gS��lB�
::
$g�S��lH�d�Re��g�
()
1093
�rowHeight
= 17;
1094
s��lBu��Height
=
`g�S��lB�H�d�Height
();
1095
s���b�Di���
=
`height
(�- (
s��lBu��Height
+
�rowHeight
*2);
1096
v�ueR�ge
=
`maxV�ue
(�-
`m�V�ue
();
1097
pos
= (
s���b�Di���
* (
`v�ue
(�-
`m�V�ue
())�/
v�ueR�ge
;
1098
Re��g�
��
= { {{ 0,
pos
+
�rowHeight
}}, {{
`width
(),
s��lBu��Height
}} };
1099
��
;
1100
}
}
1103
gS��lB�
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
1105 i�(
a_ev�t
.
m_bu��s
)
1107
Re��g�
s��lB�Re�
=
`g�S��lH�d�Re��g�
();
1108 i�(!
a_ev�t
.
m_�dBu��s
)
1110
bo�
mou�Ov�UpBu��
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
`g�UpH�d�Re��g�
());
1111
bo�
mou�Ov�DownBu��
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
`g�DownH�d�Re��g�
());
1112
bo�
mou�DownInS��lB�H�d�
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
s��lB�Re�
);
1113 i�(
mou�Ov�UpBu��
)
1115
`��tf
("line up\n");
1116
v�ue
=
�amp
<>(
`v�ue
(�-
`l�eSize
(),
`m�V�ue
(),
`maxV�ue
());
1119 i�(
mou�Ov�DownBu��
)
1121
`��tf
("line down\n");
1122
v�ue
=
�amp
<>(
`v�ue
(�+
`l�eSize
(),
`m�V�ue
(),
`maxV�ue
());
1125 i�(
mou�DownInS��lB�H�d�
)
1127
�rowHeight
= 17;
1128
s��lBu��Height
=
`g�S��lB�H�d�Height
();
1129
s���b�Di���
=
`height
(�- (
s��lBu��Height
+
�rowHeight
*2);
1130
v�ueR�ge
=
`maxV�ue
(�-
`m�V�ue
();
1131
m_moveS��V�ue
=
`v�ue
(�*
s���b�Di���
-
a_ev�t
.
m_y
*
v�ueR�ge
;
1132
m_�H�d�
=
�ue
;
1136
b�tom
=
s��lB�Re�
.
m_y
+ s��lB�Re�.
m_height
+ 1;
1137
Re��g�
pgUpA�a
= { {{ 0, 18 }}, {{
`width
(),
s��lB�Re�
.
m_y
- 18 }} };
1138
Re��g�
pgDownA�a
= { {{ 0,
b�tom
}}, {{
`width
(),
`height
() - 18 - bottom }} };
1139
bo�
mou�Ov�PgUpBu��
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
pgUpA�a
);
1140
bo�
mou�Ov�PgDownBu��
=
`isPo�tInsideRe��g�
(
a_ev�t
.
m_pos�i�
,
pgDownA�a
);
1141 i�(
mou�Ov�PgUpBu��
)
1143
`��tf
("page up\n");
1144
v�ue
=
�amp
<>(
`v�ue
(�-
`�geSize
(),
`m�V�ue
(),
`maxV�ue
());
1146 i�(
mou�Ov�PgDownBu��
)
1148
`��tf
("page down\n");
1149
v�ue
=
�amp
<>(
`v�ue
(�+
`�geSize
(),
`m�V�ue
(),
`maxV�ue
());
1154 i�(
m_�H�d�
)
1157
�rowHeight
= 17;
1158
s��lBu��Height
=
`g�S��lB�H�d�Height
();
1159
s���b�Di���
=
`height
(�- (
s��lBu��Height
+
�rowHeight
*2);
1160
v�ueR�ge
=
`maxV�ue
(�-
`m�V�ue
();
1161
�wPix�Pos
=
m_moveS��V�ue
+
a_ev�t
.
m_y
*
v�ueR�ge
;
1162
�wV�ue
=
�amp
<>(
�wPix�Pos
/
s���b�Di���
,
`m�V�ue
(),
`maxV�ue
());
1163
v�ue
=
�wV�ue
;
1166
`���t
();
1170
m_�H�d�
=
�l�
;
1172
}
}
1178
gLi�V�w
::
$Li�V�w
(
Widg�
*
a_���
,
I�mLi�
&
a_li�
)
1179 :
`Widg�
(
a_���
),
$m_li�
(
a_li�
)
1181
}
}
1184
gLi�V�w
::
$keyEv�t
(
KeyEv�t
&
a_ev�t
)
1186
a_ev�t
.
`ac��
();
1187
}
}
1190
gLi�V�w
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
1192
Pa��r
`p
(
this
);
1194
p
.
`�tBrush
(0x222222);
1195
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
1197
p
.
`�tBrush
(0xf7f7f7);
1198
p
.
`d�wRe��g�
(1, 1,
`width
()-2,
`height
()-2);
1200
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
1201
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
1203
size_t
i
= 0; i <
m_li�
.
m_�ems
.
`size
(); i++)
1205
Re��g�
�emRe�
{ {{ 1, 1 + (
i
)*20 }}, {{
`width
()-2, 20 }} };
1206
bo�
mou�Ov�I�m
=
`isPo�tInsideRe��g�
(
m_mou�Pos
,
�emRe�
);
1207
p
.
`�tBrush
(
mou�Ov�I�m
? 0x3a9bfc : 0xf7f7f7);
1208
p
.
`�tP�
(
mou�Ov�I�m
? 0xf7f7f7 : 0x000000);
1209
p
.
`d�wRe��g�
(
�emRe�
.
m_x
, i�mRe�.
m_y
, i�mRe�.
m_width
, i�mRe�.
m_height
);
1210
S��g
�xt
=
m_li�
.
m_�ems
[
i
];
1212
p
.
`d�wText
(4, 4 +
i
* 20,
�xt
.
`c_�r
());
1214
}
}
1217
gLi�V�w
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
1219
a_ev�t
.
`ac��
();
1220
m_mou�Ov�
=
�ue
;
1221
`���t
();
1222
}
}
1225
gLi�V�w
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
1227
a_ev�t
.
`ac��
();
1228
m_mou�Ov�
=
�l�
;
1229
`���t
();
1230
}
}
1233
gLi�V�w
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
1235
a_ev�t
.
`ac��
();
1236 i�(
m_mou�Ov�
)
1237
m_mou�Pos
=
a_ev�t
.
m_pos�i�
;
1239 i�(
m_mou�Ov�
)
1240
`���t
();
1242 i�(
a_ev�t
.
m_�dBu��s
&& !a_ev�t.
m_bu��s
)
1245 i�(
m_mou�Ov�
) {
1246
`��tf
("list view mouse�vent\n");
1247
size_t
i
= 0; i <
m_li�
.
m_�ems
.
`size
(); i++)
1249
Re��g�
�emRe�
{ {{ 1, 1 + (
i
)*20 }}, {{
`width
()-2, 20 }} };
1250 i�(
`isPo�tInsideRe��g�
(
m_mou�Pos
,
�emRe�
))
1252
m_li�
.
cu��tIndex
=
i
;
1253
m_li�
.
�xt
= m_li�.
m_�ems
[
i
];
1257
idx
=
m_li�
.
cu��tIndex
.
`v�ue
();
1258
m_li�
.
`ch�ged
(
idx
);
1259
`��tf
("end�ist view mouse�vent\n");
1262
}
}
1265
gComboBox
::
ComboBox
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_v�ue
)
1266 :
Ab���V�ueWidg�
<>(
a_���
,
ga_v�ue
),
$m_li�
(
a_v�ue
)
1268
v�ue
= 0;
1269
m_li�
.
�xt
= "";
1270
m_mou�DownInBu��
=
�l�
;
1271
m_mou�Ov�Bu��
=
�l�
;
1272
di�b�d
=
�l�
;
1273
isDe�u�
=
�l�
;
1274
hasFocus
=
�l�
;
1277
`c���
(
m_li�
.
�xt
.
v�ueCh�ged
,
this
, &
ComboBox
::
��esh2
);
1278
`c���
(
di�b�d
.
v�ueCh�ged
,
this
, &
ComboBox
::
��esh2
);
1279
`c���
(
isDe�u�
.
v�ueCh�ged
,
this
, &
ComboBox
::
��esh2
);
1280
`c���
(
hasFocus
.
v�ueCh�ged
,
this
, &
ComboBox
::
��esh2
);
1281
`c���
(
m_li�
.
ch�ged
,
this
, &
ComboBox
::
li�Ch�ged
);
1282
}
}
1285
gComboBox
::
$li�Ch�ged
()
1287 i�(
m_dr�DownM�u
)
1288
m_dr�DownM�u
->
`d�ayD��e
();
1289
m_dr�DownM�u
=
nuαr
;
1290
m_a�ive
=
�l�
;
1291
`���t
();
1292
}
}
1295
gComboBox
::
$��esh2
()
1297
`���t
();
1298
}
}
1301
gComboBox
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
1303
�n
= ()
m_li�
.
`�xt
().
`toUtf8
().
`size
();
1304
SizeO�i�s
�ts
= { {
�n
*8, 24 }, {�en*12+16, 24 }, { 65536, 24 } };
1305
a_sizeO�i�s
=
�ts
;
1306
}
}
1309
gComboBox
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
1311
Pa��r
`p
(
this
);
1313
bo�
d�wFocusRe�
= !
`di�b�d
(�&&
`hasFocus
();
1314
Bu��S��
��e
=
N�m�S��
;
1315 i�(
`di�b�d
())
1316
��e
=
Di�b�dS��
;
1317 i�(
m_mou�Ov�Bu��
&&
m_mou�DownInBu��
)
1318
��e
=
D��s�dS��
;
1319 i�(
m_mou�Ov�Bu��
!�
m_mou�DownInBu��
)
1320
��e
=
Hov�S��
;
1321 i�(
`isDe�u�
(�||
`hasFocus
())
1322
��e
=
De�u�Bu��S��
;
1326
u�t32_t
bgA1C�s
[5] = { 0xefefef, 0xf0f0f0, 0xf0f0f0, 0xecf4fc, 0xdaecfc };
1327
u�t32_t
bgB1C�s
[5] = { 0xefefef, 0xe5e5e5, 0xe5e5e5, 0xdcecfc, 0xc4e0fc };
1328
u�t32_t
edgeC�s
[5] = { 0xd9d9d9, 0xacacac, 0x3399ff, 0x7eb4ea, 0x569de5 };
1329
u�t32_t
�xtC�s
[5] = { 0x838383, 0x000000, 0x000000, 0x000000, 0x000000 };
1331
p
.
`�tBrush
(
edgeC�s
[()
��e
]);
1332
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
1334
G�d��
g�d��
= {
LINEAR_GRADIENT
, { {
bgA1C�s
[()
��e
], 0.0 }, {
bgB1C�s
[()state], 1.0 } }, 0, { { 1, 0, 1 } } };
1335
g�d��
.
m_d�a
.
m_l��r
.
m_y2
=
`height
() - 1;
1336
p
.
`d�wG�d��
(1, 1,
g�d��
,
`width
(�- 2,
`height
() - 2);
1338
p
.
`�tP�
(
�xtC�s
[()
��e
]);
1339
p
.
`�tF�tFam�y
(
s_de�u�F�tFam�y
);
1340
p
.
`�tF�tSize
(
s_de�u�F�tSize
);
1342
Size
�xtSize
=
p
.
`�xtEx��s
(
m_li�
.
`�xt
().
`d�a
());
1343
p
.
`d�wText
(4, 2 + (
`height
(�-
�xtSize
.
m_height
�/ 2,
m_li�
.
`�xt
().
`d�a
());
1345 i�(
c_u�R��a
)
1346
`d�wXB�m�Image
(
p
,
`width
(�- 14, (
`height
(�- 9�/ 2,
ComboBoxA�ow
);
1348
`d�wGimpExp܋dImage
(
p
,
`width
(�- 14, (
`height
(�- 3�/ 2,
g_comboBoxH�d�Image
);
1350 i�(
d�wFocusRe�
)
1351
p
.
`d�wFocusRe��g�
(2, 2,
`width
(�- 4,
`height
() - 4);
1352
}
}
1355
gComboBox
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
1357
m_mou�Ov�Bu��
=
�ue
;
1358
`���t
();
1359
}
}
1362
gComboBox
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
1364
m_mou�Ov�Bu��
=
�l�
;
1365
`���t
();
1366
}
}
1369
gComboBox
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
1371 i�(!
a_ev�t
.
m_�dBu��s
&&�_ev�t.
m_bu��s
)
1372
m_mou�DownInBu��
=
�ue
;
1374 i�(
a_ev�t
.
m_�dBu��s
&& !a_ev�t.
m_bu��s
)
1377 i�(
m_mou�DownInBu��
&&
m_mou�Ov�Bu��
&& !
`di�b�d
()) {
1378 i�(!
m_a�ive
)
1380
m_a�ive
=
�ue
;
1403 i�(!
m_dr�DownM�u
)
1405
w
=
`width
() + 40;
1406
h
= 2 +
m_li�
.
m_�ems
.
`size
() * 10;
1407
h
*= 2;
1408
h
--;
1410
#ENABLE_NATIVE_POPUPS
0
)
1411 #i�
ENABLE_NATIVE_POPUPS
1413
m_dr�DownM�u
=
�w
`W�dow
("Combo",
�l�
,
WF_NoT��
);
1414
Re��g�
w�ldPos
=
`w�ldGeom�ry
();
1415
`��tf
("pos: %� %i\n",
w�ldPos
.
m_x
+ 10, w�ldPos.
m_y
+
`height
());
1416
m_dr�DownM�u
->
`�tNewSize
(
w
,
h
);
1417 ((
W�dow
*)
m_dr�DownM�u
)->
`�tPos�i�
(
w�ldPos
.
m_x
+ 10, w�ldPos.
m_y
-
`height
());
1421
m_dr�DownM�u
=
�w
`Widg�
(
this
, "Combo",
LP_Unm�aged
, -10,
`height
(),
w
,
h
);
1424
m_dr�DownM�u
->
�youtM�g�
= 0;
1425
�w
`Li�V�w
(
m_dr�DownM�u
,
m_li�
);
1426
m_dr�DownM�u
->
`�tGeom�ry
(0,
`height
(),
w
,
h
);
1429
`a�iv�ed
();
1431
m_a�ive
=
�l�
;
1434
d��e
m_dr�DownM�u
;
1435
m_dr�DownM�u
=
nuαr
;
1437
`d��iv�ed
();
1442 i�(!
a_ev�t
.
m_bu��s
)
1443
m_mou�DownInBu��
=
�l�
;
1445 i�(
a_ev�t
.
m_�dBu��s
!�a_ev�t.
m_bu��s
)
1446
`���t
();
1447
}
}
1450
gComboBox
::
$addI�m
(
S��g
a_�emText
)
1452
m_li�
.
`addI�m
(
a_�emText
);
1453
}
}
1456
gComboBox
::
$keyEv�t
(
KeyEv�t
&
a_ev�t
)
1458 i��
a_ev�t
.
m_��e
!�
KS_P�s�d
)
1460
�em
=
`v�ue
();
1461 i��
a_ev�t
.
m_key
=�
Key_Up
)
1462
�em
--;
1463 i��
a_ev�t
.
m_key
=�
Key_Down
)
1464
�em
++;
1465
v�ue
=
�amp
<>(
�em
, 0, ()
m_li�
.
m_�ems
.
`size
() - 1);
1466
m_li�
.
�xt
= m_li�.
m_�ems
[
`v�ue
()];
1467
`���t
();
1468
}
}
1471
gProg�ssB�
::
Prog�ssB�
(
Widg�
*
a_���
,
Ab���Prݔty
<>&
a_v�ue
)
1472 :
Ab���V�ueWidg�
<>(
a_���
,
ga_v�ue
),
$�og�ss
(
a_v�ue
)
1474
v�ue
= 30;
1476
`c���
(
�og�ss
.
v�ueCh�ged
,
this
, &
Prog�ssB�
::
��esh2
);
1477
}
}
1480
gProg�ssB�
::
$��esh2
()
1482
`���t
();
1483
}
}
1486
gProg�ssB�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
1488
SizeO�i�s
�ts
= { { 64, 26 }, { 128, 26 }, { 65536, 26 } };
1489
a_sizeO�i�s
=
�ts
;
1490
}
}
1493
gProg�ssB�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
1495
Pa��r
`p
(
this
);
1497
u�t32_t
b�d�
= 0xbcbcbc;
1498
u�t32_t
�og�ssC�
= 0x06b025;
1499
u�t32_t
�com��eC�
= 0xe6e6e6;
1500
v�ueInPix�s
= (
`v�ue
(�*
`width
()) / 100;
1502
p
.
`�tBrush
(
b�d�
);
1503
p
.
`d�wRe��g�
(0, 0,
`width
(),
`height
());
1504
p
.
`�tBrush
(
�og�ssC�
);
1505
p
.
`d�wRe��g�
(1, 1,
v�ueInPix�s
,
`height
()-2);
1506
p
.
`�tBrush
(
�com��eC�
);
1507
p
.
`d�wRe��g�
(
v�ueInPix�s
+1, 1,
`width
()-v�ueInPix�s-2,
`height
()-2);
1508
}
}
1511
gEND_NAMESPACE
@../src/Graphics.cpp
2
~<c�dlib
>
3
~<cm�h
>
4
~<c�dio
>
5
~<�ime
>
6
~<�im�s
>
7
~<�s��
>
10
~<io��am
>
11
~<iom��
>
12
~<f��am
>
13
~<ve��
>
14
~<m�
>
17
~"G�phics.h
"
18
~"Comm�.h
"
19
~"Mem�yM�p�g.h
"
20
~"W�dow.h
"
21
~"TrueTy�.h
"
25
BEGIN_NAMESPACE
28
LogMes�ge
(
LogLev�
a_�v�
, cڡ *
a_utf8TextFmt
, ...);
33 #ifde�
NDEBUG
34
#Debug
(
a_utf8TextFmt
, ...�(()0)
)
36
#Debug
(
a_utf8TextFmt
, ...�
`LogMes�ge
(
DEBUG
,�_utf8TextFmt,
__VA_ARGS__
)
)
40
svec2i
42
mx
,
my
;
44
m�m��e
<
ty��me
mT
>
45
vec2i
mݔ��
*=(
T
s��
) {
46
x
*�
s��
;
47
my
*�
s��
;
48 *
mthis
;
50
m�m��e
<
ty��me
mT
>
51
vec2i
mݔ��
*(
T
ms��
) {
52
vec2i
m�t
;
53
m�t
.
mx
=
x
*
s��
;
54
m�t
.
my
=
y
*
s��
;
55
m�t
;
60
u�t32_t
$b�ndC��s
(
u�t32_t
a_c��1
, u�t32_�
a_c��2
,
u�t8_t
a_�pha
)
62
�pha2
= 255 -
a_�pha
;
63
�d
= ((
a_c��1
>> 16�& 0xff�*
a_�pha
+ ((
a_c��2
>> 16�& 0xff�*
�pha2
;
64
g��
= ((
a_c��1
>> 8�& 0xff�*
a_�pha
+ ((
a_c��2
>> 8�& 0xff�*
�pha2
;
65
blue
= ((
a_c��1
>> 0�& 0xff�*
a_�pha
+ ((
a_c��2
>> 0�& 0xff�*
�pha2
;
66
�pha
= ((
a_c��1
>> 24�& 0xff�*
a_�pha
+ ((
a_c��2
>> 24�& 0xff�*
�pha2
;
68 ((
�pha
& 0xff00�<< 16�| ((
�d
& 0xff00�<< 8�| (
g��
& 0xff00�| (
blue
>> 8);
69
}
}
72
u�t32_t
$b�ndC��sF
(
u�t32_t
a_c��1
, u�t32_�
a_c��2
,
a_�pha
)
74
�pha2
= 1.0�-
a_�pha
;
75
�d
= ((
a_c��1
>> 16�& 0xff�*
a_�pha
+ ((
a_c��2
>> 16�& 0xff�*
�pha2
;
76
g��
= ((
a_c��1
>> 8�& 0xff�*
a_�pha
+ ((
a_c��2
>> 8�& 0xff�*
�pha2
;
77
blue
= ((
a_c��1
>> 0�& 0xff�*
a_�pha
+ ((
a_c��2
>> 0�& 0xff�*
�pha2
;
78 0xff000000 | (((
�d
�& 0xff�<< 16�| (((
g��
�& 0xff�<< 8�| ((
blue
) & 0xff);
79
}
}
110
sCl�Re�
112
bo�
mv�id
;
113
mx1
,
mx2
;
114
my1
,
my2
;
118
�l�e
bo�
$Pix�Cl�Te�
(cڡ
Cl�Re�
&
��
,
x
,
y
)
120 (
x
>�
��
.
x1
&& x <���.
x2
&&
y
>���.
y1
&& y <���.
y2
);
121
}
}
124
�l�e
Cl�Re�
$S�upCl�
(
Pix�Buf�r
*
a_�rg�
,
bo�
�t�a
=
�ue
)
126 i�(!
a_�rg�
|| !a_�rg�->
m_pix�s
||�_�rg�->
m_width
< 1 ||�_�rg�->
m_height
< 1)
128
`��tf
("Invalid�arget\n");
130 {
�l�
, 1, 0, 1, 0 };;
132 i�(
�t�a
)
134
��W
=
a_�rg�
->
m_isR��a
?�_�rg�->
m_width
/
c_�t�aS��
:�_target->m_width;
135
��H
=
a_�rg�
->
m_isR��a
?�_�rg�->
m_height
/
c_�t�aS��
:�_target->m_height;
136 {
�ue
, 0,
��W
- 1, 0,
��H
- 1 };
138
��W
=
a_�rg�
->
m_width
;
139
��H
=
a_�rg�
->
m_height
;
140 {
�ue
, 0,
��W
- 1, 0,
��H
- 1 };
141
}
}
144
$D�wRe��g�A�ha
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
)
146
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
147
j
= 0; j <
a_height
; j++)
148
i
= 0; i <
a_width
; i++)
150
x
=
i
+
a_x
;
151
y
=
j
+
a_y
;
152 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
155
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
156 *
d�
=
`b�ndC��s
(*d�,
a_c��
,�_color >> 24);
159
}
}
162
$D�wRe��g�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_�tA�ha
)
164
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
,
�ue
); i�(!��.
v�id
) ;
165 i�(
a_�tA�ha
)
166
a_c��
|= 0xFF000000;
167
j
= 0; j <
a_height
; j++)
168
i
= 0; i <
a_width
; i++)
170
x
=
i
+
a_x
;
171
y
=
j
+
a_y
;
172 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
175
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
176 *
d�
=
a_c��
;
179
}
}
189
$D�wE�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_smo�hEdge
)
191
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
192
�pha
= (
a_c��
>> 24) & 0xff;
193 i��
�pha
== 0 )
195
���X
=
a_width
/2;
196
���Y
=
a_height
/2;
198
s��
= 64;
199 i��
a_width
< 256 &&
a_height
< 256 )
200
s��
= 1;
201 i��
�pha
== 255 )
203
j
= 0; j <
a_height
; j++)
204
i
= 0; i <
a_width
; i++)
206
x
=
i
+
a_x
;
207
y
=
j
+
a_y
;
208 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
211
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
212
a
= (
i
-
���X
�*
a_height
/
s��
;
213
b
= (
j
-
���Y
�*
a_width
/
s��
;
214
c1
=
a_width
*
a_height
/ (2 *
s��
);
215
c2
= (
a_width
-1�* (
a_height
-1�/ (2 *
s��
);
218
��rR
=
c1
*c1;
219
ou�rR
=
c2
*c2;
220
di�
=
a
*�+
b
*b;
221
diffR
=
ou�rR
-
��rR
;
222
di�R
=
di�
-
��rR
;
224
�pha
= ((
di�R
* 255�/
diffR
);
226 i��
di�
<
ou�rR
)
227 *
d�
=
a_c��
;
228 i��
di�
<
��rR
)
229 *
d�
=
`b�ndC��s
(
a_c��
, *d�,
�pha
);
234
j
= 0; j <
a_height
; j++)
235
i
= 0; i <
a_width
; i++)
237
x
=
i
+
a_x
;
238
y
=
j
+
a_y
;
239 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
242
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
243
a
= (
i
-
���X
�*
a_height
/
s��
;
244
b
= (
j
-
���Y
�*
a_width
/
s��
;
245
c
=
a_width
*
a_height
/ (2 *
s��
);
246 i��(
a
*�+
b
*b�<
c
*c )
247 *
d�
= (
�pha
<<24�| (
`b�ndC��s
(
a_c��
, *dst,�lpha) & 0xffffff);
251
}
}
254
$D�wG�d��
(
Pix�Buf�r
*
a_�rg�
, cڡ
G�d��
&
a_g�d��
,
a_x
,
a_y
,
a_width
,
a_height
)
256
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
257
j
= 0; j <
a_height
; j++ )
258
i
= 0; i <
a_width
; i++ )
260
x
=
i
+
a_x
;
261
y
=
j
+
a_y
;
262 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
265
di�
= 0.0;
267 i�(
a_g�d��
.
m_ty�
=�
RADIAL_GRADIENT
)
269
���X
=
a_g�d��
.
m_d�a
.
m_�d�l
.
m_���X
;
270
���Y
=
a_g�d��
.
m_d�a
.
m_�d�l
.
m_���Y
;
273
di�
=
`sq�
(((
���X
-
i
)*(���X - i�+ (
���Y
-
j
)*(���Y - j))�/
a_g�d��
.
m_d�a
.
m_�d�l
.
m_di���
;
286 i�(
a_g�d��
.
m_ty�
=�
CONICAL_GRADIENT
)
290 i�(
a_g�d��
.
m_ty�
=�
LINEAR_GRADIENT
)
300
y1
=
a_g�d��
.
m_d�a
.
m_l��r
.
m_y1
;
301
y2
=
a_g�d��
.
m_d�a
.
m_l��r
.
m_y2
;
302 i��
y
<�
y1
)
303
di�
= 0;
304 i��
y
>�
y2
)
305
di�
= 1.0;
307
di�
= (
y2
-
y
�/ (y2 -
y1
);
311
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
315
di�
= (dist > 1.0f) ? 1.0f : ((dist < 0.0f) ? 0.0f : dist);
317
#ENABLE_GRADIENT_STOPS
1
)
318 #i�
ENABLE_GRADIENT_STOPS
321
��
= 0; st� < (
a_g�d��
.
m_g�d��St�s
.
`size
() - 1); stop++)
323
pos1
=
a_g�d��
.
m_g�d��St�s
[
��
+ 0].
m_pos�i�
;
324
pos2
=
a_g�d��
.
m_g�d��St�s
[
��
+ 1].
m_pos�i�
;
326 i�(
di�
>�
pos1
&& di� <�
pos2
)
328
di�
= (di� -
pos1
�/ (
pos2
-�os1);
329
u�t32_t
c�1
=
a_g�d��
.
m_g�d��St�s
[
��
+ 0].
m_c��
;
330
u�t32_t
c�2
=
a_g�d��
.
m_g�d��St�s
[
��
+ 1].
m_c��
;
331 *
d�
=
`b�ndC��sF
(
c�1
,
c�2
,
di�
);
336 *
d�
=
`b�ndC��sF
(
a_g�d��
.
m_c��1
,�_g�d��.
m_c��2
,
di�
);
341
}
}
384
$Cl�L�ePo�t
(&
a_x
, &
a_y
,
a_dx
,
a_dy
, cڡ
Re��g�
&
a_bounds
)
386
m1
= (
a_dy
�/
a_dx
;
387
m2
= (
a_dx
�/
a_dy
;
388
c1
=
a_y
-
m1
*
a_x
;
389
c2
=
a_x
-
m2
*
a_y
;
391
bx1
=
a_bounds
.
m_x
;
392
by1
=
a_bounds
.
m_y
;
393
bx2
=
bx1
+
a_bounds
.
m_width
- 1;
394
by2
=
by1
+
a_bounds
.
m_height
- 1;
395
a_x
= (a_x <
bx1
�? bx1 : (�_x >
bx2
) ? bx2 :�_x);
396
a_y
=
m1
*
a_x
+
c1
;
397
a_y
= (a_y <
by1
�? by1 : (�_y >
by2
) ? by2 :�_y);
398
a_x
=
m2
*
a_y
+
c2
;
399
}
}
402
$D�wHL�e
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x1
,
a_x2
,
a_y
,
bo�
a_b�nd
)
404 i�(!
a_�rg�
||
a_y
< 0)
406 i�(
a_y
>�
a_�rg�
->
m_height
)
408 i�(!
a_b�nd
)
409
a_c��
|= 0xFF000000;
410 i�(
a_x1
>
a_x2
)
412
tmp
=
a_x1
;
413
a_x1
=
a_x2
;
414
a_x2
=
tmp
;
416 i�(
a_x1
< 0)
417
a_x1
= 0;
418 i�(
a_x2
< 0)
419
a_x2
= 0;
420 i�(
a_x1
>�
a_�rg�
->
m_width
)
421
a_x1
=
a_�rg�
->
m_width
- 1;
422 i�(
a_x2
>�
a_�rg�
->
m_width
)
423
a_x2
=
a_�rg�
->
m_width
- 1;
425
u�t32_t
*
pix
= &
a_�rg�
->
m_pix�s
[
a_y
*a_�rg�->
m_�rideBy�s
/4 +
a_x1
];
426
dx
=
a_x2
-
a_x1
+ 1;
427
i
= 0; i <
dx
; ++i)
429 *
pix
=
a_c��
;
430 ++
pix
;
432
}
}
435
$D�wL�e
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x1
,
a_y1
,
a_x2
,
a_y2
,
bo�
a_b�nd
)
437
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
,
�ue
); i�(!��.
v�id
) ;
438
dx
=
a_x2
-
a_x1
;
439
dy
=
a_y2
-
a_y1
;
441 i�(!
a_b�nd
)
442
a_c��
|= 0xFF000000;
445 i��!
dy
&& !
dx
) {
446 i�(
`Pix�Cl�Te�
(
��
,
a_x1
,
a_y1
))
448
a_�rg�
->
m_pix�s
[
a_y1
*a_�rg�->
m_�rideBy�s
/4 +
a_x1
] =
a_c��
;
453 cڡ
shi�Cou�
= 32;
454
cou�
= 1;
455
�t64_t
x
=
`�t64_t
(
a_x1
�<<
shi�Cou�
;
456
�t64_t
y
=
`�t64_t
(
a_y1
�<<
shi�Cou�
;
457
�t64_t
fdy
= 1LL <<
shi�Cou�
;
458
�t64_t
fdx
= 1LL <<
shi�Cou�
;
459 i��
dx
*dx >
dy
*dy ) {
460
cou�
=
dx
;
461
fdy
= (
dy
* fdy�/
dx
;
463
cou�
=
dy
;
464
fdx
= (
dx
* fdx�/
dy
;
466 i��
cou�
< 0 ) {
467
cou�
= -count;
468
fdy
= -fdy;
469
fdx
= -fdx;
473
cou�
++;
474 i�(
cou�
> 0)
475 ;
cou�
--;
x
+�
fdx
,
y
+�
fdy
)
477
xi
=
x
>>
shi�Cou�
;
478
yi
=
y
>>
shi�Cou�
;
479 i�(
`Pix�Cl�Te�
(
��
,
xi
,
yi
))
481
a_�rg�
->
m_pix�s
[
yi
*a_�rg�->
m_�rideBy�s
/4 +
xi
] =
a_c��
;
483
}
}
486
$D�wL�e__Old_But_W�h_Cl�p�g_A�em�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_x1
,
a_y1
,
a_x2
,
a_y2
,
bo�
a_b�nd
)
488
dx
=
a_x2
-
a_x1
;
489
dy
=
a_y2
-
a_y1
;
491 i�(!
a_b�nd
)
492
a_c��
|= 0xFF000000;
494 i�(!
a_�rg�
)
498
#USE_LINE_CLIPPING
0
)
500 #i�
USE_LINE_CLIPPING
503
u�t8_t
��p�gF�gs
= 0;
504 i��
a_x1
< 0 )
��p�gF�gs
|= 1;
505 i��
a_x1
>�
a_�rg�
->
m_width
)
��p�gF�gs
|= 2;
506 i��
a_y1
< 0 )
��p�gF�gs
|= 4;
507 i��
a_y1
>�
a_�rg�
->
m_height
�
��p�gF�gs
|= 8;
508 i��
a_x2
< 0 )
��p�gF�gs
|= 16;
509 i��
a_x2
>�
a_�rg�
->
m_width
)
��p�gF�gs
|= 32;
510 i��
a_y2
< 0 )
��p�gF�gs
|= 64;
511 i��
a_y2
>�
a_�rg�
->
m_height
�
��p�gF�gs
|= 128;
512 i��
��p�gF�gs
) {
514 i��(
��p�gF�gs
& 17) == 17 ) ;
515 i��(
��p�gF�gs
& 34) == 34 ) ;
516 i��(
��p�gF�gs
& 68) == 68 ) ;
517 i��(
��p�gF�gs
& 136) == 136 ) ;
524 i�(
dx
&&
dy
)
533 i��!
dy
&& !
dx
) {
534 #i�!
USE_LINE_CLIPPING
535 i��
a_x1
>�0 &&�_x1 <
a_�rg�
->
m_width
&&
a_y1
>�0 &&�_y1 <�_�rg�->
m_height
)
537
a_�rg�
->
m_pix�s
[
a_y1
*a_�rg�->
m_�rideBy�s
/4 +
a_x1
] =
a_c��
;
541 cڡ
shi�Cou�
= 32;
542
cou�
= 1;
543
�t64_t
x
=
`�t64_t
(
a_x1
�<<
shi�Cou�
;
544
�t64_t
y
=
`�t64_t
(
a_y1
�<<
shi�Cou�
;
545
�t64_t
fdy
= 1LL <<
shi�Cou�
;
546
�t64_t
fdx
= 1LL <<
shi�Cou�
;
547 i��
dx
*dx >
dy
*dy ) {
548
cou�
=
dx
;
549
fdy
= (
dy
* fdy�/
dx
;
551
cou�
=
dy
;
552
fdx
= (
dx
* fdx�/
dy
;
554 i��
cou�
< 0 ) {
555
cou�
= -count;
556
fdy
= -fdy;
557
fdx
= -fdx;
560 #i�
USE_LINE_CLIPPING
562
���i�s
= 0;
563 i��
x
< 0 ) {
564 i��
fdx
<= 0 ) {
567
���i�s
=
x
/ -
fdx
;
570 i��
y
< 0 ) {
571 i��
fdy
<= 0 ) {
574
���i�s
=
�d
::
max
<>(���i�s,
y
/ -
fdy
);
577 i��
a_x1
>�
a_�rg�
->
m_width
) {
578 i��
fdx
>= 0 ) {
581
���i�s
=
�d
::
max
<>(���i�s, (
`�t64_t
(
a_x1
- (
a_�rg�
->
m_width
-1))<<
shi�Cou�
�/ -
fdx
);
584 i��
a_y1
>�
a_�rg�
->
m_height
) {
585 i��
fdy
>= 0 ) {
588
���i�s
=
�d
::
max
<>(���i�s, (
`�t64_t
(
a_y1
- (
a_�rg�
->
m_height
-1))<<
shi�Cou�
�/ -
fdy
);
591 i��
���i�s
>
cou�
) {
594
x
+�
fdx
*
���i�s
;
595
y
+�
fdy
*
���i�s
;
596
cou�
-�
���i�s
;
599 i�(
x
< 0) {
600
x
+�
fdx
;
601
y
+�
fdy
;
602
cou�
--;
606
���i�s
=
cou�
;
607
�t64_t
x2
=
`�t64_t
(
a_x2
�<<
shi�Cou�
;
608
�t64_t
y2
=
`�t64_t
(
a_y2
�<<
shi�Cou�
;
609 i��
x2
< 0 ) {
610
���i�s
=
�d
::
m�
<>(���i�s, (
cou�
-1�- ((
x2
- (1LL<<(
shi�Cou�
))�/
fdx
));
612 i��
y2
< 0 ) {
613
���i�s
=
�d
::
m�
<>(���i�s, (
cou�
-1�- ((
y2
- (1LL<<(
shi�Cou�
))�/
fdy
));
615 i��
a_x2
>�
a_�rg�
->
m_width
) {
616
���i�s
=
�d
::
m�
<>(���i�s, (
cou�
-1�- ((
`�t64_t
(
a_x2
- (
a_�rg�
->
m_width
+1))<<
shi�Cou�
�/
fdx
));
618 i��
a_y2
>�
a_�rg�
->
m_height
) {
619
���i�s
=
�d
::
m�
<>(���i�s, (
cou�
-1�- ((
`�t64_t
(
a_y2
- (
a_�rg�
->
m_height
+1))<<
shi�Cou�
�/
fdy
));
621
cou�
=
���i�s
;
623 i�(
cou�
> 0)
624 ;
cou�
--;
x
+�
fdx
,
y
+�
fdy
)
626
xi
=
x
>>
shi�Cou�
;
627
yi
=
y
>>
shi�Cou�
;
629 i��
xi
>�0 && x�<
a_�rg�
->
m_width
&&
yi
>�0 && y�<�_�rg�->
m_height
)
631
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
yi
*a_�rg�->
m_�rideBy�s
/4 +
xi
]);
632 *
d�
= (!
a_b�nd
�?
a_c��
:
`b�ndC��s
(a_color, *dst, (a_color>>24) & 0xff);
635
`�r�tf
(
�d�r
, "cou�: %i, xi: %i, yi: %i\n",
cou�
, ()
xi
, ()
yi
);
641 i�(
cou�
> 0)
642 ;
cou�
--;
x
+�
fdx
,
y
+�
fdy
)
644
xi
=
x
>>
shi�Cou�
;
645
yi
=
y
>>
shi�Cou�
;
646 i��
xi
>�0 && x�<
a_�rg�
->
m_width
&&
yi
>�0 && y�< (a_�rg�->
m_height
/2) )
647
a_�rg�
->
m_pix�s
[
yi
*a_�rg�->
m_�rideBy�s
/4 +
xi
] =
a_c��
;
653
}
}
656
$D�wPix�s
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
)
658
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
659
j
= 0; j <
a_height
; j++)
660
i
= 0; i <
a_width
; i++)
662
x
=
i
+
a_x
;
663
y
=
j
+
a_y
;
664 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
667
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[(
j
+
a_y
)*a_�rg�->
m_�rideBy�s
/4 + (
i
+
a_x
)]);
668
u�t32_t
�c
=
a_b�s
[(
j
+
a_yOff�t
)*
a_pix�sWidth
+(
i
+
a_xOff�t
)];
669 i��
�c
& 0xff000000 )
670 *
d�
=
�c
;
673
}
}
676
$D�wPix�sA�ha
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
)
678
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
679
j
= 0; j <
a_height
; j++)
680
i
= 0; i <
a_width
; i++)
682
x
=
i
+
a_x
;
683
y
=
j
+
a_y
;
684 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
687
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[(
j
+
a_y
)*a_�rg�->
m_�rideBy�s
/4 + (
i
+
a_x
)]);
688
u�t32_t
�c
=
a_b�s
[(
j
+
a_yOff�t
)*
a_pix�sWidth
+(
i
+
a_xOff�t
)];
689 i��
�c
& 0xff000000 )
690 *
d�
=
`b�ndC��s
(
�c
, *dst, (src>>24) & 0xff);
693
}
}
698
$D�wPix�sText
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, u�t32_t*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
)
700
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
701
j
= 0; j <
a_height
; j++)
702
i
= 0; i <
a_width
; i++)
704
x
=
i
+
a_x
;
705
y
=
j
+
a_y
;
706 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
709
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[(
j
+
a_y
)*a_�rg�->
m_�rideBy�s
/4 + (
i
+
a_x
)]);
710
u�t32_t
�c
=
a_b�s
[(
j
+
a_yOff�t
)*
a_pix�sWidth
+(
i
+
a_xOff�t
)];
711 i��
�c
& 0xff000000 )
712 *
d�
=
`b�ndC��s
(
a_c��
|
�c
, *dst, (src>>24) & 0xff);
715
}
}
718
$D�wPix�sA�haB�nded
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
*
a_b�s
,
a_x
,
a_y
,
a_width
,
a_height
,
a_xOff�t
,
a_yOff�t
,
a_pix�sWidth
,
a_pix�sHeight
,
a_�pha
)
720
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
721
j
= 0; j <
a_height
; j++)
722
i
= 0; i <
a_width
; i++)
724
x
=
i
+
a_x
;
725
y
=
j
+
a_y
;
726 i�(
`Pix�Cl�Te�
(
��
,
x
,
y
))
729
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[(
j
+
a_y
)*a_�rg�->
m_�rideBy�s
/4 + (
i
+
a_x
)]);
730
u�t32_t
�c
=
a_b�s
[(
j
+
a_yOff�t
)*
a_pix�sWidth
+(
i
+
a_xOff�t
)];
731 i��
�c
& 0xff000000 )
732 *
d�
=
`b�ndC��s
(
�c
, *d�,
a_�pha
);
735
}
}
740
sPix�V�ue
742
Pix�V�ue
(
u�t32_t
v
�:
m_v�ue
(v) {}
743
ݔ��
u�t32_t
(�cڡ {
m_v�ue
; }
744
mPix�V�ue
&
mݔ��
=(
u�t32_t
v�
�{
m_v�ue
= v�; *
mthis
; }
747
u�t32_t
mm_v�ue
;
748
u�t8_t
mm_compڒts
[4];
753
sWidePix�V�ue
755
WidePix�V�ue
()
757
mi
= 0; i < 4; i++)
758
mm_compڒts
[
i
] = 0;
760
mWidePix�V�ue
&
mݔ��
=(
Pix�V�ue
�h�
) {
761
i
= 0;
mi
< 4; i++)
762
mm_compڒts
[
i
] =
�h�
.
m_compڒts
[i];
763 *
mthis
;
765
mWidePix�V�ue
&
mݔ��
+=(
Pix�V�ue
�h�
) {
766
i
= 0;
mi
< 4; i++)
767
mm_compڒts
[
i
] +�
�h�
.
m_compڒts
[i];
768 *
mthis
;
770
mWidePix�V�ue
&
mݔ��
/=(
v
) {
771
i
= 0;
mi
< 4; i++)
772
mm_compڒts
[
i
] /�
v
;
773 *
mthis
;
775
ݔ��
u�t32_t
() {
776
Pix�V�ue
out
(0);
777
mi
= 0; i < 4; i++)
778
mout
.
mm_compڒts
[
i
] =
m_compڒts
[i];
779
mout
;
781
u�t32_t
mm_compڒts
[4];
785
g�m��e
<
bo�
gaxis
>
786
$Smo�hDownSam�eH��r
(
u�t32_t
*
a_d�B�s
,
a_d�W
,
a_d�H
, u�t32_t*
a_�cB�s
,
a_width
,
a_height
)
788
�t64_t
maxJ
= (
axis
�?
a_height
:
a_width
;
789
�t64_t
maxI
= (
axis
�?
a_width
:
a_height
;
790
�t64_t
maxDI
= (
axis
�?
a_d�W
:
a_d�H
;
791 i�(!
maxI
)
794
�t64_t
dDdS
= (
maxDI
<< 32�/ (
maxI
);
795
j
= 0; j <
maxJ
; j++) {
796
�t64_t
d
= (1LL<<32) / 3;
797
c
= 0,
di
= 0;
798
WidePix�V�ue
c�
;
799
i
= 0; i <
maxI
; i++) {
800
x
= (
axis
�?
i
:
j
;
801
y
= (
axis
�?
j
:
i
;
802
c�
+�
a_�cB�s
[
y
*
a_width
+
x
];
803
c
++;
804
d
+�
dDdS
;
805 i�(
d
>= (1LL<<32)) {
806
d
-= (1LL<<32);
807
c�
/�
c
;
808 i�(
axis
)
809
a_d�B�s
[
y
*
a_d�W
+
di
] =
c�
;
811
a_d�B�s
[
di
*
a_d�W
+
x
] =
c�
;
812
c
= 0;
813
c�
= 0;
814
di
++;
815 i�(
di
=�
maxDI
)
820
}
}
823
bo�
$Smo�hDownSam�e
(
u�t32_t
*
a_d�B�s
,
a_d�W
,
a_d�H
, u�t32_t*
a_�cB�s
,
a_width
,
a_height
)
825 i�(
a_d�W
>
a_width
||
a_d�H
>
a_height
)
826
�l�
;
827
u�t32_t
*
tmpB�s
=
�w
u�t32_t[
a_height
*
a_d�W
];
829
Smo�hDownSam�eH��r
<
�ue
>(
tmpB�s
,
a_d�W
,
a_height
,
a_�cB�s
,
a_width
,�_height);
831
Smo�hDownSam�eH��r
<
�l�
>(
a_d�B�s
,
a_d�W
,
a_d�H
,
tmpB�s
,�_d�W,
a_height
);
832
d��e
[]
tmpB�s
;
833
�ue
;
834
}
}
840
bo�
$Te�F�eEx�nsi�
(cڡ *
a_f�e
, cڡ *
a_ext
)
842
size_t
�n
=
`���
(
a_f�e
);
843 i�(
�n
< 4 ||
`���
(
a_ext
) != 4)
844
�l�
;
845
i
= 0; i < 4; i++)
846 i�(
`tou��
(
a_f�e
[
�n
-4+
i
]�!�tou��(
a_ext
[i]))
847
�l�
;
848
�ue
;
849
}
}
852
DecodePNG
(
�d
::
ve��
<>&
out_image
, &
image_width
, &
image_height
, cڡ *
�_�g
,
size_t
�_size
,
bo�
c�v�t_to_rgba32
);
855
bo�
$L�dImage
(cڡ *
f�e
,
Pix�Buf�r
&
a_img
,
bo�
chromaKeyed
=
�ue
)
857 i�(
`Te�F�eEx�nsi�
(
f�e
, ".png"))
860
Mem�yM�p�gD�a
*
m�p�g
=
`Mem�yM�p�g_O�n
(
f�e
);
861 i�(!
m�p�g
)
862
�l�
;
865
size_t
siz
= (size_t)
`Mem�yM�p�g_G�Size
(
m�p�g
);
866
u�t8_t
*
buf
= (u�t8_t*)
`Mem�yM�p�g_G�Add�ss
(
m�p�g
);
867
�d
::
ve��
<>
out_image
;
868
w
,
h
;
869 i�(
`DecodePNG
(
out_image
,
w
,
h
,
buf
,
siz
,
�ue
))
871
a_img
.
m_height
=
h
;
872
a_img
.
m_width
=
w
;
873
a_img
.
m_�rideBy�s
=
w
* (
u�t32_t
);
874
a_img
.
m_f�m�
=
PF_ARGB8888
;
875
a_img
.
m_pix�s
=
�w
u�t32_t
[
w
*
h
];
876
`mem�y
(
a_img
.
m_pix�s
,
out_image
.
`d�a
(),
w
*
h
* (
u�t32_t
));
877
i
= 0; i <
w
*
h
; i++ )
878
a_img
.
m_pix�s
[
i
] = ((a_img.m_pixels[i] << 16) & 0xff0000) |
879 ((
a_img
.
m_pix�s
[
i
] >> 16) & 0xff) | (a_img.m_pixels[i] & 0xff00ff00);
880 i��
chromaKeyed
)
881
i
= 0; i <
w
*
h
; i++ )
882 i��
a_img
.
m_pix�s
[
i
] != 0x00ff00 )
883
a_img
.
m_pix�s
[
i
] |= 0xff000000;
884
�ue
;
887
�l�
;
888
}
}
891
$D�wPixm�F�e
(
Pix�Buf�r
*
a_�rg�
, cڡ *
f�e
,
x
,
y
,
x1
,
y1
,
x2
,
y2
)
893
�d
::
m�
<cڡ *,
Pix�Buf�r
>
imageM�
;
894
Pix�Buf�r
img
=
imageM�
[
f�e
];
895 i�(!
img
.
m_pix�s
)
897 i�(
`L�dImage
(
f�e
,
img
,
�l�
))
899
imageM�
[
f�e
] =
img
;
902
`D�wPix�s
(
a_�rg�
,
img
.
m_pix�s
,
x
,
y
,
x2
-
x1
+1,
y2
-
y1
+1, x1, y1, img.
m_width
, img.
m_height
);
903
}
}
906
$D�wNumb�
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
c�
,
x
,
y
,
num
,
width
)
909
divis�
= 1;
910
i
=
width
; i !�0; i--,
divis�
*=10)
911
`D�wPix�s
(
a_�rg�
,
g_numb�sPix�s
,
x
+ (
i
-1)*16,
y
, 16, 30, 0, 30*((
num
/
divis�
)%10),
g_numb�sPix�sW
,
g_numb�sPix�sH
);
912
}
}
918
$LogMes�ge
(
LogLev�
a_�v�
, cڡ *
a_f�m�S��g
, ...)
920
buf
[1024];
921
va_li�
v�rgs
;
922
`va_��t
(
v�rgs
,
a_f�m�S��g
);
923
`v���tf
(
buf
, 1024,
a_f�m�S��g
,
v�rgs
);
924
buf
[1023] = 0;
925 #ifde�
_WIN32
926
`Ou�utDebugS��gA
(
buf
);
928
`puts
(
buf
);
929
`va_�d
(
v�rgs
);
930
}
}
937
vec2i
$bez�rCurve
(cڡ
vec2i
&
p1
, cڡ vec2i&
p2
, cڡ vec2i&
p3
,
t
)
939
t2
= 1.0 -
t
;
942 (
vec2i
){ ()
�d
::
`��
(
t2
*t2*
p1
.
x
+ 2.0*t2*
t
*
p2
.x +�*t*
p3
.x + 0.5),
943 ()
�d
::
`��
(
t2
*t2*
p1
.
y
+ 2.0*t2*
t
*
p2
.y +�*t*
p3
.y + 0.5) };
944
}
}
951
vec2i
$bez�rCurveFixed
(cڡ
vec2i
&
p1
, cڡ vec2i&
p2
, cڡ vec2i&
p3
,
u�t64_t
t
)
953
u�t64_t
t2
= 0x10000 -
t
;
955
u�t64_t
t2t2
=
t2
*t2;
956
u�t64_t
t2t
=
t2
*
t
;
957
u�t64_t
�
=
t
*t;
958 (
vec2i
){ ((
t2t2
*
p1
.
x
+ 2*
t2t
*
p2
.x +
�
*
p3
.x + (1<<31)) >> 32),
959 ((
t2t2
*
p1
.
y
+ 2*
t2t
*
p2
.y +
�
*
p3
.y + (1<<31)) >> 32) };
960
}
}
963
$D�wCurve
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ
vec2i
&
p1
, cڡ vec2i&
p2
, cڡ vec2i&
p3
,
bo�
a_b�nd
)
965
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
966
dx
=
p1
.
x
-
p3
.x;
967
dy
=
p1
.
y
-
p3
.y;
968 i�(
dx
*dx >
dy
*dy) {
969
dx
= (dx < 0) ? -dx : dx;
971
dx
= (
dy
< 0) ? -dy : dy;
973
dx
*= 2;
986
i
= 0; i <
dx
; i++)
988
vec2i
pos1
=
`bez�rCurveFixed
(
p1
,
p2
,
p3
, ((
i
<< 16�- (
dx
/2)) / dx);
989
vec2i
pos2
=
`bez�rCurveFixed
(
p1
,
p2
,
p3
, (((
i
+1�<< 16�- (
dx
/2)) / dx);
990
`D�wL�e
(
a_�rg�
,
a_c��
,
pos1
.
x
,�os1.
y
,
pos2
.x,�os2.y,
a_b�nd
);
992
}
}
995
$D�wF�tCurveI���l
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ
vec2i
&
p1
, cڡ vec2i&
p2
, cڡ vec2i&
p3
)
997
Cl�Re�
��
=
`S�upCl�
(
a_�rg�
); i�(!��.
v�id
) ;
998
dx
=
p1
.
x
-
p3
.x;
999
dy
=
p1
.
y
-
p3
.y;
1000 i�(
dx
*dx >
dy
*dy) {
1001
dx
= (dx < 0) ? -dx : dx;
1003
dx
= (
dy
< 0) ? -dy : dy;
1005
dx
*= 2;
1021
i
= 0; i <
dx
; i++)
1023
vec2i
pos1
=
`bez�rCurveFixed
(
p1
,
p2
,
p3
, ((
i
<< 16�- (
dx
/2)) / dx);
1024
vec2i
pos2
=
`bez�rCurveFixed
(
p1
,
p2
,
p3
, (((
i
+1�<< 16�- (
dx
/2)) / dx);
1025 i�(
`Pix�Cl�Te�
(
��
,
pos1
.
x
,�os1.
y
))
1026
a_�rg�
->
m_pix�s
[
pos1
.
y
*a_�rg�->
m_�rideBy�s
/4 +�os1.
x
] |�
a_c��
;
1027 i�(
`Pix�Cl�Te�
(
��
,
pos2
.
x
,�os2.
y
))
1028
a_�rg�
->
m_pix�s
[
pos2
.
y
*a_�rg�->
m_�rideBy�s
/4 +�os2.
x
] |�
a_c��
;
1030
}
}
1033
Re��g�
$glyphBounds
(cڡ
Glyph
::
Ou��e
&
ou��e
)
1035
Re��g�
�t
;
1036
m�X
=
INT_MAX
,
m�Y
= INT_MAX;
1037
maxX
=
INT_MIN
,
maxY
= INT_MIN;
1038
size_t
i
= 0; i <
ou��e
.
m_l�es
.
`size
(); i++)
1040 cڡ
Glyph
::
Ou��e
::
Curve
&
b
=
ou��e
.
m_l�es
[
i
];
1041
c
= 0; c < 3; c++) {
1042
x
=
b
.
m_cڌ�Po�ts
[
c
].
m_x
;
1043
y
=
b
.
m_cڌ�Po�ts
[
c
].
m_y
;
1044 i�(
x
<
m�X
�m�X = x; i�(x >
maxX
) maxX = x;
1045 i�(
y
<
m�Y
�m�Y = y; i�(y >
maxY
) maxY = y;
1048
�t
.
m_x
=
m�X
;
1049
�t
.
m_y
=
m�Y
;
1050
�t
.
m_width
=
maxX
-
m�X
+ 1;
1051
�t
.
m_height
=
maxY
-
m�Y
+ 1;
1052
�t
;
1053
}
}
1057
#DEBUG_FONT_RENDERING
1
)
1058 #i�
DEBUG_FONT_RENDERING
1059
bo�
gd�wWh�eOu��e
=
�l�
;
1060
g�d
::
�r�g
f�tO�
= "Arial";
1061
bo�
gd�wAAText
=
�ue
;
1063 cڡ
bo�
gd�wWh�eOu��e
=
�l�
;
1064 cڡ
g�d
::
�r�g
f�tO�
= "Arial";
1065 cڡ
bo�
gd�wAAText
=
�ue
;
1070
gg_�age
= 100;
1071
bo�
gg_�ab�K�n�g
=
�ue
;
1074
sCachedGlyphD�a
1076
Re��g�
m��
;
1077
Pix�Buf�r
mbuf
;
1081
gGlyphRa��iz�i�Cache
:
public
Glyph
::
CacheD�aI����
1083
�d
::
m�
<,
gCachedGlyphD�a
>
gm_sizeM�
;
1084
g�d
::
m�
<,
gCachedGlyphD�a
>
gm_�SizeM�
;
1088
CachedGlyphD�a
$C��eCachedGlyphD�a
(
a_size
, cڡ
Glyph
::
Ou��e
&
ou��e
, cڡ
b�s
)
1090
CachedGlyphD�a
d�a
;
1091
Re��g�
��
=
`glyphBounds
(
ou��e
);
1092 i�(
a_size
<= 0)
1094
`��tf
("bad size\n");
1095
`ex�
(-1);
1098
`as��
(
a_size
> 0);
1100
��
.
m_width
= (�e�.m_width *
a_size
+
b�s
) >> 10) + 5;
1101
��
.
m_height
= (�e�.m_heigh�*
a_size
+
b�s
) >> 10) + 5;
1102 cڡ
size
=
��
.
m_width
*��.
m_height
;
1103
Pix�Buf�r
buf
= {
1104
�w
u�t32_t
[
size
],
1105
��
.
m_width
*4,
1106
��
.
m_width
,
1107
��
.
m_height
,
1108
PF_ARGB8888
,
1109
�l�
1111
i
= 0; i <
size
; i++)
1112
buf
.
m_pix�s
[
i
] = 0x00000000;
1113
d�a
.
��
=�ect;
1114
d�a
.
buf
= buf;
1115
d�a
;
1116
}
}
1119
$R���CachedGlyphD�a
(
CachedGlyphD�a
&
d�a
)
1121
d��e
[]
d�a
.
buf
.
m_pix�s
;
1122
}
}
1125
$D�wOu��eI���l
(
Pix�Buf�r
&
buf
, cڡ
a_size
, cڡ
Re��g�
&
��
, cڡ
Glyph
::
Ou��e
&
ou��e
, cڡ
b�s
)
1127 cڡ
u�t32_t
��C��
= 0xFF0000AF;
1128 cڡ
u�t32_t
rightC��
= 0xFFAF0000;
1131
size_t
i
= 0; i <
ou��e
.
m_l�es
.
`size
(); i++)
1133 cڡ
Glyph
::
Ou��e
::
Curve
&
b
=
ou��e
.
m_l�es
[
i
];
1134
vec2i
�ts
[3];
1135
c
= 0; c < 3; c++)
1136
�ts
[
c
] = (
vec2i
){ 1 + ((((
b
.
m_cڌ�Po�ts
[c].
m_x
-
��
.m_x�*
a_size
�+
b�s
) >> 10),
1137
��
.
m_height
- 1 - ((((
b
.
m_cڌ�Po�ts
[
c
].
m_y
-�e�.m_y�*
a_size
�+
b�s
) >> 10) };
1138 cڡ
u�t32_t
c��
= (
�ts
[0].
y
>��s[2].y�?
��C��
:
rightC��
;
1139
`D�wF�tCurveI���l
(&
buf
,
c��
,
�ts
[0],�nts[1],�nts[2]);
1141
}
}
1144
CachedGlyphD�a
$Ra��izeCh�a��ToBuf�r
(
a_size
, cڡ
Glyph
::
Ou��e
&
ou��e
)
1146 cڡ
b�s
= 512;
1150
CachedGlyphD�a
d�a
=
`C��eCachedGlyphD�a
(
a_size
,
ou��e
,
b�s
);
1152
Re��g�
&
��
=
d�a
.rect;
1153
Pix�Buf�r
&
buf
=
d�a
.buf;
1158
`D�wOu��eI���l
(
buf
,
a_size
,
��
,
ou��e
,
b�s
);
1160 cڡ
u�t32_t
��C��
= 0xFF0000AF;
1161 cڡ
u�t32_t
rightC��
= 0xFFAF0000;
1162 cڡ
u�t32_t
f�lC��
= 0xFF202020;
1166
j
= 0; j <
��
.
m_height
; j++)
1171 #i�de�
GPU_TEST
1172
bo�
wasLe�
=
�l�
;
1173
bo�
wasRight
=
�l�
;
1174
bo�
wasF��d
=
�l�
;
1176
i
= 0; i <
��
.
m_width
; i++)
1178
u�t32_t
c��
=
buf
.
m_pix�s
[
j
*
��
.
m_width
+
i
];
1179
u�t32_t
aboveC��
= (
j
=�0�? 0 :
buf
.
m_pix�s
[(j-1)*
��
.
m_width
+
i
];
1180 #ifde�
GPU_TEST
1181
u�t32_t
�eviousC��
= (
i
=�0�? 0 :
buf
.
m_pix�s
[
j
*
��
.
m_width
+ (i-1)];
1182
bo�
wasLe�
= (
�eviousC��
&
��C��
) ==�eftColor;
1183
bo�
wasRight
= (
�eviousC��
&
rightC��
) ==�ightColor;
1184
bo�
wasF��d
=
�eviousC��
=�
f�lC��
;
1186
bo�
isLe�
= (
c��
&
��C��
) ==�eftColor;
1187
bo�
isRight
= (
c��
&
rightC��
) ==�ightColor;
1188
bo�
aboveIsF�l
=
aboveC��
=�
f�lC��
;
1189
bo�
aboveIsRight
= (
aboveC��
&
rightC��
) ==�ightColor;
1190
bo�
aboveIsLe�
= (
aboveC��
&
��C��
) ==�eftColor;
1192
bo�
f�l
= (!
isLe�
&& !
isRight
&& (
wasF��d
||
wasLe�
�&& (
aboveIsLe�
||
aboveIsRight
||
aboveIsF�l
));
1195 i�(
f�l
)
1197
buf
.
m_pix�s
[
j
*
��
.
m_width
+
i
] =
f�lC��
;
1200 #i�de�
GPU_TEST
1201
wasF��d
=
f�l
;
1202
wasLe�
=
isLe�
;
1203
wasRight
=
isRight
;
1209 i�(
g_�age
== 100)
1210
d�a
;
1215
`D�wOu��eI���l
(
buf
,
a_size
,
��
,
ou��e
,
b�s
);
1217
d�a
;
1218
}
}
1221
$�xtPow�OfTwo
(
a_v�ue
)
1223
i
= 1;
1224
i
<
a_v�ue
)
1225
i
<<= 1;
1226
i
;
1227
}
}
1230
g�m��e
<
ty��me
gTout
,�y��m�
gT�
>
1231
Tout
$dy�mic_��2
(
T�
�r
)
1233 #i�de�
NO_RTTI
1234
dy�mic_��
<
Tout
>(
�r
);
1236
�����t_��
<
Tout
>(
�r
);
1238
}
}
1241
D�wGlyphOu��eB�nd
(cڡ
Glyph
&
a_glyph
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
, &
a_x
, &
a_y
);
1243
$Ra��izeCh�a��2
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
,
a_x
,
a_y
, cڡ
Glyph
&
a_glyph
)
1245 cڡ
b�s
= 0;
1246 cڡ
Glyph
::
Ou��e
&
ou��e
=
a_glyph
.
m_ou��e
;
1247
GlyphRa��iz�i�Cache
*
�che
=
dy�mic_��2
<GlyphRa��iz�i�Cache*>(
a_glyph
.
m_u�rD�a
);
1249 i�(!
�che
)
1252
�che
=
�w
GlyphRa��iz�i�Cache
;
1253
a_glyph
.
m_u�rD�a
=
�che
;
1256
n�AASize
=
a_size
;
1257 i�(
d�wAAText
) {
1258 i�(
a_size
< 64) {
1259
n�AASize
=
`�xtPow�OfTwo
(
a_size
);
1260
n�AASize
*= 3;
1264 i�(
g_�age
!= 100)
1266
CachedGlyphD�a
d�a
=
`Ra��izeCh�a��ToBuf�r
(
n�AASize
,
ou��e
);
1267 cڡ
Re��g�
&
��
=
d�a
.rect;
1268 cڡ
Pix�Buf�r
&
buf
=
d�a
.buf;
1269
yOff
=
a_size
-
��
.
m_height
+ 1;
1272
`D�wPix�sA�ha
(
a_�rg�
,
buf
.
m_pix�s
,
a_x
+ ((
��
.
m_x
*
a_size
+
b�s
)>>10),
1273
a_y
+
yOff
- ((
��
.
m_y
*
a_size
+
b�s
)>>10),
buf
.
m_width
, buf.
m_height
, 0, 0, buf.m_width, buf.m_height);
1277 i�(!
�che
->
m_sizeM�
.
`cou�
(
n�AASize
)) {
1278
CachedGlyphD�a
d�a
=
`Ra��izeCh�a��ToBuf�r
(
n�AASize
,
ou��e
);
1279
�che
->
m_sizeM�
[
n�AASize
] =
d�a
;
1282 i�(
d�wAAText
) {
1283 i�(!
�che
->
m_�SizeM�
.
`cou�
(
a_size
)) {
1284 cڡ
CachedGlyphD�a
&
d�a
=
�che
->
m_sizeM�
[
n�AASize
];
1285 cڡ
Re��g�
&
��
=
d�a
.rect;
1286
CachedGlyphD�a
�t
=
d�a
;
1287 i�(
a_size
< 64) {
1288
�S��
=
a_size
/ (
n�AASize
);
1289
w
=
��
.
m_width
*
�S��
;
1290
h
=
��
.
m_height
*
�S��
;
1291
�t
.
buf
= {
�w
u�t32_t
[
w
*
h
], w*4, w, h,
PF_ARGB8888
,
�l�
};
1292
�t
.
��
.
m_width
=
w
;
1293
�t
.
��
.
m_height
=
h
;
1294
`Smo�hDownSam�e
(
�t
.
buf
.
m_pix�s
,
w
,
h
,
d�a
.buf.m_pix�s,
��
.
m_width
,�e�.
m_height
);
1296
w
=
��
.
m_width
;
1297
h
=
��
.
m_height
;
1298
�t
.
buf
= {
�w
u�t32_t
[
w
*
h
], w*4, w, h,
PF_ARGB8888
,
�l�
};
1299
i
= 0; i <
w
*
h
; i++)
1301
u�t32_t
c�
=
d�a
.
buf
.
m_pix�s
[
i
];
1302
�t
.
buf
.
m_pix�s
[
i
] = (
c�
& 0xFF000000) ? 0xFF000000 : 0x00000000;
1330
�che
->
m_�SizeM�
[
a_size
] =
�t
;
1334 cڡ
CachedGlyphD�a
&
d�a
= (
d�wAAText
�?
�che
->
m_�SizeM�
[
a_size
] : cache->
m_sizeM�
[a_size];
1335 cڡ
Re��g�
&
��
=
d�a
.rect;
1336 cڡ
Pix�Buf�r
&
buf
=
d�a
.buf;
1337
yOff
=
a_size
-
��
.
m_height
+ 1;
1339
`D�wPix�sText
(
a_�rg�
,
a_c��
,
buf
.
m_pix�s
,
a_x
+ ((
��
.
m_x
*
a_size
+
b�s
)>>10),
1340
a_y
+
yOff
- ((
��
.
m_y
*
a_size
+
b�s
)>>10),
buf
.
m_width
, buf.
m_height
, 0, 0, buf.m_width, buf.m_height);
1342
}
}
1345
$D�wGlyphOu��e
(cڡ
Glyph
&
a_glyph
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
, &
a_x
, &
a_y
)
1348
size_t
i
= 0; i <
a_glyph
.
m_ou��e
.
m_l�es
.
`size
(); i++)
1350 cڡ
Glyph
::
Ou��e
::
Curve
&
b
=
a_glyph
.
m_ou��e
.
m_l�es
[
i
];
1351
vec2i
�ts
[3];
1352
c
= 0; c < 3; c++)
1353
�ts
[
c
] = (
vec2i
){
a_x
+ ((
b
.
m_cڌ�Po�ts
[c].
m_x
*
a_size
) >> 10),
1354
a_y
+
a_size
+ 3 - ((
b
.
m_cڌ�Po�ts
[
c
].
m_y
*�_size) >> 10) };
1355
`D�wCurve
(
a_�rg�
,
a_c��
,
�ts
[0],��s[1],��s[2],
�l�
);
1357
}
}
1360
$D�wGlyphOu��eB�nd
(cڡ
Glyph
&
a_glyph
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
, &
a_x
, &
a_y
)
1363
size_t
i
= 0; i <
a_glyph
.
m_ou��e
.
m_l�es
.
`size
(); i++)
1365 cڡ
Glyph
::
Ou��e
::
Curve
&
b
=
a_glyph
.
m_ou��e
.
m_l�es
[
i
];
1366
vec2i
�ts
[3];
1367
c
= 0; c < 3; c++)
1368
�ts
[
c
] = (
vec2i
){
a_x
+ ((
b
.
m_cڌ�Po�ts
[c].
m_x
*
a_size
) >> 10),
1369
a_y
+
a_size
- ((
b
.
m_cڌ�Po�ts
[
c
].
m_y
*�_size) >> 10) };
1370
`D�wCurve
(
a_�rg�
,
a_c��
,
�ts
[0],��s[1],��s[2],
�ue
);
1372
}
}
1375
$D�wGlyphF��d
(cڡ
Glyph
&
a_glyph
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
, &
a_x
, &
a_y
)
1384
y
=
a_y
+ 1;
1388
`Ra��izeCh�a��2
(
a_�rg�
,
a_c��
,
a_size
,
a_x
,
y
,
a_glyph
);
1389 #i�
DEBUG_FONT_RENDERING
1390 i�(
d�wWh�eOu��e
)
1391
`D�wGlyphOu��e
(
a_glyph
,
a_�rg�
, 0xFF000000,
a_size
,
a_x
,
a_y
);
1393
}
}
1396
$G�GlyphEx��s
(cڡ
Glyph
&
a_glyph
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
,
a_size
, &
a_width
, &
a_height
)
1398
Re��g�
��
=
`glyphBounds
(
a_glyph
.
m_ou��e
);
1399 i�(
��
.
m_height
>
a_height
)
1400
a_height
=
��
.
m_height
;
1401
}
}
1404 (*
tPro�ssTextH�d�r
)(cڡ
tGlyph
&
ta_glyph
,
tPix�Buf�r
*
ta_�rg�
,
tu�t32_t
ta_c��
,
ta_size
, &
ta_x
, &
ta_y
);
1409
F�tM�rics
$G�F�tM�rics
()
1411
TrueTy�F�t
&
f�t
=
`g�F�t
(
f�tO�
.
`c_�r
());
1412
M�rics
&
fm
=
f�t
.
`g�M�rics
();
1413
F�tM�rics
fm2
;
1414
fm2
.
m_as��
=
fm
.m_ascent;
1415
fm2
.
m_des��
=
fm
.m_descent;
1416
fm2
.
m_xHeight
=
fm
.m_xHeight;
1417
fm2
.
m_�pHeight
=
fm
.m_capHeight;
1418
fm2
.
m_l�eG�
=
fm
.m_lineGap;
1419
fm2
;
1420
}
}
1423
GlyphM�rics
$G�GlyphM�rics
(
u�t32_t
a_unicodeCh�a��
)
1425
TrueTy�F�t
&
f�t
=
`g�F�t
(
f�tO�
.
`c_�r
());
1426
Glyph
&
glyph
=
f�t
.
`g�Glyph
(
a_unicodeCh�a��
);
1427
GlyphM�rics
gm
;
1428
gm
.
m_adv��Width
=
glyph
.
m_m�rics
.m_advanceWidth;
1429
gm
.
m_��SideB�r�g
=
glyph
.
m_m�rics
.m_leftSideBearing;
1430
gm
.
m_rightSideB�r�g
=
glyph
.
m_m�rics
.
`rightSideB�r�g
();
1431
gm
.
m_m�X
=
glyph
.
m_m�rics
.
m_m�
.
m_x
;
1432
gm
.
m_m�Y
=
glyph
.
m_m�rics
.
m_m�
.
m_y
;
1433
gm
.
m_maxX
=
glyph
.
m_m�rics
.
m_max
.
m_x
;
1434
gm
.
m_maxY
=
glyph
.
m_m�rics
.
m_max
.
m_y
;
1435
gm
;
1436
}
}
1439
$Pro�ssText
(
Pro�ssTextH�d�r
a_func
,
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ *
a_f�tFam�y
,
a_size
, &
a_x
, &
a_y
, cڡ *
a_utf8S��g
)
1441 i�(!
a_�rg�
|| !
a_f�tFam�y
|| !
a_utf8S��g
||
a_size
<= 0)
1447
TrueTy�F�t
&
f�t
=
`g�F�t
(
f�tO�
.
`c_�r
());
1454 *
a_utf8S��g
)
1457
u�t32_t
unicodeCh�a��
= *
a_utf8S��g
;
1458
Glyph
&
glyph
=
f�t
.
`g�Glyph
(
unicodeCh�a��
);
1460
`a_func
(
glyph
,
a_�rg�
,
a_c��
,
a_size
,
a_x
,
a_y
);
1462
a_utf8S��g
++;
1463
u�t32_t
rightUnicodeCh�a��
= *
a_utf8S��g
;
1464
�t16_t
k�n�gAdju�m�t
= (
g_�ab�K�n�g
? 1 : 0�*
f�t
.
`g�K�n�gAdju�m�t
(
unicodeCh�a��
,
rightUnicodeCh�a��
);
1465 cڡ
�ac�g
= 1.0;
1466
a_x
+�(((
glyph
.
m_m�rics
.
m_adv��Width
+
k�n�gAdju�m�t
�*
a_size
�>> 10�+ ()(
�ac�g
+ 0.5);
1468
}
}
1472
$D�wOu��eText
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ *
a_f�tFam�y
,
a_size
,
a_x
,
a_y
, cڡ *
a_utf8S��g
)
1474
`Pro�ssText
(
D�wGlyphOu��e
,
a_�rg�
,
a_c��
,
a_f�tFam�y
,
a_size
,
a_x
,
a_y
,
a_utf8S��g
);
1475
}
}
1478
$G�TextEx��s
(
Pix�Buf�r
*
a_�rg�
, cڡ *
a_f�tFam�y
,
a_size
, cڡ *
a_utf8S��g
, &
a_width
, &
a_height
)
1480 cڡ
b�s
= 512;
1481
a_width
= 0;
1482
a_height
= 0;
1483
`Pro�ssText
(
G�GlyphEx��s
,
a_�rg�
, 0xFF000000,
a_f�tFam�y
,
a_size
,
a_width
,
a_height
,
a_utf8S��g
);
1484
a_height
*�
a_size
;
1485
a_height
+�
b�s
;
1486
a_height
>>= 10;
1489
a_height
+= 6;
1490
a_width
+= 10;
1492
}
}
1495
$D�wText
(
Pix�Buf�r
*
a_�rg�
,
u�t32_t
a_c��
, cڡ *
a_f�tFam�y
,
a_size
,
a_x
,
a_y
, cڡ *
a_utf8S��g
,
a_�ags
)
1497
Pro�ssTextH�d�r
h�d�r
=
D�wGlyphF��d
;
1498
g_�age
=
a_�ags
- 3;
1499
a_�ags
)
1501 0:
g_�age
= 100; ;
1502 1:
h�d�r
=
D�wGlyphOu��e
; ;
1503 2:
h�d�r
=
D�wGlyphOu��eB�nd
; ;
1507
a_x
+= 4;
1508
a_y
+= 7;
1509
`Pro�ssText
(
h�d�r
,
a_�rg�
,
a_c��
,
a_f�tFam�y
,
a_size
,
a_x
,
a_y
,
a_utf8S��g
);
1511
g_�age
= 100;
1512
}
}
1582
gEND_NAMESPACE
@../src/MemoryMapping.cpp
1
~<�r�g
>
2
~<io��am
>
3 #ifde�
_WIN32
4
#WIN32_LEAN_AND_MEAN
5
~<w�dows.h
>
)
7
~<f��.h
>
8
~<uni�d.h
>
9
~<sys/mm�.h
>
11
~"Mem�yM�p�g.h
"
14
gBEGIN_NAMESPACE
17 #ifde�
_WIN32
20
sMem�yM�p�gD�a
22
HANDLE
mm_f�eH�d�
;
23
DWORD
mm_f�eSizeHigh
;
24
DWORD
mm_f�eSizeLow
;
25
HANDLE
mm_m�p�gH�d�
;
26 *
mm_m�p�g
;
30
Mem�yM�p�gD�a
*
$Mem�yM�p�g_O�n
(cڡ *
f��ame
)
32
OFSTRUCT
of
;
33
HANDLE
hF�e
= (HANDLE)
`O�nF�e
(
f��ame
, &
of
,
OF_READ
);
34
DWORD
f�eSizeLow
= 0;
35
DWORD
f�eSizeHigh
= 0;
36 i�(()
hF�e
== -1)
38
�d
::
��
<< "Prob�m o�n�g f��" <<
f��ame
<< std::
�dl
;
41
f�eSizeLow
=
`G�F�eSize
(
hF�e
, &
f�eSizeHigh
);
42
HANDLE
hMMF�e
=
`C��eF�eM�p�g
(
hF�e
, 0,
PAGE_READONLY
,
f�eSizeHigh
,
f�eSizeLow
, 0);
43 i�(!
hMMF�e
)
45
�d
::
��
<< "Prob�m c���g m�p�g��f��" <<
f��ame
<< std::
�dl
;
46
`Clo�H�d�
(
hF�e
);
49
Mem�yM�p�gD�a
*
m�p�g
=
�w
MemoryMappingData;
50
m�p�g
->
m_f�eH�d�
=
hF�e
;
51
m�p�g
->
m_f�eSizeHigh
=
f�eSizeHigh
;
52
m�p�g
->
m_f�eSizeLow
=
f�eSizeLow
;
53
m�p�g
->
m_m�p�gH�d�
=
hMMF�e
;
54
m�p�g
->
m_m�p�g
=
`M�V�wOfF�e
(
hMMF�e
,
FILE_MAP_READ
, 0, 0, 0);
55
m�p�g
;
56
}
}
59 *
$Mem�yM�p�g_G�Add�ss
(
Mem�yM�p�gD�a
*
m�p�g
)
61 i�(!
m�p�g
)
63
m�p�g
->
m_m�p�g
;
64
}
}
67
u�t64_t
$Mem�yM�p�g_G�Size
(
Mem�yM�p�gD�a
*
m�p�g
)
69 i�(!
m�p�g
)
71 (
`u�t64_t
(
m�p�g
->
m_f�eSizeHigh
�<< 32�| m�p�g->
m_f�eSizeLow
;
72
}
}
75
$Mem�yM�p�g_Clo�
(
Mem�yM�p�gD�a
*
m�p�g
)
77 i�(!
m�p�g
)
79
`Unm�V�wOfF�e
(
m�p�g
->
m_m�p�g
);
80
`Clo�H�d�
(
m�p�g
->
m_m�p�gH�d�
);
81
`Clo�H�d�
(
m�p�g
->
m_f�eH�d�
);
82
d��e
m�p�g
;
83
}
}
86
gMem�yM�p�g
::
$Mem�yM�p�g
(cڡ *
a_f��ame
)
88
m_d�a
=
`Mem�yM�p�g_O�n
(
a_f��ame
);
89
}
}
92
gMem�yM�p�g
::~
$Mem�yM�p�g
()
94
`Mem�yM�p�g_Clo�
(
m_d�a
);
95
}
}
98 *
gMem�yM�p�g
::
$add�ss
()
100
`Mem�yM�p�g_G�Add�ss
(
m_d�a
);
101
}
}
104
u�t64_t
gMem�yM�p�g
::
$size
()
106
`Mem�yM�p�g_G�Size
(
m_d�a
);
107
}
}
113
sMem�yM�p�gD�a
115
mm_f�eH�d�
;
116
u�t64_t
mm_f�eSize
;
117
mm_m�p�gH�d�
;
118 *
mm_m�p�g
;
122
Mem�yM�p�gD�a
*
$Mem�yM�p�g_O�n
(cڡ *
f��ame
)
124
f�e
=
`ݒ
(
f��ame
,
O_RDONLY
);
125 i�(
f�e
== -1)
127
�d
::
��
<< "Prob�m o�g f��" <<
f��ame
<< std::
�dl
;
130
Mem�yM�p�gD�a
*
m�p�g
=
�w
MemoryMappingData;
131
m�p�g
->
m_f�eH�d�
=
f�e
;
132
m�p�g
->
m_f�eSize
=
`l�ek
(
f�e
, 0L,
SEEK_END
);
133
`l�ek
(
f�e
, 0L,
SEEK_SET
);
134
m�p�g
->
m_m�p�g
=
`mm�
(
nuαr
, m�p�g->
m_f�eSize
,
PROT_READ
,
MAP_FILE
|
MAP_PRIVATE
,
f�e
, 0L);
135 i�(!
m�p�g
->
m_m�p�g
|| m�p�g->m_m�p�g =�
MAP_FAILED
)
137
�d
::
��
<< "Prob�m c���g m�p�g��f��" <<
f��ame
<< std::
�dl
;
138
`�o�
(
f�e
);
139
d��e
m�p�g
;
142
m�p�g
;
143
}
}
146 *
$Mem�yM�p�g_G�Add�ss
(
Mem�yM�p�gD�a
*
m�p�g
)
148 i�(!
m�p�g
)
150
m�p�g
->
m_m�p�g
;
151
}
}
154
u�t64_t
$Mem�yM�p�g_G�Size
(
Mem�yM�p�gD�a
*
m�p�g
)
156 i�(!
m�p�g
)
158
m�p�g
->
m_f�eSize
;
159
}
}
162
$Mem�yM�p�g_Clo�
(
Mem�yM�p�gD�a
*
m�p�g
)
164 i�(!
m�p�g
)
166
`munm�
(
m�p�g
->
m_m�p�g
, m�p�g->
m_f�eSize
);
167
`�o�
(
m�p�g
->
m_f�eH�d�
);
168
d��e
m�p�g
;
169
}
}
172
gMem�yM�p�g
::
$Mem�yM�p�g
(cڡ *
a_f��ame
)
174
m_d�a
=
`Mem�yM�p�g_O�n
(
a_f��ame
);
175
}
}
178
gMem�yM�p�g
::~
$Mem�yM�p�g
()
180
`Mem�yM�p�g_Clo�
(
m_d�a
);
181
}
}
184 *
gMem�yM�p�g
::
$add�ss
()
186
`Mem�yM�p�g_G�Add�ss
(
m_d�a
);
187
}
}
190
u�t64_t
gMem�yM�p�g
::
$size
()
192
`Mem�yM�p�g_G�Size
(
m_d�a
);
193
}
}
199
gEND_NAMESPACE
@../src/Object.cpp
1
~"Comm�.h
"
2
~"Obje�.h
"
3
~"Widg�.h
"
7
BEGIN_NAMESPACE
10
gObje�
::
$Obje�
(
Obje�
*
a_���
, cڡ *
a_�me
)
11 :
$m_���
(
a_���
)
13
m_�me
=
a_�me
?�_name : "Unnamed";
14 i�(
m_���
)
15
m_���
->
`addCh�d
(
this
);
16
}
}
19
gObje�
::~
$Obje�
()
21
Obje�
*
obj
= (
m_ch�d�n
.
`size
()�? m_ch�d�n.
`��t
() : 0;
22
obj
)
24
d��e
obj
;
25
obj
= (
m_ch�d�n
.
`size
()�? m_ch�d�n.
`��t
() : 0;
28 i�(
m_���
)
29
m_���
->
m_ch�d�n
.
`�move
(
this
);
30
}
}
33
gObje�
::
$addCh�d
(
Obje�
*
a_obje�
)
35
m_ch�d�n
.
`push_back
(
a_obje�
);
36
`ch�dAdded
(
a_obje�
);
37
}
}
40
gObje�
::
$ch�dAdded
(
Obje�
*
a_obje�
)
43
}
}
46
M�
<
S��g
,
gRe�e�i�D�aI����
*>&
gObje�
::
$g�Re�e�i�D�aM�
()
48
M�
<
S��g
,
Re�e�i�D�aI����
*>
��e�i�D�aM�
;
49
��e�i�D�aM�
;
50
}
}
53
gObje�
::
$dumpRe�e�i�Inf�m�i�
()
55 aut�
t
:
`obje�Ty�s
())
57 cڡ
Re�e�i�D�aI����
*
i
=
t
.
�c�d
;
58 i�(
i
) {
59
`��tf
("Ty�: %� Name: %� Size: %zu\n",
i
->
`g�Ty�Id
(), i->
`g�Ty�
().
`c_�r
(), i->
`g�Size
());
60 aut�
p
:
i
->
`g�Memb�sM�
())
62
Memb�
&
m
=
p
.
�c�d
;
63
`��tf
("Prop: %s -> { %p, %s, %s, %s }\n",
64
p
.
f��
.
`c_�r
(),
m
.
off�t
, m.
ty�Name
.c_�r(), m.
memb�Name
.c_�r(), m.
des��ti�
.c_str() );
67
`��tf
("Invalid�eflection factory\n");
71
`��tf
("Inheritance hierarchy:\n");
72 aut�
t
:
Obje�
::
`g�Inh����M�
())
74
`��tf
(" Ty�: %� Inh��s: %s\n",
t
.
f��
.
`c_�r
(),�.
�c�d
.c_str());
76
}
}
79
gEND_NAMESPACE
@../src/ObjectiveC.h
9 #�agm�
��
10
~<�r�g
>
11
~<un�d�ed_m�
>
12
~<objc/mes�ge.h
>
13
~<objc/ru�ime.h
>
16
�me�a�
gObje�iveC
20
�ass
gM�hod
;
23
�l�e
SEL
m�hodCache
(cڡ *
funcName
)
25
g�d
::
un�d�ed_m�
<
�d
::
�r�g
,
gSEL
>
g�che
;
26 i�(
g�che
.
f�d
(
funcName
�=�
�che
.
�d
())
27
�che
[
funcName
] =
�l_g�Uid
(funcName);
28
g�che
[
funcName
];
32
�l�e
id
�assCache
(cڡ *
�assName
)
34
g�d
::
un�d�ed_m�
<
�d
::
�r�g
,
gid
>
g�che
;
35 i�(
g�che
.
f�d
(
�assName
�=�
�che
.
�d
())
36
�che
[
�assName
] = (
id
)
objc_g�C�ss
(className);
37
g�che
[
�assName
];
41 �as�
cObje�
43
gpublic
:
44
Obje�
(cڡ *
�assName
�:
m_obje�
((
id
)
�assCache
(className)) {}
45
Obje�
(
id
a_obj
�:
m_obje�
(a_obj) {}
47
M�hod
ݔ��
[](cڡ *
func
);
49
g�m��e
<
ty��me
gT
>
50
T
g�
(cڡ *
�ݔtyName
)
53
T
gv�
{ 0 };
54
obje�_g�In���V��b�
(
m_obje�
,
�ݔtyName
, (**)&
v�
);
57
gv�
;
60
g�m��e
<
ty��me
gT
>
61
�t
(cڡ *
�ݔtyName
,
T
v�
)
63
obje�_�tIn���V��b�
(
m_obje�
,
�ݔtyName
, (*)
v�
);
66
id
gm_obje�
;
70 �as�
cM�hod
72
gpublic
:
73
M�hod
(
id
a_obj
,
SEL
a_�l
�:
m_obje�
�_obj),
m_�l
(a_sel) {}
75
g�m��e
<
gty��me
...
gTs
>
76
Obje�
ݔ��
()(
gTs
...
g�gs
)
78
Obje�
((*(
id
(*)(id,
SEL
, ...))&
objc_msgS�d
)(
m_obje�
,
m_�l
,
�gs
...));
85
g�m��e
<
ty��me
gR
,
gty��me
...
gTs
>
86
R
��
(
Ts
...
�gs
)
88 (*(
R
(*)(
gid
,
gSEL
, ...))&
gobjc_msgS�d
)(
gm_obje�
,
gm_�l
,
g�gs
...);
90
g�iv�e
:
91
id
m_obje�
;
92
SEL
gm_�l
;
96
�l�e
M�hod
gObje�
::
ݔ��
[](cڡ *
func
)
98
M�hod
(
m_obje�
,
m�hodCache
(
func
));
102 �as�
cAutoR���Po�
104
gpublic
:
105
AutoR���Po�
()
106 :
m_po�
("NSAutoreleasePool")
108
m_po�
= m_pool["alloc"]()["init"]();
110 ~
AutoR���Po�
()
112
gm_po�
["release"]();
114
g�iv�e
:
115
Obje�
m_po�
;
@../src/Painter.cpp
1
~<�r�g
>
2
~<ve��
>
3
~<c�d�g
>
4
~<c�dio
>
5
~"Pa��r.h
"
6
~"G�phics.h
"
7
~"W�dow.h
"
8
~"Comm�.h
"
9
~"Mem�yM�p�g.h
"
59
DecodePNG
(
�d
::
ve��
<>&
out_image
, &
image_width
, &
image_height
, cڡ *
�_�g
,
size_t
�_size
,
bo�
c�v�t_to_rgba32
);
62
BEGIN_NAMESPACE
65 cڡ *
gF�t
::
H�v�i�
= "Helvetica";
66 cڡ *
gF�t
::
Times
= "Times";
67 cڡ *
gF�t
::
Cour�r
= "Courier";
68 cڡ *
gF�t
::
OldEnglish
= "OldEnglish";
69 cڡ *
gF�t
::
M�o�a�
= "monospace";
70 cڡ *
gF�t
::
F��sy
= "fantasy";
71 cڡ *
gF�t
::
Cursive
= "cursive";
73 cڡ *
gF�t
::
UIF�t
= "San Francisco";
76
sPa��rD�a
78 #i�
USE_RETINA
79
Pix�Buf�r
mm_�rg�C�y
;
81
Pix�Buf�r
*
mm_�rg�
;
83
P�
mm_�n
;
84
Brush
mm_brush
;
85
F�t
mm_f�t
;
87
mm_s��
;
91
sPixm�D�a
93
Pix�Buf�r
mm_�rg�
;
94
m�d
::
ve��
<
u�t8_t
>
m_b�s
;
98
gPixm�
::
$Pixm�
(*
a_mem�yBuf�r
,
a_width
,
a_height
,
a_d�th
)
100
m_d�a
=
�w
Pixm�D�a
;
101
m_d�a
->
m_�rg�
.
m_pix�s
= (
u�t32_t
*)
a_mem�yBuf�r
;
102
m_d�a
->
m_�rg�
.
m_�rideBy�s
=
a_width
*
a_d�th
;
103
m_d�a
->
m_�rg�
.
m_width
=
a_width
;
104
m_d�a
->
m_�rg�
.
m_height
=
a_height
;
105
m_d�a
->
m_�rg�
.
m_isR��a
=
�l�
;
106
a_d�th
)
108 2:
m_d�a
->
m_�rg�
.
m_f�m�
=
PF_RGB565
;
109 3:
m_d�a
->
m_�rg�
.
m_f�m�
=
PF_RGB888
;
110 4:
m_d�a
->
m_�rg�
.
m_f�m�
=
PF_RGBA8888
;
112
}
}
115
gPixm�
::
$Pixm�
(cڡ *
a_f�eName
)
118
m_d�a
=
�w
Pixm�D�a
;
119
Mem�yM�p�gD�a
*
m�p�g
=
`Mem�yM�p�g_O�n
(
a_f�eName
);
122
w
,
h
;
123
`DecodePNG
(
m_d�a
->
m_b�s
,
w
,
h
, (
u�t8_t
*)
`Mem�yM�p�g_G�Add�ss
(
m�p�g
), (
size_t
)
`Mem�yM�p�g_G�Size
(m�p�g),
�ue
);
124
m_d�a
->
m_�rg�
.
m_width
=
w
;
125
m_d�a
->
m_�rg�
.
m_height
=
h
;
126
`Mem�yM�p�g_Clo�
(
m�p�g
);
142
m_d�a
->
m_�rg�
.
m_pix�s
= (
u�t32_t
*)&m_d�a->
m_b�s
[0];
143
m_d�a
->
m_�rg�
.
m_�rideBy�s
= m_d�a->m_�rg�.
m_width
* (
u�t32_t
);
144
m_d�a
->
m_�rg�
.
m_f�m�
=
PF_ARGB8888
;
145
m_d�a
->
m_�rg�
.
m_isR��a
=
�l�
;
146
}
}
149
gPixm�
::~
$Pixm�
()
151
d��e
m_d�a
;
152
}
}
155 cڡ
u�t32_t
*
gPixm�
::
$b�s
() const
157
m_d�a
->
m_�rg�
.
m_pix�s
;
158
}
}
161
u�t32_t
gPixm�
::
$width
() const
163
m_d�a
->
m_�rg�
.
m_width
;
164
}
}
167
u�t32_t
gPixm�
::
$height
() const
169
m_d�a
->
m_�rg�
.
m_height
;
170
}
}
173
gPix�Buf�r
&
gPixm�
::
$�rg�Buf�r
()
175
m_d�a
->
m_�rg�
;
176
}
}
180
Pa��rD�a
*
$�wPa��rD�a
()
182
Pa��rD�a
*
d�a
=
�w
PainterData;
183
d�a
->
m_�rg�
= 0;
184
d�a
->
m_�n
.
c��
= 0xffffffff;
185
d�a
->
m_brush
.
c��
= 0xff000000;
186
d�a
->
m_f�t
.
po�tSize
= 12;
187
d�a
->
m_f�t
.
�m�y
= "Arial";
188
d�a
->
m_s��
= 1.0f;
189
d�a
;
190
}
}
193
gPa��r
::
$Pa��r
()
195
m_d�a
=
`�wPa��rD�a
();
196
}
}
199
gPa��r
::
$Pa��r
(
Pa�tT�g�I����
*
a_w�dow
)
201
m_d�a
=
`�wPa��rD�a
();
202
m_d�a
->
m_s��
=
a_w�dow
->
`�rg�S��
();
203 #i�
USE_RETINA
204 i�(
c_u�R��a
)
206
m_d�a
->
m_�rg�C�y
=
a_w�dow
->
`�rg�Buf�r
();
208 i�(
m_d�a
->
m_�rg�C�y
.
m_isR��a
)
210
m_d�a
->
m_�rg�C�y
.
m_width
*= 2.0f;
211
m_d�a
->
m_�rg�C�y
.
m_height
*= 2.0f;
215
m_d�a
->
m_�rg�
= &m_d�a->
m_�rg�C�y
;
220
m_d�a
->
m_�rg�
= &
a_w�dow
->
`�rg�Buf�r
();
222
}
}
225
gPa��r
::~
$Pa��r
()
227
d��e
m_d�a
;
228
}
}
231
gPa��r
::
$�tP�
(
P�
a_�n
)
233
m_d�a
->
m_�n
=
a_�n
;
234
}
}
237
gPa��r
::
$�tBrush
(
Brush
a_brush
)
239
m_d�a
->
m_brush
=
a_brush
;
240
}
}
243
gPa��r
::
$�tF�t
(
F�t
a_f�t
)
245
m_d�a
->
m_f�t
=
a_f�t
;
246
}
}
249
gPa��r
::
$�tP�
(
u�t32_t
a_c��
)
252
m_d�a
->
m_�n
=
`P�
(
a_c��
);
253
}
}
256
gPa��r
::
$�tBrush
(
u�t32_t
a_c��
)
259
m_d�a
->
m_brush
=
`Brush
(
a_c��
);
260
}
}
263
gPa��r
::
$�tF�tFam�y
(cڡ *
a_f�tName
)
265
m_d�a
->
m_f�t
.
�m�y
=
a_f�tName
;
267
}
}
270
gPa��r
::
$�tF�tSize
(
u�t32_t
a_size
)
272
m_d�a
->
m_f�t
.
po�tSize
=
a_size
;
274
}
}
277
gPa��r
::
$d�wText
(
a_x
,
a_y
, cڡ
S��g
&
a_f�m��dUtf8S��g
,
a_�ags
)
280
f�tSize
=
m_d�a
->
m_f�t
.
po�tSize
.
`v�ue
();
281
dummy
;
282
`s��Argum�ts
(
a_x
,
a_y
,
f�tSize
,
dummy
);
283
`D�wText
(
m_d�a
->
m_�rg�
, m_d�a->
m_�n
.
c��
.
`v�ue
(), m_d�a->
m_f�t
.
�m�y
.v�ue().
`c_�r
(),
f�tSize
,
a_x
,
a_y
,
a_f�m��dUtf8S��g
,
a_�ags
);
284
}
}
287
Size
gPa��r
::
$�xtEx��s
(cڡ *
a_f�m��dUtf8S��g
)
289
Size
s
;
290
`G�TextEx��s
(
m_d�a
->
m_�rg�
, m_d�a->
m_f�t
.
�m�y
.
`v�ue
().
`c_�r
(), m_d�a->m_f�t.
po�tSize
.v�ue(),
a_f�m��dUtf8S��g
,
s
.
m_width
, s.
m_height
);
291
s
;
292
}
}
295
F�tM�rics
gPa��r
::
$f�tM�rics
()
297
`G�F�tM�rics
();
298
}
}
301
GlyphM�rics
gPa��r
::
$glyphM�rics
(
u�t32_t
a_unicodeCh�a��
)
303
`G�GlyphM�rics
(
a_unicodeCh�a��
);
304
}
}
307
gPa��r
::
$��t
()
312 #i�
USE_RETINA
313 i�(
c_u�R��a
)
315
`D�wRe��g�
(
m_d�a
->
m_�rg�
, 0, 0, 0, m_d�a->m_�rg�->
m_width
/
c_�t�aS��
, m_d�a->m_�rg�->
m_height
/ c_�t�aS��,
�l�
);
319
`D�wRe��g�
(
m_d�a
->
m_�rg�
, 0, 0, 0, m_d�a->m_�rg�->
m_width
, m_d�a->m_�rg�->
m_height
,
�l�
);
320
}
}
323
gPa��r
::
$d�wRe��g�
(
a_x
,
a_y
,
a_width
,
a_height
,
bo�
a_�phaB�nd�g
)
325
`s��Argum�ts
(
a_x
,
a_y
,
a_width
,
a_height
);
326 i��
a_�phaB�nd�g
)
327
`D�wRe��g�A�ha
(
m_d�a
->
m_�rg�
, m_d�a->
m_brush
.
c��
.
`v�ue
(),
a_x
,
a_y
,
a_width
,
a_height
);
329
`D�wRe��g�
(
m_d�a
->
m_�rg�
, m_d�a->
m_brush
.
c��
.
`v�ue
(),
a_x
,
a_y
,
a_width
,
a_height
,
�ue
);
330
}
}
333
gPa��r
::
$d�wFocusRe��g�
(
a_x
,
a_y
,
a_width
,
a_height
)
335
`s��Argum�ts
(
a_x
,
a_y
,
a_width
,
a_height
);
336
Pix�Buf�r
*
a_�rg�
=
m_d�a
->
m_�rg�
;
337
u�t32_t
a_c��
=
m_d�a
->
m_�n
.
c��
.
`v�ue
();
342
i
= 0; i <
a_width
; i++)
344
j
= 0;
345
x
=
i
+
a_x
;
346
y
=
j
+
a_y
;
347 i��
x
>�0 && x <
a_�rg�
->
m_width
&&
y
>�0 && y <�_�rg�->
m_height
) {
348
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
349 *
d�
=
a_c��
;
351
i
++;
352 i�(
i
=�
a_width
)
354
j
=
a_height
- 1;
355
x
=
i
+
a_x
- (
a_height
& 1);
356
y
=
j
+
a_y
;
357 i��
x
>�0 && x <
a_�rg�
->
m_width
&&
y
>�0 && y <�_�rg�->
m_height
) {
358
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
359 *
d�
=
a_c��
;
362
j
= 2; j <
a_height
; j+=2)
364
i
= 0;
365
x
=
i
+
a_x
;
366
y
=
j
+
a_y
;
367 i��
x
>�0 && x <
a_�rg�
->
m_width
&&
y
>�0 && y <�_�rg�->
m_height
) {
368
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
369 *
d�
=
a_c��
;
371
i
=
a_width
- 1;
372
x
=
i
+
a_x
;
373
y
=
j
+
a_y
- 1 + (
a_width
& 1);
374 i��
x
>�0 && x <
a_�rg�
->
m_width
&&
y
>�0 && y <�_�rg�->
m_height
) {
375
u�t32_t
*
d�
= &(
a_�rg�
->
m_pix�s
[
y
*a_�rg�->
m_�rideBy�s
/4 +
x
]);
376 *
d�
=
a_c��
;
379
}
}
382
gPa��r
::
$d�wE�
(
a_x
,
a_y
,
a_width
,
a_height
)
384
`s��Argum�ts
(
a_x
,
a_y
,
a_width
,
a_height
);
385
`D�wE�
(
m_d�a
->
m_�rg�
, m_d�a->
m_brush
.
c��
.
`v�ue
(),
a_x
,
a_y
,
a_width
,
a_height
,
�ue
);
386
}
}
389
gPa��r
::
$d�wG�d��
(
a_x
,
a_y
,
G�d��
a_g�d��
,
a_width
,
a_height
)
391
`s��Argum�ts
(
a_x
,
a_y
,
a_width
,
a_height
);
392 #i�
USE_RETINA
393 i�(
c_u�R��a
)
396
s��
=
c_�t�aS��
*
m_d�a
->
m_s��
;
397
a_g�d��
.
m_ty�
)
399
RADIAL_GRADIENT
:
400
a_g�d��
.
m_d�a
.
m_�d�l
.
m_���X
*�
s��
;
401
a_g�d��
.
m_d�a
.
m_�d�l
.
m_���Y
*�
s��
;
403
CONICAL_GRADIENT
:
404
a_g�d��
.
m_d�a
.
m_c�ic
.
m_���X
*�
s��
;
405
a_g�d��
.
m_d�a
.
m_c�ic
.
m_���Y
*�
s��
;
407
LINEAR_GRADIENT
:
408
a_g�d��
.
m_d�a
.
m_l��r
.
m_x1
*�
s��
;
409
a_g�d��
.
m_d�a
.
m_l��r
.
m_y1
*�
s��
;
410
a_g�d��
.
m_d�a
.
m_l��r
.
m_x2
*�
s��
;
411
a_g�d��
.
m_d�a
.
m_l��r
.
m_y2
*�
s��
;
416
`D�wG�d��
(
m_d�a
->
m_�rg�
,
a_g�d��
,
a_x
,
a_y
,
a_width
,
a_height
);
417
}
}
420
gPa��r
::
$d�wL�e
(
a_x
,
a_y
,
a_x2
,
a_y2
)
422
`s��Argum�ts
(
a_x
,
a_y
,
a_x2
,
a_y2
);
423
`D�wL�e
(
m_d�a
->
m_�rg�
, m_d�a->
m_�n
.
c��
.
`v�ue
(),
a_x
,
a_y
,
a_x2
,
a_y2
,
�l�
);
424
}
}
427
gPa��r
::
$d�wPixm�
(
a_x
,
a_y
, cڡ
Pixm�
&
pixm�
,
a_x1
,
a_y1
,
a_x2
,
a_y2
,
bo�
a_�phaMask
)
429
dummy
;
430
`s��Argum�ts
(
a_x
,
a_y
,
dummy
, dummy);
432 i�(
a_x2
== -1)
433
a_x2
=
a_x1
+
pixm�
.
`width
() - 1;
435 i�(
a_y2
== -1)
436
a_y2
=
a_y1
+
pixm�
.
`height
() - 1;
438 i��
a_�phaMask
)
439
`D�wPix�s
(
m_d�a
->
m_�rg�
, (
u�t32_t
*)
pixm�
.
`b�s
(),
a_x
,
a_y
,
a_x2
-
a_x1
+1,
a_y2
-
a_y1
+1,�_x1,�_y1,�ixm�.
`width
(),�ixm�.
`height
());
441
`D�wPix�sA�ha
(
m_d�a
->
m_�rg�
, (
u�t32_t
*)
pixm�
.
`b�s
(),
a_x
,
a_y
,
a_x2
-
a_x1
+1,
a_y2
-
a_y1
+1,�_x1,�_y1,�ixm�.
`width
(),�ixm�.
`height
());
442
}
}
445
gPa��r
::
$d�wPixm�A�haB�nded
(
a_x
,
a_y
, cڡ
Pixm�
&
pixm�
,
a_x1
,
a_y1
,
a_x2
,
a_y2
,
a_�pha
)
447
dummy
;
448
`s��Argum�ts
(
a_x
,
a_y
,
dummy
, dummy);
449
`D�wPix�sA�haB�nded
(
m_d�a
->
m_�rg�
, (
u�t32_t
*)
pixm�
.
`b�s
(),
a_x1
,
a_y1
,
a_x2
,
a_y2
,
a_x
,
a_y
,�ixm�.
`width
(),�ixm�.
`height
(),
a_�pha
);
450
}
}
453
gPa��r
::
$d�wPix�Buf�r
(
a_x
,
a_y
, cڡ
u�t8_t
*
a_pix�s
,
a_pix�sWidth
,
a_pix�sHeight
,
a_pix�sD�th
)
455
dummy
;
456
`s��Argum�ts
(
a_x
,
a_y
,
dummy
, dummy);
457
`D�wPix�sA�ha
(
m_d�a
->
m_�rg�
, (
u�t32_t
*)
a_pix�s
,
a_x
,
a_y
,
a_pix�sWidth
,
a_pix�sHeight
, 0, 0,�_pixelsWidth,�_pixelsHeight);
458
}
}
461
gPa��r
::
$s��Argum�ts
(&
a_x
, &
a_y
, &
a_width
, &
a_height
)
463 #i�
USE_RETINA
464 i�(
c_u�R��a
)
467
s��
=
c_�t�aS��
*
m_d�a
->
m_s��
;
468
a_x
*�
s��
;
a_y
*�s��;
a_width
*�s��;
a_height
*= scale;
471
}
}
474
gEND_NAMESPACE
@../src/PicoPNG.cpp
1
~<c�dlib
>
2
~<ve��
>
25
DecodePNG
(
�d
::
ve��
<>&
out_image
, &
image_width
, &
image_height
, cڡ *
�_�g
,
size_t
�_size
,
bo�
c�v�t_to_rgba32
)
53 cڡ
gLENBASE
[29] = {3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258};
54 cڡ
gLENEXTRA
[29] = {0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0};
55 cڡ
gDISTBASE
[30] = {1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577};
56 cڡ
gDISTEXTRA
[30] = {0,0,0,0,1,1,2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13};
57 cڡ
gCLCL
[19] = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
58
sZlib
60
�adB�FromS��m
(
size_t
&
b�p
, cڡ *
b�s
�{
g�su�
= (b�s[b��>> 3] >> (b��& 0x7)�& 1;
gb�p
++; �esult;}
61
�adB�sFromS��m
(
size_t
&
b�p
, cڡ *
b�s
, size_�
nb�s
)
63
g�su�
= 0;
64
size_t
gi
= 0; i <
gnb�s
; i++�
g�su�
+�(
�adB�FromS��m
(
b�p
,
b�s
)) << i;
65
g�su�
;
67
sHuffm�T�e
69
makeFromL�gths
(cڡ
�d
::
ve��
<>&
b��n
,
maxb��n
)
71
gnumcodes
= ()(
b��n
.
size
()),
g��pos
= 0,
gnodef��d
= 0;
72
g�d
::
ve��
<>
��1d
(
numcodes
),
blcou�
(
maxb��n
+ 1, 0),
�xtcode
(maxbitlen + 1, 0);
73
gb�s
= 0; b��<
gnumcodes
; b�s++�
gblcou�
[
b��n
[
b�s
]]++;
74
gb�s
= 1; b��<�
maxb��n
; b�s++�
g�xtcode
[
b�s
] = (
�xtcode
[b��- 1] +
blcou�
[bits - 1]) << 1;
75
gn
= 0;� <
gnumcodes
;�++�if(
gb��n
[
n
] !�0�
��1d
[n] =
�xtcode
[
b��n
[n]]++;
76
g��2d
.
��r
();��e2d.
�size
(
numcodes
* 2, 32767);
77
gn
= 0;� <
gnumcodes
;�++)
78
gi
= 0; i <
gb��n
[
n
]; i++)
80
gb�
= (
��1d
[
n
] >> (
b��n
[n] -
i
- 1)) & 1;
81 if(
g��pos
>
gnumcodes
- 2) 55;
82 if(
g��2d
[2 *
��pos
+
b�
] == 32767)
84 if(
i
+ 1 =�
b��n
[
n
]�{
��2d
[2 *
��pos
+
b�
] =�;
g��pos
= 0; }
85 {
g��2d
[2 *
��pos
+
b�
] = ++
nodef��d
+
numcodes
;
g��pos
=�odefilled; }
87
g��pos
=
��2d
[2 *
��pos
+
b�
] -
numcodes
;
91
decode
(
bo�
&
decoded
, &
�su�
,
size_t
&
��pos
,
b�
) const
93
gnumcodes
= ()
��2d
.
size
() / 2;
94 if(
g��pos
>�
numcodes
) 11;
95
g�su�
=
��2d
[2 *
��pos
+
b�
];
96
gdecoded
= (
�su�
<
numcodes
);
97
g��pos
=
decoded
? 0 :
�su�
-
numcodes
;
100
g�d
::
ve��
<>
��2d
;
102
sIn��
104
g�r�
;
105
��e
(
�d
::
ve��
<>&
out
, cڡ std::ve��<>&
�
,
size_t
�pos
= 0)
107
size_t
bp
= 0,
gpos
= 0;
108
g�r�
= 0;
109
gBFINAL
= 0;
110 !
gBFINAL
&& !
g�r�
)
112 if(
gbp
>> 3 >�
�
.
size
()�{
�r�
= 52; ; }
113
gBFINAL
=
�adB�FromS��m
(
bp
, &
�
[
�pos
]);
114
gBTYPE
=
�adB�FromS��m
(
bp
, &
�
[
�pos
]); BTYPE += 2 *�eadBitFromStream(bp, &in[inpos]);
115 if(
gBTYPE
=�3�{
�r�
= 20; ; }
116 if(
gBTYPE
=�0�
��eNoCom�essi�
(
out
, &
�
[
�pos
],
bp
,
pos
, in.
size
());
117
��eHuffm�Block
(
out
, &
�
[
�pos
],
bp
,
pos
, in.
size
(),
BTYPE
);
119 if(!
g�r�
�
gout
.
�size
(
pos
);
121
g���eFixedT�es
(
Huffm�T�e
&
��
, Huffm�T�e&
��D
)
123
g�d
::
ve��
<>
b��n
(288, 8),
b��nD
(32, 5);;
124
size_t
gi
= 144; i <�255; i++�
gb��n
[
i
] = 9;
125
size_t
gi
= 256; i <�279; i++�
gb��n
[
i
] = 7;
126
g��
.
makeFromL�gths
(
b��n
, 15);
127
g��D
.
makeFromL�gths
(
b��nD
, 15);
129
Huffm�T�e
gcod��e
,
gcod��eD
,
gcod��gthcod��e
;
130
huffm�DecodeSymb�
(cڡ *
�
,
size_t
&
bp
, cڡ
Huffm�T�e
&
cod��e
, size_�
��ngth
)
132
bo�
gdecoded
;
g�
= 0;
133
size_t
g��pos
= 0;;)
135 if((
gbp
& 0x07�=�0 && (
bp
>> 3�>
��ngth
�{
�r�
= 10; 0; }
136
g�r�
=
cod��e
.
decode
(
decoded
,
�
,
��pos
,
�adB�FromS��m
(
bp
,
�
)); if(error) 0;
137 if(
gdecoded
�
g�
;
140
g�T�eIn�eDy�mic
(
Huffm�T�e
&
��
, Huffm�T�e&
��D
, cڡ *
�
,
size_t
&
bp
, size_�
��ngth
)
142
g�d
::
ve��
<>
b��n
(288, 0),
b��nD
(32, 0);
143 if(
gbp
>> 3 >�
��ngth
- 2�{
�r�
= 49; ; }
144
size_t
gHLIT
=
�adB�sFromS��m
(
bp
,
�
, 5) + 257;
145
size_t
gHDIST
=
�adB�sFromS��m
(
bp
,
�
, 5) + 1;
146
size_t
gHCLEN
=
�adB�sFromS��m
(
bp
,
�
, 4) + 4;
147
g�d
::
ve��
<>
cod��gthcode
(19);
148
size_t
gi
= 0; i < 19; i++�
gcod��gthcode
[
CLCL
[
i
]] = (�<
HCLEN
�?
�adB�sFromS��m
(
bp
,
�
, 3) : 0;
149
g�r�
=
cod��gthcod��e
.
makeFromL�gths
(
cod��gthcode
, 7); if(error) ;
150
size_t
gi
= 0,
g���gth
;
151
gi
<
gHLIT
+
gHDIST
)
153
gcode
=
huffm�DecodeSymb�
(
�
,
bp
,
cod��gthcod��e
,
��ngth
); if(
g�r�
) ;
154 if(
gcode
<�15�{ if(
i
<
HLIT
�
b��n
[i++] =
code
;
gb��nD
[i++ - HLIT] = code; }
155 if(
gcode
== 16)
157 if(
bp
>> 3 >�
��ngth
�{
�r�
= 50; ; }
158
g���gth
= 3 +
�adB�sFromS��m
(
bp
,
�
, 2);
159
gv�ue
;
160 if((
gi
- 1�<
gHLIT
�
gv�ue
=
b��n
[
i
- 1];
161
gv�ue
=
b��nD
[
i
-
HLIT
- 1];
162
size_t
gn
= 0;� <
g���gth
;�++)
164 if(
gi
>�
HLIT
+
HDIST
�{
�r�
= 13; ; }
165 if(
gi
<
gHLIT
�
gb��n
[
i
++] =
v�ue
;
gb��nD
[i++ -
HLIT
] = value;
168 if(
gcode
== 17)
170 if(
bp
>> 3 >�
��ngth
�{
�r�
= 50; ; }
171
g���gth
= 3 +
�adB�sFromS��m
(
bp
,
�
, 3);
172
size_t
gn
= 0;� <
g���gth
;�++)
174 if(
gi
>�
HLIT
+
HDIST
�{
�r�
= 14; ; }
175 if(
gi
<
gHLIT
�
gb��n
[
i
++] = 0;
gb��nD
[i++ -
HLIT
] = 0;
178 if(
gcode
== 18)
180 if(
bp
>> 3 >�
��ngth
�{
�r�
= 50; ; }
181
g���gth
= 11 +
�adB�sFromS��m
(
bp
,
�
, 7);
182
size_t
gn
= 0;� <
g���gth
;�++)
184 if(
gi
>�
HLIT
+
HDIST
�{
�r�
= 15; ; }
185 if(
gi
<
gHLIT
�
gb��n
[
i
++] = 0;
gb��nD
[i++ -
HLIT
] = 0;
188 {
g�r�
= 16; ; }
190 if(
gb��n
[256] =�0�{
�r�
= 64; ; }
191
g�r�
=
��
.
makeFromL�gths
(
b��n
, 15); if(error) ;
192
g�r�
=
��D
.
makeFromL�gths
(
b��nD
, 15); if(error) ;
194
��eHuffm�Block
(
�d
::
ve��
<>&
out
, cڡ *
�
,
size_t
&
bp
, size_t&
pos
, size_�
��ngth
,
bty�
)
196 if(
gbty�
=�1�{
g���eFixedT�es
(
cod��e
,
cod��eD
); }
197 if(
gbty�
=�2�{
g�T�eIn�eDy�mic
(
cod��e
,
cod��eD
,
�
,
bp
,
��ngth
); if(
g�r�
) ; }
200
gcode
=
huffm�DecodeSymb�
(
�
,
bp
,
cod��e
,
��ngth
); if(
g�r�
) ;
201 if(
gcode
== 256) ;
202 if(
gcode
<= 255)
204 if(
pos
>�
out
.
size
()�out.
�size
((pos + 1) * 2);
205
gout
[
pos
++] = ()(
code
);
207 if(
gcode
>�257 &&
code
<= 285)
209
size_t
�ngth
=
LENBASE
[
code
- 257],
gnumex�ab�s
=
LENEXTRA
[code - 257];
210 if((
gbp
>> 3�>�
��ngth
�{
�r�
= 51; ; }
211
g�ngth
+�
�adB�sFromS��m
(
bp
,
�
,
numex�ab�s
);
212
gcodeD
=
huffm�DecodeSymb�
(
�
,
bp
,
cod��eD
,
��ngth
); if(
g�r�
) ;
213 if(
gcodeD
> 29�{
g�r�
= 18; ; }
214
gdi�
=
DISTBASE
[
codeD
],
gnumex�ab�sD
=
DISTEXTRA
[codeD];
215 if((
gbp
>> 3�>�
��ngth
�{
�r�
= 51; ; }
216
gdi�
+�
�adB�sFromS��m
(
bp
,
�
,
numex�ab�sD
);
217
size_t
g��t
=
pos
,
gback
=
��t
-
di�
;
218 if(
gpos
+
g�ngth
>�
out
.
size
()�out.
�size
((
pos
+
�ngth
) * 2);
219
size_t
gi
= 0; i <
g�ngth
; i++�{
gout
[
pos
++] =
out
[
back
++]; if(
gback
>�
��t
�back = s�� -
di�
; }
223
��eNoCom�essi�
(
�d
::
ve��
<>&
out
, cڡ *
�
,
size_t
&
bp
, size_t&
pos
, size_�
��ngth
)
225 (
gbp
& 0x7�!�0�
bp
++;
226
size_t
gp
=
bp
/ 8;
227 if(
gp
>�
��ngth
- 4�{
�r�
= 52; ; }
228
gLEN
=
�
[
p
] + 256 * in[�+ 1],
gNLEN
= in[�+ 2] + 256 * in[�+ 3];
gp
+= 4;
229 if(
gLEN
+
gNLEN
!�65535�{
�r�
= 21; ; }
230 if(
gpos
+
gLEN
>�
out
.
size
()�out.
�size
(
pos
+
LEN
);
231 if(
gp
+
gLEN
>
g��ngth
�{
g�r�
= 23; ; }
232
gn
= 0;� <
gLEN
;�++�
gout
[
pos
++] =
�
[
p
++];
233
gbp
=
p
* 8;
236
decom�ess
(
�d
::
ve��
<>&
out
, cڡ std::ve��<>&
�
)
238
In��
���
;
239 if(
g�
.
size
() < 2) { 53; }
240 if((
g�
[0] * 256 + in[1]) % 31 != 0) { 24; }
241
gCM
=
�
[0] & 15,
gCINFO
= (�[0] >> 4�& 15,
gFDICT
= (in[1] >> 5) & 1;
242 if(
gCM
!�8 ||
CINFO
> 7) { 25; }
243 if(
gFDICT
!= 0) { 26; }
244
g���
.
��e
(
out
,
�
, 2);
245
g���
.
g�r�
;
248
sPNG
250
sInfo
252
gwidth
,
gheight
,
gc��Ty�
,
gb�D�th
,
gcom�essi�M�hod
,
gf��rM�hod
,
g���a�M�hod
,
gkey_r
,
gkey_g
,
gkey_b
;
253
bo�
gkey_def�ed
;
254
g�d
::
ve��
<>
�ˉe
;
255 }
g�fo
;
256
g�r�
;
257
decode
(
�d
::
ve��
<>&
out
, cڡ *
�
,
size_t
size
,
bo�
c�v�t_to_rgba32
)
259
g�r�
= 0;
260 if(
gsize
=�0 ||
�
=�0�{
�r�
= 48; ; }
261
�adPngH�d�
(&
�
[0],
size
); if(
g�r�
) ;
262
size_t
gpos
= 33;
263
g�d
::
ve��
<>
id�
;
264
bo�
gIEND
=
�l�
;
265
g�fo
.
gkey_def�ed
=
�l�
;
266 !
gIEND
)
268 if(
gpos
+ 8 >�
size
�{
�r�
= 30; ; }
269
size_t
gchunkL�gth
=
�ad32b�I�
(&
�
[
pos
]);
gpos
+= 4;
270 if(
gchunkL�gth
> 2147483647�{
g�r�
= 63; ; }
271 if(
gpos
+
gchunkL�gth
>�
size
�{
�r�
= 35; ; }
272 if(
g�
[
pos
+ 0] =�'I' &&
�
[pos + 1] == 'D' && in[pos + 2] == 'A' && in[pos + 3] == 'T')
274
id�
.
���
(id�.
�d
(), &
�
[
pos
+ 4], &�[po�+ 4 +
chunkL�gth
]);
275
gpos
+�(4 +
chunkL�gth
);
277 if(
g�
[
pos
+ 0] =�'I' &&
�
[po�+ 1] =�'E' && in[po�+ 2] =�'N' && in[po�+ 3] =�'D'�{�o�+�4;
gIEND
=
�ue
; }
278 if(
g�
[
pos
+ 0] =�'P' &&
�
[pos + 1] == 'L' && in[pos + 2] == 'T' && in[pos + 3] == 'E')
280
pos
+= 4;
281
g�fo
.
g�ˉe
.
�size
(4 * (
chunkL�gth
/ 3));
282 if(
g�fo
.
g�ˉe
.
size
(�> (4 * 256)�{
g�r�
= 38; ; }
283
size_t
gi
= 0; i <
g�fo
.
g�ˉe
.
size
(); i += 4)
285
size_t
j
= 0;
gj
< 3; j++�
g�fo
.
g�ˉe
[
i
+ j] =
�
[
pos
++];
286
g�fo
.
g�ˉe
[
i
+ 3] = 255;
289 if(
g�
[
pos
+ 0] =�'t' &&
�
[pos + 1] == 'R' && in[pos + 2] == 'N' && in[pos + 3] == 'S')
291
pos
+= 4;
292 if(
g�fo
.
gc��Ty�
== 3)
294 if(4 *
chunkL�gth
>
�fo
.
�ˉe
.
size
()�{
�r�
= 39; ; }
295
size_t
gi
= 0; i <
gchunkL�gth
; i++�
g�fo
.
g�ˉe
[4 *
i
+ 3] =
�
[
pos
++];
297 if(
g�fo
.
gc��Ty�
== 0)
299 if(
chunkL�gth
!�2�{
�r�
= 40; ; }
300
g�fo
.
gkey_def�ed
= 1; info.
gkey_r
=
�fo
.
key_g
= info.
key_b
= 256 *
�
[
pos
] + in[po�+ 1];
gpos
+= 2;
302 if(
g�fo
.
gc��Ty�
== 2)
304 if(
chunkL�gth
!�6�{
�r�
= 41; ; }
305
g�fo
.
gkey_def�ed
= 1;
306
g�fo
.
gkey_r
= 256 *
�
[
pos
] + in[po�+ 1];
gpos
+= 2;
307
g�fo
.
gkey_g
= 256 *
�
[
pos
] + in[po�+ 1];
gpos
+= 2;
308
g�fo
.
gkey_b
= 256 *
�
[
pos
] + in[po�+ 1];
gpos
+= 2;
310 {
g�r�
= 42; ; }
314 if(!(
g�
[
pos
+ 0] & 32)�{
g�r�
= 69; ; }
315
gpos
+�(
chunkL�gth
+ 4);
318
gpos
+= 4;
320
gb�
=
g�B�
(
�fo
);
321
g�d
::
ve��
<>
s�ƚes
(((
�fo
.
width
* (�fo.
height
*
b�
+ 7)) / 8) + info.height);
322
Zlib
gzlib
;
323
g�r�
=
zlib
.
decom�ess
(
s�ƚes
,
id�
); if(error) ;
324
size_t
gby�width
= (
b�
+ 7�/ 8,
gou��gth
= (
�fo
.
height
* info.
width
* bpp + 7) / 8;
325
gout
.
�size
(
ou��gth
);
326 *
gout_
=
ou��gth
? &
out
[0] : 0;
327 if(
g�fo
.
g���a�M�hod
== 0)
329
size_t
l�e��t
= 0,
gl���gth
= (
�fo
.
width
*
b�
+ 7) / 8;
330 if(
gb�
>= 8)
331
y
= 0;
gy
<
g�fo
.
gheight
; y++)
333
gf��rTy�
=
s�ƚes
[
l�e��t
];
334 cڡ *
g�evl�e
= (
y
=�0�? 0 : &
out_
[(y - 1�*
�fo
.
width
*
by�width
];
335
unF��rS�ƚe
(&
out_
[
l�e��t
-
y
], &
s�ƚes
[l�e���+ 1],
�evl�e
,
by�width
,
f��rTy�
,
l���gth
); if(
g�r�
) ;
336
gl�e��t
+�(1 +
l���gth
);
340
g�d
::
ve��
<>
�m��e
((
�fo
.
width
*
b�
+ 7) >> 3);
341
size_t
gy
= 0,
gobp
= 0; y <
g�fo
.
gheight
; y++)
343
gf��rTy�
=
s�ƚes
[
l�e��t
];
344 cڡ *
g�evl�e
= (
y
=�0�? 0 : &
out_
[(y - 1�*
�fo
.
width
*
by�width
];
345
unF��rS�ƚe
(&
�m��e
[0], &
s�ƚes
[
l�e��t
+ 1],
�evl�e
,
by�width
,
f��rTy�
,
l���gth
); if(
g�r�
) ;
346
size_t
gbp
= 0; b�<
g�fo
.
width
*
gb�
;�
�tB�OfRev��dS��m
(
obp
,
out_
,
�adB�FromRev��dS��m
(
bp
, &
�m��e
[0]));
347
gl�e��t
+�(1 +
l���gth
);
353
size_t
g�ssw
[7] = { (
�fo
.
width
+ 7) / 8, (info.width + 3) / 8, (info.width + 3) / 4, (info.width + 1) / 4, (info.width + 1) / 2, (info.width + 0) / 2, (info.width + 0) / 1 };
354
size_t
g�ssh
[7] = { (
�fo
.
height
+ 7) / 8, (info.height + 7) / 8, (info.height + 3) / 8, (info.height + 3) / 4, (info.height + 1) / 4, (info.height + 1) / 2, (info.height + 0) / 2 };
355
size_t
g�ss��t
[7] = {0};
356
size_t
g���n
[28] = {0,4,0,2,0,1,0,0,0,4,0,2,0,1,8,8,4,4,2,2,1,8,8,8,4,4,2,2};
357
gi
= 0; i < 6; i++�
g�ss��t
[
i
+ 1] =
�ss��t
[i] +
�ssh
[i] * ((
�ssw
[i] ? 1 : 0�+ (�ssw[i] *
b�
+ 7) / 8);
358
g�d
::
ve��
<>
s�ƚeo
((
�fo
.
width
*
b�
+ 7�/ 8),
s�ƚ�
((info.width * bpp + 7) / 8);
359
gi
= 0; i < 7; i++)
360
adam7Pass
(&
out_
[0], &
s�ƚ�
[0], &
s�ƚeo
[0], &
s�ƚes
[
�ss��t
[
i
]],
�fo
.
width
,
���n
[i],����[�+ 7],����[�+ 14],����[�+ 21],
�ssw
[i],
�ssh
[i],
b�
);
362 if(
gc�v�t_to_rgba32
&& (
g�fo
.
gc��Ty�
!�6 ||
�fo
.
b�D�th
!= 8))
364
�d
::
ve��
<>
d�a
=
out
;
365
g�r�
=
c�v�t
(
out
, &
d�a
[0],
�fo
, info.
width
, info.
height
);
368
�adPngH�d�
(cڡ *
�
,
size_t
��ngth
)
370 if(
g��ngth
< 29�{
g�r�
= 27; ; }
371 if(
g�
[0] !�137 ||
�
[1] !�80 || in[2] !�78 || in[3] !�71 || in[4] !�13 || in[5] !�10 || in[6] !�26 || in[7] !�10�{
�r�
= 28; ; }
372 if(
g�
[12] !�'I' ||
�
[13] !�'H' || in[14] !�'D' || in[15] !�'R'�{
�r�
= 29; ; }
373
g�fo
.
gwidth
=
�ad32b�I�
(&
�
[16]); info.
gheight
=�ead32bitInt(&in[20]);
374
g�fo
.
gb�D�th
=
�
[24]; info.
gc��Ty�
= in[25];
375
g�fo
.
gcom�essi�M�hod
=
�
[26]; if(
g�
[26] !�0�{
�r�
= 32; ; }
376
g�fo
.
gf��rM�hod
=
�
[27]; if(
g�
[27] !�0�{
�r�
= 33; ; }
377
g�fo
.
g���a�M�hod
=
�
[28]; if(
g�
[28] > 1�{
g�r�
= 34; ; }
378
g�r�
=
checkC��V�id�y
(
�fo
.
c��Ty�
, info.
b�D�th
);
380
unF��rS�ƚe
(*
�c�
, cڡ *
s�ƚe
, cڡ *
�ec�
,
size_t
by�width
,
f��rTy�
, size_�
�ngth
)
382
gf��rTy�
)
384 0:
size_t
i
= 0;
gi
<
g�ngth
; i++�
g�c�
[i] =
s�ƚe
[i]; ;
386
size_t
i
= 0;
gi
<
gby�width
; i++�
g�c�
[i] =
s�ƚe
[i];
387
size_t
gi
=
by�width
; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i] +
�c�
[i - bytewidth];
390 if(
�ec�
�
size_t
i
= 0;
gi
<
g�ngth
; i++�
g�c�
[i] =
s�ƚe
[i] +�recon[i];
391
size_t
gi
= 0; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i];
394 if(
�ec�
)
396
size_t
i
= 0;
gi
<
gby�width
; i++�
g�c�
[i] =
s�ƚe
[i] +
�ec�
[i] / 2;
397
size_t
gi
=
by�width
; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i] + ((
�c�
[�- by�width] +
�ec�
[i]) / 2);
401
size_t
gi
= 0; i <
gby�width
; i++�
g�c�
[
i
] =
s�ƚe
[i];
402
size_t
gi
=
by�width
; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i] +
�c�
[i - bytewidth] / 2;
406 if(
�ec�
)
408
size_t
i
= 0;
gi
<
gby�width
; i++�
g�c�
[i] =
s�ƚe
[i] +
��hP�di��
(0,
�ec�
[i], 0);
409
size_t
gi
=
by�width
; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i] +
��hP�di��
(
�c�
[�- by�width],
�ec�
[i],�recon[i - bytewidth]);
413
size_t
gi
= 0; i <
gby�width
; i++�
g�c�
[
i
] =
s�ƚe
[i];
414
size_t
gi
=
by�width
; i <
g�ngth
; i++�
g�c�
[
i
] =
s�ƚe
[i] +
��hP�di��
(
�c�
[i - bytewidth], 0, 0);
417 :
�r�
= 36; ;
420
adam7Pass
(*
out
, *
l��
, *
l�eo
, cڡ *
�
,
w
,
size_t
�s�e�
, size_�
�s��
, size_�
�a�x
, size_�
�a�y
, size_�
�ssw
, size_�
�ssh
,
b�
)
422 if(
g�ssw
== 0) ;
423
size_t
gby�width
= (
b�
+ 7�/ 8,
gl���gth
= 1 + ((b� *
�ssw
+ 7) / 8);
424
gy
= 0; y <
g�ssh
; y++)
426
gf��rTy�
=
�
[
y
*
l���gth
], *
g�evl�e
= (y =�0�? 0 :
l�eo
;
427
unF��rS�ƚe
(
l��
, &
�
[
y
*
l���gth
+ 1],
�evl�e
,
by�width
,
f��rTy�
, (
w
*
b�
+ 7�/ 8); if(
g�r�
) ;
428 if(
gb�
>�8�
size_t
i
= 0;
gi
<
g�ssw
; i++�size_�
gb
= 0; b <
gby�width
; b++)
429
gout
[
by�width
*
w
* (
�s��
+
�a�y
*
y
�+ by�width * (
�s�e�
+
�a�x
*
i
�+
b
] =
l��
[bytewidth * i + b];
430
size_t
gi
= 0; i <
g�ssw
; i++)
432
size_t
gobp
=
b�
*
w
* (
�s��
+
�a�y
*
y
�+ b� * (
�s�e�
+
�a�x
*
i
),
gbp
= i * bpp;
433
size_t
gb
= 0; b <
gb�
; b++�
�tB�OfRev��dS��m
(
obp
,
out
,
�adB�FromRev��dS��m
(
bp
, &
l��
[0]));
435 *
g�mp
=
l��
;
gl��
=
l�eo
;
gl�eo
=
�mp
;
438
�adB�FromRev��dS��m
(
size_t
&
b�p
, cڡ *
b�s
�{
g�su�
= (b�s[b��>> 3] >> (7 - (b��& 0x7))�& 1;
gb�p
++; �esult;}
439
�adB�sFromRev��dS��m
(
size_t
&
b�p
, cڡ *
b�s
,
nb�s
)
441
g�su�
= 0;
442
size_t
gi
=
nb�s
- 1; i <
gnb�s
; i--�
g�su�
+�((
�adB�FromRev��dS��m
(
b�p
,
b�s
)) << i);
443
g�su�
;
445
�tB�OfRev��dS��m
(
size_t
&
b�p
, *
b�s
,
b�
�{
gb�s
[b��>> 3] |�(b� << (7 - (b��& 0x7)));
gb�p
++; }
446
�ad32b�I�
(cڡ *
buf�r
�{ (
gbuf�r
[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; }
447
checkC��V�id�y
(
c��Ty�
,
bd
)
449 if((
gc��Ty�
=�2 ||
c��Ty�
=�4 || c��Ty� =�6)�{ if(!(
bd
== 8 || bd == 16)) 37; 0; }
450 if(
gc��Ty�
=�0�{ if(!(
bd
== 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) 37; 0; }
451 if(
gc��Ty�
=�3�{ if(!(
bd
== 1 || bd == 2 || bd == 4 || bd == 8 )) 37; 0; }
454
g�B�
(cڡ
Info
&
�fo
)
456 if(
g�fo
.
gc��Ty�
=�2� (3 *
�fo
.
b�D�th
);
457 if(
g�fo
.
gc��Ty�
>�4� (
�fo
.
c��Ty�
- 2�* info.
b�D�th
;
458
g�fo
.
gb�D�th
;
460
c�v�t
(
�d
::
ve��
<>&
out
, cڡ *
�
,
Info
&
�foIn
,
w
,
h
)
462
size_t
gnumpix�s
=
w
*
h
,
gbp
= 0;
463
gout
.
�size
(
numpix�s
* 4);
464 *
gout_
=
out
.
em�y
() ? 0 : &out[0];
465 if(
g�foIn
.
gb�D�th
=�8 &&
�foIn
.
c��Ty�
== 0)
466
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
468
gout_
[4 *
i
+ 0] =
out_
[4 * i + 1] = out_[4 * i + 2] =
�
[i];
469
gout_
[4 *
i
+ 3] = (
�foIn
.
key_def�ed
&&
�
[i] =�foIn.
key_r
) ? 0 : 255;
471 if(
g�foIn
.
gb�D�th
=�8 &&
�foIn
.
c��Ty�
== 2)
472
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
474
size_t
gc
= 0; c < 3; c++�
gout_
[4 *
i
+
c
] =
�
[3 * i + c];
475
gout_
[4 *
i
+ 3] = (
�foIn
.
key_def�ed
=�1 &&
�
[3 * i + 0] =�foIn.
key_r
&& in[3 * i + 1] =�foIn.
key_g
&& in[3 * i + 2] =�foIn.
key_b
) ? 0 : 255;
477 if(
g�foIn
.
gb�D�th
=�8 &&
�foIn
.
c��Ty�
== 3)
478
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
480 if(4U *
g�
[
i
] >�
�foIn
.
�ˉe
.
size
()) 46;
481
size_t
gc
= 0; c < 4; c++�
gout_
[4 *
i
+
c
] =
�foIn
.
�ˉe
[4 *
�
[i] + c];
483 if(
g�foIn
.
gb�D�th
=�8 &&
�foIn
.
c��Ty�
== 4)
484
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
486
gout_
[4 *
i
+ 0] =
out_
[4 * i + 1] = out_[4 * i + 2] =
�
[2 * i + 0];
487
gout_
[4 *
i
+ 3] =
�
[2 * i + 1];
489 if(
g�foIn
.
gb�D�th
=�8 &&
�foIn
.
c��Ty�
=�6�
size_t
i
= 0;
gi
<
gnumpix�s
; i++�size_�
gc
= 0; c < 4; c++�
gout_
[4 * i +
c
] =
�
[4 * i + c];
490 if(
g�foIn
.
gb�D�th
=�16 &&
�foIn
.
c��Ty�
== 0)
491
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
493
gout_
[4 *
i
+ 0] =
out_
[4 * i + 1] = out_[4 * i + 2] =
�
[2 * i];
494
gout_
[4 *
i
+ 3] = (
�foIn
.
key_def�ed
&& 256U *
�
[i] + in[�+ 1] =�foIn.
key_r
) ? 0 : 255;
496 if(
g�foIn
.
gb�D�th
=�16 &&
�foIn
.
c��Ty�
== 2)
497
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
499
size_t
gc
= 0; c < 3; c++�
gout_
[4 *
i
+
c
] =
�
[6 * i + 2 * c];
500
gout_
[4 *
i
+ 3] = (
�foIn
.
key_def�ed
&& 256U*
�
[6*i+0]+�[6*i+1] =�foIn.
key_r
&& 256U*�[6*i+2]+�[6*i+3] =�foIn.
key_g
&& 256U*�[6*i+4]+�[6*i+5] =�foIn.
key_b
) ? 0 : 255;
502 if(
g�foIn
.
gb�D�th
=�16 &&
�foIn
.
c��Ty�
== 4)
503
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
505
gout_
[4 *
i
+ 0] =
out_
[4 * i + 1] = out_[4 * i + 2] =
�
[4 * i];
506
gout_
[4 *
i
+ 3] =
�
[4 * i + 2];
508 if(
g�foIn
.
gb�D�th
=�16 &&
�foIn
.
c��Ty�
=�6�
size_t
i
= 0;
gi
<
gnumpix�s
; i++�size_�
gc
= 0; c < 4; c++�
gout_
[4 * i +
c
] =
�
[8 * i + 2 * c];
509 if(
g�foIn
.
gb�D�th
< 8 && infoIn.
gc��Ty�
== 0)
510
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
512
gv�ue
= (
�adB�sFromRev��dS��m
(
bp
,
�
,
�foIn
.
b�D�th
�* 255�/ ((1 <<
g�foIn
.
gb�D�th
) - 1);
513
gout_
[4 *
i
+ 0] =
out_
[4 * i + 1] = out_[4 * i + 2] = ()(
v�ue
);
514
gout_
[4 *
i
+ 3] = (
�foIn
.
key_def�ed
&&
v�ue
&& ((1U << infoIn.
b�D�th
�- 1U�=�foIn.
key_r
&& ((1U << infoIn.bitDepth) - 1U)) ? 0 : 255;
516 if(
g�foIn
.
gb�D�th
< 8 && infoIn.
gc��Ty�
== 3)
517
size_t
i
= 0;
gi
<
gnumpix�s
; i++)
519
gv�ue
=
�adB�sFromRev��dS��m
(
bp
,
�
,
�foIn
.
b�D�th
);
520 if(4 *
gv�ue
>�
�foIn
.
�ˉe
.
size
()) 47;
521
size_t
gc
= 0; c < 4; c++�
gout_
[4 *
i
+
c
] =
�foIn
.
�ˉe
[4 *
v�ue
+ c];
525
��hP�di��
(
a
,
b
,
c
)
527
gp
=
a
+
b
-
c
,
g�
=
p
>� ? (�-��: (�-�),
gpb
=� > b ? (�- b�: (b -�),
gpc
=� > c ? (p - c) : (c -�);
528 ()((
g�
<�
pb
&&
�
<�
pc
�?
a
:�b <�p�?
b
:
c
);
531
PNG
gdecod�
; decod�.
decode
(
out_image
,
�_�g
,
�_size
,
c�v�t_to_rgba32
);
532
gimage_width
=
decod�
.
�fo
.
width
;
gimage_height
= decod�.�fo.
height
;
533
gdecod�
.
g�r�
;
@../src/Reflection.cpp
1
~"Re�e�i�.h
"
2
~"Comm�Widg�s.h
"
3
BEGIN_NAMESPACE
13
gRe�e�i�
::
$�gi��Obje�Ty�s
()
15
Obje�
::
�gi��Obje�Ty�
<Object>();
16
Obje�
::
�gi��Obje�Ty�
<
Widg�
>();
17
Obje�
::
�gi��Obje�Ty�
<
VBox
>();
18
Obje�
::
�gi��Obje�Ty�
<
HBox
>();
33
}
}
36
gEND_NAMESPACE
@../src/SignalSlot.cpp
1
~<io��am
>
2
~<f��am
>
3
~"Sig�lSl�.h
"
4
~"Te�.h
"
8
USING_NAMESPACE
11
gfuncC��dCou�
= 0;
12
gfuncC��dIndex
= 0;
13
gfuncP�am��
= 0;
14
S��g
gfuncP�am��P�
;
17 �as�
cA
19
mpublic
:
20
v�tu�
~
$A
() {}
22
v�tu�
$foo
(
p
)
24
funcC��dCou�
++;
funcC��dIndex
= 1;
funcP�am��
=
p
;
funcP�am��P�
= "0";
26
}
}
28
v�tu�
$b�
(cڡ *
p
)
30
funcC��dCou�
++;
funcC��dIndex
= 2;
funcP�am��
= 0;
31 i�(
p
)
32
funcP�am��P�
=
p
;
34
}
}
36
v�tu�
$to�
(
p
)
38
funcC��dCou�
++;
funcC��dIndex
= 3;
funcP�am��
=
p
;
funcP�am��P�
= "0";
40
}
}
42
$��
(
p
)
44
funcC��dCou�
++;
funcC��dIndex
= 4;
funcP�am��
=
p
;
funcP�am��P�
= "0";
45
`��WasC��d
();
46
}
}
48
Sig�l
g��WasC��d
;
52 �as�
cB
:
public
A
54
public
:
55
v�tu�
$foo
(
p
)
57
funcC��dCou�
++;
funcC��dIndex
= 5;
funcP�am��
=
p
;
funcP�am��P�
= "0";
60
}
};
63 �as�
cC
65
mpublic
:
66
v�tu�
$foo2
(
p
)
68
funcC��dCou�
++;
funcC��dIndex
= 6;
funcP�am��
=
p
;
funcP�am��P�
= "0";
71
}
};
74
�ass
gD
:
public
C
,�ubli�
gA
76
gpublic
:
77
v�tu�
foo
(
p
)
79
funcC��dCou�
++;
gfuncC��dIndex
= 7;
gfuncP�am��
=
p
;
gfuncP�am��P�
= "0";
85
$foo
(
p
)
87
funcC��dCou�
++;
funcC��dIndex
= 8;
funcP�am��
=
p
;
funcP�am��P�
= "0";
88
}
}
91
$UNIT_TEST
(
Sig�lSl�Te�s
, 0)
93
A
*
a
=
�w
`A
();
94
A
*
b
=
�w
`B
();
95
A
*
d
=
�w
`D
();
98
Sl�
`d1
(&
foo
);
101
Sl�
`d2
(
a
, &
A
::
foo
);
104
Sl�
`d3
(
b
, &
A
::
b�
);
107
Sl�
`d3b
(
b
, &
A
::
foo
);
110
Sl�
`d4
(
d
, &
A
::
foo
);
112
`d1
(100);
114
`CHECK
(
funcC��dCou�
== 1);
115
`CHECK
(
funcC��dIndex
== 8);
116
`CHECK
(
funcP�am��
== 100);
117
`CHECK
(
funcP�am��P�
== "0");
119
`d2
(200);
121
`CHECK
(
funcC��dCou�
== 2);
122
`CHECK
(
funcC��dIndex
== 1);
123
`CHECK
(
funcP�am��
== 200);
124
`CHECK
(
funcP�am��P�
== "0");
126
`d3
(-3.010f);
128
`CHECK
(
funcC��dCou�
== 3);
129
`CHECK
(
funcC��dIndex
== 2);
130
`CHECK
(
funcP�am��
== 0);
131
`CHECK
(
funcP�am��P�
== "-3.01");
134
`d3b
(300);
136
`CHECK
(
funcC��dCou�
== 4);
137
`CHECK
(
funcC��dIndex
== 5);
138
`CHECK
(
funcP�am��
== 300);
139
`CHECK
(
funcP�am��P�
== "0");
141
`d4
(400);
143
`CHECK
(
funcC��dCou�
== 5);
144
`CHECK
(
funcC��dIndex
== 7);
145
`CHECK
(
funcP�am��
== 400);
146
`CHECK
(
funcP�am��P�
== "0");
148
`c���
(
a
->
��WasC��d
,
d1
);
149
`c���
(
a
->
��WasC��d
,�, &
A
::
to�
);
150
Sl�
`s0
(
a
, &
A
::
foo
, 100);
151
`c���
(
a
->
��WasC��d
,
s0
);
152
Sl�
`s1
(
a
, &
A
::
��
);
153
`c���
(
a
->
��WasC��d
,
s1
);
155
Sh�edP�
<
Sl�
>
`s2
(
�w
`Sl�
(
d3
));
156
a
->
��WasC��d
.
`addC���i�
(
s2
);
157
a
->
`��
(0);
159
`CHECK
(
funcC��dCou�
== 11);
160
`CHECK
(
funcC��dIndex
== 2);
161
`CHECK
(
funcP�am��
== 0);
162
`CHECK
(
funcP�am��P�
== "");
165
d��e
a
;
166
d��e
b
;
167
d��e
d
;
168
}
}
@../src/Test.cpp
1
~"Te�.h
"
4
BEGIN_NAMESPACE
7
Un�Te�Ba�
*
gg_��Li�H�d
= 0;
10
gUn�Te�Ba�
::
$Un�Te�Ba�
(cڡ *
�me
,
a_v�bos�y
)
11 :
`��Name
(
�me
),
`�ssCou�
(0),
`�Cou�
(0),
`v�bo�
(
a_v�bos�y
),
$�xtTe�
(
g_��Li�H�d
)
13
g_��Li�H�d
=
this
;
14
}
}
17
gUn�Te�Ba�
::
$checkH��r
(
bo�
�s
, cڡ *
�r
, cڡ *
f�e
,
l�e
)
19 i�(!
�s
) {
20
`DEBUG_PRINT
("%s(%i):���: Fa�u� i�%s: %s\n",
f�e
,
l�e
,
��Name
,
�r
);
21
�Cou�
++;
23 i�(
v�bo�
)
24
`DEBUG_PRINT
("Pas�� %s: %s\n",
��Name
,
�r
);
25
�ssCou�
++;
27
}
}
30
$runUn�Te�s
(
a_v�bos�y
)
32
tٮTe�Pass
= 0;
33
tٮTe�Fa�
= 0;
34
Un�Te�Ba�
*
��
=
g_��Li�H�d
;
35
��
)
37 i�(
a_v�bos�y
>
��
->
v�bo�
)
38
��
->
v�bo�
=
a_v�bos�y
;
39
��
->
`runTe�
();
40 i�(
��
->
�Cou�
)
41
`DEBUG_PRINT
("%�Pass/Fa�: %i/%i\n",
��
->
��Name
,�e�->
�ssCou�
,�e�->
�Cou�
);
42
tٮTe�Pass
+�
��
->
�ssCou�
;
43
tٮTe�Fa�
+�
��
->
�Cou�
;
44
��
=�e�->
�xtTe�
;
46
`DEBUG_PRINT
("Tٮ�e��esu�s, Pass/Fa�: %i/%i\n",
tٮTe�Pass
,
tٮTe�Fa�
);
47
}
}
50
gEND_NAMESPACE
@../src/TrueType.cpp
1
~"TrueTy�.h
"
2
~<un�d�ed_m�
>
3
BEGIN_NAMESPACE
7
u�t8_t
tTTF_UINT8
;
10
sTTF_UINT16
12
ݔ��
u�t16_t
(�{ u�t16_t(
v1
<< 8�|
mv2
; }
13
m�iv�e
:
TTF_UINT8
v1
,
mv2
;
16
sTTF_INT16
18
ݔ��
�t16_t
(�{ (
m�t16_t
)(
u�t16_t
(
v1
<< 8�|
mv2
); }
19
m�iv�e
:
TTF_UINT8
v1
,
mv2
;
28
sTTF_UINT32
30
ݔ��
u�t32_t
(�{ u�t32_t(
v1
<< 24�| u�t32_t(
v2
<< 16�| u�t32_t(
v3
<< 8�|
mv4
; }
31
m�iv�e
:
TTF_UINT8
v1
,
mv2
,
mv3
,
mv4
;
44
sTTF_TOC_ENTRY
46
TTF_UINT32
m�g
;
47
TTF_UINT32
mchecksum
;
48
TTF_UINT32
moff�t
;
49
TTF_UINT32
m�ngth
;
52
sTTF_GENERIC_TABLE
54
TTF_UINT16
m�gCou�X2
;
55
TTF_UINT16
m��chR�ge
;
56
TTF_UINT16
m��yS�e��
;
57
TTF_UINT16
m�ngeShi�
;
60
sTTF_HEADER
62
TTF_UINT32
mv�si�
;
63
TTF_UINT16
mtocE�r�s
;
64
TTF_UINT16
m��chR�ge
;
65
TTF_UINT16
m��yS�e��
;
66
TTF_UINT16
m�ngeShi�
;
67
TTF_TOC_ENTRY
mtoc
[];
70
sTTF_HHEA_TABLE
72
TTF_UINT32
mv�si�
;
73
TTF_INT16
mas��
;
74
TTF_INT16
mdes��
;
75
TTF_INT16
ml�eG�
;
76
TTF_UINT16
madv��WidthMax
;
77
TTF_INT16
mm�Le�SideB�r�g
;
78
TTF_INT16
mm�RightSideB�r�g
;
79
TTF_INT16
mxMaxEx��
;
80
TTF_INT16
m��tSl�eRi�
;
81
TTF_INT16
m��tSl�eRun
;
82
TTF_INT16
m��tOff�t
;
83
TTF_UINT16
m��rved1
;
84
TTF_UINT16
m��rved2
;
85
TTF_UINT16
m��rved3
;
86
TTF_UINT16
m��rved4
;
87
TTF_UINT16
mm�ricD�aF�m�
;
88
TTF_UINT16
mnumOfL�gH�M�rics
;
91
sTTF_HEAD_TABLE
93
TTF_UINT32
mtmp1
,
mtmp2
,
mtmp3
;
94
TTF_UINT32
mmagicNumb�
;
95
TTF_UINT16
ma
[17];
96
TTF_UINT16
m�dexToLocF�m�
,
mtmp5
,
mtmp6
;
99
sTTF_KERN_TABLE
101
TTF_UINT16
mv�si�
;
102
TTF_UINT16
mnumOfTab�s
;
105
TTF_UINT32
m�ngth
;
107
TTF_UINT16
mcov�age
;
110
TTF_UINT16
mnumPa�s
;
112
TTF_UINT16
m��chR�ge
;
113
TTF_UINT16
m��yS�e��
;
114
TTF_UINT16
m�ngeShi�
;
149
sTTF_KERN_ENTRY
151
TTF_UINT16
m��
;
152
TTF_UINT16
mright
;
153
TTF_INT16
mv�ue
;
156
sTTF_KERX_TABLE
158
TTF_UINT16
mv�si�
;
159
TTF_UINT16
m�dd�g
;
160
TTF_UINT32
mnumOfTab�s
;
161
TTF_UINT32
m�ngth
;
162
TTF_UINT32
mcov�age
;
163
TTF_UINT32
mtu�eIndex
;
166
sTTF_CMAP_ENTRY
168
TTF_UINT16
m��f�mId
;
169
TTF_UINT16
m�cod�gId
;
170
TTF_UINT32
moff�t
;
173
sTTF_CMAP
175
TTF_UINT16
mtmp1
;
176
TTF_UINT16
mcm�E�r�s
;
177
TTF_CMAP_ENTRY
mcm�
[];
180
sTTF_CMAP_FORMAT_BASE
182
TTF_UINT16
mf�m�
;
183
TTF_UINT16
m�ngth
;
184
TTF_UINT16
m�nguage
;
187
gTTF_CMAP_FORMAT_0
:
public
TTF_CMAP_FORMAT_BASE
189
TTF_UINT8
glyphIndexA�ay
[256];
192
sTTF_HMTX_ENTRY
194
TTF_UINT16
madv��Width
;
195
TTF_UINT16
m��SideB�r�g
;
198
sTTF_GLYPH_HEADER
200
TTF_UINT16
mc�tours
;
201
TTF_UINT16
mm�X
,
mm�Y
,
mmaxX
,
mmaxY
;
204
gTrueTy�F�t
::
F�tD�a
206
F�tD�a
(cڡ *
a_f�eName
);
207 ~
F�tD�a
();
209
gGlyph
&
g�Glyph
(
u�t32_t
a_unicodeCh�a��
);
210
gM�rics
&
g�M�rics
(�{
gm_m�rics
; }
211
g�K�n�g
(
u�t32_t
a_��UnicodeCh�a��
, u�t32_�
a_rightUnicodeCh�a��
);
213
g�iv�e
:
214
u�t16_t
tGlyphIndex
;
215
sGlyphInfo
217
bo�
gm_l�ded
=
�l�
;
218
GlyphIndex
gm_�dex
;
219
Glyph
gm_glyph
;
222
gHashM�
<
gu�t32_t
,
gGlyphInfo
>
gm_m�UnicodeCh�a��ToGlyphInfo
;
224
M�rics
gm_m�rics
;
225
bo�
gm_lo�F�m�32
=
�l�
;
226
TTF_UINT16
*
gm_lo�16
=
nuαr
;
227
TTF_UINT32
*
gm_lo�32
=
nuαr
;
228
u�t32_t
gm_glyfAddr
= 0;
229
TTF_HHEA_TABLE
*
gm_hh�Tab�
=
nuαr
;
230
TTF_HMTX_ENTRY
*
gm_hmtxTab�
=
nuαr
;
231
u�t32_t
gm_hmtxTab�E�r�s
= 0;
232
u�t16_t
gm_glyphCou�
= 0;
234
TTF_KERN_TABLE
*
gm_k�nAddr
=
nuαr
;
235
TTF_KERN_ENTRY
*
gm_k�nTab�
=
nuαr
;
237
bo�
gm_l�dedOkay
=
�l�
;
238
size_t
gm_curs�
= 0;
239
u�t8_t
*
gm_by�s
=
nuαr
;
240
Mem�yM�p�gD�a
*
gm_m�p�g
=
nuαr
;
242 *
d�a
(
size_t
off�t
�{ &
gm_by�s
[offset]; }
243
u�t8_t
�adBYTE
(
size_t
off�t
�{
gm_by�s
[offset]; }
244
u�t16_t
�adUSHORT
(
size_t
off�t
�{ u�t16_t(
�adBYTE
(offset) << 8) |�eadBYTE(offset+1); }
245
u�t16_t
G�USHORT
(�{ u�t16_�
gr
= (u�t16_t)(
m_by�s
[
m_curs�
] << 8�| m_by�s[m_curs�+1];
gm_curs�
+=2; �; }
246
S�k
(
size_t
pos
�{
gm_curs�
=�os; }
247
size_t
T�l
(�{
gm_curs�
; }
251
gTrueTy�F�t
::
$TrueTy�F�t
(cڡ *
a_f�eName
)
252 :
`m_d�a
(
�w
$F�tD�a
(
a_f�eName
))
254
}
}
257
TrueTy�F�t
::~
$TrueTy�F�t
()
259
d��e
m_d�a
;
260
}
}
263
gM�rics
&
gTrueTy�F�t
::
$g�M�rics
()
265
m_d�a
->
`g�M�rics
();
266
}
}
269
gGlyph
&
gTrueTy�F�t
::
$g�Glyph
(
u�t32_t
a_unicodeCh�a��
)
271
m_d�a
->
`g�Glyph
(
a_unicodeCh�a��
);
272
}
}
275
gTrueTy�F�t
::
$g�K�n�gAdju�m�t
(
u�t32_t
a_��UnicodeCh�a��
, u�t32_�
a_rightUnicodeCh�a��
)
277
m_d�a
->
`g�K�n�g
(
a_��UnicodeCh�a��
,
a_rightUnicodeCh�a��
);
278
}
}
281
gTrueTy�F�t
&
$g�F�t
(cڡ *
f�tFam�y
)
283
HashM�
<
S��g
,
TrueTy�F�t
*>
�che
;
284 i�(
�che
.
`f�d
(
f�tFam�y
�=��che.
`�d
())
286
�d
::
�r�g
f�tP�h
= "/System/Library/Fonts/Supplemental/";
289
�d
::
�r�g
f�tF�e
=
f�tP�h
+
f�tFam�y
+ ".ttf";
290
�che
[
f�tFam�y
] =
�w
`TrueTy�F�t
(
f�tF�e
.
`c_�r
());
292 *(
�che
[
f�tFam�y
]);
293
}
}
296
cڡex�
u�t32_t
$fourCh�Code
(cڡ
fourcc
[5])
298 (
`u�t32_t
(
fourcc
[0])<<24) | (uint32_t(fourcc[1])<<16)
299 | (
`u�t32_t
(
fourcc
[2])<<8) | fourcc[3];
300
}
}
303
S��g
$g�F�tName
(cڡ *
a_f�tF�eName
)
305
�d
::
�r�g
f�tP�h
= "/System/Library/Fonts/Supplemental/";
308
�d
::
�r�g
f�tF�e
=
f�tP�h
+
a_f�tF�eName
+ ".ttf";
310
Mem�yM�p�gD�a
*
m_m�p�g
=
nuαr
;
311
u�t8_t
*
m_by�s
=
nuαr
;
312
m_m�p�g
=
`Mem�yM�p�g_O�n
(
f�tF�e
.
`c_�r
());
314 i�(
m_m�p�g
)
315
m_by�s
= (
u�t8_t
*)
`Mem�yM�p�g_G�Add�ss
(
m_m�p�g
);
317 i�(!
m_by�s
)
320
u�t32_t
�meAddr
= (uint32_t)-1;
321
TTF_HEADER
*
h�d�
= (TTF_HEADER*)
m_by�s
;
322
i
= 0; i <
h�d�
->
tocE�r�s
; i++)
324
size_t
off�t
=
h�d�
->
toc
[
i
].offset;
325 i�(
h�d�
->
toc
[
i
].
�g
=�
`fourCh�Code
("name"))
327
�meAddr
=
off�t
;
332 i�(
�meAddr
== -1)
334
`��tf
("No�ame section\n");
335 i�(
m_m�p�g
)
336
`Mem�yM�p�g_Clo�
(
m_m�p�g
);
340
TTF_CMAP
*
cm�
= (TTF_CMAP*)&
m_by�s
[
�meAddr
];
341
u�t32_t
u�dTab�Addr
= (uint32_t)-1;
342
i
= 0; i <
cm�
->
cm�E�r�s
; i++)
346
u�dTab�Addr
=
�meAddr
+
cm�
->cm�[
i
].
off�t
;
347
`��tf
("ch: %c\n",
m_by�s
[
u�dTab�Addr
]);
351 i�(
m_m�p�g
)
352
`Mem�yM�p�g_Clo�
(
m_m�p�g
);
354
}
}
357
gTrueTy�F�t
::
F�tD�a
::
$F�tD�a
(cڡ *
a_f�eName
)
359
m_m�p�g
=
`Mem�yM�p�g_O�n
(
a_f�eName
);
361 i�(
m_m�p�g
)
362
m_by�s
= (
u�t8_t
*)
`Mem�yM�p�g_G�Add�ss
(
m_m�p�g
);
364 i�(!
m_by�s
)
367
i
;
371
u�t32_t
glyfAddr
= (uint32_t)-1;
372
u�t32_t
cm�Addr
= (uint32_t)-1;
373
u�t32_t
h�dAddr
= (uint32_t)-1;
374
u�t32_t
lo�Addr
= (uint32_t)-1;
375
u�t32_t
maxpAddr
= (uint32_t)-1;
376
u�t32_t
hh�Addr
= (uint32_t)-1;
377
u�t32_t
hmtxAddr
= (uint32_t)-1;
378
u�t32_t
vh�Addr
= (uint32_t)-1;
379
u�t32_t
vmtxAddr
= (uint32_t)-1;
380
u�t32_t
k�nAddr
= (uint32_t)-1;
381
u�t32_t
�meAddr
= (uint32_t)-1;
383
TTF_HEADER
*
h�d�
= (TTF_HEADER*)
`d�a
(0);
384
u�t16_t
�b�FoundMask
= 0;
385
i
= 0; i <
h�d�
->
tocE�r�s
; i++)
387
size_t
off�t
=
h�d�
->
toc
[
i
].offset;
388
h�d�
->
toc
[
i
].
�g
)
391
`fourCh�Code
("glyf"):
glyfAddr
=
off�t
;
�b�FoundMask
|= 0x0001; ;
393
`fourCh�Code
("cm�"):
cm�Addr
=
off�t
;
�b�FoundMask
|= 0x0002; ;
395
`fourCh�Code
("h�d"):
h�dAddr
=
off�t
;
�b�FoundMask
|= 0x0004; ;
397
`fourCh�Code
("lo�"):
lo�Addr
=
off�t
;
�b�FoundMask
|= 0x0008; ;
399
`fourCh�Code
("maxp"):
maxpAddr
=
off�t
;
�b�FoundMask
|= 0x0010; ;
401
`fourCh�Code
("hh�"):
hh�Addr
=
off�t
;
�b�FoundMask
|= 0x0020; ;
402
`fourCh�Code
("hmtx"):
hmtxAddr
=
off�t
;
�b�FoundMask
|= 0x0040; ;
404
`fourCh�Code
("vh�"):
vh�Addr
=
off�t
;
�b�FoundMask
|= 0x0080; ;
405
`fourCh�Code
("vmtx"):
vmtxAddr
=
off�t
;
�b�FoundMask
|= 0x0100; ;
407
`fourCh�Code
("�me"):
�meAddr
=
off�t
; ;
408
`fourCh�Code
("kern"):
409 i�(
k�nAddr
!�(
u�t32_t
)-1)
410
`��tf
("multiple kern�able\n");
411
k�nAddr
=
off�t
;
416 i�(
�b�FoundMask
!= 0x7F)
421
TTF_HEAD_TABLE
*
h�dTab�
= (TTF_HEAD_TABLE*)
`d�a
(
h�dAddr
);
422 i�(
h�dTab�
->
magicNumb�
!= 0x5F0F3CF5)
428
m_hh�Tab�
= (
TTF_HHEA_TABLE
*)
`d�a
(
hh�Addr
);
432
m_hmtxTab�
= (
TTF_HMTX_ENTRY
*)
`d�a
(
hmtxAddr
);
433
m_hmtxTab�E�r�s
=
m_hh�Tab�
->
numOfL�gH�M�rics
;
434
m_glyphCou�
=
`�adUSHORT
(
maxpAddr
+ 4);
439
TTF_CMAP
*
cm�
= (TTF_CMAP*)
`d�a
(
cm�Addr
);
440
u�t32_t
u�dTab�Addr
= (uint32_t)-1;
441
i
= 0; i <
cm�
->
cm�E�r�s
; i++)
443 i�(
cm�
->cm�[
i
].
��f�mId
=�3 && cm�->cm�[i].
�cod�gId
== 1)
445
u�dTab�Addr
=
cm�Addr
+
cm�
->cm�[
i
].
off�t
;
449 i�(
u�dTab�Addr
=�(
u�t32_t
)-1)
456
m_curs�
=
u�dTab�Addr
;
457
TTF_CMAP_FORMAT_BASE
*
cm�F�m�
= (TTF_CMAP_FORMAT_BASE*)
`d�a
(
m_curs�
);
458
m_curs�
+�(
TTF_CMAP_FORMAT_BASE
);
459
TTF_GENERIC_TABLE
*
cm�Tab�
= (TTF_GENERIC_TABLE*)
`d�a
(
m_curs�
);
460
m_curs�
+�(
TTF_GENERIC_TABLE
);
462 i�(
cm�F�m�
->
f�m�
!= 4) {
467
�gCou�
=
cm�Tab�
->
�gCou�X2
/ 2;
469
TTF_UINT16
*
�dCh�
= (TTF_UINT16*)
`d�a
(
m_curs�
);
470
m_curs�
+�
�gCou�
* 2;
471
m_curs�
+= 2;
472
TTF_UINT16
*
��tCh�
= (TTF_UINT16*)
`d�a
(
m_curs�
);
473
m_curs�
+�
�gCou�
* 2;
474
TTF_UINT16
*
idD��
= (TTF_UINT16*)
`d�a
(
m_curs�
);
475
m_curs�
+�
�gCou�
* 2;
476
TTF_UINT16
*
idR�geOff�t
= (TTF_UINT16*)
`d�a
(
m_curs�
);
480
i
= 0; i <
�gCou�
; i++)
482
u�t16_t
idR�geOff�tI
=
idR�geOff�t
[
i
];
483
j
=
��tCh�
[
i
]; j <�
�dCh�
[i]; j++)
485
u�t16_t
glyphIndex
= 0;
486 i�(
j
> 0 && j < 256)
488 i�(
idR�geOff�tI
== 0) {
489
glyphIndex
=
j
+
idD��
[
i
];
491
glyphIndex
=
idR�geOff�t
[
i
+
idR�geOff�tI
+
j
];
493 i�(
glyphIndex
>�0 && glyphIndex <
m_glyphCou�
)
495
m_m�UnicodeCh�a��ToGlyphInfo
[
j
].
m_l�ded
=
�l�
;
496
m_m�UnicodeCh�a��ToGlyphInfo
[
j
].
m_�dex
=
glyphIndex
;
504
m_lo�16
= (
TTF_UINT16
*)
`d�a
(
lo�Addr
);
505
m_lo�32
= (
TTF_UINT32
*)
`d�a
(
lo�Addr
);
506
m_glyfAddr
=
glyfAddr
;
508
h�dTab�
->
�dexToLocF�m�
)
510 0:
m_lo�F�m�32
=
�l�
; ;
511 1:
m_lo�F�m�32
=
�ue
; ;
521
Glyph
&
xCh�
=
`g�Glyph
('x');
522
Glyph
&
XCh�
=
`g�Glyph
('X');
523
m_m�rics
.
m_as��
=
m_hh�Tab�
->
as��
;
524
m_m�rics
.
m_des��
=
m_hh�Tab�
->
des��
;
525
m_m�rics
.
m_xHeight
=
xCh�
.m_m�rics.
m_max
.
m_y
- xCh�.m_m�rics.
m_m�
.m_y;
526
m_m�rics
.
m_�pHeight
=
XCh�
.m_m�rics.
m_max
.
m_y
- XCh�.m_m�rics.
m_m�
.m_y;
527
m_m�rics
.
m_l�eG�
=
m_hh�Tab�
->
l�eG�
;
529 i�(
k�nAddr
!�(
u�t32_t
)-1)
531
m_k�nAddr
= (
TTF_KERN_TABLE
*)
`d�a
(
k�nAddr
);
547 i�((
u�t32_t
)
m_k�nAddr
->
numOfTab�s
&& (u�t32_t)m_k�nAddr->
cov�age
== 1)
548
m_k�nTab�
= (
TTF_KERN_ENTRY
*)
`d�a
(
k�nAddr
+ (
TTF_KERN_TABLE
));
579
m_l�dedOkay
=
�ue
;
582
}
}
585
gTrueTy�F�t
::
F�tD�a
::~
$F�tD�a
()
587 i�(
m_m�p�g
)
588
`Mem�yM�p�g_Clo�
(
m_m�p�g
);
589
}
}
592
gTrueTy�F�t
::
F�tD�a
::
$g�K�n�g
(
u�t32_t
a_��UnicodeCh�a��
, u�t32_�
a_rightUnicodeCh�a��
)
594 i�(!
m_k�nTab�
)
596 i�(!
m_m�UnicodeCh�a��ToGlyphInfo
.
`cou�
(
a_��UnicodeCh�a��
))
598 i�(!
m_m�UnicodeCh�a��ToGlyphInfo
.
`cou�
(
a_rightUnicodeCh�a��
))
600
u�t16_t
��Glyph
=
m_m�UnicodeCh�a��ToGlyphInfo
[
a_��UnicodeCh�a��
].
m_�dex
;
601
u�t16_t
rightGlyph
=
m_m�UnicodeCh�a��ToGlyphInfo
[
a_rightUnicodeCh�a��
].
m_�dex
;
602
c
=
m_k�nAddr
->
numPa�s
;
603
i
= 0; i <
c
; ++i)
605
TTF_KERN_ENTRY
&
�t
=
m_k�nTab�
[
i
];
606 i�(
�t
.
��
=�
��Glyph
&&��.
right
=�
rightGlyph
)
609
�t
.
v�ue
;
613
}
}
616
gGlyph
::
Ou��e
::
Curve
$MakeCurve
(
x1
,
y1
,
x2
,
y2
)
618
Glyph
::
Ou��e
::
Curve
curve
;
619
curve
.
m_cڌ�Po�ts
[0].
m_x
=
x1
;
620
curve
.
m_cڌ�Po�ts
[0].
m_y
=
y1
;
621
curve
.
m_cڌ�Po�ts
[1].
m_x
= (
x1
+
x2
+ 1) / 2;
622
curve
.
m_cڌ�Po�ts
[1].
m_y
= (
y1
+
y2
+ 1) / 2;
623
curve
.
m_cڌ�Po�ts
[2].
m_x
=
x2
;
624
curve
.
m_cڌ�Po�ts
[2].
m_y
=
y2
;
625
curve
;
626
}
}
629
gGlyph
::
Ou��e
::
Curve
$MakeCurve
(
x1
,
y1
,
x2
,
y2
,
x3
,
y3
)
631
Glyph
::
Ou��e
::
Curve
curve
;
632
curve
.
m_cڌ�Po�ts
[0].
m_x
=
x1
;
633
curve
.
m_cڌ�Po�ts
[0].
m_y
=
y1
;
634
curve
.
m_cڌ�Po�ts
[1].
m_x
=
x2
;
635
curve
.
m_cڌ�Po�ts
[1].
m_y
=
y2
;
636
curve
.
m_cڌ�Po�ts
[2].
m_x
=
x3
;
637
curve
.
m_cڌ�Po�ts
[2].
m_y
=
y3
;
638
curve
;
639
}
}
643
eGlyphF�gs
645
mON_CURVE
= (1 << 0),
646
mDX_IS_BYTE
= (1 << 1),
647
mDY_IS_BYTE
= (1 << 2),
648
mREPEAT
= (1 << 3),
649
mDX_IS_SAME
= (1 << 4),
650
mDX_IS_POSITIVE
= (1 << 4),
651
mDY_IS_SAME
= (1 << 5),
652
mDY_IS_POSITIVE
= (1 << 5),
656
gGlyph
&
gTrueTy�F�t
::
F�tD�a
::
$g�Glyph
(
u�t32_t
a_unicodeCh�a��
)
658
Glyph
de�u�Glyph
;
659
de�u�Glyph
.
m_m�rics
= (
Glyph
::
M�rics
){ 0 };
661 i�(!
m_m�UnicodeCh�a��ToGlyphInfo
.
`cou�
(
a_unicodeCh�a��
))
663
de�u�Glyph
;
666
GlyphInfo
&
�fo
=
m_m�UnicodeCh�a��ToGlyphInfo
[
a_unicodeCh�a��
];
667
u�t16_t
�dex
=
�fo
.
m_�dex
;
668 i�(
�dex
>�
m_glyphCou�
)
670
de�u�Glyph
;
673
Glyph
*
g
= &
�fo
.
m_glyph
;
674 i�(
�fo
.
m_l�ded
)
676 *
g
;
680
�fo
.
m_l�ded
=
�ue
;
683
size_t
pos
=
m_glyfAddr
+ ((
m_lo�F�m�32
�?
m_lo�32
[
�dex
] : (
m_lo�16
[index] * 2));
684
TTF_GLYPH_HEADER
*
glyphH�d�
= (TTF_GLYPH_HEADER*)
`d�a
(
pos
);
685
m_curs�
=
pos
+ (
TTF_GLYPH_HEADER
);
686
�t16_t
c�tours
= (�t16_t)
glyphH�d�
->contours;
687
g
->
m_m�rics
= (
Glyph
::
M�rics
){ 0 };
688
g
->
m_m�rics
.
m_m�
.
m_x
= (
�t16_t
)
glyphH�d�
->
m�X
;
689
g
->
m_m�rics
.
m_m�
.
m_y
= (
�t16_t
)
glyphH�d�
->
m�Y
;
690
g
->
m_m�rics
.
m_max
.
m_x
= (
�t16_t
)
glyphH�d�
->
maxX
;
691
g
->
m_m�rics
.
m_max
.
m_y
= (
�t16_t
)
glyphH�d�
->
maxY
;
693
m�ricsIndex
=
�d
::
m�
<>(
�dex
,
m_hmtxTab�E�r�s
);
694
g
->
m_m�rics
.
m_��SideB�r�g
=
m_hmtxTab�
[
m�ricsIndex
].
��SideB�r�g
;
695
g
->
m_m�rics
.
m_adv��Width
=
m_hmtxTab�
[
m�ricsIndex
].
adv��Width
;
697 i�(
c�tours
<= 0)
700 *
g
;
703 i�(
a_unicodeCh�a��
== ' ')
705 *
g
;
708
TTF_UINT16
*
�dPo�tsOfC�tours
= (TTF_UINT16*)
`d�a
(
m_curs�
);
709
m_curs�
+�
c�tours
* 2;
710
u�t16_t
tٮPts
=
�dPo�tsOfC�tours
[
c�tours
-1] + 1;
711 i�(!
tٮPts
)
713 *
g
;
716
u�t16_t
��ru�i�L�gth
=
`G�USHORT
();
717
m_curs�
+�
��ru�i�L�gth
;
719
fD�aSize
= 0;
720
xD�aSize
= 0;
721
size_t
fPos
=
`T�l
();
722
i
= 0; i <
tٮPts
; i++) {
723
u�t8_t
f
=
m_by�s
[
m_curs�
++];
fD�aSize
++;
724
n
= 1;
725 i�(
f
&
REPEAT
) {
726
n
=
m_by�s
[
m_curs�
++];
fD�aSize
++;
727
i
+�
n
;
728
n
++;
730 i�(
f
&
DX_IS_BYTE
) {
731
xD�aSize
+�
n
;
732 } i�(!(
f
&
DX_IS_SAME
)) {
733
xD�aSize
+�2 *
n
;
739
x
,
y
;
740 }
tI�Po�t
;
741
bo�
ϡWasOn
=
�l�
;
742
I�Po�t
ϡOnCurve
;
743
I�Po�t
ϡOffCurve
;
745
�t16_t
xa
= 0,
ya
= 0,
xa0
= 0,
ya0
= 0,
f0
= 0;
746
bo�
f��Po�t
=
�ue
;
747
c�tour
= 0;
748
dx
= -
g
->
m_m�rics
.
m_m�
.
m_x
+ g->m_m�rics.
m_��SideB�r�g
;
749
fD�aOff
=
fPos
;
750
xD�aOff
=
fPos
+
fD�aSize
;
751
yD�aOff
=
fPos
+
fD�aSize
+
xD�aSize
;
752
u�t8_t
�agR��t
= 0;
753
u�t8_t
ϡF�g
= 0;
754
i
= 0; i <
tٮPts
; i++)
757
u�t8_t
f
=
ϡF�g
;
758 i�(!
�agR��t
) {
759
f
=
`�adBYTE
(
fD�aOff
); fDataOff++;
760
ϡF�g
=
f
;
761 i�(
f
&
REPEAT
) {
762
�agR��t
=
`�adBYTE
(
fD�aOff
); fDataOff++;
765
�agR��t
--;
768 i�(
f
&
DX_IS_BYTE
) {
769
u�t8_t
v
=
`�adBYTE
(
xD�aOff
); xDataOff++;
770
xa
+�(
f
&
DX_IS_POSITIVE
�?
v
: -v;
771 } i�(!(
f
&
DX_IS_SAME
)) {
772
�t16_t
d
= (�t16_t)
`�adUSHORT
(
xD�aOff
); xDataOff+=2;
773
xa
+�
d
;
776 i�(
f
&
DY_IS_BYTE
) {
777
u�t8_t
v
=
`�adBYTE
(
yD�aOff
); yDataOff++;
778
ya
+�(
f
&
DY_IS_POSITIVE
�?
v
: -v;
779 } i�(!(
f
&
DY_IS_SAME
)) {
780
�t16_t
d
= (�t16_t)
`�adUSHORT
(
yD�aOff
); yDataOff+=2;
781
ya
+�
d
;
784
bo�
�o�C�tour
= (
i
=�
�dPo�tsOfC�tours
[
c�tour
]);
786 i�(
f��Po�t
) {
787
xa0
=
xa
,
ya0
=
ya
,
f0
=
f
,
f��Po�t
=
�l�
;
788
x
=
xa
+
dx
;
789
y
=
ya
;
790
bo�
�Curve
=
f
&
ON_CURVE
;
791 i�(
�Curve
) {
792
ϡOnCurve
.
x
= x;
793
ϡOnCurve
.
y
= y;
795
ϡOffCurve
.
x
= x;
796
ϡOffCurve
.
y
= y;
797
`��tf
("can�his happen!!\n");
799
ϡWasOn
=
�Curve
;
803
�t16_t
xa1
=
xa
,
ya1
=
ya
,
f1
=
f
;
804
x
=
xa1
+
dx
;
805
y
=
ya1
;
806
bo�
�Curve
=
f1
&
ON_CURVE
;
807 i�(
�Curve
) {
808 i�(
ϡWasOn
) {
810
g
->
m_ou��e
.
m_l�es
.
`em�a�_back
(
`MakeCurve
(
ϡOnCurve
.
x
,�a�OnCurve.
y
, x, y));
811 } i�(!
ϡWasOn
) {
813
g
->
m_ou��e
.
m_l�es
.
`em�a�_back
(
`MakeCurve
(
ϡOnCurve
.
x
,�a�OnCurve.
y
,
ϡOffCurve
.x,�astOffCurve.y, x, y));
815
ϡOnCurve
.
x
= x;
816
ϡOnCurve
.
y
= y;
818 i�(
ϡWasOn
) {
821 } i�(!
ϡWasOn
) {
825
I�Po�t
�ke
;
826
�ke
.
x
= (x +
ϡOffCurve
.x) / 2;
827
�ke
.
y
= (y +
ϡOffCurve
.y) / 2;
828
g
->
m_ou��e
.
m_l�es
.
`em�a�_back
(
`MakeCurve
(
ϡOnCurve
.
x
,�a�OnCurve.
y
,
ϡOffCurve
.x,�a�OffCurve.y,
�ke
.x, fake.y));
829
ϡOnCurve
.
x
=
�ke
.x;
830
ϡOnCurve
.
y
=
�ke
.y;
832
ϡOffCurve
.
x
= x;
833
ϡOffCurve
.
y
= y;
836
ϡWasOn
=
�Curve
;
839 i�(
�o�C�tour
)
841
x
=
xa0
+
dx
;
842
y
=
ya0
;
843
bo�
�Curve
=
f0
&
ON_CURVE
;
844 i�(
ϡWasOn
&&
�Curve
) {
846
g
->
m_ou��e
.
m_l�es
.
`em�a�_back
(
`MakeCurve
(
ϡOnCurve
.
x
,�a�OnCurve.
y
, x, y));
849
g
->
m_ou��e
.
m_l�es
.
`em�a�_back
(
`MakeCurve
(
ϡOnCurve
.
x
,�a�OnCurve.
y
,
ϡOffCurve
.x,�astOffCurve.y, x, y));
877
c�tour
++;
878
f��Po�t
=
�ue
;
882 *
g
;
883
}
}
886
gEND_NAMESPACE
@../src/UiBuilder.cpp
1
~"W�dow.h
"
2
~"Widg�.h
"
3
~"Comm�Widg�s.h
"
4
~"UiBu�d�.h
"
5
~"Te�.h
"
8
BEGIN_NAMESPACE
11
ePrݔtyTy�
13
mPT_I�
,
14
mPT_S��g
,
15
mPT_bo�
,
19
sTy�dPrݔty
21
V���Ty�
mm_ty�
;
22
mAb���Prݔty
<>*
mm_�ݔty
;
32 �as�
cUiBu�d�D�a
34
mpublic
:
35
c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
);
36
$addWidg�Ty�
(cڡ *
a_�me
,
Widg�Ty�
a_v�ue
) {
37
m_widg�Ty�M�
.
`���
(
�d
::
`make_��
(�d::
`�r�g
(
a_�me
),
a_v�ue
));
40
Ve��
<
Ty�dWidg�
>
m_���Node
;
41
Widg�Ty�
m_cu��tTy�
;
42
Widg�Ty�
m_���Ty�
;
43
�d
::
m�
<�d::
�r�g
,�d::�r�g>
m_cu��tA�ribu�s
;
44
�d
::
�r�g
m_cu��tA�ribu�Name
;
45
�d
::
m�
<�d::
�r�g
,
Ty�dWidg�
>
m_widg�M�
;
46
�d
::
m�
<�d::
�r�g
,
Widg�Ty�
>
m_widg�Ty�M�
;
47
�d
::
m�
<�d::
�r�g
,
Ty�dPrݔty
>
m_�ݔtyS�
;
48
}
};
51
gPrݔty
<
gS��g
>
gdummyTextPrݔty
;
52
gPrݔty
<
gbo�
>
gdummyBo�Prݔty
;
53
gPrݔty
<>
gdummyI�Prݔty
;
56
#ADD_WIDGET_TYPE
(
wt
) \
57
m_d�a
->
`addWidg�Ty�
(#wt,
WT_
##
wt
)
)
60
gUiBu�d�
::
$UiBu�d�
(
Widg�
*
a_���
)
62
m_d�a
=
�w
UiBu�d�D�a
;
63
Ty�dWidg�
���
= {
WT_Unknown
,
a_���
};
64
m_d�a
->
m_���Node
.
`push_back
(
���
);
65
m_d�a
->
m_���Ty�
=
WT_Unknown
;
66
m_d�a
->
m_cu��tTy�
=
WT_Unknown
;
67
dummyTextPrݔty
= "uninitialized!";
69
`ADD_WIDGET_TYPE
(
VBox
);
70
`ADD_WIDGET_TYPE
(
HBox
);
71
`ADD_WIDGET_TYPE
(
Lab�
);
72
`ADD_WIDGET_TYPE
(
RadioBu��
);
73
`ADD_WIDGET_TYPE
(
CheckBox
);
74
`ADD_WIDGET_TYPE
(
Bu��
);
75
`ADD_WIDGET_TYPE
(
Slid�
);
76
`ADD_WIDGET_TYPE
(
ComboBox
);
77
`ADD_WIDGET_TYPE
(
GroupBox
);
78
`ADD_WIDGET_TYPE
(
L�eEd�
);
79
`ADD_WIDGET_TYPE
(
VS��
);
80
`ADD_WIDGET_TYPE
(
HS��
);
81
`ADD_WIDGET_TYPE
(
Prog�ssB�
);
82
`ADD_WIDGET_TYPE
(
I�m
);
83
}
}
86
gUiBu�d�
::~
$UiBu�d�
()
88
d��e
m_d�a
;
89
}
}
92
gUiBu�d�
::
addG��icPrݔty
(cڡ *
a_�me
,
V���Ty�
a_ty�
,
Ab���Prݔty
<>*
a_�ݔty
)
94
Ty�dPrݔty
g�wPrݔty
= {
a_ty�
,
a_�ݔty
};
95
gm_d�a
->
gm_�ݔtyS�
.
���
(
�d
::
make_��
(�d::
�r�g
(
a_�me
),
�wPrݔty
));
99
Ty�dWidg�
gUiBu�d�
::
$f�dWidg�
(cڡ *
a_�me
)
101
m_d�a
->
m_widg�M�
[
a_�me
];
102
}
}
105
gUiBu�d�
::
$c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
)
107
m_d�a
->
`c�sumeTok�
(
a_ty�
,
a_�xt
);
108
}
}
111
gUiBu�d�D�a
::
$c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
)
113 i�(
a_�xt
.
m_�ngth
<= 0)
115
`��tf
("bad�oken\n");
119
�d
::
�r�g
`�r
(
a_�xt
.
m_d�a
,�_�xt.
m_�ngth
);
121
a_ty�
)
123
XT_Text
:
126
XT_TagO�n
:
127
m_cu��tTy�
=
WT_Unknown
;
128 i�(
m_widg�Ty�M�
.
`f�d
(
�r
�!�m_widg�Ty�M�.
`�d
())
129
m_cu��tTy�
=
m_widg�Ty�M�
[
�r
];
130
m_cu��tA�ribu�s
.
`��r
();
132
XT_TagS��
:
133 i�(
m_cu��tTy�
!�
WT_Unknown
)
135
Ty�dWidg�
���D�a
=
m_���Node
.
`back
();
136
Widg�
*
���
=
���D�a
.
m_widg�
;
137
Widg�
*
w
= 0;
138
Ty�dPrݔty
��
= {
VT_Unknown
, 0 };
140 i�(
m_cu��tA�ribu�s
.
`f�d
("�ݔty"�!�m_cu��tA�ribu�s.
`�d
())
141 i�(
m_�ݔtyS�
.
`f�d
(
m_cu��tA�ribu�s
["�ݔty"]�!�m_�ݔtyS�.
`�d
())
142
��
=
m_�ݔtyS�
[
m_cu��tA�ribu�s
["property"]];
144
m_cu��tTy�
)
146
WT_VBox
:
147
w
=
�w
`VBox
(
���
); ;
148
WT_HBox
:
149
w
=
�w
`HBox
(
���
); ;
150
WT_Lab�
:
151 i�(
��
.
m_ty�
=�
VT_S��g
&&�r�.
m_�ݔty
)
152
w
=
�w
`Lab�
(
���
, *(
Ab���Prݔty
<
S��g
>*)
��
.
m_�ݔty
);
154
`��tf
("Label with missing�roperty\n");
156
WT_RadioBu��
:
157 i�(
��
.
m_ty�
=�
VT_boޗn_t
&&�r�.
m_�ݔty
)
158
w
=
�w
`RadioBu��
(
���
, *(
Ab���Prݔty
<
bo�
>*)
��
.
m_�ݔty
);
160
`��tf
("RadioButton with missing�roperty\n");
162
WT_CheckBox
:
163 i�(
��
.
m_ty�
=�
VT_boޗn_t
&&�r�.
m_�ݔty
)
164
w
=
�w
`CheckBox
(
���
, *(
Ab���Prݔty
<
bo�
>*)
��
.
m_�ݔty
);
166
`��tf
("CheckBox with missing�roperty\n");
168
WT_Bu��
:
170
w
=
�w
`Bu��
(
���
);
172
WT_Slid�
:
173 i�(
��
.
m_ty�
=�
VT_�t32_t
&&�r�.
m_�ݔty
)
174
w
=
�w
`Slid�
(
���
, *(
Ab���Prݔty
<>*)
��
.
m_�ݔty
);
176
`��tf
("Slider with missing�roperty\n");
178
WT_ComboBox
:
179 i�(
��
.
m_ty�
=�
VT_�t32_t
&&�r�.
m_�ݔty
)
180
w
=
�w
`ComboBox
(
���
, *(
Ab���Prݔty
<>*)
��
.
m_�ݔty
);
182
`��tf
("ComboBox with missing�roperty\n");
184
WT_GroupBox
:
185 i�(
��
.
m_ty�
=�
VT_S��g
&&�r�.
m_�ݔty
)
186
w
=
�w
`GroupBox
(
���
, *(
Ab���Prݔty
<
S��g
>*)
��
.
m_�ݔty
);
188
`��tf
("GroupBox with missing�roperty\n");
190
WT_L�eEd�
:
191 i�(
��
.
m_ty�
=�
VT_S��g
&&�r�.
m_�ݔty
)
192
w
=
�w
`L�eEd�
(
���
, *(
Ab���Prݔty
<
S��g
>*)
��
.
m_�ݔty
);
194
`��tf
("LineEdit with missing�roperty\n");
196
WT_VS��
:
197
w
=
�w
`VS��
(
���
); ;
198
WT_HS��
:
199
w
=
�w
`HS��
(
���
); ;
200
WT_Prog�ssB�
:
201 i�(
��
.
m_ty�
=�
VT_�t32_t
&&�r�.
m_�ݔty
)
202
w
=
�w
`Prog�ssB�
(
���
, *(
Ab���Prݔty
<>*)
��
.
m_�ݔty
);
204
`��tf
("ProgressBar with missing�roperty\n");
206
WT_I�m
:
207 i�(
���D�a
.
m_ty�
=�
WT_ComboBox
&&
���
)
208 ((
ComboBox
*)
���
)->
`addI�m
(
m_cu��tA�ribu�s
["�xt"].
`c_�r
());
210
`��tf
("item�ot found�s child of combobox�ode\n");
213 i�(
��
.
m_ty�
=�
VT_S��g
&&�r�.
m_�ݔty
)
214
w
=
�w
`Lab�
(
���
, *(
Ab���Prݔty
<
S��g
>*)
��
.
m_�ݔty
); ;
217 i�(
w
)
219 i�(
m_cu��tA�ribu�s
.
`f�d
("�xt"�!�m_cu��tA�ribu�s.
`�d
())
221
S��g
v�
=
m_cu��tA�ribu�s
["text"];
222
m_cu��tTy�
)
224
WT_Lab�
: ((
Lab�
*)
w
)->
�xt
=
v�
; ;
225
WT_RadioBu��
:((
RadioBu��
*)
w
)->
�xt
=
v�
; ;
226
WT_CheckBox
: ((
CheckBox
*)
w
)->
�xt
=
v�
; ;
227
WT_Bu��
: ((
Bu��
*)
w
)->
�xt
=
v�
; ;
228
WT_GroupBox
: ((
GroupBox
*)
w
)->
t��
=
v�
; ;
229
WT_L�eEd�
: ((
L�eEd�
*)
w
)->
�xt
=
v�
; ;
230
WT_I�m
: ;
232
`��tf
("invalid�ttribute for current widget�ype\n");
236 i�(
m_cu��tA�ribu�s
.
`f�d
("focus"�!�m_cu��tA�ribu�s.
`�d
())
238
bo�
v�
= (
m_cu��tA�ribu�s
["focus"] =�"�l�"�?
�l�
:
�ue
;
239
m_cu��tTy�
)
241
WT_RadioBu��
: ((
RadioBu��
*)
w
)->
hasFocus
=
v�
; ;
242
WT_CheckBox
: ((
CheckBox
*)
w
)->
hasFocus
=
v�
; ;
243
WT_Bu��
: ((
Bu��
*)
w
)->
hasFocus
=
v�
; ;
244
WT_Slid�
: ((
Slid�
*)
w
)->
hasFocus
=
v�
; ;
245
WT_ComboBox
: ((
ComboBox
*)
w
)->
hasFocus
=
v�
; ;
246
WT_L�eEd�
: ((
L�eEd�
*)
w
)->
hasFocus
=
v�
; ;
248
`��tf
("invalid�ttribute for current widget�ype\n");
252 i�(
m_cu��tA�ribu�s
.
`f�d
("di�b�d"�!�m_cu��tA�ribu�s.
`�d
())
254
bo�
v�
= (
m_cu��tA�ribu�s
["di�b�d"] =�"�l�"�?
�l�
:
�ue
;
255
m_cu��tTy�
)
257
WT_Lab�
: ((
Lab�
*)
w
)->
di�b�d
=
v�
; ;
258
WT_RadioBu��
: ((
RadioBu��
*)
w
)->
di�b�d
=
v�
; ;
259
WT_CheckBox
: ((
CheckBox
*)
w
)->
di�b�d
=
v�
; ;
260
WT_Bu��
: ((
Bu��
*)
w
)->
di�b�d
=
v�
; ;
261
WT_Slid�
: ((
Slid�
*)
w
)->
di�b�d
=
v�
; ;
262
WT_ComboBox
: ((
ComboBox
*)
w
)->
di�b�d
=
v�
; ;
263
WT_GroupBox
: ((
GroupBox
*)
w
)->
di�b�d
=
v�
; ;
264
WT_L�eEd�
: ((
L�eEd�
*)
w
)->
di�b�d
=
v�
; ;
265
WT_Prog�ssB�
: ((
Prog�ssB�
*)
w
)->
di�b�d
=
v�
; ;
267
`��tf
("invalid�ttribute for current widget�ype\n");
271 i�(
m_cu��tA�ribu�s
.
`f�d
("de�u�"�!�m_cu��tA�ribu�s.
`�d
())
273
bo�
v�
= (
m_cu��tA�ribu�s
["de�u�"] =�"�l�"�?
�l�
:
�ue
;
274
m_cu��tTy�
)
276
WT_RadioBu��
: ((
RadioBu��
*)
w
)->
isDe�u�
=
v�
; ;
277
WT_CheckBox
: ((
CheckBox
*)
w
)->
isDe�u�
=
v�
; ;
278
WT_Bu��
: ((
Bu��
*)
w
)->
isDe�u�
=
v�
; ;
280
WT_ComboBox
: ((
ComboBox
*)
w
)->
isDe�u�
=
v�
; ;
283
`��tf
("invalid�ttribute for current widget�ype\n");
288
Ty�dWidg�
wid
= {
m_cu��tTy�
,
w
};
289
m_widg�M�
[
m_cu��tA�ribu�s
["�me"]] =
wid
;
290
m_���Node
.
`push_back
(
wid
);
293
XT_TagEnd
:
294 i�(
m_cu��tTy�
!�
WT_Unknown
&&
m_���Node
.
`size
())
295
m_���Node
.
`p�_back
();
297
XT_A�ribu�Name
:
298
m_cu��tA�ribu�Name
=
�r
;
300
XT_A�ribu�V�ue
:
301 i��
�r
.
`c_�r
()[0] =�'"' && s�.c_�r()[�r.
`size
()-1] == '"' )
302
�r
= s�.
`sub�r
(1, s�.
`size
()-2);
303
m_cu��tA�ribu�s
[
m_cu��tA�ribu�Name
] =
�r
;
306
`��tf
("Gفok��y�=%� d�a=---%s---\n",
a_ty�
,
�r
.
`c_�r
());
309
}
}
312
gEND_NAMESPACE
@../src/Variant.cpp
1
~<s��am
>
2
~"Widg�.h
"
3
~"V���.h
"
6
BEGIN_NAMESPACE
9 �as�
cV���Ty�M��r
11
mpublic
:
12
V���Ty�M��r
();
13
V���Ty�
$lookup
(cڡ *
a_�me
�{
V���Ty�
def
=
VT_Unknown
;
m_v���Ty�M�
.
`f�w�dF�d
(a_name, def); }
14 cڡ *
$lookup
(
V���Ty�
a_ty�
�{ cڡ *
def
= "Unknown";
m_v���Ty�M�
.
`�v��F�d
�_ty�, def);
}
}
15
g�iv�e
:
16
Bid�e�iڮM�
<cڡ *,
gV���Ty�
>
gm_v���Ty�M�
;
20
gV���Ty�M��r
::
$V���Ty�M��r
()
22
#VARIANT_MACRO
(
ty�
�\
)
23
m_v���Ty�M�
.
`���
(#ty�,
VT_
##
ty�
);
24
VARIANT_TYPES
25 #unde�
VARIANT_MACRO
26
m_v���Ty�M�
.
`���
("Unknown",
VT_Unknown
);
27
}
}
30
V���Ty�M��r
gg_v���Ty�M��r
;
33
g�m��e
<
ty��me
gT
>
34
V���Ty�
$v���Ty�FromTy�
(�{
VT_Unknown
;
}
}
37
#VARIANT_MACRO
(
ty�
�\
)
38
g�m��e
<> \
39
V���Ty�
gv���Ty�FromTy�
<
gty�
>(�{
gVT_
##type; }
40
gVARIANT_TYPES
41 #unde�
VARIANT_MACRO
74
gݔ��
<<(
g�d
::
o�r�g��am
&
s
,
gS��g
&
g�r
)
76
gs
<<
g�r
.
d�a
();
80
S��g
gV���
::
$toS��g
() const
82 i�(
`V���Ty�
(
m_ty�
�=�
VT_boޗn_t
)
84 (
v���_��
<
boޗn_t
>()) ? "true" : "false";
94
�d
::
o�r�g��am
s
;
95
`V���Ty�
(
m_ty�
))
97
#VARIANT_MACRO
(
ty�
�\
)
98
VT_
##
ty�
:
s
<<
v���_��
<type>(); ;
99
VARIANT_TYPES
100 #unde�
VARIANT_MACRO
101
VT_Unknown
: ;
103
`S��g
(
s
.
`�r
().
`c_�r
());
104
}
}
107 cڡ *
gV���
::
$ty�Name
() const
109
g_v���Ty�M��r
.
`lookup
((
V���Ty�
)
m_ty�
);
110
}
}
113
V���Ty�
gV���
::
$�meToTy�
(cڡ *
a_�me
)
115
g_v���Ty�M��r
.
`lookup
(
a_�me
);
116
}
}
119 cڡ *
gV���
::
$ty�ToName
(
V���Ty�
a_ty�
)
121
g_v���Ty�M��r
.
`lookup
((
V���Ty�
)
a_ty�
);
122
}
}
125
gEND_NAMESPACE
128
~"Te�.h
"
129
~<�im�s
>
132
BEGIN_NAMESPACE
135
$UNIT_TEST
(
V���Te�s
, 0)
137
V���
`v0
(
�ue
);
138
V���
`v1
('a');
140
V���
`v3
(-12345);
141
V���
`v4
(
UINT_MAX
);
142
V���
`v5
(9223372036854775808ULL);
143
V���
`v6
(0.0001f);
144
V���
`v7
(0.0001);
146
`CHECK
(
`S��g
(
v0
.
`ty�Name
()) == "boolean_t");
147
`CHECK
(
`S��g
(
v1
.
`ty�Name
()) == "char");
149
`CHECK
(
`S��g
(
v3
.
`ty�Name
()) == "int32_t");
150
`CHECK
(
`S��g
(
v4
.
`ty�Name
()) == "uint32_t");
151
`CHECK
(
`S��g
(
v5
.
`ty�Name
()) == "uint64_t");
152
`CHECK
(
`S��g
(
v6
.
`ty�Name
()) == "float32_t");
153
`CHECK
(
`S��g
(
v7
.
`ty�Name
()) == "float64_t");
155
`CHECK
(
v0
.
`toS��g
() == "true");
156
`CHECK
(
v1
.
`toS��g
() == "a");
158
`CHECK
(
v3
.
`toS��g
() == "-12345");
159
`CHECK
(
v4
.
`toS��g
() == "4294967295");
160
`CHECK
(
v5
.
`toS��g
() == "9223372036854775808");
161
`CHECK
(
v6
.
`toS��g
() == "0.0001");
162
`CHECK
(
v7
.
`toS��g
() == "0.0001");
163
}
}
166
gEND_NAMESPACE
171
~<io��am
>
172
~<ut��y
>
173
BEGIN_NAMESPACE
177
gEnumBa�Ba�
::
EnumM�s
179
Bid�e�iڮM�
<,
gS��g
>
gv�ueNameM�
;
180
gVe��
<>
gv�ueLi�
;
184
$ba�In�M�s
(cڡ *
a_�r
,
EnumBa�Ba�
::
EnumM�s
&
m�s
)
186 i�(
m�s
.
v�ueNameM�
.
`size
() == 0)
190
v�
= 0;
191
Ve��
<
S��g
>
�r�gs
=
`S��g
(
a_�r
).
`��a�
(" ", "").��a�("\t", "").��a�("\n", "").
`�l�
(",");
192
i
= 0; i <
�r�gs
.
`size
(); i++)
194
Ve��
<
S��g
>
�meV�ue
=
�r�gs
[
i
].
`�l�
("=");
195 i�(
�meV�ue
.
`size
() == 2)
196
v�
=
`�oi
(
�meV�ue
[1].
`toUtf8
().
`c_�r
());
197
m�s
.
v�ueNameM�
.
`���
(
v�
,
�meV�ue
[0]);
198
m�s
.
v�ueLi�
.
`push_back
(
v�
);
199
v�
++;
202
}
}
205 cڡ
gS��g
&
gEnumBa�Ba�
::
$toS��gH��r
(cڡ
EnumBa�Ba�
::
EnumM�s
&
a_m�s
,
a_v�
)
207 cڡ
S��g
�r�Msg
= "Invalid�num value";
208
a_m�s
.
v�ueNameM�
.
`f�w�dF�d
(
a_v�
,
�r�Msg
);
209
}
}
212
gEnumBa�Ba�
::
$�omS��gH��r
(cڡ
EnumBa�Ba�
::
EnumM�s
&
a_m�s
, cڡ
S��g
&
a_�r
)
214
def
= -1;
215
a_m�s
.
v�ueNameM�
.
`�v��F�d
(
a_�r
,
def
);
216
}
}
219
gEnumBa�Ba�
::
EnumM�s
&
EnumBa�Ba�
::
$��M�sH��r
(cڡ *
�umName
, cڡ *
�umV�ues
)
221
�d
::
m�
<cڡ *,
EnumM�s
>
�lM�s
;
222
�d
::
m�
<cڡ *,
EnumM�s
>::
����
�
=
�lM�s
.
`f�d
(
�umName
);
223 i�(
�
=�
�lM�s
.
`�d
()) {
224
EnumBa�Ba�
::
EnumM�s
m�s
;
225
`ba�In�M�s
(
�umV�ues
,
m�s
);
226
�lM�s
.
`���
(
�d
::
��
<cڡ *,
EnumM�s
>(
�umName
,
m�s
));
228
�lM�s
[
�umName
];
229
}
}
232
DECLARE_ENUM
(
233
MyEnum
,
234
ONE
=1,
235
TWO
,
236
THREE
,
237
TEN
=10,
238
ELEVEN
242
$UNIT_TEST
(
Sm�tEnumTe�s
, 0)
244
MyEnum
foo
= MyEnum::
TWO
;
246
�d
::
cout
<<
foo
<< "\n";
248
`CHECK
(
MyEnum
::
`toS��g
(
foo
) == "TWO");
249
`CHECK
(
foo
.
`toS��g
() == "TWO");
250
`CHECK
(
MyEnum
::
`toS��g
(MyEnum::
TWO
) == "TWO");
251
`CHECK
(
MyEnum
::
`toS��g
(10) == "TEN");
252
`CHECK
(
MyEnum
::
`toS��g
(100) == "Invalid�num value");
253
`CHECK
(
MyEnum
::
`�omS��g
("COW") == -1);
254
`CHECK
(
MyEnum
::
`�omS��g
("TWO") == 2);
263
}
}
266
gEND_NAMESPACE
@../src/Widget.cpp
1
~"Pa��r.h
"
2
~"W�dow.h
"
3
~"Widg�.h
"
6
~<as��.h
>
7
#DEBUG_WIDGET
0
)
8 #i�
DEBUG_WIDGET
9
~<�dio.h
>
10
~<ty��fo
>
14
bo�
gc_u�R��a
=
�ue
;
15
gc_�t�aS��
= 2.0f;
18
BEGIN_NAMESPACE
21
gWidg�
::
$Widg�
(
Obje�
*
a_���
, cڡ *
a_�me
)
22 :
`Widg�
(
Obje�P�Ca�
<
Widg�
>(
a_���
),
a_�me
)
24
}
}
27
gWidg�
::
$Widg�
(cڡ *
a_�me
,
bo�
a_ro�
)
28 :
$Ba�T
(
nuαr
,
a_�me
)
30
`as��
(
a_ro�
);
31
m_�youtD�e�i�
=
LP_H�izڏl
;
32
m_w�dowX
=
m_w�dowY
= 0;
33
m_w�ch�gMou�
=
�l�
;
34
m_d�ayD��e
=
�l�
;
35
m_hasUnm�agedDes�nd�t
=
�l�
;
36
m_x
=
m_y
= 0;
37
m_g�lWidth
=
m_g�lHeight
= 1;
38
�youtM�g�
= 5;
39
�youtS�c�g
= 5;
40
backgroundBrush
= 0xF0F0F0;
41
�ags
=
WF_N�e
;
42
s��
= 1.0f;
43
m_comb�edS��
= 1.0f;
44
}
}
47
gWidg�
::
$Widg�
(
Widg�
*
a_���
, cڡ *
a_�me
,
LayoutP�icy
a_�youtD�e�i�
,
a_x
,
a_y
,
a_width
,
a_height
)
48 :
`Ba�T
(
a_���
?�_��� :
�w
`W�dow
(
a_�me
,
�ue
),�_�me),
$m_�youtD�e�i�
(
a_�youtD�e�i�
)
55
�youtM�g�
= 5;
56
�youtS�c�g
= 5;
57
backgroundBrush
= 0xF0F0F0;
58
m_w�dowX
=
m_w�dowY
= 0;
59
m_w�ch�gMou�
=
�l�
;
60
m_d�ayD��e
=
�l�
;
61
m_hasUnm�agedDes�nd�t
=
�l�
;
62
s��
= 1.0f;
63
Widg�
*
widg�P��t
=
���
<Widget>();
64
m_comb�edS��
= (
widg�P��t
) ? widgetParent->m_combinedScale : 1.0f;
65
`c���
(
s��
.
v�ueCh�ged
,
this
, &
Widg�
::
upd�eS��
);
66
`�tGeom�ry
(
a_x
,
a_y
,
a_width
,
a_height
);
67
�ags
=
WF_N�e
;
68 i�(
m_�youtD�e�i�
=�
LP_Unm�aged
)
69
`�tP��tHasUnm�agedCh�d
();
70
}
}
73
gWidg�
::~
$Widg�
()
75
}
}
78
Widg�
::
$upd�eS��
(
ign�ed
)
80
Widg�
*
widg�P��t
=
���
<Widget>();
81
m_comb�edS��
= (
widg�P��t
�?
s��
.
`v�ue
() * widgetParent->m_combinedScale : scale.value();
83
�d
::
li�
<
Widg�
*>
widg�Ch�d�n
=
ch�d�n
<Widget>();
84
Widg�
*
ch�d
:
widg�Ch�d�n
)
86
ch�d
->
`upd�eS��
(0.0f);
88
}
}
91
gWidg�
::
$�tP��tHasUnm�agedCh�d
()
93
Widg�
*
widg�P��t
=
���
<Widget>();
94 i�(
widg�P��t
)
95
widg�P��t
->
`�tP��tHasUnm�agedCh�d
();
96
m_hasUnm�agedDes�nd�t
=
�ue
;
97
}
}
100
gWidg�
::
$ch�dAdded
(
Obje�
*
a_obje�
)
102
Widg�
*
widg�P��t
=
���
<Widget>();
103 i�(
widg�P��t
)
104
widg�P��t
->
`upd�eLayout
();
106
`upd�eLayout
();
107
`���t
();
108
}
}
111
gWidg�
::
$upd�eLayout
()
113
�d
::
li�
<
Widg�
*>
widg�Ch�d�n
=
ch�d�n
<Widget>();
116
ch�dCou�
= ()
widg�Ch�d�n
.
`size
();
117 i�(
ch�dCou�
)
119
SizeO�i�s
ch�dTٮSize
;
120
Ve��
<
SizeO�i�s
>
ch�dSizes
;
121
ch�dSizes
.
`�size
(
ch�dCou�
);
122
`mem�t
(&
ch�dTٮSize
, 0, (childTotalSize));
124
i
= 0;
125
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++it)
127 (*
�
)->
`s��dSizeO�i�s
(
ch�dSizes
[
i
]);
129
ch�dTٮSize
.
m_m�imum
.
m_width
+�
ch�dSizes
[
i
].m_minimum.m_width;
130
ch�dTٮSize
.
m_m�imum
.
m_height
+�
ch�dSizes
[
i
].m_minimum.m_height;
132
ch�dTٮSize
.
m_�e�ed
.
m_width
+�
ch�dSizes
[
i
].m_preferred.m_width;
133
ch�dTٮSize
.
m_�e�ed
.
m_height
+�
ch�dSizes
[
i
].m_preferred.m_height;
135
ch�dTٮSize
.
m_maximum
.
m_width
+�
ch�dSizes
[
i
].m_maximum.m_width;
136
ch�dTٮSize
.
m_maximum
.
m_height
+�
ch�dSizes
[
i
].m_maximum.m_height;
138
i
++;
141
x
= 0,
y
= 0,
wid
=
`width
(),
heig
=
`height
();
142
ex�aS��F�M�g�sAndS�c�g
= (
ch�dCou�
- 1�*
`�youtS�c�g
(�+
`�youtM�g�
() * 2;
145 i�(
m_�youtD�e�i�
=�
LP_H�izڏl
)
148 i��
wid
>
ch�dTٮSize
.
m_maximum
.
m_width
)
151
wid
=
ch�dTٮSize
.
m_maximum
.
m_width
;
153 i��
wid
<
ch�dTٮSize
.
m_m�imum
.
m_width
)
156
wid
=
ch�dTٮSize
.
m_m�imum
.
m_width
;
158 i��
wid
<
ex�aS��F�M�g�sAndS�c�g
)
161
wid
=
ex�aS��F�M�g�sAndS�c�g
;
164
w
=
wid
-
ex�aS��F�M�g�sAndS�c�g
;
165
h
=
heig
-
`�youtM�g�
() * 2;
166
�ma�d�
=
w
-
ch�dTٮSize
.
m_�e�ed
.
m_width
;
167
Ve��
<>
��o�dCh�dWidths
;
168
Ve��
<
bo�
>
ch�dWidthD�e
;
169
ch�dWidthD�eCou�
= 0;
170
��o�dCh�dWidths
.
`�size
(
ch�dCou�
);
171
ch�dWidthD�e
.
`�size
(
ch�dCou�
);
172
i
= 0; i <
ch�dCou�
; i++)
174
��o�dCh�dWidths
[
i
] =
ch�dSizes
[i].
m_�e�ed
.
m_width
;
175
ch�dWidthD�e
[
i
] =
�l�
;
177
`abs
(
�ma�d�
�> (
ch�dCou�
-
ch�dWidthD�eCou�
))
179
di�ribu�dRema�d�
=
�ma�d�
/ (
ch�dCou�
-
ch�dWidthD�eCou�
);
181
i
= 0; i <
ch�dCou�
; i++)
183 i�(!
ch�dWidthD�e
[
i
]) {
184 i�(
�ma�d�
< 0) {
185 i�(
��o�dCh�dWidths
[
i
] +
di�ribu�dRema�d�
<
ch�dSizes
[i].
m_m�imum
.
m_width
)
187
��o�dCh�dWidths
[
i
] =
ch�dSizes
[i].
m_m�imum
.
m_width
;
188
ch�dWidthD�e
[
i
] =
�ue
;
189
ch�dWidthD�eCou�
++;
191
��o�dCh�dWidths
[
i
] +�
di�ribu�dRema�d�
;
194 i�(
��o�dCh�dWidths
[
i
] +
di�ribu�dRema�d�
>
ch�dSizes
[i].
m_maximum
.
m_width
)
196
��o�dCh�dWidths
[
i
] =
ch�dSizes
[i].
m_maximum
.
m_width
;
197
ch�dWidthD�e
[
i
] =
�ue
;
198
ch�dWidthD�eCou�
++;
200
��o�dCh�dWidths
[
i
] +�
di�ribu�dRema�d�
;
206
�wTٮPr�o�dWidth
= 0;
207
i
= 0; i <
ch�dCou�
; i++)
208
�wTٮPr�o�dWidth
+�
��o�dCh�dWidths
[
i
];
209
�ma�d�
=
w
-
�wTٮPr�o�dWidth
;
211 i�(
ch�dWidthD�eCou�
>�
ch�dCou�
)
215
i
= 0;
216
y
=
x
=
`�youtM�g�
();
217
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++�,
x
+�
��o�dCh�dWidths
[
i
] +
`�youtS�c�g
(), i++)
218 (*
�
)->
`�tGeom�ry
(
x
,
y
,
��o�dCh�dWidths
[
i
],
h
);
224 i��
heig
>
ch�dTٮSize
.
m_maximum
.
m_height
)
227
heig
=
ch�dTٮSize
.
m_maximum
.
m_height
;
229 i��
heig
<
ch�dTٮSize
.
m_m�imum
.
m_height
)
232
heig
=
ch�dTٮSize
.
m_m�imum
.
m_height
;
234 i��
heig
<
ex�aS��F�M�g�sAndS�c�g
)
237
heig
=
ex�aS��F�M�g�sAndS�c�g
;
240
h
=
heig
-
ex�aS��F�M�g�sAndS�c�g
;
241
w
=
wid
-
`�youtM�g�
() * 2;
242
�ma�d�
=
h
-
ch�dTٮSize
.
m_�e�ed
.
m_height
;
243
Ve��
<>
��o�dCh�dHeight
;
244
Ve��
<
bo�
>
ch�dHeightD�e
;
245
ch�dHeightD�eCou�
= 0;
246
��o�dCh�dHeight
.
`�size
(
ch�dCou�
);
247
ch�dHeightD�e
.
`�size
(
ch�dCou�
);
248
i
= 0; i <
ch�dCou�
; i++)
250
��o�dCh�dHeight
[
i
] =
ch�dSizes
[i].
m_�e�ed
.
m_height
;
251
ch�dHeightD�e
[
i
] =
�l�
;
253
`abs
(
�ma�d�
�> (
ch�dCou�
-
ch�dHeightD�eCou�
))
255
di�ribu�dRema�d�
=
�ma�d�
/ (
ch�dCou�
-
ch�dHeightD�eCou�
);
257
i
= 0; i <
ch�dCou�
; i++)
259 i�(!
ch�dHeightD�e
[
i
]) {
260 i�(
�ma�d�
< 0) {
261 i�(
��o�dCh�dHeight
[
i
] +
di�ribu�dRema�d�
<
ch�dSizes
[i].
m_m�imum
.
m_height
)
263
��o�dCh�dHeight
[
i
] =
ch�dSizes
[i].
m_m�imum
.
m_height
;
264
ch�dHeightD�e
[
i
] =
�ue
;
265
ch�dHeightD�eCou�
++;
267
��o�dCh�dHeight
[
i
] +�
di�ribu�dRema�d�
;
270 i�(
��o�dCh�dHeight
[
i
] +
di�ribu�dRema�d�
>
ch�dSizes
[i].
m_maximum
.
m_height
)
272
��o�dCh�dHeight
[
i
] =
ch�dSizes
[i].
m_maximum
.
m_height
;
273
ch�dHeightD�e
[
i
] =
�ue
;
274
ch�dHeightD�eCou�
++;
276
��o�dCh�dHeight
[
i
] +�
di�ribu�dRema�d�
;
282
�wTٮPr�o�dHeight
= 0;
283
i
= 0; i <
ch�dCou�
; i++)
284
�wTٮPr�o�dHeight
+�
��o�dCh�dHeight
[
i
];
285
�ma�d�
=
h
-
�wTٮPr�o�dHeight
;
287 i�(
ch�dHeightD�eCou�
>�
ch�dCou�
)
291
i
= 0;
292
y
=
x
=
`�youtM�g�
();
293
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++�,
y
+�
��o�dCh�dHeight
[
i
] +
`�youtS�c�g
(), i++)
294 (*
�
)->
`�tGeom�ry
(
x
,
y
,
w
,
��o�dCh�dHeight
[
i
]);
297
}
}
300
gWidg�
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
302
a_sizeO�i�s
.
m_m�imum
.
m_width
= 0;
303
a_sizeO�i�s
.
m_m�imum
.
m_height
= 0;
304
a_sizeO�i�s
.
m_�e�ed
.
m_width
= 256;
305
a_sizeO�i�s
.
m_�e�ed
.
m_height
= 256;
306
a_sizeO�i�s
.
m_maximum
.
m_width
= 65536;
307
a_sizeO�i�s
.
m_maximum
.
m_height
= 65536;
310
�d
::
li�
<
Widg�
*>
widg�Ch�d�n
=
ch�d�n
<Widget>();
311
ch�dCou�
= ()
widg�Ch�d�n
.
`size
();
312 i�(!
ch�dCou�
)
319
SizeO�i�s
ch�dSizes
;
320 i�(
m_�youtD�e�i�
=�
LP_H�izڏl
)
323
a_sizeO�i�s
.
m_m�imum
.
m_height
= 0;
324
a_sizeO�i�s
.
m_�e�ed
.
m_height
= 0;
325
a_sizeO�i�s
.
m_maximum
.
m_height
= 65536;
327
a_sizeO�i�s
.
m_m�imum
.
m_width
= 0;
328
a_sizeO�i�s
.
m_�e�ed
.
m_width
= 0;
329
a_sizeO�i�s
.
m_maximum
.
m_width
= 0;
331
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++it)
333 (*
�
)->
`s��dSizeO�i�s
(
ch�dSizes
);
335
a_sizeO�i�s
.
m_m�imum
.
m_width
+�
ch�dSizes
.m_minimum.m_width;
336
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
ch�dSizes
.m_preferred.m_width;
337
a_sizeO�i�s
.
m_maximum
.
m_width
+�
ch�dSizes
.m_maximum.m_width;
339
a_sizeO�i�s
.
m_m�imum
.
m_height
=
�d
::
`max
�_sizeO�i�s.m_m�imum.m_height,
ch�dSizes
.m_minimum.m_height);
340
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
ch�dSizes
.m_preferred.m_height;
341
a_sizeO�i�s
.
m_maximum
.
m_height
=
�d
::
`m�
�_sizeO�i�s.m_maximum.m_height,
ch�dSizes
.m_maximum.m_height);
344
a_sizeO�i�s
.
m_�e�ed
.
m_height
/�
ch�dCou�
;
346
ex�aS��F�M�g�sAndS�c�g
=
`�youtM�g�
() * 2;
347
a_sizeO�i�s
.
m_m�imum
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
348
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
349
a_sizeO�i�s
.
m_maximum
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
351
ex�aS��F�M�g�sAndS�c�g
+�(
ch�dCou�
- 1�*
`�youtS�c�g
();
352
a_sizeO�i�s
.
m_m�imum
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
353
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
354
a_sizeO�i�s
.
m_maximum
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
360
a_sizeO�i�s
.
m_m�imum
.
m_width
= 0;
361
a_sizeO�i�s
.
m_�e�ed
.
m_width
= 0;
362
a_sizeO�i�s
.
m_maximum
.
m_width
= 65536;
364
a_sizeO�i�s
.
m_m�imum
.
m_height
= 0;
365
a_sizeO�i�s
.
m_�e�ed
.
m_height
= 0;
366
a_sizeO�i�s
.
m_maximum
.
m_height
= 0;
368
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++it)
370 (*
�
)->
`s��dSizeO�i�s
(
ch�dSizes
);
372
a_sizeO�i�s
.
m_m�imum
.
m_height
+�
ch�dSizes
.m_minimum.m_height;
373
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
ch�dSizes
.m_preferred.m_height;
374
a_sizeO�i�s
.
m_maximum
.
m_height
+�
ch�dSizes
.m_maximum.m_height;
376
a_sizeO�i�s
.
m_m�imum
.
m_width
=
�d
::
`max
�_sizeO�i�s.m_m�imum.m_width,
ch�dSizes
.m_minimum.m_width);
377
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
ch�dSizes
.m_preferred.m_width;
378
a_sizeO�i�s
.
m_maximum
.
m_width
=
�d
::
`m�
�_sizeO�i�s.m_maximum.m_width,
ch�dSizes
.m_maximum.m_width);
381
a_sizeO�i�s
.
m_�e�ed
.
m_width
/�
ch�dCou�
;
383
ex�aS��F�M�g�sAndS�c�g
=
`�youtM�g�
() * 2;
384
a_sizeO�i�s
.
m_m�imum
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
385
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
386
a_sizeO�i�s
.
m_maximum
.
m_width
+�
ex�aS��F�M�g�sAndS�c�g
;
388
ex�aS��F�M�g�sAndS�c�g
+�(
ch�dCou�
- 1�*
`�youtS�c�g
();
389
a_sizeO�i�s
.
m_m�imum
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
390
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
391
a_sizeO�i�s
.
m_maximum
.
m_height
+�
ex�aS��F�M�g�sAndS�c�g
;
395 i��
a_sizeO�i�s
.
m_maximum
.
m_height
<�_sizeO�i�s.
m_m�imum
.m_height )
396
a_sizeO�i�s
.
m_maximum
.
m_height
=�_sizeO�i�s.
m_m�imum
.m_height = (a_sizeOptions.m_maximum.m_height +�_sizeOptions.m_minimum.m_height) / 2;
397 i��
a_sizeO�i�s
.
m_maximum
.
m_width
<�_sizeO�i�s.
m_m�imum
.m_width )
398
a_sizeO�i�s
.
m_maximum
.
m_width
=�_sizeO�i�s.
m_m�imum
.m_width = (a_sizeOptions.m_maximum.m_width +�_sizeOptions.m_minimum.m_width) / 2;
399 i��
a_sizeO�i�s
.
m_�e�ed
.
m_height
<�_sizeO�i�s.
m_m�imum
.m_height )
400
a_sizeO�i�s
.
m_�e�ed
.
m_height
=�_sizeO�i�s.
m_m�imum
.m_height;
401 i��
a_sizeO�i�s
.
m_�e�ed
.
m_width
<�_sizeO�i�s.
m_m�imum
.m_width )
402
a_sizeO�i�s
.
m_�e�ed
.
m_width
=�_sizeO�i�s.
m_m�imum
.m_width;
403 i��
a_sizeO�i�s
.
m_�e�ed
.
m_height
>�_sizeO�i�s.
m_maximum
.m_height )
404
a_sizeO�i�s
.
m_�e�ed
.
m_height
=�_sizeO�i�s.
m_maximum
.m_height;
405 i��
a_sizeO�i�s
.
m_�e�ed
.
m_width
>�_sizeO�i�s.
m_maximum
.m_width )
406
a_sizeO�i�s
.
m_�e�ed
.
m_width
=�_sizeO�i�s.
m_maximum
.m_width;
409
Widg�
*
widg�P��t
=
���
<Widget>();
410 i�(
widg�P��t
&& !widg�P��t->
���
<
Widg�
>())
412
Re��g�
��
=
widg�P��t
->
`���g�
();
413
a_sizeO�i�s
.
m_maximum
=
��
.
m_size
;
415
}
}
418
gWidg�
::
$�tGeom�ry
(
a_x
,
a_y
,
a_width
,
a_height
)
420
m_w�dowX
=
m_x
=
a_x
;
421
m_w�dowY
=
m_y
=
a_y
;
422
m_g�lWidth
=
a_width
;
423
m_g�lHeight
=
a_height
;
424
Widg�
*
widg�P��t
=
���
<Widget>();
425 i�(
widg�P��t
)
427 i�(
c_u�R��a
)
429
m_g�lWidth
*= 2;
430
m_g�lHeight
*= 2;
434
m_w�dowX
=
widg�P��t
->m_w�dowX +
a_x
;
435
m_w�dowY
=
widg�P��t
->m_w�dowY +
a_y
;
436
`upd�eT�g�
();
447
`upd�eLayout
();
448
}
}
451
Tim�Id
gWidg�
::
$��tTim�
(
a_m�liSec�ds
)
453
Widg�
*
widg�P��t
=
���
<Widget>();
454 i�(
widg�P��t
)
455
widg�P��t
->
`��tTim�
(
a_m�liSec�ds
);
457
}
}
460
gWidg�
::
$k�lTim�
(
Tim�Id
a_tim�Id
)
462
Widg�
*
widg�P��t
=
���
<Widget>();
463 i�(
widg�P��t
)
464
widg�P��t
->
`k�lTim�
(
a_tim�Id
);
465
}
}
468
gWidg�
::
$�a�Background
(
i
)
470
Pa��r
`p
(
this
);
471
p
.
`��t
();
479
}
}
482
gWidg�
::
$width
()
484 i�(
c_u�R��a
)
485
`�rg�Buf�r
().
m_width
/ 2;
486
`�rg�Buf�r
().
m_width
;
487
}
}
490
gWidg�
::
$height
()
492 i�(
c_u�R��a
)
493
`�rg�Buf�r
().
m_height
/ 2;
494
`�rg�Buf�r
().
m_height
;
495
}
}
498
gWidg�
::
$sizeEv�t
(
SizeEv�t
&
a_ev�t
)
500
}
}
503
Widg�
::
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
505
`�a�Background
();
506
}
}
509
gWidg�
::
$glPa�t
()
511
}
}
514
Widg�
::
$tim�Ev�t
(
Tim�Ev�t
&
a_ev�t
)
516
}
}
519
Widg�
::
$keyEv�t
(
KeyEv�t
&
a_ev�t
)
521
}
}
524
Widg�
::
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
)
526
}
}
529
Widg�
::
$mou�E��Ev�t
(
Mou�Ev�t
&
a_ev�t
)
531
}
}
534
Widg�
::
$mou�L�veEv�t
(
Mou�Ev�t
&
a_ev�t
)
536
}
}
539
Widg�
::
$wh�lEv�t
(
Wh�lEv�t
&
a_ev�t
)
541
}
}
544
Widg�
::
$upd�eT�g�
()
546
Widg�
*
widg�P��t
=
���
<Widget>();
567 i�(
m_�youtD�e�i�
=�
LP_Unm�aged
)
569
m_�rg�
.
m_width
=
m_g�lWidth
;
570
m_�rg�
.
m_height
=
m_g�lHeight
;
575 i�(
widg�P��t
)
577
Pix�Buf�r
&
���T�g�
=
widg�P��t
->
`�rg�Buf�r
();
578
m_�rg�
.
m_width
=
`�amp
(
���T�g�
.m_width -
m_x
- 1, 0,
m_g�lWidth
);
579
m_�rg�
.
m_height
=
`�amp
(
���T�g�
.m_heigh�-
m_y
- 1, 0,
m_g�lHeight
);
588
maxWidth
=
m_�rg�
.
m_width
-
m_x
- 1;
589
maxHeight
=
m_�rg�
.
m_height
-
m_y
- 1;
591 i�(
widg�P��t
)
593
Pix�Buf�r
&
���T�g�
=
widg�P��t
->
`�rg�Buf�r
();
594
m_�rg�
.
m_pix�s
=
���T�g�
.m_pix��+
m_y
* (���T�g�.
m_�rideBy�s
/4�+
m_x
;
595
m_�rg�
.
m_�rideBy�s
=
���T�g�
.m_strideBytes;
596
m_�rg�
.
m_f�m�
=
���T�g�
.m_format;
597
m_�rg�
.
m_isR��a
=
���T�g�
.m_isRetina;
599
maxWidth
=
���T�g�
.
m_width
-
m_x
- 1;
600
maxHeight
=
���T�g�
.
m_height
-
m_y
- 1;
602 #i�
USE_RETINA
603 i�(
c_u�R��a
)
605
maxWidth
=
���T�g�
.
m_width
-
m_x
*2 - 1;
606
maxHeight
=
���T�g�
.
m_height
-
m_y
*2 - 1;
609
m_�rg�
.
m_pix�s
=
���T�g�
.m_pix��+ (
m_y
* 2.0�* (���T�g�.
m_�rideBy�s
/4�+ (
m_x
* 2.0);
616
m_�rg�
.
m_isR��a
=
�l�
;
617
m_�rg�
.
m_pix�s
= m_�rg�.m_pix��+
m_y
* (m_�rg�.
m_�rideBy�s
/4�+
m_x
;
620 i�(
m_�youtD�e�i�
!�
LP_Unm�aged
)
622
m_�rg�
.
m_width
=
`�amp
(m_�rg�.m_width, 0,
maxWidth
);
623
m_�rg�
.
m_height
=
`�amp
(m_�rg�.m_height, 0,
maxHeight
);
626
}
}
629
gWidg�
::
$���t
()
631
Re��g�
���g�
= { { { 0, 0 } }, { {
`width
(),
`height
() } } };
632
`upd�e
(
���g�
);
633
}
}
636
gWidg�
::
$upd�e
(
Re��g�
&
a_���g�
)
638
Widg�
*
widg�P��t
=
���
<Widget>();
639 i�(
widg�P��t
)
641
a_���g�
.
m_x
+= m_x;
642
a_���g�
.
m_y
+= m_y;
643
widg�P��t
->
`upd�e
(
a_���g�
);
646
}
}
649
gWidg�
::
$ev�t
(
Ev�t
&
a_ev�t
)
651
a_ev�t
.
m_comm�Ev�t
.
`�je�
();
653
a_ev�t
.
m_ty�
)
655
Ev�t
::
ET_Tim�Ev�t
:
656
`tim�Ev�t
(
a_ev�t
.
m_tim�Ev�t
);
658
Ev�t
::
ET_Pa�tEv�t
:
659 i�(
`�ags
(�=�
WF_E��Background
)
660
`�a�Background
();
661
`��tEv�t
(
a_ev�t
.
m_��tEv�t
);
663
Ev�t
::
ET_SizeEv�t
:
664 i�(
���
<
Widg�
>())
665
`upd�eT�g�
();
666
`sizeEv�t
(
a_ev�t
.
m_sizeEv�t
);
672
�d
::
li�
<
Widg�
*>
widg�Ch�d�n
=
ch�d�n
<Widget>();
690 i�(
a_ev�t
.
m_ty�
=�
Ev�t
::
ET_Pa�tEv�t
)
692
�d
::
ve��
<
Widg�
*>
unm�agedWidg�s
;
693
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++it)
695 i�((*
�
)->
m_hasUnm�agedDes�nd�t
)
697
unm�agedWidg�s
.
`push_back
(*
�
);
701 (*
�
)->
`ev�t
(
a_ev�t
);
702 i�(
a_ev�t
.
m_comm�Ev�t
.
m_ac��ed
)
706
Widg�
*
w
:
unm�agedWidg�s
)
708
w
->
`ev�t
(
a_ev�t
);
709 i�(
a_ev�t
.
m_comm�Ev�t
.
m_ac��ed
)
715
�d
::
ve��
<
Widg�
*>
m�agedWidg�s
;
716
�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
`beg�
(); i�!�widg�Ch�d�n.
`�d
(); ++it)
718 i�((*
�
)->
m_hasUnm�agedDes�nd�t
)
720 (*
�
)->
`ev�t
(
a_ev�t
);
721 i�(
a_ev�t
.
m_comm�Ev�t
.
m_ac��ed
)
726
m�agedWidg�s
.
`push_back
(*
�
);
729
Widg�
*
w
:
m�agedWidg�s
)
731
w
->
`ev�t
(
a_ev�t
);
732 i�(
a_ev�t
.
m_comm�Ev�t
.
m_ac��ed
)
738
bo�
mou�Inside
=
�l�
;
739
a_ev�t
.
m_ty�
)
741
Ev�t
::
ET_Mou�Ev�t
:
742
mou�Inside
= ((
a_ev�t
.
m_mou�Ev�t
.
m_pos�i�
.
m_x
>
m_w�dowX
)
743 && (
a_ev�t
.
m_mou�Ev�t
.
m_pos�i�
.
m_y
>
m_w�dowY
)
744 && (
a_ev�t
.
m_mou�Ev�t
.
m_pos�i�
.
m_x
< (
m_w�dowX
+
`width
()))
745 && (
a_ev�t
.
m_mou�Ev�t
.
m_pos�i�
.
m_y
< (
m_w�dowY
+
`height
())));
746 i�(
m_mou�E��ed
&& !
mou�Inside
)
748
`mou�L�veEv�t
(
a_ev�t
.
m_mou�Ev�t
);
750 i�(!
m_mou�E��ed
&&
mou�Inside
)
752
`mou�E��Ev�t
(
a_ev�t
.
m_mou�Ev�t
);
754
m_mou�E��ed
=
mou�Inside
;
755 i�(
mou�Inside
||
m_w�ch�gMou�
)
757
Mou�Ev�t
pushEv�t
=
a_ev�t
.
m_mou�Ev�t
;
758
a_ev�t
.
m_mou�Ev�t
.
m_x
= (
pushEv�t
.m_x -
m_w�dowX
);
759
a_ev�t
.
m_mou�Ev�t
.
m_y
= (
pushEv�t
.m_y -
m_w�dowY
);
760
a_ev�t
.
m_mou�Ev�t
.
m_�dX
= (
pushEv�t
.m_�dX -
m_w�dowX
);
761
a_ev�t
.
m_mou�Ev�t
.
m_�dY
= (
pushEv�t
.m_�dY -
m_w�dowY
);
770 i�(!
a_ev�t
.
m_mou�Ev�t
.
m_�dBu��s
&&�_ev�t.m_mou�Ev�t.
m_bu��s
)
771
m_w�ch�gMou�
=
�ue
;
772 i�(!
a_ev�t
.
m_mou�Ev�t
.
m_bu��s
)
773
m_w�ch�gMou�
=
�l�
;
774
`mou�Ev�t
(
a_ev�t
.
m_mou�Ev�t
);
775
a_ev�t
.
m_mou�Ev�t
=
pushEv�t
;
778
Ev�t
::
ET_Wh�lEv�t
:
779
`wh�lEv�t
(
a_ev�t
.
m_wh�lEv�t
);
781
Ev�t
::
ET_KeyEv�t
:
782
`keyEv�t
(
a_ev�t
.
m_keyEv�t
);
788 i�(!
`���
())
790
`d��eD�ayD��eWidg�s
();
792
}
}
795
gWidg�
::
$d�ayD��e
()
797
m_d�ayD��e
=
�ue
;
798
}
}
801
gWidg�
::
c���D�ayD��eWidg�s
(
�d
::
ve��
<
Widg�
*>&
a_widg�sToBeD��ed
) const
803
�d
::
li�
<
Widg�
*>
widg�Ch�d�n
=
ch�d�n
<Widget>();
804
g�d
::
li�
<
Widg�
*>::
cڡ_����
�
=
widg�Ch�d�n
.
beg�
();
g�
!�widg�Ch�d�n.
�d
(); ++it)
806 (*
g�
)->
c���D�ayD��eWidg�s
(
a_widg�sToBeD��ed
);
807 i�((*
g�
)->
gm_d�ayD��e
)
809
ga_widg�sToBeD��ed
.
em�a�_back
(*
�
);
815
gWidg�
::
$d��eD�ayD��eWidg�s
()
817
�d
::
ve��
<
Widg�
*>
widg�sToBeD��ed
;
818
`c���D�ayD��eWidg�s
(
widg�sToBeD��ed
);
819 aut�
w
:
widg�sToBeD��ed
)
821
d��e
w
;
823
}
}
826
gWidg�
::
$s��dSizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
828
`sizeO�i�s
(
a_sizeO�i�s
);
829
a_sizeO�i�s
.
m_m�imum
.
m_width
*�
m_comb�edS��
;
830
a_sizeO�i�s
.
m_m�imum
.
m_height
*�
m_comb�edS��
;
831
a_sizeO�i�s
.
m_�e�ed
.
m_width
*�
m_comb�edS��
;
832
a_sizeO�i�s
.
m_�e�ed
.
m_height
*�
m_comb�edS��
;
833
a_sizeO�i�s
.
m_maximum
.
m_width
*�
m_comb�edS��
;
834
a_sizeO�i�s
.
m_maximum
.
m_height
*�
m_comb�edS��
;
835
}
}
838
gEND_NAMESPACE
@../src/Window.cpp
2
~<c�dio
>
3
~<m�
>
6 #ifde�
_WIN32
7
#Re��g�
W�Re��g�
)
8
#WIN32_LEAN_AND_MEAN
9
~<w�dows.h
>
)
10 #unde�
Re��g�
14
~"W�dow.h
"
15
~"Mem�yM�p�g.h
"
18 #ifde�
GL_EXPERIMENTS
19
~"GL/Immed��Mode.h
"
20
~"GL/Prog�m.h
"
24 #i�
_WIN32
27
BEGIN_NAMESPACE
31
gg_w�dowCou�
= 0;
32
gM�
<
gHWND
,
gW�dow
*>
gg_w�dowM�
;
36
sBackBuf�r
38
HBITMAP
mm_hb�m�
;
39
Pix�Buf�r
mm_�rg�
;
43
sW�dowD�a
45
HWND
mm_hWnd
;
46
HDC
mm_h�d�
;
47
HGLRC
mm_glCڋxt
;
48
BackBuf�r
mm_backBuf�r
;
49
Po�t
mm_mou�Pos
;
50
Mou�Bu��s
mm_mou�Bu��s
;
51
Size
mm_size
;
52
bo�
mm_a�ive
;
53
mm_�xtTim�Id
;
57
$In��lizeBackBuf�r
(
BackBuf�r
*
a_backBuf�r
,
a_w
,
a_h
,
a_d�th
)
59 #ifde�
GL_EXPERIMENTS
60
�wW
=
`�xtPow�OfTwo
(
a_w
);
61
�wH
=
`�xtPow�OfTwo
(
a_h
);
63
�wW
=
a_w
;
64
�wH
=
a_h
;
67
BITMAPINFO
�fo
= { { (
BITMAPINFOHEADER
),
�wW
, -
�wH
, 1,
`WORD
(
a_d�th
),
BI_RGB
, 0 } };
68
a_backBuf�r
->
m_�rg�
.
m_width
=
a_w
;
69
a_backBuf�r
->
m_�rg�
.
m_�rideBy�s
=
�wW
* ();
70
a_backBuf�r
->
m_�rg�
.
m_height
=
a_h
;
71
a_backBuf�r
->
m_�rg�
.
m_f�m�
= (
Pix�F�m�
)
a_d�th
;
72
a_backBuf�r
->
m_hb�m�
=
`C��eDIBSe�i�
(0, &
�fo
,
DIB_RGB_COLORS
, (**)&�_backBuf�r->
m_�rg�
.
m_pix�s
), 0, 0);
73
}
}
76
$De�royBackBuf�r
(
BackBuf�r
*
a_backBuf�r
)
78
`D��eObje�
(
a_backBuf�r
->
m_�rg�
.
m_pix�s
);
79
`D��eObje�
(
a_backBuf�r
->
m_hb�m�
);
80
}
}
83 #ifde�
GL_EXPERIMENTS
85
gW�dow
::
$���lize
(
HWND
a_hwnd
)
87
`A�In�
(
a_hwnd
,
`�rg�Buf�r
());
88
m_d�a
->
m_glCڋxt
=
`wglG�Cu��tCڋxt
();
89
}
}
92
gW�dow
::
$��tGL
(
HWND
a_hwnd
)
103
`A�Pa�t
(
`�rg�Buf�r
());
105
}
}
108
gW�dow
::
$de�roy
(
HWND
a_hwnd
)
110
`A�De�roy
(
a_hwnd
);
111
}
}
115
gW�dow
::
$���lize
(
HWND
a_hwnd
)
117
}
}
118
W�dow
::
$��tGL
(
HWND
a_hwnd
)
120
`��tUpd�e
();
121
}
}
122
gW�dow
::
$de�roy
(
HWND
a_hwnd
)
124
}
}
125
$A�Cڌu�
()
127
}
}
128
$A�Mou�Upd�e
(
a_x
,
a_y
,
a_bu��Mask
,
Mou�Bu��s
a_mou�Bu��
,
Mou�S��
a_mou�S��
)
130
}
}
131
$A�Wh�lUpd�e
()
133
}
}
134
$glD�wText
(
x
,
y
, cڡ *
�xt
,
u�t32_t
a_c��
, u�t32_�
a_dr�C��
,
�t32_t
a_f�tSize
,
bo�
a_�v�tC��s
)
136
}
}
140
#WINDOW_TRACE
(...)
)
143
LRESULT
CALLBACK
$Ma�WndProc
(
144
HWND
hwnd
,
145
UINT
uMsg
,
146
WPARAM
wP�am
,
147
LPARAM
lP�am
)
149
W�dow
*
w�dow
=
g_w�dowM�
[
hwnd
];
150 i�(!
w�dow
)
152 i�(
uMsg
=�
WM_CREATE
&&
lP�am
)
154
`WINDOW_TRACE
("WM_CREATE (during CreateWindow)");
155
w�dow
= (
W�dow
*)((
CREATESTRUCT
*)
lP�am
)->
�C��eP�ams
;
156
w�dow
->
`���lize
(
hwnd
);
167
`DefW�dowProc
(
hwnd
,
uMsg
,
wP�am
,
lP�am
);
172
mou�Ca�
= 0;
173
bo�
keyS��
=
�l�
;
174
Mou�Bu��s
mbLUT
[] = {
MB_N�e
,
MB_Le�
,
MB_Midd�
,
MB_Right
};
175
SizeO�i�s
sizeO�s
;
177
uMsg
)
188
WM_TIMER
:
189
`WINDOW_TRACE
("WM_TIMER");
190
w�dow
->
`tim�Upd�e
((
Tim�Id
)
wP�am
);
193
WM_CREATE
:
194
`WINDOW_TRACE
("WM_CREATE");
196
w�dow
->
`���lize
(
hwnd
);
199
WM_PAINT
:
200
`WINDOW_TRACE
("WM_PAINT");
202
w�dow
->
`��tGL
(
hwnd
);
203
`WINDOW_TRACE
("WM_PAINT�nd");
206
WM_SIZING
:
207
`WINDOW_TRACE
("WM_SIZING");
208
w�dow
->
`sizeO�i�s
(
sizeO�s
);
210
cڡ��Width
= 0,
cڡ��Height
= 0;
211 i�(((
RECT
*)
lP�am
)->
right
- ((RECT *�P�am)->
��
>
sizeO�s
.
m_maximum
.
m_width
)
212
cڡ��Width
=
sizeO�s
.
m_maximum
.
m_width
;
213 i�(((
RECT
*)
lP�am
)->
right
- ((RECT *�P�am)->
��
<
sizeO�s
.
m_m�imum
.
m_width
)
214
cڡ��Width
=
sizeO�s
.
m_m�imum
.
m_width
;
215 i�(((
RECT
*)
lP�am
)->
b�tom
- ((RECT *�P�am)->
t�
>
sizeO�s
.
m_maximum
.
m_height
)
216
cڡ��Height
=
sizeO�s
.
m_maximum
.
m_height
;
217 i�(((
RECT
*)
lP�am
)->
b�tom
- ((RECT *�P�am)->
t�
<
sizeO�s
.
m_m�imum
.
m_height
)
218
cڡ��Height
=
sizeO�s
.
m_m�imum
.
m_height
;
219 i�(
cڡ��Width
)
221 i�(
wP�am
=�
WMSZ_BOTTOMLEFT
|| wP�am =�
WMSZ_LEFT
|| wP�am =�
WMSZ_TOPLEFT
)
222 ((
RECT
*)
lP�am
)->
��
= ((RECT *�P�am)->
right
-
cڡ��Width
- 1;
224 ((
RECT
*)
lP�am
)->
right
= ((RECT *�P�am)->
��
+
cڡ��Width
+ 1;
226 i�(
cڡ��Height
)
228 i�(
wP�am
=�
WMSZ_TOPLEFT
|| wP�am =�
WMSZ_TOP
|| wP�am =�
WMSZ_TOPRIGHT
)
229 ((
RECT
*)
lP�am
)->
t�
= ((RECT *�P�am)->
b�tom
-
cڡ��Height
- 1;
231 ((
RECT
*)
lP�am
)->
b�tom
= ((RECT *�P�am)->
t�
+
cڡ��Height
+ 1;
236
WM_SIZE
:
237
`WINDOW_TRACE
("WM_SIZE %� %i",
`LOWORD
(
lP�am
�+ 1,
`HIWORD
(lParam) + 1);
238
`��tf
("WM_SIZE %� %i",
`LOWORD
(
lP�am
�+ 1,
`HIWORD
(lParam) + 1);
239
w�dow
->
`de�roy
(
hwnd
);
240
w�dow
->
`�size
(
`LOWORD
(
lP�am
�+ 1,
`HIWORD
(lParam) + 1);
242
w�dow
->
`���lize
(
hwnd
);
245
WM_RBUTTONDBLCLK
:
mou�Ca�
++;
246
WM_RBUTTONDOWN
:
mou�Ca�
++;
247
WM_RBUTTONUP
:
mou�Ca�
++;
249
WM_MBUTTONDBLCLK
:
mou�Ca�
++;
250
WM_MBUTTONDOWN
:
mou�Ca�
++;
251
WM_MBUTTONUP
:
mou�Ca�
++;
253
WM_LBUTTONDBLCLK
:
mou�Ca�
++;
254
WM_LBUTTONDOWN
:
mou�Ca�
++;
255
WM_LBUTTONUP
:
mou�Ca�
+=3;
257
WM_MOUSEMOVE
:
258
`A�Mou�Upd�e
(
`LOWORD
(
lP�am
),
`HIWORD
�P�am), ()
wP�am
,
mbLUT
[
mou�Ca�
/ 3], (
Mou�S��
)(mouseCase % 3));
259
w�dow
->
`mou�Upd�e
(
`LOWORD
(
lP�am
),
`HIWORD
�P�am), ()
wP�am
,
mbLUT
[
mou�Ca�
/ 3], (
Mou�S��
)(mouseCase % 3));
262
WM_MOUSEWHEEL
:
263
`A�Wh�lUpd�e
(()
`HIWORD
(
wP�am
));
264
w�dow
->
`wh�lUpd�e
(()
`HIWORD
(
wP�am
));
265
w�dow
->
`��tGL
(
hwnd
);
268
WM_KEYDOWN
:
269
keyS��
=
�ue
;
270
WM_KEYUP
:
271
w�dow
->
`keyUpd�e
(()
wP�am
,
keyS��
);
274
WM_DESTROY
:
275
`WINDOW_TRACE
("WM_DESTROY");
276
w�dow
->
`d��iv�e
();
278
w�dow
->
`de�roy
(
hwnd
);
279 i��!
g_w�dowCou�
)
280
`Po�Qu�Mes�ge
(1);
283
WM_SETCURSOR
:
284
`S�Curs�
(
`L�dCurs�
(
NULL
,
IDC_ARROW
));
292
`DefW�dowProc
(
hwnd
,
uMsg
,
wP�am
,
lP�am
);
296
}
}
299
gW�dow
::
$W�dow
(cڡ *
a_t��
,
bo�
a_fu�s��n
)
300 :
$Widg�
(
a_t��
,
�ue
)
302
`A�Cڌu�
();
304
g_w�dowCou�
++;
305
m_d�a
=
�w
W�dowD�a
;
306
m_d�a
->
m_h�d�
=
NULL
;
307
m_d�a
->
m_mou�Bu��s
=
MB_N�e
;
308
m_d�a
->
m_mou�Pos
.
m_x
= 0;
309
m_d�a
->
m_mou�Pos
.
m_y
= 0;
310
m_d�a
->
m_�xtTim�Id
= 1;
311
`In��lizeBackBuf�r
(&
m_d�a
->
m_backBuf�r
, 1, 1, 32);
321
m_d�a
->
m_hWnd
=
`C��eW�dowW
(
L
"Ma�WC�ss",
`S��g
(
a_t��
).
`toWS��g
().
`c_�r
(),
WS_OVERLAPPEDWINDOW
,
CW_USEDEFAULT
, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT ,
NULL
, NULL,
`G�Modu�H�d�
(0),
this
);
323
g_w�dowM�
[
m_d�a
->
m_hWnd
] =
this
;
325
`ShowW�dow
(
m_d�a
->
m_hWnd
,
SW_SHOW
);
326
`Upd�eW�dow
(
m_d�a
->
m_hWnd
);
327
m_d�a
->
m_a�ive
=
�ue
;
329
`S�Curs�
(
`L�dCurs�
(
NULL
,
IDC_ARROW
));
330
}
}
333
gW�dow
::~
$W�dow
()
335 i�(
m_d�a
->
m_a�ive
)
338
`d��iv�e
();
340
d��e
m_d�a
;
341
}
}
344
gW�dow
::
$d��iv�e
()
346 i�(
m_d�a
->
m_a�ive
)
348
m_d�a
->
m_a�ive
=
�l�
;
349
g_w�dowM�
.
`�a�
(
m_d�a
->
m_hWnd
);
350
`De�royW�dow
(
m_d�a
->
m_hWnd
);
351
g_w�dowCou�
--;
352
`De�royBackBuf�r
(&
m_d�a
->
m_backBuf�r
);
353
`D��eDC
(
m_d�a
->
m_h�d�
);
355
}
}
358
gW�dow
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
360
Widg�
::
`sizeO�i�s
(
a_sizeO�i�s
);
362
RECT
wRe�
,
cRe�
;
363
`G�W�dowRe�
(
m_d�a
->
m_hWnd
, &
wRe�
);
364
`G�Cl��Re�
(
m_d�a
->
m_hWnd
, &
cRe�
);
365
w�dowB�d�Height
=
wRe�
.
b�tom
-
cRe�
.b�tom + cRe�.
t�
- wRect.top;
366
w�dowB�d�Width
=
wRe�
.
right
-
cRe�
.righ�+ cRe�.
��
- wRect.left;
367
a_sizeO�i�s
.
m_m�imum
.
m_height
+�
w�dowB�d�Height
;
368
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
w�dowB�d�Height
;
369
a_sizeO�i�s
.
m_maximum
.
m_height
+�
w�dowB�d�Height
;
370
a_sizeO�i�s
.
m_m�imum
.
m_width
+�
w�dowB�d�Width
;
371
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
w�dowB�d�Width
;
372
a_sizeO�i�s
.
m_maximum
.
m_width
+�
w�dowB�d�Width
;
373
}
}
376
Tim�Id
gW�dow
::
$��tTim�
(
a_m�liSec�ds
)
378 (
Tim�Id
)
`S�Tim�
(
m_d�a
->
m_hWnd
, m_d�a->
m_�xtTim�Id
++,
a_m�liSec�ds
, 0);
379
}
}
382
gW�dow
::
$k�lTim�
(
Tim�Id
a_tim�Id
)
384
`K�lTim�
(
m_d�a
->
m_hWnd
, (
UINT_PTR
)
a_tim�Id
);
385
}
}
388
gW�dow
::
$tim�Upd�e
(
Tim�Id
a_tim�Id
)
390
Ev�t
ev
;
391
ev
.
m_ty�
=
Ev�t
::
ET_Tim�Ev�t
;
392
ev
.
m_tim�Ev�t
.
m_tim�Id
=
a_tim�Id
;
393
`ev�t
(
ev
);
394
}
}
397
gW�dow
::
$mou�Upd�e
(
a_x
,
a_y
,
a_bu��Mask
,
Mou�Bu��s
a_mou�Bu��
,
Mou�S��
a_mou�S��
)
399
Ev�t
ev
;
400
ev
.
m_ty�
=
Ev�t
::
ET_Mou�Ev�t
;
401
ev
.
m_mou�Ev�t
.
m_�dPos�i�
=
m_d�a
->
m_mou�Pos
;
402
ev
.
m_mou�Ev�t
.
m_�dBu��s
=
m_d�a
->
m_mou�Bu��s
;
411
m_d�a
->
m_mou�Pos
.
m_x
=
a_x
;
412
m_d�a
->
m_mou�Pos
.
m_y
=
a_y
;
413 i��
a_mou�S��
=�
MS_Up
)
414
m_d�a
->
m_mou�Bu��s
=
`Mou�Bu��s
(()m_d�a->m_mou�Bu�ڠ& ~()
a_mou�Bu��
);
416
m_d�a
->
m_mou�Bu��s
|�
a_mou�Bu��
;
418
ev
.
m_mou�Ev�t
.
m_pos�i�
=
m_d�a
->
m_mou�Pos
;
419
ev
.
m_mou�Ev�t
.
m_bu��s
=
m_d�a
->
m_mou�Bu��s
;
420
`ev�t
(
ev
);
421
}
}
424
gW�dow
::
$wh�lUpd�e
(
a_wh�lV�
)
426
Ev�t
ev
;
427
ev
.
m_ty�
=
Ev�t
::
ET_Wh�lEv�t
;
428
ev
.
m_wh�lEv�t
.
m_deg�esR٩i�
=
a_wh�lV�
;
429
`ev�t
(
ev
);
430
}
}
433
gW�dow
::
$keyUpd�e
(
a_keyCode
,
bo�
a_keyDown
)
435
Ev�t
ev
;
436
ev
.
m_ty�
=
Ev�t
::
ET_KeyEv�t
;
437
ev
.
m_keyEv�t
.
m_key
= (
Key
)
a_keyCode
;
438
ev
.
m_keyEv�t
.
m_��e
= (
a_keyDown
�?
KS_P�s�d
:
KS_R���d
;
439
ev
.
m_keyEv�t
.
m_modif�rs
=
M_N�e
;
440
`ev�t
(
ev
);
441
}
}
444
gW�dow
::
$�size
(
a_�wW
,
a_�wH
)
446
Ev�t
ev
;
447
ev
.
m_ty�
=
Ev�t
::
ET_SizeEv�t
;
448
ev
.
m_sizeEv�t
.
m_�d
=
m_d�a
->
m_size
;
450
RECT
��
;
451
`G�Cl��Re�
(
m_d�a
->
m_hWnd
, &
��
);
452
m_d�a
->
m_size
.
m_width
=
��
.
right
-�e�.
��
+ 1;
453
m_d�a
->
m_size
.
m_height
=
��
.
b�tom
-�e�.
t�
+ 1;
455 i��
a_�wW
!�
m_d�a
->
m_size
.
m_width
||
a_�wH
!�m_d�a->m_size.
m_height
)
456
`��tf
("�siz�g��%�%� %�%i\n",
a_�wW
,
a_�wH
,
m_d�a
->
m_size
.
m_width
, m_d�a->m_size.
m_height
);
460
`��tf
("destorying back buffer\n");
461
`De�royBackBuf�r
(&
m_d�a
->
m_backBuf�r
);
462
`��tf
("creating�ew back buffer\n");
463
`In��lizeBackBuf�r
(&
m_d�a
->
m_backBuf�r
, m_d�a->
m_size
.
m_width
, m_d�a->m_size.
m_height
, 32);
464 i�(!
m_d�a
->
m_backBuf�r
.
m_�rg�
.
m_pix�s
)
466
`��tf
("error making back buffer\n");
467
m_d�a
->
m_backBuf�r
.
m_�rg�
.
m_width
= 0;
468
m_d�a
->
m_backBuf�r
.
m_�rg�
.
m_height
= 0;
470
`��tf
("created�ew back buffer\n");
473
HDC
hdc
=
`G�DC
(
m_d�a
->
m_hWnd
);
474
`D��eDC
(
m_d�a
->
m_h�d�
);
475
m_d�a
->
m_h�d�
=
`C��eCom�tib�DC
(
hdc
);
476
`S�e�Obje�
(
m_d�a
->
m_h�d�
, m_d�a->
m_backBuf�r
.
m_hb�m�
);
477
`R���DC
(
m_d�a
->
m_hWnd
,
hdc
);
481
`upd�eLayout
();
483
ev
.
m_sizeEv�t
.
m_�w
=
m_d�a
->
m_size
;
484
`ev�t
(
ev
);
485
}
}
503
gW�dow
::
$��tUpd�e
()
505
RECT
��
;
506
`G�Upd�eRe�
(
m_d�a
->
m_hWnd
, &
��
,
�l�
);
507
Re��g�
a_���g�
= { { {
��
.
��
,�e�.
t�
} },
508 { {
��
.
right
-�e�.
��
+ 1,�e�.
b�tom
-�e�.
t�
+ 1 } } };
514
Ev�t
ev
;
515
ev
.
m_ty�
=
Ev�t
::
ET_Pa�tEv�t
;
516
ev
.
m_��tEv�t
.
m_���g�
=
a_���g�
;
523
`ev�t
(
ev
);
527
HDC
hdc
=
`G�DC
(
m_d�a
->
m_hWnd
);
529
`B�B�
(
hdc
, 0, 0,
m_d�a
->
m_backBuf�r
.
m_�rg�
.
m_width
, m_d�a->m_backBuf�r.m_�rg�.
m_height
, m_d�a->
m_h�d�
, 0, 0,
SRCCOPY
);
530
`R���DC
(
m_d�a
->
m_hWnd
,
hdc
);
535
RECT
r
= {
a_���g�
.
m_x
,�_���g�.
m_y
,
536
a_���g�
.
m_x
+�_���g�.
m_width
- 1,�_���g�.
m_y
+�_���g�.
m_height
- 1 };
537
`V�id�eRe�
(
m_d�a
->
m_hWnd
, &
r
);
538
}
}
541
gW�dow
::
$upd�e
(
Re��g�
&
a_���g�
)
543
RECT
r
= {
a_���g�
.
m_x
,�_���g�.
m_y
,
544
a_���g�
.
m_x
+�_���g�.
m_width
- 1,�_���g�.
m_y
+�_���g�.
m_height
- 1 };
545
`Inv�id�eRe�
(
m_d�a
->
m_hWnd
, &
r
,
�l�
);
576
}
}
579
gPix�Buf�r
&
gW�dow
::
$�rg�Buf�r
()
581
m_d�a
->
m_backBuf�r
.
m_�rg�
;
582
}
}
585
gEND_NAMESPACE
591
#GL_SILENCE_DEPRECATION
)
592
~"Obje�iveC.h
"
593
~<A�li�ti�S�vi�s/A�li�ti�S�vi�s.h
>
594
~<C�eVideo/C�eVideo.h
>
595
~<O�nGL/gl.h
>
596
~<�h�ad.h
>
597
~<uni�d.h
>
600 #i�de�
_NDEBUG
602
#DEBUG_LOG
(...)
)
604
#DEBUG_LOG
(...)
)
608
id
NSA�
;
611
BEGIN_NAMESPACE
614
sW�dowD�a
616
mObje�iveC
::
Obje�
m_�tiveH�d�
=
Obje�iveC
::Obje�{(
id
)
nuαr
};
617
mObje�iveC
::
Obje�
m_v�w
=
Obje�iveC
::Obje�{(
id
)
nuαr
};
618
Po�t
mm_mou�Pos
= (Point){ 0, 0 };
619
Mou�Bu��s
mm_mou�Bu��s
=
MB_N�e
;
620
Size
mm_size
= (Size){ 1, 1 };
621
bo�
mm_a�ive
=
�ue
;
622
Tim�Id
mm_�xtTim�Id
= 1;
623
bo�
mm_�v�id�ed
=
�l�
;
624
mm_�xS��
= 0;
625
GLu�t
mm_�xId
= 0;
626
Pix�Buf�r
mm_backBuf�r
;
627
CVDi��yL�kRef
mm_di��yL�k
;
628
m�d
::
m�
<
Tim�Id
,
mid
>
mm_a�iveTim�s
;
632
sNSPo�t
{
mx
,
my
; };
633
sNSSize
{
mwidth
,
mheight
; };
634
sNSRe�
{
mx
,
my
,
mwidth
,
mheight
; };
635
gNSEv�t
;
636
u�t32_t
tunich�
;
644
$Pr�tC�ssOfId
(
id
�lf
)
646
`��tf
("�ass: %s\n",
`�ass_g�Name
(
`obje�_g�C�ss
(
�lf
)));
647
}
}
649
$W�dowOnResh�e
(
id
�lf
,
SEL
_cmd
)
651
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
652
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
653 i�(
w�P�
)
654
w�P�
->
`�sh�e
();
655
}
}
657
bo�
$W�dowAc��sKeyI�ut
(
id
�lf
,
SEL
_cmd
)
659
`DEBUG_LOG
("WindowAcceptsKeyInput called\n");
660
�ue
;
661
}
}
663
$W�dowOnKeyI�ut
(
id
�lf
,
SEL
_cmd
)
665
`DEBUG_LOG
("WindowOnKeyInput called\n");
666
}
}
668
$W�dowOnD�w
(
id
�lf
,
SEL
_cmd
,
NSRe�
��
)
670
`DEBUG_LOG
("WindowOnDraw called\n");
671
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
672
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
673 i�(
w�P�
)
674
w�P�
->
`��tUpd�e
();
675
}
}
677
$W�dowOnResize
(
id
�lf
,
SEL
_cmd
,
NSSize
�wSize
)
679
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
680
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
681 i�(
w�P�
)
682
w�P�
->
`�size
((
�wSize
.
width
), �ewSize.
height
));
683
}
}
685
$W�dowOnKeyEv�t
(
id
�lf
,
SEL
_cmd
,
NSEv�t
*
ev�t
)
687
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
688
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
690
unich�
ch
=
Obje�iveC
::
`Obje�
((
id
)
ev�t
)["ch�a��sIgnܚgModif�rs"]()["ch�a��AtIndex:"].
��
<unichar>(0);
691
`��tf
("g� ch�: %i\n",
ch
);
692 i�(
w�P�
)
694
w�P�
->
`keyUpd�e
(
ch
, 1);
695
w�P�
->
`keyUpd�e
(
ch
, 0);
697
}
}
699
$W�dowOnMou�Ev�t
(
id
�lf
,
SEL
_cmd
,
NSEv�t
*
ev�t
)
701
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
702
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
703
NSPo�t
�t
=
Obje�iveC
::
`Obje�
((
id
)
ev�t
)["lo�ti�InW�dow"].
��
<NSPoint>();
704
ϡBu��s
= 0;
705
bu��s
=
Obje�iveC
::
`Obje�
(Obje�iveC::
`�assCache
("NSEv�t"))["�es�dMou�Bu��s"].
��
<>();
707 i�(
w�P�
)
709
h
=
w�P�
->
`�rg�Buf�r
().
m_height
;
710 #i�
USE_RETINA
711 i�(
c_u�R��a
)
713
h
/= 2;
717 i�((
bu��s
& 1�|| (
ϡBu��s
& 1))
719
w�P�
->
`mou�Upd�e
((
�t
.
x
),
h
-��.
y
), 0,
MB_Le�
, (
bu��s
& 1�?
MS_Down
:
MS_Up
);
721 i�((
bu��s
& 2�|| (
ϡBu��s
& 2))
723
w�P�
->
`mou�Upd�e
((
�t
.
x
),
h
-��.
y
), 0,
MB_Right
, (
bu��s
& 2�?
MS_Down
:
MS_Up
);
725 i��
bu��s
== 0 )
727
w�P�
->
`mou�Upd�e
((
�t
.
x
),
h
-��.
y
), 0,
MB_Le�
,
MS_Up
);
731
ϡBu��s
=
bu��s
;
732
}
}
734
bo�
s_���d
;
736
CVR�u�
$OnC�R�a�t
(
CVDi��yL�kRef
di��yL�k
,
737 cڡ
CVTimeS�mp
*
�Now
, cڡ CVTimeS�m�*
�Ou�utTime
,
738
CVO�i�F�gs
�agsIn
, CVO�i�F�g�*
�agsOut
, *
��backD�a
)
743
`DEBUG_LOG
("OnCanRepaint called\n");
745
W�dow
*
w�P�
= (W�dow*)
��backD�a
;
746
w�P�
->
`���t
();
752
}
}
755
$Upd�eMou�T�ck�gA�a
(
id
�lf
,
SEL
_cmd
)
757
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
758
Obje�iveC
::
Obje�
`obj
(
�lf
);
759
W�dow
*
w�P�
=
obj
.
g�
<Window*>("WindowPtr");
760
NSRe�
bounds
{ 0, 0, ()
w�P�
->
`width
(), ()w�P�->
`height
() };
761
Obje�iveC
::
Obje�
��
= Obje�iveC::
`Obje�
("NSTrackingArea")["alloc"]();
762
��
["��W�hRe�:�ti�s:ow�r:u�rInfo:"](
bounds
, 0x82,
�lf
,
n�
);
763
obj
["addT�ck�gA�a:"](
��
.
m_obje�
);
764
}
}
767
$Pro�ssTim�Ev�t
(
id
�lf
,
SEL
_cmd
, id
tim�
)
769
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
770
W�dow
*
w�P�
=
Obje�iveC
::
`Obje�
(
�lf
).
g�
<Window*>("WindowPtr");
771
Tim�Id
tim�Id
=
Obje�iveC
::
`Obje�
(
tim�
)["u�rInfo"]().
g�
<TimerId>("TimerId");
772 i�(
w�P�
)
774
w�P�
->
`tim�Upd�e
(
tim�Id
);
776
}
}
780
$Regi��W�dowC�ss
()
782
C�ss
W�dowC�ss
;
783
W�dowC�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
("NSWindow"), "Window", 0);
784
`�ass_addM�hod
(
W�dowC�ss
,
`�l_g�Uid
("�nBecomeKeyW�dow"), (
IMP
)
W�dowAc��sKeyI�ut
, "v@:");
785
`�ass_addM�hod
(
W�dowC�ss
,
`�l_g�Uid
("�nBecomeMa�W�dow"), (
IMP
)
W�dowAc��sKeyI�ut
, "v@:");
786
`�ass_addM�hod
(
W�dowC�ss
,
`�l_g�Uid
("keyDown:"), (
IMP
)
W�dowOnKeyEv�t
, "v@:");
787
`�ass_addIv�
(
W�dowC�ss
, "W�dowP�", (
W�dow
*), (Window*), "Window*");
788
`objc_�gi��C�ssPa�
(
W�dowC�ss
);
790
C�ss
P��C�ss
;
791
P��C�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
("NSPanel"), "Panel", 0);
792
`�ass_addM�hod
(
P��C�ss
,
`�l_g�Uid
("�nBecomeKeyW�dow"), (
IMP
)
W�dowAc��sKeyI�ut
, "v@:");
793
`�ass_addM�hod
(
P��C�ss
,
`�l_g�Uid
("keyDown:"), (
IMP
)
W�dowOnKeyEv�t
, "v@:");
794
`�ass_addIv�
(
P��C�ss
, "W�dowP�", (
W�dow
*), (Window*), "Window*");
795
`objc_�gi��C�ssPa�
(
P��C�ss
);
797
C�ss
Tim�C�ss
;
798
Tim�C�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
("NSObject"), "Timer", 0);
799
`�ass_addIv�
(
Tim�C�ss
, "Tim�Id", (
Tim�Id
), (TimerId), "TimerId");
800
`objc_�gi��C�ssPa�
(
Tim�C�ss
);
802
C�ss
V�wC�ss
;
804
V�wC�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
("NSOpenGLView"), "View", 0);
805
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("�sh�e:"), (
IMP
)
W�dowOnResh�e
, "v@:");
807
V�wC�ss
=
`objc_�lo��C�ssPa�
((
C�ss
)
`objc_g�C�ss
("NSView"), "View", 0);
809
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("d�wRe�:"), (
IMP
)
W�dowOnD�w
, "v@:");
810
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("�tF�meSize:"), (
IMP
)
W�dowOnResize
, "v@:");
811
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("keyDown:"), (
IMP
)
W�dowOnKeyEv�t
, "v@:");
812
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("mou�Down:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
813
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("mou�D�gged:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
814
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("mou�Up:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
815
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("mou�Moved:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
816
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("rightMou�Down:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
817
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("rightMou�D�gged:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
818
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("rightMou�Up:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
819
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("rightMou�Moved:"), (
IMP
)
W�dowOnMou�Ev�t
, "v@:");
820
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("upd�eT�ck�gA�as"), (
IMP
)
Upd�eMou�T�ck�gA�a
, "v@:");
821
`�ass_addM�hod
(
V�wC�ss
,
`�l_g�Uid
("�o�ssTim�Ev�t:"), (
IMP
)
Pro�ssTim�Ev�t
, "v@:");
822
`�ass_addIv�
(
V�wC�ss
, "W�dowP�", (
W�dow
*), (Window*), "Window*");
823
`objc_�gi��C�ssPa�
(
V�wC�ss
);
824
}
}
827
$In��lizeBackBuf�r
(
Pix�Buf�r
&
a_backBuf�r
,
a_w
,
a_h
,
a_d�th
)
829
a_backBuf�r
.
m_width
=
a_w
;
830
a_backBuf�r
.
m_�rideBy�s
=
a_w
* ();
831
a_backBuf�r
.
m_height
=
a_h
;
832
a_backBuf�r
.
m_f�m�
= (
Pix�F�m�
)
a_d�th
;
833
a_backBuf�r
.
m_isR��a
=
�l�
;
834 #i�
USE_RETINA
835 i�(
c_u�R��a
)
837
w
=
a_w
* 2;
838
h
=
a_h
* 2;
839
a_backBuf�r
.
m_pix�s
=
�w
u�t32_t
[
w
*
h
];
840
a_backBuf�r
.
m_�rideBy�s
=
w
* (
u�t32_t
);
841
a_backBuf�r
.
m_width
=
w
;
842
a_backBuf�r
.
m_height
=
h
;
843
a_backBuf�r
.
m_isR��a
=
�ue
;
847
a_backBuf�r
.
m_pix�s
=
�w
u�t32_t
[
a_w
*
a_h
];
850
a_backBuf�r
.
m_pix�s
=
�w
u�t32_t
[
a_w
*
a_h
];
852
}
}
855
$De�royBackBuf�r
(
Pix�Buf�r
&
a_backBuf�r
)
857
d��e
[]
a_backBuf�r
.
m_pix�s
;
858
}
}
884
gObje�iveC
::
Obje�
$���V�w
(
W�dow
*
w�P�
,
w
,
h
,
Obje�iveC
::
Obje�
w�dow
)
886
u�t32_t
tNSO�nGLPix�F�m�A�ribu�
;
888 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFADoub�Buf�r
= 5;
889 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFAC��Size
= 8;
890 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFAA�haSize
= 11;
891 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFAD�thSize
= 12;
892 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFAS�nc�Size
= 13;
893 cڡ
NSO�nGLPix�F�m�A�ribu�
NSO�nGLPFAW�dow
= 80;
895
NSO�nGLPix�F�m�A�ribu�
pix�F�m�A�rs
[] =
897
NSO�nGLPFAW�dow
,
898
NSO�nGLPFADoub�Buf�r
,
899
NSO�nGLPFAC��Size
, 24,
900
NSO�nGLPFAA�haSize
, 8,
901
NSO�nGLPFAD�thSize
, 24,
902
NSO�nGLPFAS�nc�Size
, 8,
906
Obje�iveC
::
Obje�
f�m�
= Obje�iveC::
`Obje�
("NSO�nGLPix�F�m�")["�loc"]()["��W�hA�ribu�s:"](
pix�F�m�A�rs
);
907
Obje�iveC
::
Obje�
v�w
= Obje�iveC::
`Obje�
("V�w")["�loc"]()["��W�hF�me:pix�F�m�:"]((
NSRe�
){ 0, 0,
w
,
h
},
f�m�
.
m_obje�
);
908
v�w
.
`�t
("W�dowP�",
w�P�
);
909
w�dow
["�tCڋ�V�w:"](
v�w
.
m_obje�
);
911 #i�
USE_RETINA
912 i�(
c_u�R��a
)
920
v�w
["�tW�tsBe�Res�uti�O�nGLSur��:"].
��
<>(
YES
);
924
v�w
["�tW�tsBe�Res�uti�O�nGLSur��:"].
��
<>(
NO
);
928
v�w
;
929
}
}
932
gW�dow
::
$W�dow
(cڡ *
a_t��
,
bo�
a_fu�s��n
,
W�dowF�gs
a_�ags
)
933 :
$Widg�
(
a_t��
,
�ue
)
935
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
938
w
= 1,
h
= 1;
939
m_d�a
=
�w
W�dowD�a
;
940
`In��lizeBackBuf�r
(
m_d�a
->
m_backBuf�r
,
w
,
h
, 32);
942
Obje�iveC
::
Obje�
`w�
((
id
)0);
945
w�dowF�gs
= (1<<0) | (1<<1) | (1<<2) | (1<<3);
947 i�(
a_�ags
=�
WF_NoT��
)
949
w�dowF�gs
= (1<<0) | (1<<4) | (1<<15);
950
w�
=
Obje�iveC
::
`Obje�
("P��")["�loc"]()["��W�hCڋ�Re�:�y�Mask:back�g:de�r:"]((
NSRe�
){ 0, -
h
,
w
, h },
w�dowF�gs
, 2,
�l�
);
951
w�
["�tT��b�A��rsT�n���t:"](
YES
);
955
w�
=
Obje�iveC
::
`Obje�
("W�dow")["�loc"]()["��W�hCڋ�Re�:�y�Mask:back�g:de�r:"]((
NSRe�
){ 0, -
h
,
w
, h },
w�dowF�gs
, 2,
�l�
);
956
w�
["�tT��:"](
Obje�iveC
::
`Obje�
("NSString")["stringWithUTF8String:"]("Hello World"));
959
m_d�a
->
m_�tiveH�d�
=
w�
;
962
w�
.
`�t
("W�dowP�",
this
);
964
m_d�a
->
m_v�w
=
`���V�w
(
this
,
w
,
h
,
w�
);
969
w�
["makeKeyAndOrd�Fr�t:"](w�.
m_obje�
);
970
w�
["makeKeyWindow"]();
981
CVR�u�
�r�
=
`CVDi��yL�kC��eW�hA�iveCGDi��ys
(&
m_d�a
->
m_di��yL�k
);
982
�r�
=��� ||
`CVDi��yL�kS�Ou�utC�lback
(
m_d�a
->
m_di��yL�k
,
OnC�R�a�t
,
this
);
984
�r�
=��� ||
`CVDi��yL�kS��
(
m_d�a
->
m_di��yL�k
);
985 i�(
�r�
)
987
`DEBUG_LOG
("Di��yL�k s� u�had���: %d",
�r�
);
988
m_d�a
->
m_di��yL�k
=
NULL
;
998
}
}
1001
gW�dow
::~
$W�dow
()
1003
`CVDi��yL�kSt�
(
m_d�a
->
m_di��yL�k
);
1004
`CVDi��yL�kR���
(
m_d�a
->
m_di��yL�k
);
1005
m_d�a
->
m_di��yL�k
=
NULL
;
1007 i�(
m_d�a
->
m_a�ive
)
1009
`d��iv�e
();
1011
d��e
m_d�a
;
1012
}
}
1015
gW�dow
::
$d��iv�e
()
1017 i�(
m_d�a
->
m_a�ive
)
1019
m_d�a
->
m_�tiveH�d�
["close"]();
1020
m_d�a
->
m_a�ive
=
�l�
;
1022
`De�royBackBuf�r
(
m_d�a
->
m_backBuf�r
);
1024
}
}
1027
gW�dow
::
$sizeO�i�s
(
SizeO�i�s
&
a_sizeO�i�s
)
1029
Widg�
::
`sizeO�i�s
(
a_sizeO�i�s
);
1034
w�dowB�d�Height
= 40;
1035
w�dowB�d�Width
= 2;
1036
a_sizeO�i�s
.
m_m�imum
.
m_height
+�
w�dowB�d�Height
;
1037
a_sizeO�i�s
.
m_�e�ed
.
m_height
+�
w�dowB�d�Height
;
1038
a_sizeO�i�s
.
m_maximum
.
m_height
+�
w�dowB�d�Height
;
1039
a_sizeO�i�s
.
m_m�imum
.
m_width
+�
w�dowB�d�Width
;
1040
a_sizeO�i�s
.
m_�e�ed
.
m_width
+�
w�dowB�d�Width
;
1041
a_sizeO�i�s
.
m_maximum
.
m_width
+�
w�dowB�d�Width
;
1042
}
}
1045
Tim�Id
gW�dow
::
$��tTim�
(
a_m�liSec�ds
)
1047
m_d�a
->
m_�xtTim�Id
++;
1049
Obje�iveC
::
Obje�
tim�
= Obje�iveC::
`Obje�
("Timer")["alloc"]();
1050
tim�
.
`�t
("Tim�Id",
m_d�a
->
m_�xtTim�Id
);
1052
id
tim�Id
=
1053
Obje�iveC
::
`Obje�
(Obje�iveC::
`�assCache
("NSTimer"))["scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:"](
1054
a_m�liSec�ds
/ 1000.0,
m_d�a
->
m_v�w
.
m_obje�
,
Obje�iveC
::
`m�hodCache
("�o�ssTim�Ev�t:"),
tim�
.m_obje�,
YES
).m_object;
1056
m_d�a
->
m_a�iveTim�s
[m_d�a->
m_�xtTim�Id
] =
tim�Id
;
1058 (
Tim�Id
)
m_d�a
->
m_�xtTim�Id
;
1059
}
}
1062
gW�dow
::
$k�lTim�
(
Tim�Id
a_tim�Id
)
1064
Obje�iveC
::
Obje�
tim�
=
m_d�a
->
m_a�iveTim�s
[
a_tim�Id
];
1065
tim�
["invalidate"]();
1066
m_d�a
->
m_a�iveTim�s
.
`�a�
(
a_tim�Id
);
1068
}
}
1071
gW�dow
::
$tim�Upd�e
(
Tim�Id
a_tim�Id
)
1073
Ev�t
ev
;
1074
ev
.
m_ty�
=
Ev�t
::
ET_Tim�Ev�t
;
1075
ev
.
m_tim�Ev�t
.
m_tim�Id
=
a_tim�Id
;
1076
`ev�t
(
ev
);
1077
}
}
1080
gW�dow
::
$mou�Upd�e
(
a_x
,
a_y
,
a_bu��Mask
,
Mou�Bu��s
a_mou�Bu��
,
Mou�S��
a_mou�S��
)
1082
Ev�t
ev
;
1083
ev
.
m_ty�
=
Ev�t
::
ET_Mou�Ev�t
;
1084
ev
.
m_mou�Ev�t
.
m_�dPos�i�
=
m_d�a
->
m_mou�Pos
;
1085
ev
.
m_mou�Ev�t
.
m_�dBu��s
=
m_d�a
->
m_mou�Bu��s
;
1094
m_d�a
->
m_mou�Pos
.
m_x
=
a_x
;
1095
m_d�a
->
m_mou�Pos
.
m_y
=
a_y
;
1096 i��
a_mou�S��
=�
MS_Up
)
1097
m_d�a
->
m_mou�Bu��s
=
`Mou�Bu��s
(()m_d�a->m_mou�Bu�ڠ& ~()
a_mou�Bu��
);
1099
m_d�a
->
m_mou�Bu��s
|�
a_mou�Bu��
;
1101
ev
.
m_mou�Ev�t
.
m_pos�i�
=
m_d�a
->
m_mou�Pos
;
1102
ev
.
m_mou�Ev�t
.
m_bu��s
=
m_d�a
->
m_mou�Bu��s
;
1103
`ev�t
(
ev
);
1104
}
}
1107
gW�dow
::
$wh�lUpd�e
(
a_wh�lV�
)
1109
Ev�t
ev
;
1110
ev
.
m_ty�
=
Ev�t
::
ET_Wh�lEv�t
;
1111
ev
.
m_wh�lEv�t
.
m_deg�esR٩i�
=
a_wh�lV�
;
1112
`ev�t
(
ev
);
1113
}
}
1116
gW�dow
::
$keyUpd�e
(
a_keyCode
,
bo�
a_keyDown
)
1118
Ev�t
ev
;
1119
ev
.
m_ty�
=
Ev�t
::
ET_KeyEv�t
;
1120
ev
.
m_keyEv�t
.
m_key
= (
Key
)
a_keyCode
;
1121
ev
.
m_keyEv�t
.
m_��e
= (
a_keyDown
�?
KS_P�s�d
:
KS_R���d
;
1122
ev
.
m_keyEv�t
.
m_modif�rs
=
M_N�e
;
1123
`ev�t
(
ev
);
1124
}
}
1127
gW�dow
::
$�tNewSize
(
a_�wW
,
a_�wH
)
1129
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
1130 i��
a_�wW
!�
m_d�a
->
m_size
.
m_width
||
a_�wH
!�m_d�a->m_size.
m_height
)
1132
m_d�a
->
m_�tiveH�d�
["�tCڋ�Size:"]((
NSSize
){(
a_�wW
), (
a_�wH
)});
1134
}
}
1137
Re��g�
gW�dow
::
$w�ldGeom�ry
()
1139
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
1141
C�ss
obje�sC�ss
=
`obje�_g�C�ss
(
m_d�a
->
m_�tiveH�d�
.
m_obje�
);
1142
objc_�ݔty_t
�ݔty
=
`�ass_g�Prݔty
(
obje�sC�ss
, "frame");
1144
`��tf
("%�%s\n",
`�ݔty_g�Name
(
�ݔty
),
`�ݔty_g�A�ribu�s
(property));
1161
SEL
g��r
;
1162 cڡ *
g��rName
=
`�ݔty_c�yA�ribu�V�ue
(
�ݔty
, "G");
1165 i�(
g��rName
==
NULL
)
1173
g��r
=
`�l_g�Uid
�
g��rName
);
1190
NSSize
r
=
m_d�a
->
m_�tiveH�d�
.
g�
<NSSize>("contentSize");
1197
NSPo�t
�ig�
{ 0, 0 };
1198
NSPo�t
p
=
m_d�a
->
m_�tiveH�d�
["c�v�tBa�ToS��n:"].
��
<NSPo�t>�
�ig�
);
1200
Re��g�
��
;
1201
��
.
m_x
= 10;
1202
��
.
m_y
= 500;
1203
��
.
m_width
=
r
.
width
;
1204
��
.
m_height
=
r
.
height
;
1205
��
.
m_x
=
p
.
x
;
1206
��
.
m_y
=
p
.
y
;
1208
`��tf
("G� f�m���: %i,%i, %�x %i\n",
��
.
m_x
,�e�.
m_y
,
1209
��
.
m_width
,�e�.
m_height
);
1210
��
;
1211
}
}
1214
gW�dow
::
$�tPos�i�
(
a_x
,
a_y
)
1216
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
1217
m_d�a
->
m_�tiveH�d�
["�tF�meT�Le�Po�t:"]((
NSPo�t
){(
a_x
), (
a_y
)});
1218
}
}
1221
gW�dow
::
$�sh�e
()
1223
`DEBUG_LOG
("reshape called\n");
1224
}
}
1227
gW�dow
::
$�size
(
a_�wW
,
a_�wH
)
1229
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
1230
Ev�t
ev
;
1231
ev
.
m_ty�
=
Ev�t
::
ET_SizeEv�t
;
1232
ev
.
m_sizeEv�t
.
m_�d
=
m_d�a
->
m_size
;
1234 i��
a_�wW
!�
m_d�a
->
m_size
.
m_width
||
a_�wH
!�m_d�a->m_size.
m_height
)
1237
m_d�a
->
m_size
.
m_width
=
a_�wW
;
1238
m_d�a
->
m_size
.
m_height
=
a_�wH
;
1241
m_d�a
->
m_�xS��
= 1;
1242
m_d�a
->
m_v�w
=
`���V�w
(
this
, (
a_�wW
), (
a_�wH
), m_d�a->
m_�tiveH�d�
);
1244
`DEBUG_LOG
("destorying back buffer\n");
1245
`De�royBackBuf�r
(
m_d�a
->
m_backBuf�r
);
1246
`DEBUG_LOG
("creating�ew back buffer\n");
1247
`In��lizeBackBuf�r
(
m_d�a
->
m_backBuf�r
,
a_�wW
,
a_�wH
, 32);
1248 i�(!
m_d�a
->
m_backBuf�r
.
m_pix�s
)
1250
`DEBUG_LOG
("error making back buffer\n");
1251
m_d�a
->
m_backBuf�r
.
m_width
= 0;
1252
m_d�a
->
m_backBuf�r
.
m_height
= 0;
1254
`DEBUG_LOG
("created�ew back buffer\n");
1256
`upd�eLayout
();
1258
ev
.
m_sizeEv�t
.
m_�w
=
m_d�a
->
m_size
;
1259
`ev�t
(
ev
);
1261
m_d�a
->
m_�v�id�ed
=
�l�
;
1262
`���t
();
1265
}
}
1268
gW�dow
::
$��tUpd�e
()
1270
`DEBUG_LOG
("paintUpdate called\n");
1272
Pix�Buf�r
&
�rg�
=
`�rg�Buf�r
();
1273
width
=
�rg�
.
m_width
;
1274
height
=
�rg�
.
m_height
;
1275
u�t32_t
*
pix�s
=
�rg�
.
m_pix�s
;
1276
Re��g�
a_���g�
= { { { 0, 0 } }, { {
width
,
height
} } };
1281 i�(
width
< 3 ||
height
< 3)
1284 i�(!
pix�s
)
1286
`DEBUG_LOG
("paintUpdate called with�ull�ixels\n");
1290
Ev�t
ev
;
1291
ev
.
m_ty�
=
Ev�t
::
ET_Pa�tEv�t
;
1292
ev
.
m_��tEv�t
.
m_���g�
=
a_���g�
;
1293
`ev�t
(
ev
);
1296
Obje�iveC
::
Obje�
�x
=
m_d�a
->
m_v�w
["openGLContext"]();
1297 i�(!
�x
.
m_obje�
)
1299
�x
["makeCurrentContext"]();
1301 #i�
USE_GL_DRAW_PIXELS
1304
`glCˬC��
(0, 0, 0, 0);
1305
`glCˬ
(
GL_COLOR_BUFFER_BIT
);
1308
u�t32_t
*
tmpBuf
=
�w
u�t32_t[
width
*
height
];
1309
j
= 0; j <
height
; j++)
1310
i
= 0; i <
width
; i++)
1311
tmpBuf
[
j
*
width
+
i
] =
pix�s
[(
height
-1-j) * width + i];
1312
`glD�wPix�s
(
width
,
height
,
GL_RGBA
,
GL_UNSIGNED_INT_8_8_8_8_REV
,
tmpBuf
);
1313
d��e
[]
tmpBuf
;
1318
`glCˬC��
(1.0f, 1.0f, 1.0f, 0.0f);
1319
`glCˬ
(
GL_COLOR_BUFFER_BIT
);
1322
�d
::
li�
<
Widg�
*>
ch�d
=
ch�d�n
<Widget>();
1323 i�(
ch�d
.
`size
() == 1)
1324
ch�d
.
`��t
()->
`glPa�t
();
1327
`glE�b�
(
GL_BLEND
);
1330
`glB�ndFunc
(
GL_SRC_ALPHA
,
GL_ONE_MINUS_SRC_ALPHA
);
1331
`glE�b�
(
GL_TEXTURE_2D
);
1334 i�(
m_d�a
->
m_�xS��
!= 2)
1336 i�(
m_d�a
->
m_�xS��
== 1)
1338
`glD��eTextu�s
(1, &
m_d�a
->
m_�xId
);
1340 i�(
m_d�a
->
m_�xS��
!= 2)
1342
`glG�Textu�s
(1, &
m_d�a
->
m_�xId
);
1344
`glB�dTextu�
(
GL_TEXTURE_2D
,
m_d�a
->
m_�xId
);
1345
`glTexP�am��i
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
1346
`glTexP�am��i
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_NEAREST
);
1347
m_d�a
->
m_�xS��
= 2;
1351
`glV�wp�t
(0, 0,
width
,
height
);
1352
`glB�dTextu�
(
GL_TEXTURE_2D
,
m_d�a
->
m_�xId
);
1353
`glTexImage2D
(
GL_TEXTURE_2D
, 0,
GL_RGBA
,
width
,
height
, 0,
GL_BGRA
,
1354
GL_UNSIGNED_INT_8_8_8_8_REV
,
pix�s
);
1355
`glA�iveTextu�
(
GL_TEXTURE0
);
1357
`glBeg�
(
GL_TRIANGLES
);
1358
`glTexCo�d2f
( 0.0f, 2.0f );
1359
`glV��x3f
( -1.0f, -3.0f, 0.0f );
1360
`glTexCo�d2f
( 0.0f, 0.0f );
1361
`glV��x3f
( -1.0f, 1.0f, 0.0f );
1362
`glTexCo�d2f
( 2.0f, 0.0f );
1363
`glV��x3f
( 3.0f, 1.0f, 0.0f );
1364
`glEnd
();
1376
`glFlush
();
1377
�x
["flushBuffer"]();
1379
CGC��S��Ref
c��S��
=
`CGC��S��C��eDevi�RGB
();
1380
CGCڋxtRef
b�m�Cڋxt
=
`CGB�m�CڋxtC��e
(
pix�s
,
width
,
height
, 8, (
u�t32_t
)*width,
c��S��
,
kCGImageA�haN�eSk�La�
);
1381
`CFR���
(
c��S��
);
1382
CGImageRef
imageRef
=
`CGB�m�CڋxtC��eImage
(
b�m�Cڋxt
);
1384
CGCڋxtRef
�x
= (CGCڋxtRef)
Obje�iveC
::
`Obje�
(Obje�iveC::
`�assCache
("NSG�phicsCڋxt"))["cu��tCڋxt"]()["g�phicsP�t"]().
m_obje�
;
1385
`CGCڋxtD�wImage
(
�x
,
`CGRe�Make
(0, 0,
width
,
height
),
imageRef
);
1386
`CGImageR���
(
imageRef
);
1389
m_d�a
->
m_�v�id�ed
=
�l�
;
1390
}
}
1393
gW�dow
::
$upd�e
(
Re��g�
&
a_���g�
)
1395
`DEBUG_LOG
("window update\n");
1396
��yCou�
= 0;
1397 i�(!
m_d�a
->
m_�v�id�ed
||
��yCou�
> 100)
1399
`DEBUG_LOG
("invalidating\n");
1400
Obje�iveC
::
AutoR���Po�
autoR���Po�
;
1402
m_d�a
->
m_v�w
["setNeedsDisplayInRect:"](
1403 (
NSRe�
){ (
a_���g�
.
m_x
), �_���g�.
m_y
),
1404 (
a_���g�
.
m_width
), �_���g�.
m_height
) });
1405
m_d�a
->
m_�v�id�ed
=
�ue
;
1409
��yCou�
++;
1411
}
}
1414
gPix�Buf�r
&
gW�dow
::
$�rg�Buf�r
()
1416
m_d�a
->
m_backBuf�r
;
1417
}
}
1420
gEND_NAMESPACE
@../src/XmlParser.cpp
1
~"XmlP��r.h
"
2
~"Mem�yM�p�g.h
"
3
~"Comm�.h
"
6
gBEGIN_NAMESPACE
9
#DEBUG_LOG
(...) \
10
`��tf
(
__VA_ARGS__
)
)
13
gXmlP��r
::
$XmlP��r
()
15
}
}
18
XmlP��r
::~
$XmlP��r
()
20
}
}
23
XmlP��r
::
$�r�XmlF�e
(cڡ *
a_f�eName
,
XmlC�sum�I����
&
a_c�sum�
)
25
Mem�yM�p�g
`memM�
(
a_f�eName
);
26 *
d
= (*)
memM�
.
`add�ss
();
27 i�(!
d
)
29
size_t
s
= (size_t)
memM�
.
`size
();
30
`�r�XmlD�a
(
d
,
s
,
a_c�sum�
);
31
}
}
34 cڡ
XmlS��gSli�
g�dSli�
= { "</>", 3 };
35 cڡ
XmlS��gSli�
g��tSli�
= { "<>", 2 };
38
#EMIT_ATOM
(
ty�
) \
39
a_c�sum�
.
`c�sumeTok�
(
XT_
##
ty�
,
�i�
)
)
41
#EMIT_START_TAG
() \
42
a_c�sum�
.
`c�sumeTok�
(
XT_TagS��
,
��tSli�
)
)
44
#EMIT_END_TAG
() \
45
a_c�sum�
.
`c�sumeTok�
(
XT_TagEnd
,
�dSli�
)
)
48
#RESET_STATE
\
49
��e
= 0;
��t
=
i
+ 1
)
52
gXmlP��r
::
$�r�XmlD�a
(cڡ *
a_d�a
,
size_t
a_size
,
XmlC�sum�I����
&
a_c�sum�
)
54 cڡ *
d
=
a_d�a
;
55
��e
= 0;
56
��t
= 2;
58
i
= 2; i < (
a_size
); i++)
60
�n
=
i
- 1 -
��t
+ 1;
61
XmlTok�Ty�
typ
=
XT_Unknown
;
62
XmlS��gSli�
�i�
= { &
d
[
��t
],
`size_t
(
�n
) };
63
ch
=
d
[
i
];
65 i�(
��e
=�0 &&
ch
=�'<'�{
typ
=
XT_Text
; state = 1; ; }
66 i�(
��e
== 0) { ; }
67 i�(
��e
=�1 &&
ch
== '!') { state = 12; ; }
68 i�(
��e
=�1 &&
ch
== '?') { ; }
69 i�(
��e
=�1 &&
ch
== '/') { state = 10; ; }
70 i�(
��e
=�1 &&
`is�a�
(
ch
)) { ; }
71 i�(
��e
=�1 &&
`i��um
(
ch
)�{
��t
=
i
; state = 2; ; }
72 i�(
��e
=�2 &&
`i��um
(
ch
)) { ; }
73 i�(
��e
=�2 &&
`is�a�
(
ch
)�{
typ
=
XT_TagO�n
; state = 3; ; }
74 i�(
��e
=�2 &&
ch
== '/') { state = 8; ; }
75 i�(
��e
=�2 &&
ch
=�'>'�{
`EMIT_ATOM
(
TagO�n
);
`EMIT_START_TAG
();
RESET_STATE
; ; }
77 i�(
��e
=�3 &&
`is�a�
(
ch
)) { ; }
78 i�(
��e
=�3 &&
`i��um
(
ch
)�{
��t
=
i
; state = 4; ; }
79 i�(
��e
=�3 &&
ch
== '/') { state = 7; ; }
80 i�(
��e
=�3 &&
ch
=�'>'�{
`EMIT_START_TAG
();
RESET_STATE
; ; }
82 i�(
��e
=�4 &&
`i��um
(
ch
)) { ; }
84 i�(
��e
=�4 &&
ch
=�'='�{
typ
=
XT_A�ribu�Name
; s�� = 5;
��t
=
i
+1; ; }
86 i�(
��e
=�5 &&
ch
== '\"') { state = 9; ; }
88 i�(
��e
=�5 &&
`i��um
(
ch
)) { ; }
89 i�(
��e
=�5 &&
`is�a�
(
ch
)�{
typ
=
XT_A�ribu�V�ue
; state = 3; ; }
90 i�(
��e
=�5 &&
ch
== '/') { state = 6; ; }
91 i�(
��e
=�5 &&
ch
=�'>'�{
`EMIT_ATOM
(
A�ribu�V�ue
);
`EMIT_START_TAG
();
RESET_STATE
; ; }
92 i�(
��e
=�5 &&
`i�un�
(
ch
)) { ; }
93 i�(
��e
=�6 &&
ch
=�'>'�{
�i�
.
m_�ngth
--;
`EMIT_ATOM
(
A�ribu�V�ue
);
`EMIT_START_TAG
();
`EMIT_END_TAG
();
RESET_STATE
; ; }
95 i�(
��e
=�7 &&
ch
=�'>'�{
`EMIT_START_TAG
();
`EMIT_END_TAG
();
RESET_STATE
; ; }
96 i�(
��e
=�8 &&
ch
=�'>'�{
�i�
.
m_�ngth
--;
`EMIT_ATOM
(
TagO�n
);
`EMIT_START_TAG
();
`EMIT_END_TAG
();
RESET_STATE
; ; }
97 i�(
��e
=�9 &&
ch
== '\"') { state = 5; ; }
98 i�(
��e
== 9) { ; }
100 i�(
��e
=�10 &&
`is�a�
(
ch
)) { ; }
101 i�(
��e
=�10 &&
`i��um
(
ch
)) { state = 11; ; }
102 i�(
��e
=�11 &&
`i��um
(
ch
)) { ; }
103 i�(
��e
=�11 &&
`is�a�
(
ch
)) { ; }
104 i�(
��e
=�11 &&
ch
=�'>'�{
`EMIT_END_TAG
();
RESET_STATE
; ; }
107 i�(
��e
=�12 &&
ch
== '-') { state = 13; ; }
108 i�(
��e
=�13 &&
ch
== '-') { state = 14; ; }
109 i�(
��e
=�14 &&
ch
== '-') { state = 15; ; }
110 i�(
��e
== 14) { state = 14; ; }
111 i�(
��e
=�15 &&
ch
== '-') { state = 16; ; }
112 i�(
��e
== 15) { state = 14; ; }
113 i�(
��e
=�16 &&
ch
=�'>'�{
RESET_STATE
; ; }
114 i�(
��e
== 16) { state = 14; ; }
116
`DEBUG_LOG
("unexpected�oken\n"); ;
119 i�(
typ
!�
XT_Unknown
)
120
a_c�sum�
.
`c�sumeTok�
(
typ
,
�i�
);
122
}
}
125 �as�
cXmlNode
127
mpublic
:
128 ~
$XmlNode
() {
129
i
= 0; i <
m_ch�d�n
.
`size
(); i++)
130
d��e
m_ch�d�n
[
i
];
132
S��g
m_�g
;
133
HashM�
<
S��g
,S��g>
m_��ibu�s
;
134
Ve��
<
XmlNode
*>
m_ch�d�n
;
135
}
};
138 �as�
cXmlDomT�eBu�d�D�a
140
mpublic
:
141
��tT�eRecur�
(
d�th
,
XmlNode
*
a_node
);
142
c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
);
144
XmlNode
*
mm_domT�eRo�Node
;
145
mVe��
<
mXmlNode
*>
mm_���Node
;
146
XmlNode
*
mm_cu��tNode
;
147
S��g
mm_cu��tA�ribu�Name
;
151
gXmlDomT�eBu�d�
::
$XmlDomT�eBu�d�
()
153
m_d�a
=
�w
XmlDomT�eBu�d�D�a
;
154
m_d�a
->
m_domT�eRo�Node
= 0;
155
m_d�a
->
m_cu��tNode
= 0;
156
}
}
159
gXmlDomT�eBu�d�
::~
$XmlDomT�eBu�d�
()
161
d��e
m_d�a
->
m_domT�eRo�Node
;
162
d��e
m_d�a
;
163
}
}
166
gXmlDomT�eBu�d�
::
$c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
)
168
m_d�a
->
`c�sumeTok�
(
a_ty�
,
a_�xt
);
169
}
}
172
gXmlDomT�eBu�d�
::
$��tDomT�e
()
174 i�(!
m_d�a
->
m_domT�eRo�Node
)
176
`DEBUG_LOG
("XML�ot�oaded!\n");
179
`DEBUG_LOG
("<?xml version=\"1.0\"�ncoding=\"utf-8\"?>\n");
180
m_d�a
->
`��tT�eRecur�
(0, m_d�a->
m_domT�eRo�Node
);
181
}
}
184
gXmlDomT�eBu�d�D�a
::
$��tT�eRecur�
(
d�th
,
XmlNode
*
a_node
)
186
i
= 0; i <
a_node
->
m_ch�d�n
.
`size
(); i++)
188
s
= 0; s <
d�th
; s++)
189
`DEBUG_LOG
(" ");
190
`DEBUG_LOG
("<%s",
a_node
->
m_ch�d�n
[
i
]->
m_�g
.
`c_�r
());
191
HashM�
<
S��g
,S��g>::
����
�
=
192
a_node
->
m_ch�d�n
[
i
]->
m_��ibu�s
.
`beg�
();
193
�
!�
a_node
->
m_ch�d�n
[
i
]->
m_��ibu�s
.
`�d
(); ++it)
195
`DEBUG_LOG
(" %s=%s",
�
->
f��
.
`c_�r
(), it->
�c�d
.c_str());
197 i�(
a_node
->
m_ch�d�n
[
i
]->m_ch�d�n.
`size
())
199
`DEBUG_LOG
(">\n");
200
`��tT�eRecur�
(
d�th
+1,
a_node
->
m_ch�d�n
[
i
]);
201
s
= 0; s <
d�th
; s++)
202
`DEBUG_LOG
(" ");
203
`DEBUG_LOG
("</%s>\n",
a_node
->
m_ch�d�n
[
i
]->
m_�g
.
`c_�r
());
205
`DEBUG_LOG
(" />\n");
208
}
}
211
gXmlDomT�eBu�d�D�a
::
$c�sumeTok�
(
XmlTok�Ty�
a_ty�
, cڡ
XmlS��gSli�
&
a_�xt
)
213 i�(
a_�xt
.
m_�ngth
<= 0)
215
`DEBUG_LOG
("bad�oken\n");
219
�d
::
�r�g
`�r
(
a_�xt
.
m_d�a
,�_�xt.
m_�ngth
);
221
a_ty�
)
223
XT_Text
:
226
XT_TagO�n
:
228
XmlNode
*
�wNode
=
�w
XmlNode;
229 i�(
m_cu��tNode
)
231
m_���Node
.
`push_back
(
m_cu��tNode
);
232
m_cu��tNode
->
m_ch�d�n
.
`push_back
(
�wNode
);
234
m_cu��tNode
=
�wNode
;
235
m_cu��tNode
->
m_�g
=
�r
;
236 i��!
m_domT�eRo�Node
)
237
m_domT�eRo�Node
=
m_cu��tNode
;
240
XT_TagS��
:
243
XT_TagEnd
:
244 i�(
m_���Node
.
`size
())
246
m_cu��tNode
=
m_���Node
.
`back
();
247
m_���Node
.
`p�_back
();
250
XT_A�ribu�Name
:
251
m_cu��tA�ribu�Name
=
�r
;
252
m_cu��tNode
->
m_��ibu�s
[
m_cu��tA�ribu�Name
] = "true";
254
XT_A�ribu�V�ue
:
255
m_cu��tNode
->
m_��ibu�s
[
m_cu��tA�ribu�Name
] =
�r
;
258
`DEBUG_LOG
("Gفok��y�=%� d�a=---%s---\n",
a_ty�
,
�r
.
`c_�r
());
261
}
}
264
gEND_NAMESPACE
@Maths.cpp
4
~"M�hs.h
"
7
�me�a�
gd�a�s
10
�l�e
e
(cڡ *
m
,
j
,
i
)
12
gm
[(
j
% 4�* 4 + (
i
% 4)];
15
�l�e
�vf
(
i
,
j
, cڡ *
m
)
17
go
= 2 + (
j
-
i
);
18
gi
+�4 +
o
;
19
gj
+�4 -
o
;
20
g�v
=
21 +
e
(
m
,
j
-1,
i
+1) *�(m, j+0, i+0) *�(m, j+1, i-1)
22 +
e
(
m
,
j
+1,
i
+1) *�(m, j-1, i+0) *�(m, j+0, i-1)
23 +
e
(
m
,
j
-1,
i
-1) *�(m, j+0, i+1) *�(m, j+1, i+0)
24 -
e
(
m
,
j
-1,
i
-1) *�(m, j+0, i+0) *�(m, j+1, i+1)
25 -
e
(
m
,
j
+1,
i
-1) *�(m, j-1, i+0) *�(m, j+0, i+1)
26 -
e
(
m
,
j
-1,
i
+1) *�(m, j+0, i-1) *�(m, j+1, i+0);
27 (
go
% 2�?
g�v
: -
�v
;
30
bo�
�v��M�rix4x4
(*
��ri�
out
, cڡ *��ri�
m
)
32
g�v
[16];
33
gi
= 0; i < 4; i++)
34
gj
= 0; j < 4; j++)
35
g�v
[
j
*4+
i
] =
�vf
(i,j,
m
);
36
gd��m��t
= 0.0;
37
gk
= 0; k < 4; k++)
38
gd��m��t
+�
m
[
k
] *
�v
[k*4];
39 i�(
gd��m��t
== 0.0)
40
�l�
;
41
g�vd�
= (1.0 /
d��m��t
);
42
gi
= 0; i < 16; i++)
43
gout
[
i
] =
�v
[i] *
�vd�
;
44
g�ue
;
47
bo�
m�rix4x4ToN�m�M�rix3x3
(*
��ri�
out
, cڡ *��ri�
m
)
49
gd��m��t
=
50
e
(
m
,0,0) * (�(m,1,1)*e(m,2,2) -�(m,2,1)*e(m,1,2) )
51 -
e
(
m
,0,1) * (�(m,1,0)*e(m,2,2) -�(m,1,2)*e(m,2,0) )
52 +
e
(
m
,0,2) * (�(m,1,0)*e(m,2,1) -�(m,1,1)*e(m,2,0) );
53 i�(
gd��m��t
== 0)
54
�l�
;
55
g�vd�
= (1.0 /
d��m��t
);
56
gout
[0] = (
e
(
m
,1,1)*e(m,2,2)-e(m,2,1)*e(m,1,2))*
g�vd�
;
57
gout
[1] = -(
e
(
m
,0,1)*e(m,2,2)-e(m,0,2)*e(m,2,1))*
g�vd�
;
58
gout
[2] = (
e
(
m
,0,1)*e(m,1,2)-e(m,0,2)*e(m,1,1))*
g�vd�
;
59
gout
[3] = -(
e
(
m
,1,0)*e(m,2,2)-e(m,1,2)*e(m,2,0))*
g�vd�
;
60
gout
[4] = (
e
(
m
,0,0)*e(m,2,2)-e(m,0,2)*e(m,2,0))*
g�vd�
;
61
gout
[5] = -(
e
(
m
,0,0)*e(m,1,2)-e(m,1,0)*e(m,0,2))*
g�vd�
;
62
gout
[6] = (
e
(
m
,1,0)*e(m,2,1)-e(m,2,0)*e(m,1,1))*
g�vd�
;
63
gout
[7] = -(
e
(
m
,0,0)*e(m,2,1)-e(m,2,0)*e(m,0,1))*
g�vd�
;
64
gout
[8] = (
e
(
m
,0,0)*e(m,1,1)-e(m,1,0)*e(m,0,1))*
g�vd�
;
65
g�ue
;
68
�tM�rix4x4
(*
out
,
69
m11
,
m12
,
m13
,
m14
,
70
m21
,
m22
,
m23
,
m24
,
71
m31
,
m32
,
m33
,
m34
,
72
m41
,
m42
,
m43
,
m44
)
74
gout
[0] =
m11
; out[1] =
m12
; out[2] =
m13
; out[3] =
m14
;
75
gout
[4] =
m21
; out[5] =
m22
; out[6] =
m23
; out[7] =
m24
;
76
gout
[8] =
m31
; out[9] =
m32
; out[10] =
m33
; out[11] =
m34
;
77
gout
[12] =
m41
; out[13] =
m42
; out[14] =
m43
; out[15] =
m44
;
83
�me�a�
gM�h
86
d�Produ�
(cڡ *
v1
, cڡ *
v2
,
�ride1
,
�ride2
,
cou�
)
88
g�su�
= 0;
89
gi
= 0; i <
gcou�
; i++)
90
g�su�
+�
v1
[
i
*
�ride1
] *
v2
[�*
�ride2
];
91
g�su�
;
94
�ossProdu�
(*
��ri�
out
, cڡ *��ri�
v1
, cڡ *��ri�
v2
)
96
gx
= 0; x < 3; x++)
97
gout
[
x
] =
v1
[(x+1)%3] *
v2
[(x+2)%3] - v1[(x+2)%3] * v2[(x+1)%3];
100
qu�Produ�
(*
��ri�
out
, cڡ *��ri�
v1
, cڡ *��ri�
v2
)
103
gout
[0] =
v1
[3]*
v2
[0] + v1[1]*v2[2] - v1[2]*v2[1] + v1[0]*v2[3];
104
gout
[1] =
v1
[3]*
v2
[1] + v1[1]*v2[3] + v1[2]*v2[0] - v1[0]*v2[2];
105
gout
[2] =
v1
[3]*
v2
[2] - v1[1]*v2[0] + v1[2]*v2[3] + v1[0]*v2[1];
106
gout
[3] =
v1
[3]*
v2
[3] - v1[1]*v2[1] - v1[2]*v2[2] - v1[0]*v2[0];
109
qu�Produ�B
(*
��ri�
out
, cڡ *��ri�
v1
, cڡ *��ri�
v2
)
112
gout
[0] =
v1
[0]*
v2
[0] - v1[1]*v2[1] - v1[2]*v2[2] - v1[3]*v2[3];
113
gout
[1] =
v1
[0]*
v2
[1] + v1[1]*v2[0] + v1[2]*v2[3] - v1[3]*v2[2];
114
gout
[2] =
v1
[0]*
v2
[2] - v1[1]*v2[3] + v1[2]*v2[0] + v1[3]*v2[1];
115
gout
[3] =
v1
[0]*
v2
[3] + v1[1]*v2[2] - v1[2]*v2[1] + v1[3]*v2[0];
118
��sf�mVe��
(*
��ri�
vout
, cڡ *��ri�
m
, cڡ *��ri�
v�
)
120
gi
= 0; i < 4; i++)
121
gvout
[
i
] =
d�Produ�
(
m
+i,
v�
, 4);
124
n�m�izeVe��
(*
vInOut
,
cou�
)
126
g�vMag
= 1.0�/
sq�
(
d�Produ�
(
vInOut
, vInOut, 1, 1, 3));
127
gi
= 0; i <
gcou�
; i++)
128
gvInOut
[
i
] *�
�vMag
;
131
makeId�t�yM�rix4x4
(*
a_out
)
133
gj
= 0; j < 16; j++)
134
ga_out
[
j
] = 0;
135
ga_out
[0] =
a_out
[5] =�_out[10] =�_out[15] = 1;
138
c�yM�rix4x4
(*
��ri�
a_out
, cڡ *��ri�
m
)
140
gj
= 0; j < 16; j++)
141
ga_out
[
j
] =
m
[j];
144
makeP��e�iveM�rix4x4
(*
a_out
,
a_fov
,
a_a�e�
,
a_ì
,
a_�r
)
146
g��
= 1.0�/
�nf
(
a_fov
/ 2.0f);
147
g�lf
= 1.0�/ (
a_ì
-
a_�r
);
148
gd�a�s
::
�tM�rix4x4
(
a_out
,
��
/
a_a�e�
, 0.0f, 0.0f, 0.0f, 0.0f, ctan, 0.0f, 0.0f,
149 0.0f, 0.0f, (
a_�r
+
a_ì
�*
�lf
, -1.0f, 0.0f, 0.0f, (2.0f *�_far *�_near) * inlf, 0.0f);
152
makeO�hog�phicM�rix4x4
(*
a_out
,
a_��
,
a_right
,
a_b�tom
,
a_t�
,
a_ì
,
a_�r
)
154
g�l
=
a_right
+
a_��
;
155
g�b
=
a_t�
+
a_b�tom
;
156
g�n
=
a_�r
+
a_ì
;
157
gr�
= 1.0�/ (
a_right
-
a_��
);
158
gtsb
= 1.0�/ (
a_t�
-
a_b�tom
);
159
gf�
= 1.0�/ (
a_�r
-
a_ì
);
160
gd�a�s
::
�tM�rix4x4
(
a_out
, 2.0�*
r�
, 0.0f, 0.0f, 0.0f, 0.0f, 2.0�*
tsb
, 0.0f, 0.0f,
161 0.0f, 0.0f, -2.0�*
f�
, 0.0f, -
�l
*
r�
, -
�b
*
tsb
, -
�n
* fsn, 1.0f);
164
eu�rToQu�
(*
��ri�
out
,
h�d�g
,
�t�ude
,
b�k
)
167
gc1
=
cos
(
h�d�g
/2);
168
gs1
=
s�
(
h�d�g
/2);
169
gc2
=
cos
(
�t�ude
/2);
170
gs2
=
s�
(
�t�ude
/2);
171
gc3
=
cos
(
b�k
/2);
172
gs3
=
s�
(
b�k
/2);
173
gc1c2
=
c1
*
c2
;
174
gs1s2
=
s1
*
s2
;
175
gc1s2
=
c1
*
s2
;
176
gs1c2
=
s1
*
c2
;
178
gout
[0] =
c1c2
*
s3
+
s1s2
*
c3
;
179
gout
[1] =
s1c2
*
c3
+
c1s2
*
s3
;
180
gout
[2] =
c1s2
*
c3
-
s1c2
*
s3
;
181
gout
[3] =
c1c2
*
c3
-
s1s2
*
s3
;
184
qu�ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
q
)
186
gx
[10] = {
q
[0]*q[0], q[1]*q[1], q[2]*q[2], q[3]*q[3], q[0]*q[1],
187
q
[2]*q[3], q[0]*q[2], q[1]*q[3], q[1]*q[2], q[0]*q[3] };
188
g�vs
= 1.0�/ (
x
[0] + x[1] + x[2] + x[3]);
189
gd�a�s
::
�tM�rix4x4
(
out
,
190 (
x
[0] - x[1] - x[2] + x[3]�*
�vs
, 2.0f * (x[4] - x[5]) * invs, 2.0f * (x[6] + x[7]) * invs, 0.0f,
191 2.0�* (
x
[4] + x[5]�*
�vs
, (-x[0] + x[1] - x[2] + x[3]) * invs, 2.0f * (x[8] - x[9]) * invs, 0.0f,
192 2.0�* (
x
[6] - x[7]�*
�vs
, 2.0f * (x[8] + x[9]) * invs, (-x[0] - x[1] + x[2] + x[3]) * invs, 0.0f,
196
����i�R٩i�S��ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
����e
, cڡ *��ri�
r�
,
unif�mS��
)
198
makeId�t�yM�rix4x4
(
out
);
199
����eM�rix4x4
(
out
,
����e
);
200
r٩eM�rix4x4
(
out
,
r�
);
201
s��M�rix4x4
(
out
,
unif�mS��
, uniformScale, uniformScale);
204
����i�Qu�S��ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
����e
, cڡ *��ri�
qu�
,
unif�mS��
)
206
gtmp
[16];
207
gr�
[16];
208
qu�ToM�rix4x4
(
r�
,
qu�
);
209
makeId�t�yM�rix4x4
(
tmp
);
210
����eM�rix4x4
(
tmp
,
����e
);
211
muɝlyM�rix4x4
(
out
,
tmp
,
r�
);
212
s��M�rix4x4
(
out
,
unif�mS��
, uniformScale, uniformScale);
215
����eM�rix4x4
(*
��ri�
a_�Out
, cڡ *��ri�
vec3
)
218
gi
= 0; i < 4; i++)
219
ga_�Out
[12+
i
] +�
d�Produ�
(
a_�Out
+i,
vec3
, 4, 1, 3);
222
����eM�rix4x4
(*
a_�Out
,
x
,
y
,
z
)
224
gxyz
[3] = {
x
,
y
,
z
};
225
����eM�rix4x4
(
a_�Out
,
xyz
);
228
s��M�rix4x4
(*
��ri�
a_�Out
, cڡ *��ri�
vec3
)
230
gj
= 0; j < 3; j++)
231
gi
= 0; i < 4; i++)
232
ga_�Out
[
j
*4+
i
] *�
vec3
[j];
235
s��M�rix4x4
(*
a_�Out
,
x
,
y
,
z
)
237
gxyz
[3] = {
x
,
y
,
z
};
238
s��M�rix4x4
(
a_�Out
,
xyz
);
241
r٩eM�rix4x4
(*
��ri�
�Out
, cڡ *��ri�
vec3
)
244
r٩eAxisM�rix4x4
(
�Out
,
deg�esToRad�ns
(
vec3
[0]), 1.0f, 0.0f, 0.0f);
245
r٩eAxisM�rix4x4
(
�Out
,
deg�esToRad�ns
(
vec3
[1]), 0.0f, 1.0f, 0.0f);
246
r٩eAxisM�rix4x4
(
�Out
,
deg�esToRad�ns
(
vec3
[2]), 0.0f, 0.0f, 1.0f);
249
r٩eM�rix4x4
(*
�Out
,
x
,
y
,
z
)
251
gxyz
[3] = {
x
,
y
,
z
};
252
r٩eM�rix4x4
(
�Out
,
xyz
);
255
r٩eAxisM�rix4x4
(*
��ri�
a_�Out
,
�d�ns
, cڡ *��ri�
vec3
)
257
gv
[3] = {
vec3
[0], vec3[1], vec3[2] };
258
n�m�izeVe��
(
v
, 3);
259
gcos
=
cosf
(
�d�ns
);
260
gco�
= 1.0�-
cos
;
261
gs�
=
s�f
(
�d�ns
);
262
gr�m
[16];
263
gd�a�s
::
�tM�rix4x4
(
r�m
,
264
cos
+
co�
*
v
[0] * v[0], co� * v[0] * v[1] + v[2] *
s�
, cosp * v[0] * v[2] - v[1] * sin, 0.0f,
265
co�
*
v
[0] * v[1] - v[2] *
s�
,
cos
+ cosp * v[1] * v[1], cosp * v[1] * v[2] + v[0] * sin, 0.0f,
266
co�
*
v
[0] * v[2] + v[1] *
s�
, co� * v[1] * v[2] - v[0] * s�,
cos
+ cosp * v[2] * v[2], 0.0f,
268
gm
[16];
269
c�yM�rix4x4
(
m
,
a_�Out
);
270
muɝlyM�rix4x4
(
a_�Out
,
m
,
r�m
);
273
r٩eAxisM�rix4x4
(*
a_�Out
,
�d�ns
,
x
,
y
,
z
)
275
gxyz
[3] = {
x
,
y
,
z
};
276
r٩eAxisM�rix4x4
(
a_�Out
,
�d�ns
,
xyz
);
279
qu�R٩eM�rix4x4
(*
��ri�
a_�Out
, cڡ *��ri�
a_qu�
)
281
gr�m
[16];
282
gm
[16];
283
qu�ToM�rix4x4
(
r�m
,
a_qu�
);
284
c�yM�rix4x4
(
m
,
a_�Out
);
285
muɝlyM�rix4x4
(
a_�Out
,
m
,
r�m
);
289
muɝlyM�rix4x4
(*
��ri�
out
, cڡ *��ri�
m1
, cڡ *��ri�
m2
)
291
gj
= 0; j < 4; j++)
292
gk
= 0; k < 4; k++)
293
gout
[
j
+
k
*4] =
d�Produ�
(
m1
+j,
m2
+k*4, 4);
296
bo�
m�rix4x4ToN�m�M�rix3x3
(*
��ri�
out
, cڡ *��ri�
m
)
298
gd�a�s
::
m�rix4x4ToN�m�M�rix3x3
(
out
,
m
);
301
bo�
�v��M�rix4x4
(*
��ri�
out
, cڡ *��ri�
m
)
303
gd�a�s
::
�v��M�rix4x4
(
out
,
m
);
306
���o�M�rix4x4
(*
��ri�
out
, cڡ *��ri�
m
)
308
gd�a�s
::
�tM�rix4x4
(
out
,
m
[15], m[14], m[13], m[12], m[11], m[10],
309
m
[9], m[8], m[7], m[6], m[5], m[4], m[3], m[2], m[1], m[0]);
312
deg�esToRad�ns
(
deg�es
)
314 cڡ
gdeg2�d
= 0.01745329251f;
315
deg�es
*
gdeg2�d
;
318
�d�nsToDeg�es
(
�d�ns
)
320 cڡ
g�d2deg
= 57.2957795131f;
321
�d�ns
*
g�d2deg
;
324
phi
()
326 (1.0�+
sq�
(5.0f)) * 0.5f;
329
makeCam�aM�rix
(*
��ri�
out
,
fov
,
a�e�
, cڡ ��ri�
����e
[3], cڡ ��ri�
r٩e
[3],
s��
,
bo�
�tho
)
331
g�oje�i�M�rix
[16];
332
gmod�V�wM�rix
[16];
333 i�(
g�tho
)
334
makeO�hog�phicM�rix4x4
(
�oje�i�M�rix
, -2.0f, 2.0f, -2.0f, 2.0f, 0.0f, 10.0f);
336
makeP��e�iveM�rix4x4
(
�oje�i�M�rix
,
deg�esToRad�ns
(
fov
),
a�e�
, 0.1f, 100.0f);
337
����i�R٩i�S��ToM�rix4x4
(
mod�V�wM�rix
,
����e
,
r٩e
,
s��
);
338
muɝlyM�rix4x4
(
out
,
�oje�i�M�rix
,
mod�V�wM�rix
);
346
ex�a�Cl�P��s
(
��ri�
��P��s
[6][4], cڡ *��ri�
m
)
348
gi
= 0; i < 4; i++)
350
g��P��s
[0][
i
] =
m
[3+i*4] + m[0+i*4];
351
g��P��s
[1][
i
] =
m
[3+i*4] - m[0+i*4];
352
g��P��s
[2][
i
] =
m
[3+i*4] - m[1+i*4];
353
g��P��s
[3][
i
] =
m
[3+i*4] + m[1+i*4];
354
g��P��s
[4][
i
] =
m
[3+i*4] + m[2+i*4];
355
g��P��s
[5][
i
] =
m
[3+i*4] - m[2+i*4];
358
gi
= 0; i < 6; i++)
359
n�m�izeVe��
(
��P��s
[
i
]);
365
bo�
isCl��dBlockyFroggy
(cڡ
��P��s
[6][4],
x
,
y
,
z
,
w
,
h
,
d
)
372
gmaxDi�
= (
w
<
h
�? h : ((w <
d
) ? d : w);
373
gmaxDi�
*= 1.3;
374
g�t
[4] = {
x
,
y
,
z
, 1.0 };
375
gi
= 0; i < 6; i++)
376 i�(-
gmaxDi�
>
d�Produ�
(
�t
,
��P��s
[
i
]))
377
g�ue
;
378
g�l�
;
384
bo�
isCl��d
(cڡ
��P��s
[6][4], cڡ *
��ri�
vec4
,
a_�dius
)
386
gi
= 0; i < 6; i++)
387 i�(-
ga_�dius
>
d�Produ�
(
vec4
,
��P��s
[
i
]))
388
g�ue
;
389
g�l�
;
396
�lcFru�um
(
��ri�
�u�umPts
[8][4], cڡ *��ri�
m
)
401
g�v
[16];
402
�v��M�rix4x4
(
�v
,
m
);
403
gi
= 0; i < 8; i++)
405
gw
[4] = { (
i
&1)?1.0f:-1.0f, (i&2)?1.0f:-1.0f, (i&4)?0.95f:-0.94f, 1.0f };
406
gj
= 0; j < 3; j++)
407
gw
[
j
] *= 1.01f;
408
��sf�mVe��
(
�u�umPts
[
i
],
�v
,
w
);
409
gj
= 0; j < 3; j++)
410
g�u�umPts
[
i
][
j
] /�
�u�umPts
[i][3];
414
bo�
com��Inv�tM�rix
(cڡ
m
[16],
�vOut
[16])
416
g�v
[16],
gd�
;
417 cڡ
gidx
[16][18] = {
435
gi
= 0; i < 16; i++)
437
g�v
[
i
] =
m
[
idx
[i][0*3+0]] * m[idx[i][0*3+1]] * m[idx[i][0*3+2]];
438
g�v
[
i
] -�
m
[
idx
[i][3*3+0]] * m[idx[i][3*3+1]] * m[idx[i][3*3+2]];
439
g�v
[
i
] +�
m
[
idx
[i][1*3+0]] * m[idx[i][1*3+1]] * m[idx[i][1*3+2]];
440
g�v
[
i
] -�
m
[
idx
[i][4*3+0]] * m[idx[i][4*3+1]] * m[idx[i][4*3+2]];
441
g�v
[
i
] +�
m
[
idx
[i][2*3+0]] * m[idx[i][2*3+1]] * m[idx[i][2*3+2]];
442
g�v
[
i
] -�
m
[
idx
[i][5*3+0]] * m[idx[i][5*3+1]] * m[idx[i][5*3+2]];
444
gd�
=
m
[0] *
�v
[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
445 i�(
gd�
== 0)
446
�l�
;
447
gd�
= 1.0 /
d�
;
448
gi
= 0; i < 16; i++)
449
g�vOut
[
i
] =
�v
[i] *
d�
;
450
g�ue
;
@Maths.h
4 #�agm�
��
5 #i�de�
MATHS_H
6
#MATHS_H
)
9
~<cm�h
>
10
~<�ndom
>
11
#��ri�
__��ri�
)
14
�me�a�
gM�h
16
d�Produ�
(cڡ *
v1
, cڡ *
v2
,
�ride1
= 1,
�ride2
= 1,
cou�
= 4);
17
�ossProdu�
(*
��ri�
out
, cڡ *��ri�
v1
, cڡ *��ri�
v2
);
18
qu�Produ�
(*
��ri�
out
, cڡ *��ri�
v1
, cڡ *��ri�
v2
);
19
��sf�mVe��
(*
��ri�
vout
, cڡ *��ri�
m
, cڡ *��ri�
v�
);
20
n�m�izeVe��
(*
vInOut
,
cou�
= 4);
23
makeId�t�yM�rix4x4
(*
out
);
24
makeP��e�iveM�rix4x4
(*
out
,
a_fov
,
a_a�e�
,
a_ì
,
a_�r
);
25
makeO�hog�phicM�rix4x4
(*
out
, , , , ,
a_ì
,
a_�r
);
26
����i�R٩i�S��ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
����e
, cڡ *��ri�
r�
,
unif�mS��
);
27
����i�Qu�S��ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
����e
, cڡ *��ri�
qu�
,
unif�mS��
);
30
eu�rToQu�
(*
��ri�
out
,
h�d�g
,
�t�ude
,
b�k
);
31
qu�ToM�rix4x4
(*
��ri�
out
, cڡ *��ri�
a_qu�
);
34
����eM�rix4x4
(*
��ri�
�Out
, cڡ *��ri�
vec3
);
35
s��M�rix4x4
(*
��ri�
�Out
, cڡ *��ri�
vec3
);
36
r٩eM�rix4x4
(*
��ri�
�Out
, cڡ *��ri�
vec3
);
37
qu�R٩eM�rix4x4
(*
��ri�
�Out
, cڡ *��ri�
a_qu�
);
39
����eM�rix4x4
(*
�Out
,
x
,
y
,
z
);
40
s��M�rix4x4
(*
�Out
,
x
,
y
,
z
);
41
r٩eM�rix4x4
(*
�Out
,
x
,
y
,
z
);
44
r٩eAxisM�rix4x4
(*
��ri�
�Out
,
�d�ns
, cڡ *��ri�
vec3
);
45
r٩eAxisM�rix4x4
(*
�Out
,
�d
,
x
,
y
,
z
);
48
muɝlyM�rix4x4
(*
��ri�
out
, cڡ *��ri�
m1
, cڡ *��ri�
m2
);
49
bo�
m�rix4x4ToN�m�M�rix3x3
(*
��ri�
out
, cڡ *��ri�
m
);
50
bo�
�v��M�rix4x4
(*
��ri�
out
, cڡ *��ri�
m
);
51
���o�M�rix4x4
(*
��ri�
out
, cڡ *��ri�
m
);
54
deg�esToRad�ns
(
deg�es
);
55
�d�nsToDeg�es
(
�d�ns
);
58
phi
();
65
makeCam�aM�rix
(*
��ri�
out
,
fov
,
a�e�
, cڡ ��ri�
����e
[3], cڡ ��ri�
r٩e
[3],
s��
,
bo�
�tho
);
66
ex�a�Cl�P��s
(
��ri�
��P��s
[6][4], cڡ *��ri�
m
);
67
bo�
isCl��d
(
��P��s
[6][4],
x
,
y
,
z
,
w
,
h
,
d
);
68
�lcFru�um
(
��ri�
�u�umPts
[8][4], cڡ *��ri�
m
);
70
g�m��e
<
ty��me
gT
>
71
�l�e
T
˽
(T
t0
, T
t1
,
�tio
)
73
gt0
+
g�tio
* (
gt1
-�0);
76
g�m��e
<
ty��me
gT
>
77
�l�e
T
�amp
(T
t
, T
t1
, T
t2
)
79
T
gmax
=
t
>
t1
?� :�1;
80
gmax
>
gt2
?�2 :
max
;
92
g�m��e
<
ty��me
gT
>
93
T
modulus
(T
x
, T
y
)
96
gx
-
y
* (
�o�
((
x
)/y));
102
g�m��e
<
ty��me
gT
>
103
modulus
(
x
,
y
)
105
gx
-
y
*
�o�
(
x
/y);
108 �as�
cR�domNumb�G����
110
gpublic
:
111
R�domNumb�G����
(�:
g�
(
rd
()) {}
112
�m��e
<
ty��me
T
>
113
T
g���e
(T
m�
= 0, T
max
=
�d
::
num�ic_lim�s
<T>::max())
115
�d
::
unif�m_�t_di�ributi�
<
T
>
dis
(
m�
,
max
);
116
dis
(
g�
);
118
g�iv�e
:
119
�d
::
�ndom_devi�
rd
;
120
g�d
::
mt19937
g�
;
@fontedit.cpp
1
~<cm�h
>
2
~"M�hs.h
"
4
svec2f
6
mx
,
my
;
9
vec2f
gݔ��
*(cڡ
gvec2f
&
gv
,
gc
)
11 (
gvec2f
){
gv
.
x
*
gc
, v.
y
*c };
14
vec2f
gݔ��
*(
gc
, cڡ
gvec2f
&
gv
)
16 (
gvec2f
){
gv
.
x
*
gc
, v.
y
*c };
19
vec2f
gݔ��
+(cڡ
gvec2f
&
gv1
, cڡ vec2f&
gv2
)
21 (
gvec2f
){
gv1
.
gx
+
gv2
.x, v1.
gy
+v2.y };
28
vec2f
koch�ekB��lsS��e
(cڡ
�d
::
ve��
<vec2f>&
a_po�ts
,
t
,
a_�nsi�
,
a_b�s
,
a_c�t�u�y
)
30
g�ts
=
a_po�ts
.
size
();
31 i�(!
g�ts
)
32 (
gvec2f
){ 0.0f, 0.0f };
33
gt
=
�d
::
max
(0.0f, std::
m�
(1.0f,
t
));
34
g��rv�s
=
�ts
- 1;
35
gn
=
�d
::
max
(0, std::
m�
(
�ts
-1, (
��rv�s
*
t
)));
36
gt
=
t
*
��rv�s
-
n
;
37
gtmp1
= 0.5�* (1.0�-
a_�nsi�
);
38
gA
=
tmp1
* (1.0�+
a_c�t�u�y
�* (1.0�+
a_b�s
);
39
gB
=
tmp1
* (1.0�-
a_c�t�u�y
�* (1.0�-
a_b�s
);
40
gC
=
tmp1
* (1.0�-
a_c�t�u�y
�* (1.0�+
a_b�s
);
41
gD
=
tmp1
* (1.0�+
a_c�t�u�y
�* (1.0�-
a_b�s
);
42 cڡ
gvec2f
&
g�t0
=
a_po�ts
[
�d
::
max
(
n
- 1, 0)];
43 cڡ
gvec2f
&
g�t1
=
a_po�ts
[
n
];
44 cڡ
gvec2f
&
g�t2
=
a_po�ts
[
�d
::
m�
(
�ts
- 1,
n
+ 1)];
45 cڡ
gvec2f
&
g�t3
=
a_po�ts
[
�d
::
m�
(
�ts
- 1,
n
+ 2)];
46
vec2f
gvA
= -
A
*
�t0
+ (2+A-
B
-
C
)*
�t1
+ (-2+B+C-
D
)*
�t2
+ D*
�t3
;
47
vec2f
gvB
= 2*
A
*
�t0
+ (-3-2*A+2*
B
+
C
)*
�t1
+ (3-2*B-C+
D
)*
�t2
+ -D*
�t3
;
48
vec2f
gvC
= -
A
*
�t0
+ (A-
B
)*
�t1
+ B*
�t2
;
49 ((
vA
*
gt
+
gvB
)*�+
gvC
)*�+
g�t1
;
53
svec4f
56
mv
[4];
57 �ru� {
mx
,
my
,
mz
,
mw
; };
62
sm�4f
65
vec4f
mm
[4];
66 �ru� {
vec4f
mt
,
mb
,
mn
,
mw
; };
71
vec4f
gݔ��
+(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
73
vec4f
g�s
= {{{
a
.
x
+
b
.x,�.
y
+ b.y,�.
z
+ b.z,�.
w
+ b.w }}};
74
g�s
;
78
vec4f
gݔ��
-(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
80
vec4f
g�s
= {{{
a
.
x
-
b
.x,�.
y
- b.y,�.
z
- b.z,�.
w
- b.w }}};
81
g�s
;
85
�l�e
$d�3
(cڡ
vec4f
&
a
, cڡ vec4f&
b
)
88
a
.
x
*
b
.x +�.
y
* b.y +�.
z
* b.z;
89
}
}
92
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
94
vec4f
g�s
;
95
g�s
.
gx
=
a
.
x
*
b
.x;
96
g�s
.
gy
=
a
.
y
*
b
.y;
97
g�s
.
gz
=
a
.
z
*
b
.z;
98
g�s
.
gw
=
a
.
w
*
b
.w;
99
g�s
;
103
vec4f
$s��Ve��
(cڡ
vec4f
&
a
,
b
)
105
vec4f
�s
;
106
�s
.
x
=
a
.x *
b
;
107
�s
.
y
=
a
.y *
b
;
108
�s
.
z
=
a
.z *
b
;
109
�s
.
w
=
a
.w *
b
;
110
�s
;
111
}
}
112
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
,
gb
)
114
s��Ve��
(
a
,
b
);
118
sr٩i�
120 cڡ
mvec4f
&
q
()
122
mqu��ni�
;
124 cڡ
mm�4f
&
m
()
126 i�(
md�ty
)
128
c�v�t
();
130
m�chedM�rix
;
132
�t
(
vec4f
qu�
)
134
mqu��ni�
=
qu�
;
135
md�ty
=
�ue
;
138
m�iv�e
:
139
c�v�t
()
141
M�h
::
qu�ToM�rix4x4
(&
�chedM�rix
.
m
[0].
x
, &
qu��ni�
.x);
142
md�ty
=
�l�
;
144
vec4f
mqu��ni�
;
145
bo�
md�ty
=
�ue
;
146
m�4f
m�chedM�rix
;
150
vec4f
$r٩eVe��
(cڡ
vec4f
&
vec
, cڡ
m�4f
&
m�
)
152
vec4f
�s
;
153
M�h
::
`��sf�mVe��
(&
�s
.
x
, &
m�
.
t
.x, &
vec
.x);
154
�s
;
155
}
}
156
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
, cڡ
gm�4f
&
gm�
)
158
r٩eVe��
(
a
,
m�
);
162
$ve��L�gth
(
vec4f
&
vec
)
164
`sq�
(
M�h
::
`d�Produ�
(&
vec
.
x
, &vec.x, 1, 1, 3));
165
}
}
168
~<O�nGL/gl.h
>
171
~"Widg�.h
"
172
~"Comm�Widg�s.h
"
173
~"Pa��r.h
"
174
~"A�li�ti�.h
"
175
USING_NAMESPACE
178 �as�
cNamedSlid�
:
public
HBox
180
public
:
181
NamedSlid�
(
Widg�
*
���
,
Prݔty
<>&
v�ue
, cڡ *
�me
�:
$HBox
(
���
)
183
�b�
=
�me
;
184
�w
`Lab�
(
this
,
�b�
);
185
�w
`Slid�
(
this
,
v�ue
);
187
Prݔty
<
S��g
>
�b�
;
188
}
};
191 �as�
cF�tEd�W�dow
:
public
Widg�
193
VBox
vbox
;
194
Bu��
mqu�Bu��
;
195
mPrݔty
<
mbo�
>
mu�RoundP�
;
196
mPrݔty
<
mbo�
>
mu�Squ�eP�
;
197
mPrݔty
<
mbo�
>
mu�F�tP�
;
198
mPrݔty
<>
mb�s
;
199
mPrݔty
<>
mc�t�u�y
;
200
mPrݔty
<>
m�nsi�
;
201
mPrݔty
<>
mas��
;
202
mPrݔty
<>
mdes��
;
203
mPrݔty
<>
m�g�
;
204
mPrݔty
<>
mwidth
;
205
mPrݔty
<>
m�nAng�
;
206
mPrݔty
<>
m�nWidth
;
207
mPrݔty
<>
mch�a��
;
208
mpublic
:
209
$F�tEd�W�dow
(
Widg�
*
a_���
, cڡ *
a_�me
)
210 :
`Widg�
(
a_���
,
a_�me
)
211 ,
`vbox
(
this
)
212 ,
`qu�Bu��
(&
vbox
, "Quit")
214
�w
`CheckBox
(&
vbox
,
u�RoundP�
, "Use Round Pen");
215
�w
`CheckBox
(&
vbox
,
u�Squ�eP�
, "Use Square Pen");
216
�w
`CheckBox
(&
vbox
,
u�F�tP�
, "Use Flat Pen");
217
Grid
*
g
=
�w
`Grid
(&
vbox
, 2);
218
�w
`GridSlid�
(
g
,
b�s
, "Bias");
219
�w
`GridSlid�
(
g
,
c�t�u�y
, "Continuity");
220
�w
`GridSlid�
(
g
,
�nsi�
, "Tension");
221
�w
`GridSlid�
(
g
,
as��
, "Ascender Height");
222
�w
`GridSlid�
(
g
,
des��
, "Descender Height");
223
�w
`GridSlid�
(
g
,
�g�
, "Angle");
224
�w
`GridSlid�
(
g
,
width
, "Width");
225
�w
`GridSlid�
(
g
,
�nAng�
, "Pen Angle");
226
�w
`GridSlid�
(
g
,
�nWidth
, "Pen Width");
227
�w
`GridSlid�
(
g
,
ch�a��
, "Character");
228
`c���
(
qu�Bu��
.
a�iv�ed
,
this
, &
F�tEd�W�dow
::
�Qu�
);
229
b�s
= (1<<15);
230
�nsi�
= (1<<15);
231
c�t�u�y
= (1<<16);
234
$�Qu�
()
236
`ex�
(0);
237
}
}
239
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
�
ov�ride
266
`���t
();
267
}
}
269
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
�
ov�ride
271
Pa��r
`p
(
this
);
272
p
.
`�tP�
(0x000000);
273
w
=
`width
() / 2;
274
h
=
`height
() / 2;
275
p
.
`d�wL�e
(5, 5,
w
-5, 5);
276
p
.
`d�wL�e
(5, 5, 5,
h
-5);
277
p
.
`d�wL�e
(
w
-5, 5, w-5,
h
-5);
278
p
.
`d�wL�e
(5,
h
-5,
w
-5, h-5);
281
s��
= 50;
282
x1
= 350;
283
y1
= 100;
284
�nWidth
= 7;
286
x��
=
s��
;
287
y��
=
s��
;
288
w2
=
y��
*3;
289
h2
=
x��
*3;
290
i
= 0; i < 4; i++)
291
p
.
`d�wL�e
(
x1
,
y1
+
y��
*
i
, x1+
w2
, y1+ystep*i);
292
i
= 0; i < 4; i++)
293
p
.
`d�wL�e
(
x1
+
x��
*
i
,
y1
, x1+x��*i, y1+
h2
);
295
cx
=
x1
+
x��
+ (x�� -
�nWidth
) / 2;
296
cy
=
y1
+
y��
* 1.5f;
311
�d
::
ve��
<
vec2f
>
�ts
[16];
313
�ts
[0].
`push_back
((
vec2f
){ (
x1
+
x��
),
cy
});
314
�ts
[0].
`push_back
((
vec2f
){ (
x1
+
x��
�+ 5,
cy
- 10 });
315
�ts
[0].
`push_back
((
vec2f
){
cx
- 10, (
y1
+
y��
+ 5) });
316
�ts
[0].
`push_back
((
vec2f
){
cx
, (
y1
+
y��
) });
317
�ts
[0].
`push_back
((
vec2f
){
cx
+ 10, (
y1
+
y��
+ 5) });
318
�ts
[0].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
�- 5,
cy
- 15 });
319
�ts
[0].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
),
cy
- 5 });
322
�ts
[1].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+
y��
+ 2) });
323
�ts
[1].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+ 2*
y��
+ 2) });
326
�ts
[2].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+ 2) });
327
�ts
[2].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+ 2*
y��
+ 2) });
330
�ts
[3].
`push_back
((
vec2f
){ (
x1
+
x��
+
�nWidth
), (
cy
) });
331
�ts
[3].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
cy
) });
334
�ts
[4].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
cy
) });
335
�ts
[4].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+ 2*
y��
+ 2) });
338
�ts
[4].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
cy
) });
339
�ts
[4].
`push_back
((
vec2f
){ (
x1
+ 2*
x��
-
�nWidth
), (
y1
+ 2*
y��
+ 2) });
381 �ru� {
�ags
;
�dex
; }
ch�a��s
[][5] = {
410
ch
= 'a' + ((
ch�a��
.
`v�ue
() * 26) >> 16);
411
idx
=
ch
- 'a';
412
i
= 0; i < 5; i++)
414
�ags
=
ch�a��s
[
idx
][
i
].flags;
415
�dex
=
ch�a��s
[
idx
][
i
].index;
416 i�(
�ags
== -1)
418
`d�wCurve
(
p
,
`��yF�gs
(
�ags
,
�ts
[
�dex
],
cx
,
cy
),
�nWidth
);
420
}
}
422
g�d
::
ve��
<
vec2f
>
��yF�gs
(
�ags
,
�d
::ve��<vec2f>&
�ts
,
cx
,
cy
)
424
g�d
::
ve��
<
vec2f
>
out
=
�ts
;
425 i��
g�ags
& 1 )
428
gvec2f
&
g�
:
out
)
430
�
.
y
= 2*
cy
-�t.y;
433 i��
g�ags
& 2 )
436
gvec2f
&
g�
:
out
)
438
�
.
x
= 2*
cx
-�t.x;
441
gout
;
444
d�wCurve
(
Pa��r
&
p
, cڡ
�d
::
ve��
<
vec2f
>&
�ts
,
�nWidth
)
446
gt
= (
�nsi�
.
v�ue
() - (1<<15)) / (1<<15);
447
gb
= (
b�s
.
v�ue
() - (1<<15)) / (1<<15);
448
gc
= (
c�t�u�y
.
v�ue
() - (1<<15)) / (1<<15);
449
gi
= 0; i < 100; i++)
451
vec2f
koch�ekB��lsS��e
(cڡ
�d
::
ve��
<vec2f>&
a_po�ts
,
t
,
a_�nsi�
,
a_b�s
,
a_c�t�u�y
);
452
vec2f
gp1
=
koch�ekB��lsS��e
(
�ts
, (
i
-0.5f�* 0.01f,
t
,
b
,
c
);
453
vec2f
gp2
=
koch�ekB��lsS��e
(
�ts
, (
i
+0.5f�* 0.01f,
t
,
b
,
c
);
454
gp
.
d�wL�e
((
p1
.
x
), �1.
y
), (
p2
.x), (p2.y));
455
gp
.
d�wL�e
((
p1
.
x
�+
�nWidth
, �1.
y
�- 3, (
p2
.x) +�enWidth, (p2.y) - 3);
459
g�iv�e
:
467
$f�tEd�Te�
()
469
A�li�ti�
�p
;
470
F�tEd�W�dow
`��W�
(0, "Test Window");
471
��W�
.
`�tNewSize
(800, 600);
472
�p
.
`exec
();
473
`ex�
(0);
474
}
}
@formfactors.cpp
1
~<cm�h
>
2
~"M�hs.h
"
5
svec4f
8
mv
[4];
9 �ru� {
mx
,
my
,
mz
,
mw
; };
14
sm�4f
17
vec4f
mm
[4];
18 �ru� {
vec4f
mt
,
mb
,
mn
,
mw
; };
23
vec4f
gݔ��
+(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
25
vec4f
g�s
= {{{
a
.
x
+
b
.x,�.
y
+ b.y,�.
z
+ b.z,�.
w
+ b.w }}};
26
g�s
;
30
vec4f
gݔ��
-(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
32
vec4f
g�s
= {{{
a
.
x
-
b
.x,�.
y
- b.y,�.
z
- b.z,�.
w
- b.w }}};
33
g�s
;
37
�l�e
$d�3
(cڡ
vec4f
&
a
, cڡ vec4f&
b
)
40
a
.
x
*
b
.x +�.
y
* b.y +�.
z
* b.z;
41
}
}
44
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
, cڡ vec4f&
gb
)
46
vec4f
g�s
;
47
g�s
.
gx
=
a
.
x
*
b
.x;
48
g�s
.
gy
=
a
.
y
*
b
.y;
49
g�s
.
gz
=
a
.
z
*
b
.z;
50
g�s
.
gw
=
a
.
w
*
b
.w;
51
g�s
;
55
vec4f
$s��Ve��
(cڡ
vec4f
&
a
,
b
)
57
vec4f
�s
;
58
�s
.
x
=
a
.x *
b
;
59
�s
.
y
=
a
.y *
b
;
60
�s
.
z
=
a
.z *
b
;
61
�s
.
w
=
a
.w *
b
;
62
�s
;
63
}
}
64
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
,
gb
)
66
s��Ve��
(
a
,
b
);
70
sr٩i�
72 cڡ
mvec4f
&
q
()
74
mqu��ni�
;
76 cڡ
mm�4f
&
m
()
78 i�(
md�ty
)
80
c�v�t
();
82
m�chedM�rix
;
84
�t
(
vec4f
qu�
)
86
mqu��ni�
=
qu�
;
87
md�ty
=
�ue
;
90
m�iv�e
:
91
c�v�t
()
93
M�h
::
qu�ToM�rix4x4
(&
�chedM�rix
.
m
[0].
x
, &
qu��ni�
.x);
94
md�ty
=
�l�
;
96
vec4f
mqu��ni�
;
97
bo�
md�ty
=
�ue
;
98
m�4f
m�chedM�rix
;
102
vec4f
$r٩eVe��
(cڡ
vec4f
&
vec
, cڡ
m�4f
&
m�
)
104
vec4f
�s
;
105
M�h
::
`��sf�mVe��
(&
�s
.
x
, &
m�
.
t
.x, &
vec
.x);
106
�s
;
107
}
}
108
vec4f
gݔ��
*(cڡ
gvec4f
&
ga
, cڡ
gm�4f
&
gm�
)
110
r٩eVe��
(
a
,
m�
);
114
$ve��L�gth
(
vec4f
&
vec
)
116
`sq�
(
M�h
::
`d�Produ�
(&
vec
.
x
, &vec.x, 1, 1, 3));
117
}
}
120
sRay
122
vec4f
m��t
,
m�d
;
123
vec4f
m�vN
;
128
#TOPX
64
129
)
132
sP�ch
134
vec4f
mn�m�
;
136
vec4f
mpos�i�
;
137
mquadIndex
;
139
mw
,
mh
;
141
mu
,
mv
;
143
vec4f
mc��
;
144
vec4f
m�wC��
;
146
bo�
m�Shadow
;
147
md�e�LightI��s�y
;
149
mwܡFF
;
150
mt�FF
[
TOPX
];
151
mt�Idx
[
TOPX
];
154
mtٮF�mFa��s
;
158
eSh�eTy�
160
mBox
164
sSh�e
166
Sh�eTy�
mm_ty�
;
167
mx
,
my
,
mz
,
mw
,
mh
,
md
;
171
sW�dowP�am��s
173
mw
,
mh
;
177
sCam�aP�am��s
179
vec4f
mpos�i�
;
180
vec4f
mr٩i�
;
184
sLightP�am��s
186
vec4f
mpos�i�
;
187
vec4f
mc��
;
188
mpow�
;
189
msh��ess
;
190
bo�
m��Shadows
;
194
sRadios�yP�am��s
196
mt�XToU�
;
197
m�tchSize
;
198
mtimesP�F�me
;
199
ma
,
mb
,
mc
,
md
;
203
sV��x
205
vec4f
mpos�i�
;
206
vec4f
muv
;
210
sQuad
213
vec4f
ma
,
mb
,
mc
,
md
;
214
vec4f
muvs
[4];
215
vec4f
mc��
;
216
m�4f
mbasis
;
220
sTextu�
222
u�t32_t
*
mb�s
;
223
mw
,
mh
;
224
u�t32_t
m��e
;
225
u�t32_t
m�xId
;
229
g�m��e
<
ty��me
gT
>
230
�l�e
cڡex�
T
$cڡPow
(cڡ
T
ba�
, cڡ T
expڒt
)
232 (
expڒt
=�0�? 1 : (
ba�
*
`cڡPow
(base,�xponent - 1));
233
}
}
241
g�m��e
<
gD
>
242 �as�
cDT�e
244
mpublic
:
245
spos
247
v
[
D
];
250 �as�
cObje�I����
252
gpublic
:
253
v�tu�
pos
pos�i�
() = 0;
258
sDT�ePo�t
260
gv
[
D
];
264
sDT�eBounds
266
DT�ePo�t
g�ig�
;
267
gsize
;
269
g�iv�e
:
273 cڡ
maxCh�d�n
=
cڡPow
(2,
D
);
275 �as�
cDT�eNode
277
gpublic
:
278
DT�eNode
*
nodes
[
maxCh�d�n
];
279
DT�eNode
()
281
mem�t
(
nodes
, 0, (nodes));
283
AddI�m
(
Obje�I����
*
�em
)
285
g�ems
.
push_back
(
�em
);
287
RemoveI�m
(
Obje�I����
*
�em
)
289
g�ems
.
�a�
(
�d
::
�move
(
�ems
.
beg�
(), i�ms.
�d
(),
�em
), items.end());
291
size_t
I�mCou�
()
293
g�ems
.
size
();
296
g�d
::
ve��
<
Obje�I����
*>
�ems
;
299
gpublic
:
300
$DT�e
(
_�s�uti�
= 1.0f)
302
�s�uti�
=
_�s�uti�
;
303
}
}
305 ~
$DT�e
()
308
}
}
311
$AddObje�
(
Obje�I����
*
�em
)
313 aut�
addFun��
= [](
DT�eNode
&
node
,
Obje�I����
*
�em
�{�ode.
`AddI�m
(item); };
314
DT�ePo�t
�t
=
`Qu�tizePo�t
(
�em
->
`pos�i�
());
315
`Ex�nd
(
�t
);
316
`T�v��
(
addFun��
, *
ro�Node
,
bounds
,
�t
,
�em
);
317
}
}
319
$RemoveObje�
(
Obje�I����
*
�em
)
325
`RemoveT�v��
(*
ro�Node
,
bounds
,
`Qu�tizePo�t
(
�em
->
pos�i�
), item);
326
}
}
328
$MoveObje�
(
Obje�I����
*
�em
,
pos
�t
)
330
DT�ePo�t
�dP�
=
`Qu�tizePo�t
(
�em
->
`pos�i�
());
331
DT�ePo�t
�wP�
=
`Qu�tizePo�t
(
�t
);
332
`MoveT�v��
(*
ro�Node
,
bounds
,
�dP�
,
�wP�
,
�em
);
333
}
}
335 cڡ
gmaxT�eD�th
= 32;
337
sQu�yCڋxt
339
Qu�yCڋxt
(
�d
::
fun�i�
<
bo�
(cڡ
DT�eBounds
&)>
f
�:
func
(f) {}
342
�d
::
fun�i�
<
bo�
(cڡ
DT�eBounds
&)>
func
;
345
g�cur�D�th
;
359
g��e
[
maxT�eD�th
];
360
DT�eNode
*
gnodeS�ck
[
maxT�eD�th
];
361
DT�eBounds
gbounds
[
maxT�eD�th
];
362
g�dex
[
maxT�eD�th
];
363
go��t
[
maxT�eD�th
];
366
Qu�yCڋxt
In��lizeQu�y
(
�d
::
fun�i�
<
bo�
(cڡ
DT�eBounds
&)>
func
)
368
Qu�yCڋxt
cڋxt
(
func
);
369
gcڋxt
.
g�cur�D�th
= 0;
370
Qu�yIn�S�ckH��r
(
cڋxt
,
ro�Node
,
bounds
);
371
gcڋxt
;
374
$Qu�yIn�S�ckH��r
(
Qu�yCڋxt
&
cڋxt
,
DT�eNode
*
node
, cڡ
DT�eBounds
&
b
)
376
cڋxt
.
nodeS�ck
[cڋxt.
�cur�D�th
] =
node
;
377
cڋxt
.
bounds
[cڋxt.
�cur�D�th
] =
b
;
378
cڋxt
.
�dex
[cڋxt.
�cur�D�th
] = 0;
379
cڋxt
.
o��t
[cڋxt.
�cur�D�th
] = 0;
380
cڋxt
.
��e
[cڋxt.
�cur�D�th
] = 0;
381
}
}
383
Obje�I����
*
$Qu�yNextH��r
(
Qu�yCڋxt
&
cڋxt
,
DT�eNode
*
node
, cڡ
DT�eBounds
&
b
)
385
cڋxt
.
�cur�D�th
++;
386
`Qu�yIn�S�ckH��r
(
cڋxt
,
node
,
b
);
387
`Qu�yNext
(
cڋxt
);
388
}
}
390
#C�out�eBeg�
��e
�{ 0:
)
391
#C�out�eEm�
(
x
�d�{
��e
=
__LINE__
; x; __LINE__:; } 0)
)
392
#C�out�eEnd
}
)
}
394
Obje�I����
*
$Qu�yNext
(
Qu�yCڋxt
&
cڋxt
)
396
DT�eNode
*
node
=
cڋxt
.
nodeS�ck
[cڋxt.
�cur�D�th
];
397
DT�eBounds
&
b
=
cڋxt
.
bounds
[cڋxt.
�cur�D�th
];
398 &
�dex
=
cڋxt
.�dex[cڋxt.
�cur�D�th
];
399 &
q
=
cڋxt
.
o��t
[cڋxt.
�cur�D�th
];
400 &
��e
=
cڋxt
.��e[cڋxt.
�cur�D�th
];
401
DT�eNode
*
ch�dNode
;
402
DT�eBounds
ch�dBounds
;
405
C�out�eBeg�
407 i�(
b
.
size
== 1)
409
�dex
<
node
->
`I�mCou�
())
411
�dex
++;
412
node
->
�ems
[
�dex
- 1];
414
cڋxt
.
�cur�D�th
--;
415
`Qu�yNext
(
cڋxt
);
418
q
<
maxCh�d�n
)
420
ch�dNode
=
node
->
nodes
[
q
];
421 i�(
ch�dNode
)
423
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
424 i�(
cڋxt
.
`func
(
ch�dBounds
))
426
`C�out�eEm�
(
`Qu�yNextH��r
(
cڋxt
,
ch�dNode
,
ch�dBounds
));
429
q
++;
432 i�(
cڋxt
.
�cur�D�th
)
434
cڋxt
.
�cur�D�th
--;
435
`Qu�yNext
(
cڋxt
);
438
C�out�eEnd
440
nuαr
;
441
}
}
445
g�d
::
ve��
<
Obje�I����
*>
Qu�yExecu�
(
�d
::
fun�i�
<
bo�
(cڡ
DT�eBounds
&)>
func
)
447
�d
::
ve��
<
Obje�I����
*>
�t
;
448
Qu�yExecu�Recur�
(
�t
,
func
,
ro�Node
,
bounds
);
449
g�t
;
453
Qu�yExecu�Recur�
(
�d
::
ve��
<
Obje�I����
*>&
�t
, std::
fun�i�
<
bo�
(cڡ
DT�eBounds
&)>
func
,
454
DT�eNode
*
node
, cڡ
DT�eBounds
&
b
)
456
DT�eNode
*
gch�dNode
;
457
DT�eBounds
gch�dBounds
;
459 i�(
gb
.
gsize
== 1)
461
�dex
= 0;
462
g�dex
<
gnode
->
I�mCou�
())
464
g�dex
++;
465
g�t
.
push_back
(
node
->
�ems
[
�dex
- 1]);
470
gq
= 0;
471
gq
<
gmaxCh�d�n
)
473
gch�dNode
=
node
->
nodes
[
q
];
474 i�(
gch�dNode
)
476
gch�dBounds
=
Ch�dBounds
(
b
,
q
);
477 i�(
func
(
ch�dBounds
))
479
Qu�yExecu�Recur�
(
�t
,
func
,
ch�dNode
,
ch�dBounds
);
482
gq
++;
487
DT�eBounds
gbounds
;
489
g�iv�e
:
505
�s�uti�
;
506
DT�eNode
*
gro�Node
=
nuαr
;
508
$Qu�tizeV�ue
(
v�ue
)
510 ()
�d
::
`�o�
((
v�ue
+
�s�uti�
* 0.5f) /�esolution);
511
}
}
513
DT�ePo�t
$Qu�tizePo�t
(
pos
�t
)
515
DT�ePo�t
p
;
516
i
= 0; i <
D
; i++)
518
p
.
v
[
i
] =
`Qu�tizeV�ue
(
�t
.v[i]);
520
p
;
521
}
}
523
$Ex�nd
(cڡ
DT�ePo�t
&
�t
)
525 i�(!
ro�Node
)
527
ro�Node
=
�w
DT�eNode
;
528
bounds
.
�ig�
=
�t
;
529
bounds
.
size
= 1;
532
`Ex�ndRecur�
(
�t
);
533
}
}
535
�l�e
DT�eBounds
$Ch�dBounds
(cڡ
DT�eBounds
&
b
,
quad��
)
537
DT�eBounds
ch�dBounds
=
b
;
538
ch�dBounds
.
size
=
b
.size >> 1;
544
i
= 0; i <
D
; i++)
546
ch�dBounds
.
�ig�
.
v
[
i
] +�(
quad��
& (1<<i)�? ch�dBounds.
size
: 0;
549
ch�dBounds
;
550
}
}
552
�l�e
bo�
$Po�tInBounds
(cڡ
DT�ePo�t
&
�t
, cڡ
DT�eBounds
&
b
)
557
i
= 0; i <
D
; i++)
559 i�((
�t
.
v
[
i
] <
b
.
�ig�
.v[i]�|| (�t.v[i] >�(b.�ig�.v[i] + b.
size
)))
560
�l�
;
562
�ue
;
563
}
}
565
bo�
$RemoveT�v��
(
DT�eNode
&
node
, cڡ
DT�eBounds
&
b
, cڡ
DT�ePo�t
&
�t
,
Obje�I����
*
�em
)
567 i�(
b
.
size
== 1)
569
node
.
`RemoveI�m
(
�em
);
570
node
.
`I�mCou�
() == 0;
573
q
= 0; q <
maxCh�d�n
; q++)
575
DT�eBounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
576 i�(
`Po�tInBounds
(
�t
,
ch�dBounds
))
579 i�(
`RemoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�t
,
�em
))
581
d��e
node
.
nodes
[
q
];
582
node
.
nodes
[
q
] = 0;
591
i
= 0; i <
maxCh�d�n
; i++)
593 i�(
node
.
nodes
[
i
])
594
�l�
;
596
�ue
;
597
}
}
600
$MoveT�v��
(
DT�eNode
&
node
, cڡ
DT�eBounds
&
b
, cڡ
DT�ePo�t
&
�dP�
, cڡ DT�ePo�t&
�wP�
,
Obje�I����
*
�em
)
603
q
= 0; q <
maxCh�d�n
; q++)
605
DT�eBounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
606
bo�
�dIn
=
`Po�tInBounds
(
�dP�
,
ch�dBounds
);
607
bo�
�wIn
=
`Po�tInBounds
(
�wP�
,
ch�dBounds
);
608 i�(
�dIn
&&
�wIn
)
611
`MoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�dP�
,
�wP�
,
�em
);
613 i�(
�dIn
)
616
`RemoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�dP�
,
�em
);
618 i�(
�wIn
)
620 aut�
addFun��
= [](
DT�eNode
&
node
,
Obje�I����
*
�em
�{�ode.
`AddI�m
(item); };
621
`T�v��
(
addFun��
, *
node
.
nodes
[
q
],
ch�dBounds
,
�wP�
,
�em
);
624
}
}
626
g�m��e
<
ty��me
gF
>
627
$T�v��
(cڡ
F
&
func
,
DT�eNode
&
node
, cڡ
DT�eBounds
&
b
, cڡ
DT�ePo�t
&
�t
,
Obje�I����
*
�em
)
629 i�(
b
.
size
== 1)
631
`func
(
node
,
�em
);
634
q
= 0; q <
maxCh�d�n
; q++)
636
DT�eBounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
637 i�(
`Po�tInBounds
(
�t
,
ch�dBounds
))
639 i�(!
node
.
nodes
[
q
])
640
node
.
nodes
[
q
] =
�w
DT�eNode
;
641
`T�v��
(
func
, *
node
.
nodes
[
q
],
ch�dBounds
,
�t
,
�em
);
654
}
}
656
g�m��e
<
ty��me
gA�i�F
,�y��m�
gT�m��eF
,�y��m�
gTe�F
,�y��m�
gNu�Node
>
657
$T�v��G��ic
(cڡ
A�i�F
&
a�i�
, cڡ
T�m��eF
&
�rm
, cڡ
Te�F
&
��
, cڡ
Nu�Node
&
nu�Node
,
DT�eNode
&
node
, cڡ
DT�eBounds
&
b
,
bo�
��yOut
)
659 i�(
`�rm
(
node
,
b
))
661
`a�i�
(
node
,
b
);
664
q
= 0; q <
maxCh�d�n
; q++)
666
DT�eBounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
667 i�(
`��
(
node
,
ch�dBounds
))
669 i�(!
node
.
nodes
[
q
])
670
`nu�Node
(
node
,
q
);
671 i�(!
node
.
nodes
[
q
])
672
`T�v��G��ic
(
a�i�
,
�rm
,
��
,
nu�Node
, *
node
.
nodes
[
q
],
ch�dBounds
,
��yOut
);
673 i�(
��yOut
)
677
}
}
679
$Ex�ndRecur�
(cڡ
DT�ePo�t
&
�t
)
684
bo�
midd�
=
�ue
;
685
axis
= 0;�xi�<
D
;�xis++)
687
bo�
��
=
�t
.
v
[
axis
] <
bounds
.
�ig�
.v[axis];
688
bo�
right
=
�t
.
v
[
axis
] >�(
bounds
.
�ig�
.v[axis] + bounds.
size
);
689 i�(
��
||
right
)
691
midd�
=
�l�
;
695 i�(
midd�
)
699
o��t
= 0;
700
axis
= 0;�xi�<
D
;�xis++)
702
bo�
��
=
�t
.
v
[
axis
] <
bounds
.
�ig�
.v[axis];
703
o��t
|�(
��
�? (1<<
D
) : 0;
704
bounds
.
�ig�
.
v
[
axis
] -�(
��
�? bounds.
size
: 0;
706
bounds
.
size
<<= 1;
707
DT�eNode
*
�wRo�Node
=
�w
DTreeNode;
708
�wRo�Node
->
nodes
[
o��t
] =
ro�Node
;
709
ro�Node
=
�wRo�Node
;
710
`Ex�ndRecur�
(
�t
);
714
growD�e�i�F�gs
= 0;
715
growD�e�i�F�gs
|�(
�t
.
x
<
bounds
.
�ig�
.x) ? (1<<0) : 0;
716
growD�e�i�F�gs
|�(
�t
.
x
>�(
bounds
.
�ig�
.x + bounds.
size
)) ? (1<<1) : 0;
717
growD�e�i�F�gs
|�(
�t
.
y
<
bounds
.
�ig�
.y) ? (1<<2) : 0;
718
growD�e�i�F�gs
|�(
�t
.
y
>�(
bounds
.
�ig�
.y + bounds.
size
)) ? (1<<3) : 0;
720
�dRo�Quad��
= 0;
721
growD�e�i�F�gs
) {
724 (1<<3�| (1<<0):
�dRo�Quad��
= 3; ;
726 (1<<1�| (1<<3):
�dRo�Quad��
= 2; ;
728 (1<<0�| (1<<2):
�dRo�Quad��
= 1; ;
730 (1<<2�| (1<<1):
�dRo�Quad��
= 0; ;
733
q
=
�dRo�Quad��
;
734
bounds
.
�ig�
.
x
-�(
q
& 1�? bounds.
size
: 0;
735
bounds
.
�ig�
.
y
-�(
q
& 2�? 0 : bounds.
size
;
736
bounds
.
size
<<= 1;
737
DT�eNode
*
�wRo�Node
=
�w
DTreeNode;
738
�wRo�Node
->
nodes
[
q
] =
ro�Node
;
739
ro�Node
=
�wRo�Node
;
740
`Ex�ndRecur�
(
�t
);
742
}
}
789
sS��
791
W�dowP�am��s
mw�dow
;
792
Radios�yP�am��s
m���gs
;
793
Cam�aP�am��s
m�m�a
;
794
LightP�am��s
mlight
;
796
mDT�e
<3>
m�tchO��e
;
797
Textu�
m�xtu�
= {
nuαr
, -1, -1, 0, 0 };
798
m�d
::
ve��
<
Sh�e
>
obje�s
;
799
m�d
::
ve��
<
Quad
>
quads
;
800
m�d
::
ve��
<
P�ch
>
�tches
;
824
$sim�eF�mFa��I���l
(cڡ
vec4f
&
p1
, cڡ vec4f&
p2
, cڡ vec4f&
n1
, cڡ vec4f&
n2
)
826
vec4f
�tch1�tch2
=
p2
-
p1
;
827
magSqr
=
`d�3
(
�tch1�tch2
,�atch1patch2);
828
d�1
=
`d�3
(
n1
,
�tch1�tch2
);
829
d�2
= -
`d�3
(
n2
,
�tch1�tch2
);
830 i�(
d�2
< 0.0�||
d�1
< 0.0f)
832 (
d�1
*
d�2
�/ (
M_PI
*
magSqr
* magSqr);
833
}
}
838
$sim�eF�mFa��
(cڡ
P�ch
&
�tch1
, cڡ P�ch&
�tch2
, cڡ
S��
&
s�
)
841
vec4f
�tch1�tch2
=
�tch2
.
pos�i�
-
�tch1
.position;
842
magSqr
=
`d�3
(
�tch1�tch2
,�atch1patch2);
875
d�1
=
`d�3
(
�tch1
.
n�m�
,
�tch1�tch2
);
876
d�2
= -
`d�3
(
�tch2
.
n�m�
,
�tch1�tch2
);
877 i�(
d�2
< 0.0�||
d�1
< 0.0f)
879 (
d�1
*
d�2
�/ (
M_PI
*
magSqr
* magSqr);
880
}
}
883
$f�lTextu�A�a
(
u�t32_t
*
�x
,
�xWidth
,
x
,
y
,
w
,
h
, u�t32_�
c�
)
885
u�t32_t
*
�r
=
�x
+
y
*
�xWidth
+
x
;
886
y
= 0; y <
h
; y++)
888
u�t32_t
*
p
=
�r
+
y
*
�xWidth
;
889
x
= 0; x <
w
; x++)
891
p
[
x
] = 0xFF000000 |
c�
;
908
}
}
911
$���Textu�
(
S��
&
s�
)
935
tٮHeight
= 0.0f;
936
tٮWidth
= 0.0f;
937 aut�
o
:
s�
.
obje�s
)
939 i�(
o
.
m_ty�
=�
Box
)
941
w
=
o
.w + o.w + o.
d
;
942
h
=
�d
::
`max
(
o
.h, o.
d
);
943
tٮWidth
=
�d
::
`max
�ٮWidth,
w
) + 12.0f;
944
tٮHeight
+�
h
+ 4.0f;
947
maxDim
=
�d
::
`max
(
tٮWidth
,
tٮHeight
);
948
�tchSize
=
s�
.
���gs
.patchSize;
949
maxDim
/�
�tchSize
;
950
dim
= ()
maxDim
;
951
�xtPow�OfTwo
= 2;
952
�xtPow�OfTwo
<
dim
)
953
�xtPow�OfTwo
<<= 1;
954
dim
=
�xtPow�OfTwo
;
955
`��tf
("Lightm��extu� dim: %i\n",
dim
);
956
Textu�
�xtu�
= { (
u�t32_t
*)
`m�loc
(
dim
*dim*(uint32_t)), dim, dim, 0, 0 };
957
i
= 0; i <
dim
*dim; i++)
958
�xtu�
.
b�s
[
i
] = 0xFF0F0FFF;
959
s�
.
�xtu�
=�exture;
960
}
}
963
$c�v�tObje�sToQuads
(
S��
&
s�
)
965
v
= 0;
966
`f�lTextu�A�a
(
s�
.
�xtu�
.
b�s
, s�.�xtu�.
w
, 0, 0, s�.�xtu�.w, s�.�xtu�.
h
, 0);
967 aut�
o
:
s�
.
obje�s
)
969 i�(
o
.
m_ty�
=�
Box
)
972
w
=
o
.w;
973
h
=
o
.h;
974
d
=
o
.d;
975
�tchSize
=
s�
.
���gs
.patchSize;
976
w
/�
�tchSize
;
977
h
/�
�tchSize
;
978
d
/�
�tchSize
;
979
w
+= 1.0f;
980
h
+= 1.0f;
981
d
+= 1.0f;
989
u1
= 2.0f;
990
u2
=
u1
+
w
+ 4.0f;
991
u3
=
u2
+
w
+ 4.0f;
992
u4
=
u3
+
d
+ 2.0f;
993
v1
=
v
+ 2.0f;
994
v2
=
v1
+ 2.0�+
h
;
995
v3
=
v1
+ 2.0�+
d
;
996
v4
=
v1
+ 2.0�+
h
;
997
tw
=
s�
.
�xtu�
.
w
;
998
th
=
s�
.
�xtu�
.
h
;
1008
uvs
[6][4][2] = {
1009 { {
u1
,
v1
}, { u1,
v2
}, {
u2
, v2 }, { u2, v1 } },
1010 { {
u2
,
v1
}, { u2,
v3
}, {
u3
, v3 }, { u3, v1 } },
1011 { {
u3
,
v1
}, { u3,
v4
}, {
u4
, v4 }, { u4, v1 } },
1013 { {
u4
+
u3
,
v1
}, { u4+u3,
v4
}, { u4+u4, v4 }, { u4+u4, v1 } },
1014 { {
u4
+
u1
,
v1
}, { u4+u1,
v2
}, { u4+
u2
, v2 }, { u4+u2, v1 } },
1015 { {
u4
+
u2
,
v1
}, { u4+u2,
v3
}, { u4+
u3
, v3 }, { u4+u3, v1 } },
1025
v
+�
�d
::
`max
(
h
,
d
);
1026
v
+= 2.0f;
1028
vec4f
v�ts
[8];
1029
i
= 0; i < 8; i++)
1031
x
=
o
.x + ((
i
&1�? o.
w
: 0.0f);
1032
y
=
o
.y + ((
i
&2�? o.
h
: 0.0f);
1033
z
=
o
.z + ((
i
&4�? o.
d
: 0.0f);
1034
v�ts
[
i
] = {{{
x
,
y
,
z
, 0.0f }}};
1038
v�tIndexes
[6][4] = { { 0, 2, 3, 1 }, { 2, 6, 7, 3 }, { 1, 3, 7, 5 }, { 0, 4, 6, 2 }, { 4, 5, 7, 6 }, { 0, 1, 5, 4 } };
1041
vec4f
c��s
[6] = { {{{ 0.0f, 1.0f, 0.0f, 0.0f }}}, {{{ 0.0f, 0.0f, 1.0f, 0.0f }}}, {{{ 0.0f, 1.0f, 0.0f, 0.0f }}},
1043
quad
= 0; quad < 6; quad++)
1045
Quad
q
;
1046
q
.
a
=
v�ts
[
v�tIndexes
[
quad
][0]];
1047
q
.
b
=
v�ts
[
v�tIndexes
[
quad
][1]];
1048
q
.
c
=
v�ts
[
v�tIndexes
[
quad
][2]];
1049
q
.
d
=
v�ts
[
v�tIndexes
[
quad
][3]];
1050
q
.
c��
=
c��s
[
quad
];
1052
i
= 0; i < 4; i++)
1053
q
.
uvs
[
i
] = {{{ uvs[
quad
][i][0]/(
tw
), uvs[quad][i][1]/(
th
), 0.0f, 0.0f }}};
1056
q
.
basis
.
t
= q.
b
- q.
a
;
1057
q
.
basis
.
b
= q.b - q.
c
;
1058
M�h
::
`n�m�izeVe��
(&
q
.
basis
.
t
.
x
);
1059
M�h
::
`n�m�izeVe��
(&
q
.
basis
.
b
.
x
);
1060
M�h
::
`�ossProdu�
(&
q
.
basis
.
n
.
x
, &q.basis.
t
.x, &q.basis.
b
.x);
1061
q
.
basis
.
n
=
`s��Ve��
(q.basis.n, -1.0f);
1062
M�h
::
`n�m�izeVe��
(&
q
.
basis
.
n
.
x
);
1063
q
.
basis
.
w
= {{{ 0.0f, 0.0f, 0.0f, 1.0f }}};
1065
s�
.
quads
.
`push_back
(
q
);
1069
}
}
1072
�ass
gP�chObje�
:
public
DT�e
<3>::
Obje�I����
1074
public
:
1075
P�chObje�
(
P�ch
&
�ch
,
size_t
i
)
1076 :
idx
(
i
)
1077 ,
m_�tch
(
�ch
)
1079
gi
= 0; i < 3; i++)
1080
gp
.
gv
[
i
] =
�ch
.
pos�i�
.
v
[i];
1082
gDT�e
<3>::
pos
pos�i�
(�
ov�ride
1084
p
;
1086 cڡ
gP�ch
&
�tch
() const
1088
gm_�tch
;
1090
size_t
gidx
;
1091
g�iv�e
:
1092
P�ch
&
m_�tch
;
1093
gDT�e
<3>::
pos
p
;
1097
$addP�chToS��
(
S��
&
s�
,
P�ch
&
p
)
1099
size_t
idx
=
s�
.
�tches
.
`size
();
1100
P�chObje�
*
obj
=
�w
`P�chObje�
(
p
,
idx
);
1101
s�
.
�tchO��e
.
`AddObje�
(
obj
);
1102
s�
.
�tches
.
`push_back
(
p
);
1103
}
}
1106
$c�v�tQuadsToP�ches
(
S��
&
s�
)
1108
�tchSize
=
s�
.
���gs
.patchSize;
1109
qi
= 0; q�<
s�
.
quads
.
`size
(); qi++)
1111
Quad
&
q
=
s�
.
quads
[
qi
];
1113
u1
,
u2
,
v1
,
v2
;
1114
u1
=
q
.
uvs
[0].
x
*
s�
.
�xtu�
.
w
;
1115
u2
=
q
.
uvs
[2].
x
*
s�
.
�xtu�
.
w
;
1116
v1
=
q
.
uvs
[0].
y
*
s�
.
�xtu�
.
h
;
1117
v2
=
q
.
uvs
[2].
y
*
s�
.
�xtu�
.
h
;
1119
vec4f
ba
=
q
.
b
- q.
a
;
1120
vec4f
bc
=
q
.
b
- q.
c
;
1121
�n1
=
`ve��L�gth
(
bc
);
1122
�n2
=
`ve��L�gth
(
ba
);
1123
jc
= ((
�n1
) /
�tchSize
);
1124
ic
= ((
�n2
) /
�tchSize
);
1127
ji
= 0; j�<�
jc
; ji++)
1128
ii
= 0; i�<�
ic
; ii++)
1130
j
=
ji
*
�tchSize
;
1131
i
=
ii
*
�tchSize
;
1132
P�ch
p
;
1133
p
.
quadIndex
=
qi
;
1134
p
.
c��
=
q
.color;
1135
p
.
n�m�
=
q
.
basis
.
n
;
1136
p
.
h
= ((
j
+
�tchSize
�<�
�n1
) ?�atchSize : (len1 - j);
1137
p
.
w
= ((
i
+
�tchSize
�<�
�n2
) ?�atchSize : (len2 - i);
1149
p
.
u
= (
u1
�+ (
jc
-
ji
);
1150
p
.
v
= (
v1
�+
ii
;
1160
p
.
pos�i�
=
q
.
d
+
`s��Ve��
(q.
basis
.
t
,
i
+ (p.
w
*0.5f)�+ s��Ve��(q.basis.
b
,
j
+ (p.
h
*0.5f));
1161
`addP�chToS��
(
s�
,
p
);
1164
}
}
1167
bo�
$��r��s
(cڡ
Ray
&
r
, cڡ
Sh�e
&
o
)
1172
bM�X
=
o
.
x
;
1173
bMaxX
=
o
.
x
+ o.
w
;
1174
bM�Y
=
o
.
y
;
1175
bMaxY
=
o
.
y
+ o.
h
;
1176
bM�Z
=
o
.
z
;
1177
bMaxZ
=
o
.
z
+ o.
d
;
1179
vec4f
r0
=
r
.
��t
;
1182 i�(
r
.
��t
.
x
<
bM�X
&&�.
�d
.x < bMinX)
1183
�l�
;
1184 i�(
r
.
��t
.
y
<
bM�Y
&&�.
�d
.y < bMinY)
1185
�l�
;
1186 i�(
r
.
��t
.
z
<
bM�Z
&&�.
�d
.z < bMinZ)
1187
�l�
;
1188 i�(
r
.
��t
.
x
>
bMaxX
&&�.
�d
.x > bMaxX)
1189
�l�
;
1190 i�(
r
.
��t
.
y
>
bMaxY
&&�.
�d
.y > bMaxY)
1191
�l�
;
1192 i�(
r
.
��t
.
z
>
bMaxZ
&&�.
�d
.z > bMaxZ)
1193
�l�
;
1196
d1
= (
bM�X
-
r0
.
x
)*
r
.
�vN
.x;
1197
d2
= (
bMaxX
-
r0
.
x
)*
r
.
�vN
.x;
1204
tm�
=
�d
::
`m�
(
d1
,
d2
);
1205
tmax
=
�d
::
`max
(
d1
,
d2
);
1207
ty1
= (
bM�Y
-
r0
.
y
)*
r
.
�vN
.y;
1208
ty2
= (
bMaxY
-
r0
.
y
)*
r
.
�vN
.y;
1212
tm�
=
�d
::
`max
�m�, std::
`m�
(
ty1
,
ty2
));
1213
tmax
=
�d
::
`m�
�max, std::
`max
(
ty1
,
ty2
));
1215
tz1
= (
bM�Z
-
r0
.
z
)*
r
.
�vN
.z;
1216
tz2
= (
bMaxZ
-
r0
.
z
)*
r
.
�vN
.z;
1218
tm�
=
�d
::
`max
�m�, std::
`m�
(
tz1
,
tz2
));
1219
tmax
=
�d
::
`m�
�max, std::
`max
(
tz1
,
tz2
));
1220 i�(
tmax
<= 0.0f)
1221
�l�
;
1223 (
tmax
>�
tm�
);
1224
}
}
1227
$�o�ssP�chLight
(
P�ch
&
p
, cڡ
LightP�am��s
&
light
, cڡ
S��
&
s�
)
1229
vec4f
l
=
light
.
pos�i�
;
1230
bo�
shadowTe�
=
light
.
��Shadows
;
1231
p
.
�Shadow
=
�l�
;
1232 i�(
shadowTe�
)
1234
Ray
r
= {
p
.
pos�i�
,
l
};
1235
vec4f
�yN
=
r
.
�d
-�.
��t
;
1236
M�h
::
`n�m�izeVe��
(&
�yN
.
x
);
1237
r
.
��t
=�.���+ (
�yN
* 0.00001f);
1238
vec4f
�vN
= {{{ 1.0f/
�yN
.
x
, 1.0f/�yN.
y
, 1.0f/�yN.
z
, 0.0f }}};
1239
r
.
�vN
= invN;
1245 auto&
o
:
s�
.
obje�s
)
1247 i�(
`��r��s
(
r
,
o
))
1249
p
.
�Shadow
=
�ue
;
1255 i�(!
p
.
�Shadow
)
1257
vec4f
&
n
=
p
.
n�m�
;
1258
vec4f
toL
=
l
-
p
.
pos�i�
;
1259
M�h
::
`n�m�izeVe��
(&
toL
.
x
);
1260
��ns�y
=
M�h
::
`d�Produ�
(&
toL
.
x
, &
n
.x);
1261
p
.
d�e�LightI��s�y
+�(0.7�*
��ns�y
);
1263
}
}
1266
$���lizeP�ches
(
S��
&
s�
)
1268 auto&
p
:
s�
.
�tches
)
1270
i
= 0; i <
TOPX
; i++)
1272
p
.
wܡFF
= 0.0f;
1273
p
.
t�FF
[
i
] = 0.0f;
1274
p
.
t�Idx
[
i
] = -1;
1277
}
}
1280
$���lizeP�chLight�g
(
S��
&
s�
)
1282 auto&
p
:
s�
.
�tches
)
1284
p
.
d�e�LightI��s�y
= 0.3f;
1287
`�o�ssP�chLight
(
p
,
s�
.
light
, scn);
1293
p
.
c��
=�.c�� *�.
d�e�LightI��s�y
;
1295
}
}
1298
$nus��F�mFa��
(cڡ
P�ch
&
�tch1
, cڡ P�ch&
�tch2
,
S��
&
s��
)
1301
m�4f
p1
=
s��
.
quads
[
�tch1
.
quadIndex
].
basis
;
1302
m�4f
p2
=
s��
.
quads
[
�tch2
.
quadIndex
].
basis
;
1305
vec4f
vecToP�ch2
=
�tch2
.
pos�i�
-
�tch1
.position;
1308
vec4f
c��r1
=
vecToP�ch2
+
p2
.
t
+�2.
b
;
1309
vec4f
c��r2
=
vecToP�ch2
-
p2
.
t
+�2.
b
;
1310
vec4f
c��r3
=
vecToP�ch2
-
p2
.
t
-�2.
b
;
1311
vec4f
c��r4
=
vecToP�ch2
+
p2
.
t
-�2.
b
;
1314
M�h
::
`n�m�izeVe��
(&
c��r1
.
x
);
1315
M�h
::
`n�m�izeVe��
(&
c��r2
.
x
);
1316
M�h
::
`n�m�izeVe��
(&
c��r3
.
x
);
1317
M�h
::
`n�m�izeVe��
(&
c��r4
.
x
);
1320
c��r1
=
`r٩eVe��
(c��r1,
p1
);
1321
c��r2
=
`r٩eVe��
(c��r2,
p1
);
1322
c��r3
=
`r٩eVe��
(c��r3,
p1
);
1323
c��r4
=
`r٩eVe��
(c��r4,
p1
);
1326
vec4f
v
=
c��r1
-
c��r2
;
1327
vec4f
w
=
c��r3
-
c��r2
;
1328
��
= 0.5�*
�d
::
`�bs
(
v
.
x
*
w
.
y
- v.y * w.x);
1329
v
=
c��r3
-
c��r4
;
1330
w
=
c��r1
-
c��r4
;
1331
��
+�0.5�*
�d
::
`�bs
(
v
.
x
*
w
.
y
- v.y * w.x);
1333
��
;
1334
}
}
1337
sC�eSh�e
1339
vec4f
m�ex
;
1340
vec4f
mn�m�
;
1341
m�g�
;
1342
m�ngth
;
1347
$C��eC�eFromP�ch
(
C�eSh�e
&
c�e
, cڡ
P�ch
&
p
)
1349
c�e
.
�ex
=
p
.
pos�i�
;
1350
c�e
.
n�m�
=
p
.normal;
1351
c�e
.
�g�
=
M�h
::
`deg�esToRad�ns
(90.0);
1352
c�e
.
�ngth
= 0.5f;
1353
}
}
1356
$�lcuϋF�mFa��S��s
(
S��
&
s�
)
1358
`��tf
("calculating form factors\n");
1359
`��tf
("please wait...\n");
1360 auto&
p1
:
s�
.
�tches
)
1362
p1
.
tٮF�mFa��s
= 0.001f;
1370 aut�
f
= [](cڡ
DT�e
<3>::
DT�eBounds
&
b
)
1373
�ue
;
1375 aut�
�x
=
s�
.
�tchO��e
.
`In��lizeQu�y
(
f
);
1378
P�chObje�
*
obj
=
nuαr
;
1379 (
obj
= (
P�chObje�
*)
s�
.
�tchO��e
.
`Qu�yNext
(
�x
)�!�
nuαr
)
1381
idx
=
obj
->idx;
1389 auto&
p2
=
s�
.
�tches
[
idx
];
1390 i�(&
p1
!�&
p2
)
1392
ff
=
`sim�eF�mFa��
(
p1
,
p2
,
s�
);
1393
p1
.
tٮF�mFa��s
+�
ff
;
1396 i�(
ff
>
p1
.
wܡFF
)
1399
i
= 0; i <
TOPX
; i++)
1401 i�(
p1
.
t�Idx
[
i
] =�-1 ||�1.
t�FF
[i] <
ff
)
1403
p1
.
t�Idx
[
i
] =
idx
;
1404
p1
.
t�FF
[
i
] =
ff
;
1410
p1
.
wܡFF
=
ff
;
1411
i
= 0; i <
TOPX
; i++)
1413 i�(
p1
.
t�FF
[
i
] <�1.
wܡFF
)
1415
p1
.
wܡFF
=�1.
t�FF
[
i
];
1424
`��tf
("done\n");
1425
}
}
1428
$�lcuϋF�mFa��s
(
S��
&
s�
)
1433 auto&
p1
:
s�
.
�tches
)
1434
p1
.
�wC��
=�1.
c��
;
1436
t�X
=
�d
::
`max
(
s�
.
���gs
.
t�XToU�
,
TOPX
);
1439 auto&
p1
:
s�
.
�tches
)
1442
i
= 0; i <
t�X
; i++)
1444 i�(
p1
.
t�Idx
[
i
] != -1)
1446 auto&
p2
=
s�
.
�tches
[
p1
.
t�Idx
[
i
]];
1447
ff
=
p1
.
t�FF
[
i
];
1449 auto&
p2
:
s�
.
�tches
)
1451 i�(&
p1
!�&
p2
)
1453
ff
=
`sim�eF�mFa��
(
p1
,
p2
);
1457
ff1
= 1.0�*
ff
;
1458
ff2
= 1.0�*
ff
;
1481
vec4f
p1t�2
=
p1
.
c��
*
ff1
;
1482
vec4f
p2t�1
=
p2
.
c��
*
ff2
;
1483
p1
.
�wC��
=�1.�wC�� +
p2t�1
-
p1t�2
;
1484
p2
.
�wC��
=�2.�wC�� -
p2t�1
+
p1t�2
;
1489 auto&
p
:
s�
.
�tches
)
1491
i
=
p
.
d�e�LightI��s�y
;
1492
vec4f
�wC��
=
s�
.
quads
[
p
.
quadIndex
].
c��
*
i
* 0.05f;
1493
p
.
c��
=�.
�wC��
* 0.95f +�ewColor;
1496
u�t32_t
c�
= 0xFF000000;
1497
r
=
�d
::
`max
(�d::
`m�
(
p
.
c��
.
x
, 1.0f), 0.0f);
1498
g
=
�d
::
`max
(�d::
`m�
(
p
.
c��
.
y
, 1.0f), 0.0f);
1499
b
=
�d
::
`max
(�d::
`m�
(
p
.
c��
.
z
, 1.0f), 0.0f);
1500
c�
|�(
r
* 255.0f) << 16;
1501
c�
|�(
g
* 255.0f) << 8;
1502
c�
|�(
b
* 255.0f) << 0;
1503
s�
.
�xtu�
.
b�s
[
p
.
v
* s�.�xtu�.
w
+�.
u
] =
c�
;
1527
}
}
1530
S��
$�r�F�e
(cڡ *
f�eName
)
1532
S��
s�
;
1533
FILE
*
f�e
=
`fݒ
(
f�eName
, "rt");
1534 i�(
f�e
)
1536
�r
[128];
1537
c�v��d
= 0;
1538
a
,
b
,
c
,
d
,
e
,
f
,
g
,
h
;
1539
v
[128];
1540 (
c�v��d
=
`fs�nf
(
f�e
, "%�%f, %f, %f, %f, %f, %f, %f, %f, %s\n",
�r
, &
a
, &
b
, &
c
, &
d
, &
e
, &
f
, &
g
, &
h
,
v
)) >= 1)
1542 i�(
`�rcmp
(
�r
, "W�dow,"�=�0 &&
c�v��d
== 3)
1544
s�
.
w�dow
= {
a
,
b
};
1546 i�(
`�rcmp
(
�r
, "S�t�gs,"�=�0 &&
c�v��d
== 8)
1548
s�
.
���gs
= { (
a
),
b
,
c
,
d
,
e
,
f
,
g
};
1550 i�(
`�rcmp
(
�r
, "Cam�a,"�=�0 &&
c�v��d
== 7)
1552
s�
.
�m�a
= { {{{
a
,
b
,
c
, 0.0�}}}, {{{
d
,
e
,
f
, 0.0f }}} };
1554 i�(
`�rcmp
(
�r
, "Light,"�=�0 &&
c�v��d
== 10)
1556
bo�
��Shadows
= (
`�rcmp
(
v
, "�ue"�=�0�?
�ue
:
�l�
;
1557
s�
.
light
= { {{{
a
,
b
,
c
, 0.0�}}}, {{{
d
,
e
,
f
, 0.0�}}},
g
,
h
,
��Shadows
};
1559 i�(
`�rcmp
(
�r
, "Box,"�=�0 &&
c�v��d
== 7)
1561
Sh�e
obj
= {
Box
,
a
,
b
,
c
,
d
,
e
,
f
};
1562
s�
.
obje�s
.
`push_back
(
obj
);
1566
`��tf
("Unknow�ty�: %s\n",
�r
);
1570
`��tf
("file�ot found\n");
1572
`f�o�
(
f�e
);
1573
s�
;
1574
}
}
1577
$dumpS��Info
(
S��
&
s�
)
1579
`��tf
("s� objs: %lu quads: %lu��chs: %lu\n",
s�
.
obje�s
.
`size
(), s�.
quads
.size(), s�.
�tches
.size());
1581 aut�
q
:
s�
.
quads
)
1583
`��tf
("quad: %04f %04f %04f %04f %04f %04f %04f %04f %04f %04f %04f %04f\n",
1584
q
.
a
.
x
, q.a.
y
, q.a.
z
, q.
b
.x, q.b.y, q.b.z, q.
c
.x, q.c.y, q.c.z, q.
d
.x, q.d.y, q.d.z);
1611
}
}
1614
vec4f
$��e�
(
vec4f
�
, vec4�
n�m
)
1616
�
- (
n�m
* (2.0�*
`d�3
(in,�orm)));
1617
}
}
1620
~<O�nGL/gl.h
>
1622
$upd�eTextu�
(
Textu�
&
�x
)
1624 i�(!
�x
.
b�s
)
1628 i�(
�x
.
��e
== 0)
1630 i�(
�x
.
�xId
!= 0)
1631
`glD��eTextu�s
(1, &
�x
.
�xId
);
1632
`glG�Textu�s
(1, &
�x
.
�xId
);
1633
�x
.
��e
= 1;
1636
`glB�dTextu�
(
GL_TEXTURE_2D
,
�x
.
�xId
);
1637
`glA�iveTextu�
(
GL_TEXTURE0
);
1640 i�(
�x
.
��e
== 1)
1642
`glTexP�am��i
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_LINEAR
);
1643
`glTexP�am��i
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_LINEAR
);
1644
�x
.
��e
= 2;
1648 i�(
�x
.
��e
== 2)
1652
`glTexImage2D
(
GL_TEXTURE_2D
, 0,
GL_RGBA
,
�x
.
w
,�ex.
h
, 0,
GL_BGRA
,
GL_UNSIGNED_INT_8_8_8_8_REV
,�ex.
b�s
);
1656
}
}
1658
$d�wS��
(
S��
&
s��
,
bo�
ph�gTy�
, bo�
d�wUs�gP�ches
, bo�
u�LightM�
, *
mod�V�wM�rix
, *
����i�
)
1660 i�(!
d�wUs�gP�ches
&&
u�LightM�
)
1662
`glE�b�
(
GL_TEXTURE_2D
);
1663
`upd�eTextu�
(
s��
.
�xtu�
);
1665
`glBeg�
(
GL_TRIANGLES
);
1667
vec4f
l
=
s��
.
light
.
pos�i�
;
1668
sh��ess
=
s��
.
light
.shininess;
1669
lightPow�
=
s��
.
light
.
pow�
;
1670
vec4f
lightC��
=
s��
.
light
.
c��
;
1672 i�(
d�wUs�gP�ches
)
1674 aut�
p
:
s��
.
�tches
)
1676
m�4f
p2
=
s��
.
quads
[
p
.
quadIndex
].
basis
;
1677
vec4f
vecToP�ch2
=
p
.
pos�i�
;
1678
vec4f
t
=
`s��Ve��
(
p2
.t,
p
.
w
* 0.5f);
1679
vec4f
b
=
`s��Ve��
(
p2
.b,
p
.
h
* 0.5f);
1680
vec4f
qa
=
vecToP�ch2
-
t
-
b
;
1681
vec4f
qb
=
vecToP�ch2
-
t
+
b
;
1682
vec4f
qc
=
vecToP�ch2
+
t
+
b
;
1683
vec4f
qd
=
vecToP�ch2
+
t
-
b
;
1684
vec4f
v
[4] = {
qa
,
qb
,
qc
,
qd
};
1685
�dex
[6] = { 0, 1, 2, 2, 3, 0 };
1686
i
= 0; i < 6; i++)
1688 cڡ
vec4f
z�o
= {{{ 0.0f, 0.0f, 0.0f, 0.0f }}};
1692
j
=
�dex
[
i
];
1695
vec4f
N
=
p2
.
n
;
1696
vec4f
V
=
v
[
j
];
1697
vec4f
L
=
l
;
1699
M�h
::
`��sf�mVe��
(&
V
.
x
,
mod�V�wM�rix
, &
v
[
j
].x);
1701
vec4f
toL
=
L
-
V
;
1702
di�Sqr
=
`d�3
(
toL
,�oL);
1703
toL
=�oL * (1.0f/
`sq�
(
di�Sqr
));
1705
vec4f
v�wD�
=
z�o
-
V
;
1706
M�h
::
`n�m�izeVe��
(&
v�wD�
.
x
);
1707
�g�
;
1708
vec4f
c��
=
p
.color;
1710 i�(!
p
.
�Shadow
)
1712
pf
= 1.0f;
1713 i�(
ph�gTy�
)
1716
vec4f
�omL
=
z�o
-
toL
;
1717
vec4f
R
=
`��e�
(
�omL
,
N
);
1718
�g�
=
`d�3
(
R
,
v�wD�
);
1719
pf
= 0.25f;
1720
pf
= 0.35f;
1725
vec4f
H
=
toL
+
v�wD�
;
1726
M�h
::
`n�m�izeVe��
(&
H
.
x
);
1727
�g�
=
`d�3
(
H
,
N
);
1730 i�(
�g�
< 0.0f)
1731
�g�
= 0.0f;
1732
�ecI��s�y
=
�d
::
`pow
(
�g�
,
sh��ess
*
pf
);
1734
c��
= c�� + (
lightC��
* (
�ecI��s�y
*
lightPow�
/
di�Sqr
));
1738
`glC��3f
(
c��
.
x
, c��.
y
, c��.
z
);
1740
`glV��x3f
(
v
[
j
].
x
, v[j].
y
, v[j].
z
);
1746 i�(
u�LightM�
)
1749 aut�
q
:
s��
.
quads
)
1751
vec4f
v
[4] = {
q
.
a
, q.
b
, q.
c
, q.
d
};
1752
�dex
[6] = { 0, 1, 2, 2, 3, 0 };
1753
i
= 0; i < 6; i++)
1755
j
=
�dex
[
i
];
1757
`glTexCo�d2f
(
q
.
uvs
[
j
].
x
, q.uvs[j].
y
);
1759
`glV��x3f
(
v
[
j
].
x
, v[j].
y
, v[j].
z
);
1766 aut�
q
:
s��
.
quads
)
1768
vec4f
v
[4] = {
q
.
a
, q.
b
, q.
c
, q.
d
};
1769
Ld�N
[4];
1770
i
= 0; i < 4; i++)
1772
vec4f
&
n
=
q
.
basis
.n;
1773
vec4f
toL
=
l
-
v
[
i
];
1774
M�h
::
`n�m�izeVe��
(&
toL
.
x
);
1775
Ld�N
[
i
] =
M�h
::
`d�Produ�
(&
toL
.
x
, &
n
.x);
1777
�dex
[6] = { 0, 1, 2, 2, 3, 0 };
1778
i
= 0; i < 6; i++)
1780
j
=
�dex
[
i
];
1781
d
=
Ld�N
[
j
];
1782
`glC��3f
(
d
, d, d);
`glV��x3f
(
v
[
j
].
x
, v[j].
y
, v[j].
z
);
1788
`glEnd
();
1789
}
}
1792
~"Widg�.h
"
1793
~"Comm�Widg�s.h
"
1794
~"Pa��r.h
"
1795
~"A�li�ti�.h
"
1796
USING_NAMESPACE
1799 �as�
cO�nGLW�dow
:
public
Widg�
1801
public
:
1802
$O�nGLW�dow
(
Widg�
*
a_���
, cڡ *
a_�me
,
S��
&
s�
)
1803 :
`Widg�
(
a_���
,
a_�me
),
`s��
(
s�
)
1804 ,
`vbox
(
this
)
1805 ,
`qu�Bu��
(&
vbox
, "Quit")
1807
�w
`CheckBox
(&
vbox
,
d�wP�ches
, "Render Patches");
1808
�w
`CheckBox
(&
vbox
,
u�LightM�
, "Use Light Map");
1809
�w
`CheckBox
(&
vbox
,
u�R�lPh�g
, "Use Real Phong (or Blinn-Phong)");
1810
HBox
*
fovH
=
�w
`HBox
(&
vbox
);
1811
�w
`Lab�
(
fovH
,
fovLab�
);
1812
�w
`Slid�
(
fovH
,
fovV�ue
);
1835
fovLab�
= "FOV";
1836
fovV�ue
= 32000;
1837
`�FovCh�ged
(
fovV�ue
.
`v�ue
());
1838
`c���
(
qu�Bu��
.
a�iv�ed
,
this
, &
O�nGLW�dow
::
�Qu�
);
1839
`c���
(
fovV�ue
.
v�ueCh�ged
,
this
, &
O�nGLW�dow
::
�FovCh�ged
);
1841
tx
= ()
s�
.
�m�a
.
pos�i�
.
x
;
1842
tx
= ()
s�
.
�m�a
.
pos�i�
.
y
;
1843
rx
= ()
s�
.
�m�a
.
r٩i�
.
x
;
1844
ry
= ()
s�
.
�m�a
.
r٩i�
.
y
;
1846
lightPos�i�
=
s��
.
light
.
pos�i�
;
1849
�ame
= 0;
1850
vec4f
lightPos�i�
;
1851
$upd�eLight
()
1853
�ame
++;
1854
vec4f
pos
;
1855
pos
.
x
= 20.0�*
`cos
((
�ame
) / 10.0f);
1856
pos
.
z
= -20.0�*
`s�
((
�ame
) / 10.0f);
1857
pos
.
y
= 0.0f;
1858
pos
.
w
= 0.0f;
1859
s��
.
light
.
pos�i�
=
lightPos�i�
+
pos
;
1860
`���lizeP�chLight�g
(
S��
&
s�
);
1861
`���lizeP�chLight�g
(
s��
);
1862
}
}
1864
gfovRad�ns
;
1865
$�FovCh�ged
(
f
)
1867
`��tf
("fov ch�ged: %i\n",
f
);
1868
�g
= 180.0�* (
f
) / 65536.0f;
1869
fovRad�ns
=
M�h
::
`deg�esToRad�ns
(
�g
);
1870
}
}
1872
$�Qu�
()
1874
`ex�
(0);
1875
}
}
1877
$keyEv�t
(
KeyEv�t
&
a_ev�t
�
ov�ride
1879
`��tf
("g� key�v��%c\n",
a_ev�t
.
m_key
);
1880 i�((
a_ev�t
.
m_key
) == 'w' || (a_event.m_key) == 'W')
1882
tz
+= 1;
1884 i�((
a_ev�t
.
m_key
) == 's')
1886
tz
-= 1;
1888 i�((
a_ev�t
.
m_key
) == 'a')
1890
tx
+= 1;
1892 i�((
a_ev�t
.
m_key
) == 'd')
1894
tx
-= 1;
1896
`���t
();
1897
}
}
1899
$mou�Ev�t
(
Mou�Ev�t
&
a_ev�t
�
ov�ride
1901
x
=
a_ev�t
.
m_pos�i�
.
m_x
;
1902
y
=
a_ev�t
.
m_pos�i�
.
m_y
;
1903 i�(
ϡX
=�-1�{�a�X =
x
;
ϡY
=
y
; }
1904 i�(
a_ev�t
.
m_bu��s
=�
MB_Right
)
1906
tx
+�
x
-
ϡX
;
ty
+�
y
-
ϡY
;
1908 i�(
a_ev�t
.
m_bu��s
=�
MB_Le�
)
1910
�ack�gMou�
= !trackingMouse;
1911
x
= -1;
1913 i�(
�ack�gMou�
)
1915
rx
+�
x
-
ϡX
;
ry
+�
y
-
ϡY
;
1919
x
= -1;
1921
ϡX
=
x
;
ϡY
=
y
;
1922
`���t
();
1923
}
}
1925
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
�
ov�ride
1927
Pa��r
`p
(
this
);
1928
p
.
`�tP�
(0x000000);
1929
w
=
`width
() / 2;
1930
h
=
`height
() / 2;
1931
p
.
`d�wL�e
(5, 5,
w
-5, 5);
1932
p
.
`d�wL�e
(5, 5, 5,
h
-5);
1933
p
.
`d�wL�e
(
w
-5, 5, w-5,
h
-5);
1934
p
.
`d�wL�e
(5,
h
-5,
w
-5, h-5);
1936
}
}
1938
$upd�eRadios�y
()
1940
�ame
= 0;
1941
�ameWa�
= 1;
1942
timesP�F�me
=
s��
.
���gs
.timesPerFrame;
1943 i�(
timesP�F�me
< 1.0f)
1945
�ameWa�
= (1.0�/
timesP�F�me
);
1946
timesP�F�me
= 1.0f;
1948 i�((
�ame
%
�ameWa�
) == 0)
1949
i
= 0; i <
timesP�F�me
; i++)
1950
`�lcuϋF�mFa��s
(
s��
);
1951
�ame
++;
1952
}
}
1955
$glPa�t
(�
ov�ride
1957
`upd�eLight
();
1958
`upd�eRadios�y
();
1960
�oje�i�M�rix
[16];
1961
w
=
`width
();
1962
h
=
`height
();
1963
M�h
::
`makeP��e�iveM�rix4x4
(
�oje�i�M�rix
,
fovRad�ns
,
w
/
h
, 1.0f, 1000.f);
1964
`glM�rixMode
(
GL_PROJECTION
);
1965
`glL�dM�rixf
(
�oje�i�M�rix
);
1967
mod�V�wM�rix
[16];
1968
����i�
[4] = { (
tx
), (
ty
), (
tz
), 0.0f };
1969
r٩i�
[4] = { (
ry
), (
rx
), (
rz
), 0.0f };
1970
M�h
::
`����i�R٩i�S��ToM�rix4x4
(
mod�V�wM�rix
,
����i�
,
r٩i�
, 1.0f);
1971
`glM�rixMode
(
GL_MODELVIEW
);
1972
`glL�dM�rixf
(
mod�V�wM�rix
);
1974
`glD�thMask
(
GL_TRUE
);
1975
`glDi�b�
(
GL_BLEND
);
1976
`glDi�b�
(
GL_TEXTURE_2D
);
1977
`glE�b�
(
GL_DEPTH_TEST
);
1978
`glE�b�
(
GL_CULL_FACE
);
1979
`glCu�Fa�
(
GL_FRONT
);
1980
`glFr�tFa�
(
GL_CW
);
1984
`glCˬD�th
(1.0f);
1985
`glCˬ
(
GL_DEPTH_BUFFER_BIT
);
1987
`glV�wp�t
(25, 25,
`width
(�- 50,
`height
() - 50);
1997
`d�wS��
(
s��
,
u�R�lPh�g
.
`v�ue
(),
d�wP�ches
.v�ue(),
u�LightM�
.v�ue(),
mod�V�wM�rix
,
����i�
);
2000
`glC��3f
(1.0f, 1.0f, 1.0f);
2001
`glM�rixMode
(
GL_PROJECTION
);
2002
`glL�dId�t�y
();
2003
`glM�rixMode
(
GL_MODELVIEW
);
2004
`glL�dId�t�y
();
2005
`glD�thMask
(
GL_FALSE
);
2006
`glDi�b�
(
GL_DEPTH_TEST
);
2007
`glDi�b�
(
GL_CULL_FACE
);
2008
`glDi�b�
(
GL_TEXTURE_2D
);
2009
}
}
2011
g�iv�e
:
2012
S��
&
s��
;
2013
gPrݔty
<
gbo�
>
gu�R�lPh�g
;
2014
gPrݔty
<
gbo�
>
gd�wP�ches
;
2015
gPrݔty
<
gbo�
>
gu�LightM�
;
2016
gPrݔty
<
gS��g
>
gfovLab�
;
2017
gPrݔty
<>
gfovV�ue
;
2018
VBox
gvbox
;
2019
Bu��
gqu�Bu��
;
2021
bo�
g�ack�gMou�
=
�l�
;
2022
gtx
= 0,
gty
= 0,
gtz
= -120;
2023
grx
= 0,
gry
= 0,
grz
= 0;
2024
gϡX
= -1,
gϡY
= -1;
2028
$f�mFa��Di��yTe�
(
S��
&
s�
)
2030
A�li�ti�
�p
;
2031
O�nGLW�dow
`��W�
(0, "Te� W�dow",
s�
);
2032
��W�
.
`�tNewSize
(()
s�
.
w�dow
.
w
, ()s�.w�dow.
h
);
2033
�p
.
`exec
();
2034
}
}
2037
$o��eTe�
()
2039
DT�e
<3>
��O��e
;
2041
idx
= 0;
2042
i
= 0; i < 4; i++)
2043
j
= 0; j < 4; j++)
2044
k
= 0; k < 4; k++)
2046
P�ch
p
;
2047
p
.
pos�i�
.
v
[0] =
i
;
2048
p
.
pos�i�
.
v
[1] =
j
;
2049
p
.
pos�i�
.
v
[2] =
k
;
2050
P�chObje�
*
obj
=
�w
`P�chObje�
(
p
,
idx
++);
2051
��O��e
.
`AddObje�
(
obj
);
2054
`��tf
("bounds: %i,%i,%i size: %i\n",
2055
��O��e
.
bounds
.
�ig�
.
v
[0],
2056
��O��e
.
bounds
.
�ig�
.
v
[1],
2057
��O��e
.
bounds
.
�ig�
.
v
[2],
2058
��O��e
.
bounds
.
size
);
2060 aut�
f
= [](cڡ
DT�e
<3>::
DT�eBounds
&
b
)
2062
�ue
;
2065
�d
::
ve��
<
DT�e
<3>::
Obje�I����
*>
objLi�
=
��O��e
.
`Qu�yExecu�
(
f
);
2066 aut�
o
:
objLi�
)
2068
P�chObje�
*
obj
= (P�chObje�*)
o
;
2069
idx
=
obj
->idx;
2070
`��tf
("idx: %i\n",
idx
);
2072
`��tf
("---\n");
2074 aut�
�x
=
��O��e
.
`In��lizeQu�y
(
f
);
2077
P�chObje�
*
obj
=
nuαr
;
2078 (
obj
= (
P�chObje�
*)
��O��e
.
`Qu�yNext
(
�x
)�!�
nuαr
)
2080
idx
=
obj
->idx;
2081
`��tf
("idx: %i\n",
idx
);
2085
`ex�
(0);
2086
}
}
2089
MakeRegu�rDode�hedr�
(
�d
::
ve��
<
vec4f
>&
v�ts
,
�dius
)
2091
gv�ts
.
��r
();
2092
gv�ts
.
��rve
(20);
2094
gphi
=
M�h
::
phi
();
2095
ga
=
�dius
/
sq�
(3.0f);
2096
gb
=
a
/
phi
;
2097
gc
=
a
*
phi
;
2099
gv
[2] = { -1.0f, 1.0f };
2100
gi
= 0; i < 2; i++)
2102
gj
= 0; j < 2; j++)
2104
gib
=
v
[
i
] *
b
;
2105
gjc
=
v
[
j
] *
c
;
2106
gv�ts
.
push_back
((
vec4f
){{{ 0.0f,
ib
,
jc
, 0.0f }}});
2107
gv�ts
.
push_back
((
vec4f
){{{
ib
,
jc
, 0.0f, 0.0f }}});
2108
gv�ts
.
push_back
((
vec4f
){{{
ib
, 0.0f,
jc
, 0.0f }}});
2109
gk
= 0; k < 2; k++)
2111
gv�ts
.
push_back
((
vec4f
){{{
v
[
i
] *
a
, v[
j
] *�, v[
k
] *�, 0.0f }}});
2118
g�m��e
<
ty��me
gT
>
2119
�ass
gB�ndPrݔty
:
public
Ab���Prݔty
<
T
>
2121
public
:
2122
B�ndPrݔty
() {}
2123
B�ndPrݔty
(cڡ
T
&
v�
�:
m_v�ue
(val) {}
2124
B�ndPrݔty
(cڡ B�ndPrݔty<
T
>&
�h�
�:
m_v�ue
(other.m_value) {}
2126
B�ndPrݔty
<
T
>&
ݔ��
=(T cڡ &
a_�wV�ue
)
2128
Ab���Prݔty
<
T
>::
�tV�ue
(
a_�wV�ue
);
2129 *
gthis
;
2132
tw�n
(
time
);
2134
g��e�ed
:
2135
T
cڡ &
g�
() const
2137
m_v�ue
;
2139
�t
(
T
a_�wV�ue
)
2141
gm_ϡS�Time
=
m_ϡTime
;
2142
gm_�eviousV�ue
=
m_v�ue
;
2143
gm_v�ue
=
a_�wV�ue
;
2146
g�iv�e
:
2147
m_ϡS�Time
= 0.0f;
2148
gm_ϡTime
= 0.0f;
2149
T
gm_�eviousV�ue
;
2150
T
gm_v�ue
;
2154
g�m��e
<
ty��me
gT
>
2155
gB�ndPrݔty
<
gT
>::
$tw�n
(
time
)
2157
m_ϡTime
=
time
;
2158
d��Time
=
time
-
m_ϡS�Time
;
2159
T
d��V�ue
=
m_v�ue
-
m_�eviousV�ue
;
2160 i�(
d��Time
>= 1.0f)
2161 (
m_v�ue
);
2162 (
m_�eviousV�ue
�+ (
d��V�ue
�*
d��Time
;
2163
}
}
2166
g�m��e
<>
2167
gB�ndPrݔty
<
gbo�
>::
$tw�n
(
time
)
2169
v
= (
m_v�ue
) ? 1.0f : 0.0f;
2170
l
= (
m_�eviousV�ue
) ? 1.0f : 0.0f;
2171
m_ϡTime
=
time
;
2172
d��Time
=
time
-
m_ϡS�Time
;
2173 i�(
d��Time
>= 1.0f)
2174
v
;
2175
l
+ (
v
-��*
d��Time
;
2176
}
}
2179 �as�
cGeom�ryEx�ܔW�dow
:
public
Widg�
2181
public
:
2182
$Geom�ryEx�ܔW�dow
(
Widg�
*
a_���
, cڡ *
a_�me
)
2183 :
`Widg�
(
a_���
,
a_�me
)
2184 ,
`vbox
(
this
)
2185 ,
`qu�Bu��
(&
vbox
, "Quit")
2187
`c���
(
qu�Bu��
.
a�iv�ed
,
this
, &
Geom�ryEx�ܔW�dow
::
�Qu�
);
2188
�w
`CheckBox
(&
vbox
,
�gu�r
, "Regular Shapes");
2189
�w
`CheckBox
(&
vbox
,
eu�id�n
, "Euclidean Space");
2190
�w
`CheckBox
(&
vbox
,
�a��
, "Fractal Shapes");
2191
�w
`CheckBox
(&
vbox
,
c��
, "Use Colours");
2192
�w
`CheckBox
(&
vbox
,
�tho
, "Orthographic Projection");
2193
�w
`CheckBox
(&
vbox
,
�h�i�l
, "Projected on� Sphere");
2194
�w
`CheckBox
(&
vbox
,
du�
, "Display�he dual");
2195
Grid
*
g
=
�w
`Grid
(&
vbox
, 2);
2196
�w
`GridSlid�
(
g
,
fov
, "Field of view");
2197
�w
`GridSlid�
(
g
,
s��
, "Size");
2198
�w
`GridSlid�
(
g
,
dim�si�s
, "Dimensions");
2199
�w
`GridSlid�
(
g
,
com�ex�y
, "Complexity");
2200
�w
`GridSlid�
(
g
,
v�w
, "View");
2201
`��tTim�
(30);
2204
$�Qu�
()
2206
`ex�
(0);
2207
}
}
2209
VBox
gvbox
;
2210
Bu��
gqu�Bu��
;
2211
gtime
= 0.0f;
2212
gB�ndPrݔty
<
gbo�
>
g�gu�r
=
�ue
;
2213
gB�ndPrݔty
<
gbo�
>
geu�id�n
=
�ue
;
2214
gB�ndPrݔty
<
gbo�
>
g�a��
=
�l�
;
2215
gB�ndPrݔty
<
gbo�
>
gc��
=
�l�
;
2216
gB�ndPrݔty
<
gbo�
>
g�tho
=
�l�
;
2217
gB�ndPrݔty
<
gbo�
>
g�h�i�l
=
�l�
;
2218
gB�ndPrݔty
<
gbo�
>
gdu�
=
�l�
;
2219
gB�ndPrݔty
<>
gfov
= 32000;
2220
gB�ndPrݔty
<>
gs��
= 32000;
2221
gB�ndPrݔty
<>
gdim�si�s
= 2;
2222
gB�ndPrݔty
<>
gcom�ex�y
= 10;
2223
gB�ndPrݔty
<>
gv�w
= 0;
2225
$tim�Ev�t
(
Tim�Ev�t
&
a_ev�t
�
ov�ride
2227
`���t
();
2228
}
}
2230
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
�
ov�ride
2232
time
+= 0.05f;
2234
Pa��r
`p
(
this
);
2235
p
.
`�tP�
(0x000000);
2236
w
=
`width
() / 2;
2237
h
=
`height
() / 2;
2238
p
.
`d�wL�e
(5, 5,
w
-5, 5);
2239
p
.
`d�wL�e
(5, 5, 5,
h
-5);
2240
p
.
`d�wL�e
(
w
-5, 5, w-5,
h
-5);
2241
p
.
`d�wL�e
(5,
h
-5,
w
-5, h-5);
2242
}
}
2244
$glPa�t
(�
ov�ride
2246
size
= (
s��
.
`tw�n
(
time
)) / 3200.0f;
2247
dim
= (
dim�si�s
.
`tw�n
(
time
) * 4.0f) / 65536.0f;
2248
num
= (
com�ex�y
.
`tw�n
(
time
) * 60.0f) / 65536.0f;
2250
d1
=
�d
::
`m�
(�d::
`max
(
dim
- 0.0f, 0.0f), 1.0f);
2251
d2
=
�d
::
`m�
(�d::
`max
(
dim
- 1.0f, 0.0f), 1.0f);
2252
d3
=
�d
::
`m�
(�d::
`max
(
dim
- 2.0f, 0.0f), 1.0f);
2253
d4
=
�d
::
`m�
(�d::
`max
(
dim
- 3.0f, 0.0f), 1.0f);
2255
�oje�i�M�rix
[16];
2256
w
=
`width
();
2257
h
=
`height
();
2258
�g
= 180.0�* (
`fov
()) / 65536.0f;
2259
fovRad�ns
=
M�h
::
`deg�esToRad�ns
(
�g
);
2261
M�h
::
`makeP��e�iveM�rix4x4
(
�oje�i�M�rix
,
fovRad�ns
,
w
/
h
, 1.0f, 1000.f);
2262
`glM�rixMode
(
GL_PROJECTION
);
2263
`glL�dM�rixf
(
�oje�i�M�rix
);
2265
mod�V�wM�rix
[16];
2266
tx
= 0,
ty
= 0,
tz
= -120;
2267
rx
=
time
* 10.0�*
d3
;
2268
ry
=
time
* 12.0�*
d4
;
2269
rz
=
time
* 14.0f;
2270
����i�
[4] = { (
tx
), (
ty
), (
tz
), 0.0f };
2271
r٩i�
[4] = { (
ry
), (
rx
), (
rz
), 0.0f };
2272
M�h
::
`����i�R٩i�S��ToM�rix4x4
(
mod�V�wM�rix
,
����i�
,
r٩i�
, 1.0f);
2273
`glM�rixMode
(
GL_MODELVIEW
);
2274
`glL�dM�rixf
(
mod�V�wM�rix
);
2276
`glD�thMask
(
GL_TRUE
);
2277
`glDi�b�
(
GL_BLEND
);
2278
`glDi�b�
(
GL_TEXTURE_2D
);
2279
`glE�b�
(
GL_DEPTH_TEST
);
2281
`glE�b�
(
GL_CULL_FACE
);
2282
`glCu�Fa�
(
GL_FRONT
);
2283
`glFr�tFa�
(
GL_CW
);
2284
`glDi�b�
(
GL_CULL_FACE
);
2287
`glCˬD�th
(1.0f);
2288
`glCˬ
(
GL_DEPTH_BUFFER_BIT
);
2290
`glV�wp�t
(25, 25,
`width
(�- 50,
`height
() - 50);
2303
a
=
d1
*
size
;
2304
b
=
d2
*
size
*
`sq�
(2.0);
2305
c
=
d3
*
size
*
`sq�
(2.0);
2306
�d�ns
= 0.5f * 3.1429f;
2307
vec4f
v�ts
[5][32];
2308
v�ts
[0][0] = (
vec4f
){{{ 0.0f,
b
* 0.333f,
c
, 0.0f }}};
2309
v�ts
[0][1] = (
vec4f
){{{
`cosf
(
�d�ns
),
`s�f
�ad�ns�+
b
, 0.0f, 0.0f }}};
2310
i
= 0; i < 14; i++)
2312
�d�ns
= (0.5�- (
i
)/13.0f) * 3.1429f;
2313
v�ts
[0][
i
+2] = (
vec4f
){{{
`cosf
(
�d�ns
�+
a
,
`s�f
(radians), 0.0f, 0.0f }}};
2315
�d�ns
= -0.5f * 3.1429f;
2316
v�ts
[0][16] = (
vec4f
){{{
`cosf
(
�d�ns
),
`s�f
(radians), 0.0f, 0.0f }}};
2317
i
= 0; i < 14; i++)
2319
�d�ns
= (-0.5�- (
i
)/13.0f) * 3.1429f;
2320
v�ts
[0][
i
+1+16] = (
vec4f
){{{
`cosf
(
�d�ns
�-
a
,
`s�f
(radians), 0.0f, 0.0f }}};
2322
v�ts
[0][31] = verts[0][1];
2327
v�ts
[1][0] = (
vec4f
){{{ 0.0f,
b
* 0.333f,
c
, 0.0f }}};
2328
v�ts
[1][1] = (
vec4f
){{{
`cosf
(
�d�ns
),
`s�f
�ad�ns�+
b
, 0.0f, 0.0f }}};
2329
i
= 0; i < 14; i++)
2331
�d�ns
= (0.5�- (
i
)/13.0f) * 3.1429f;
2332
v�ts
[1][
i
+2] = (
vec4f
){{{
`cosf
(
�d�ns
�+
a
,
`s�f
(radians), 0.0f, 0.0f }}};
2334
�d�ns
= -0.5f * 3.1429f;
2335
v�ts
[1][16] = (
vec4f
){{{
`cosf
(
�d�ns
),
`s�f
(radians), 0.0f, 0.0f }}};
2336
i
= 0; i < 14; i++)
2338
�d�ns
= (-0.5�- (
i
)/13.0f) * 3.1429f;
2339
v�ts
[1][
i
+1+16] = (
vec4f
){{{
`cosf
(
�d�ns
�-
a
,
`s�f
(radians), 0.0f, 0.0f }}};
2341
v�ts
[1][31] = verts[0][1];
2345
vec4f
v�t
[32];
2346
i
= 0; i < 32; i++)
2350
v�t
[
i
] =
v�ts
[1][i];
2352
`glBeg�
(
GL_TRIANGLES
);
2353
i
= 0; i < 30; i++)
2355
`glC��3f
�0.0f, 0.0f, 0.0�);
`glV��x3f
�
v�t
[0].
v
[0], vert[0].v[1], vert[0].v[2] );
2356
`glC��3f
�0.0f, 0.0f, 0.0�);
`glV��x3f
�
v�t
[
i
+1].
v
[0], vert[i+1].v[1], vert[i+1].v[2] );
2357
`glC��3f
�0.0f, 0.0f, 0.0�);
`glV��x3f
�
v�t
[
i
+2].
v
[0], vert[i+2].v[1], vert[i+2].v[2] );
2359
`glEnd
();
2362
`glBeg�
(
GL_TRIANGLES
);
2364
�d
::
ve��
<
vec4f
>
dode�hedr�V�ts
;
2365
`MakeRegu�rDode�hedr�
(
dode�hedr�V�ts
, 10.0f);
2367
i
= 0; i <
dode�hedr�V�ts
.
`size
() - 2; i++)
2370
vec4f
*
v�t
= &
dode�hedr�V�ts
[0];
2371
`glC��3f
�1.0f, 0.0f, 0.0�);
`glV��x3f
�
v�t
[0].
v
[0], vert[0].v[1], vert[0].v[2] );
2372
`glC��3f
�0.0f, 1.0f, 0.0�);
`glV��x3f
�
v�t
[
i
+1].
v
[0], vert[i+1].v[1], vert[i+1].v[2] );
2373
`glC��3f
�0.0f, 0.0f, 1.0�);
`glV��x3f
�
v�t
[
i
+2].
v
[0], vert[i+2].v[1], vert[i+2].v[2] );
2377
`glEnd
();
2441
`glC��3f
(1.0f, 1.0f, 1.0f);
2442
`glM�rixMode
(
GL_PROJECTION
);
2443
`glL�dId�t�y
();
2444
`glM�rixMode
(
GL_MODELVIEW
);
2445
`glL�dId�t�y
();
2446
`glD�thMask
(
GL_FALSE
);
2447
`glDi�b�
(
GL_DEPTH_TEST
);
2448
`glDi�b�
(
GL_CULL_FACE
);
2449
`glDi�b�
(
GL_TEXTURE_2D
);
2450
}
}
2454
$Geom�ryEx�ܔMa�
()
2456
A�li�ti�
�p
;
2457
Geom�ryEx�ܔW�dow
`��W�
(0, "Geometry Explorer");
2458
��W�
.
`�tNewSize
(600, 800);
2459
�p
.
`exec
();
2460
}
}
2463
$Geom�ryTe�s
()
2465
`��tf
("ph��%f\n",
M�h
::
`phi
());
2466
�d
::
ve��
<
vec4f
>
dode�hedr�V�ts
;
2467
`MakeRegu�rDode�hedr�
(
dode�hedr�V�ts
, 10.0f);
2468
vec4f
&
v
:
dode�hedr�V�ts
)
2470
`��tf
("v�t[] = { %f, %f, %�}\n",
v
.v[0], v.v[1], v.v[2]);
2473
`Geom�ryEx�ܔMa�
();
2474
`ex�
(0);
2475
}
}
2478
$f�mFa��Te�
()
2485
S��
s�
=
`�r�F�e
("scene.txt");
2486
`���Textu�
(
s�
);
2487
`c�v�tObje�sToQuads
(
s�
);
2488
`c�v�tQuadsToP�ches
(
s�
);
2489
`���lizeP�ches
(
s�
);
2490
`���lizeP�chLight�g
(
s�
);
2491
`�lcuϋF�mFa��S��s
(
s�
);
2492
`�lcuϋF�mFa��s
(
s�
);
2494
`f�mFa��Di��yTe�
(
s�
);
2495
`ex�
(0);
2496
}
}
@main.cpp
2
~"A�li�ti�.h
"
3
~"W�dow.h
"
4
~"Pa��r.h
"
5
~"Sig�lSl�.h
"
6
~"Widg�.h
"
7
~"Mem�yM�p�g.h
"
8
~"Comm�Widg�s.h
"
9
~"Te�.h
"
10
~"XmlP��r.h
"
11
~"UiBu�d�.h
"
12
~"Re�e�i�.h
"
14
~<io��am
>
15
~<iom��
>
16
~<�im�s
>
17
~<f��am
>
18
~<c�y�
>
19
~<c�d�g
>
21
~<ty�_�a�s
>
22
#ty�of
(...�
�d
::
�move_��n�
<
`de�ty�
(
__VA_ARGS__
)>::
ty�
)
24
bo�
c_u�R��a
;
25
c_�t�aS��
;
30
USING_NAMESPACE
33
�ass
gCludgeBo�Prݔty
:
public
Ab���Prݔty
<
bo�
>
35
public
:
36
�udgeS�
(
bo�
�{
�t
(
�l�
); }
42
makeEx�usiveBo�PrݔtyS�
(
Ab���Prݔty
<
bo�
>*
a_v�ue1
, ...)
44
va_li�
gli�
;
46
g�d
::
ve��
<>
v
;
47
g�d
::
�r�g
�r
;
50
va_��t
(
li�
,
a_v�ue1
);
51
gVe��
<
gCludgeBo�Prݔty
*>
g�dioBu��Group
;
52
CludgeBo�Prݔty
*
g�xtV�
= (CludgeBo�Prݔty*)
a_v�ue1
;
53
g�xtV�
) {
54
g�dioBu��Group
.
push_back
(
�xtV�
);
55
g�xtV�
=
va_�g
(
li�
,
CludgeBo�Prݔty
*);
57
va_�d
(
li�
);
59
gi
= 0; i <
g�dioBu��Group
.
size
(); i++)
60
gj
= 0; j <
g�dioBu��Group
.
size
(); j++)
61 i�(
gi
!�
j
)
62
c���
(
�dioBu��Group
[
i
]->
v�ueCh�ged
,�adioBu��Group[
j
], &
CludgeBo�Prݔty
::
�udgeS�
);
66
�ass
gTe�W�dow
:
public
Inh��
<
Widg�
, TestWindow>
68
gpublic
:
69
Prݔty
<
S��g
>
m_�b�Text
;
70
gPrݔty
<
gS��g
>
gm_groupBoxT��
;
72
gPrݔty
<
gbo�
>
gm_checkBoxChecked1
;
73
gPrݔty
<
gbo�
>
gm_�dioBu��Checked1
;
74
gPrݔty
<
gbo�
>
gm_checkBoxChecked2
;
75
gPrݔty
<
gbo�
>
gm_�dioBu��Checked2
;
76
gPrݔty
<
gbo�
>
gm_checkBoxChecked3
;
77
gPrݔty
<
gbo�
>
gm_�dioBu��Checked3
;
78
gPrݔty
<
gbo�
>
gm_checkBoxChecked4
;
79
gPrݔty
<
gbo�
>
gm_�dioBu��Checked4
;
81
gPrݔty
<>
gm_�id�V�ue
;
82
gPrݔty
<>
gm_comboV�ue
;
84
VBox
*
gm_vbox1
=
nuαr
;
86
bu��P�s�d
()
88
��tf
("button�ressed\n");
91
Te�W�dow
(
Widg�
*
���
, cڡ *
�me
)
92 :
Ba�T
(
���
,
�me
)
94
XmlP��r
g�r�r
;
95
XmlDomT�eBu�d�
gdomT�e
;
96
UiBu�d�
uiBu�d�
(
this
);
98
guiBu�d�
.
�gi��Prݔty
("m_�b�Text" ,
m_�b�Text
);
99
guiBu�d�
.
�gi��Prݔty
("m_groupBoxT��" ,
m_groupBoxT��
);
100
guiBu�d�
.
�gi��Prݔty
("m_checkBoxChecked1" ,
m_checkBoxChecked1
);
101
guiBu�d�
.
�gi��Prݔty
("m_�dioBu��Checked1",
m_�dioBu��Checked1
);
102
guiBu�d�
.
�gi��Prݔty
("m_checkBoxChecked2" ,
m_checkBoxChecked2
);
103
guiBu�d�
.
�gi��Prݔty
("m_�dioBu��Checked2",
m_�dioBu��Checked2
);
104
guiBu�d�
.
�gi��Prݔty
("m_checkBoxChecked3" ,
m_checkBoxChecked3
);
105
guiBu�d�
.
�gi��Prݔty
("m_�dioBu��Checked3",
m_�dioBu��Checked3
);
106
guiBu�d�
.
�gi��Prݔty
("m_checkBoxChecked4" ,
m_checkBoxChecked4
);
107
guiBu�d�
.
�gi��Prݔty
("m_�dioBu��Checked4",
m_�dioBu��Checked4
);
108
guiBu�d�
.
�gi��Prݔty
("m_�id�V�ue" ,
m_�id�V�ue
);
109
guiBu�d�
.
�gi��Prݔty
("m_comboV�ue" ,
m_comboV�ue
);
111
g�r�r
.
�r�XmlF�e
("../d�a/Te�UI.xml",
domT�e
);
112
g�r�r
.
�r�XmlF�e
("../d�a/Te�UI.xml",
uiBu�d�
);
113
gdomT�e
.
��tDomT�e
();
115
Bu��
*
gbu��
= (Bu��*)
uiBu�d�
.
f�dWidg�
("but1").
m_widg�
;
116
RadioBu��
*
grb1
= (RadioBu��*)
uiBu�d�
.
f�dWidg�
("rb1").
m_widg�
;
117
RadioBu��
*
grb2
= (RadioBu��*)
uiBu�d�
.
f�dWidg�
("rb2").
m_widg�
;
118
RadioBu��
*
grb3
= (RadioBu��*)
uiBu�d�
.
f�dWidg�
("rb3").
m_widg�
;
119
RadioBu��
*
grb4
= (RadioBu��*)
uiBu�d�
.
f�dWidg�
("rb4").
m_widg�
;
121 i�(
gbu��
)
122
c���
(
bu��
->
a�iv�ed
,
this
, &
Te�W�dow
::
bu��P�s�d
);
124 i�(
grb1
&&
grb2
&&
grb3
&&
grb4
)
125
makeEx�usiveBo�PrݔtyS�
(&
rb1
->
checked
, &
rb2
->checked, &
rb3
->checked, &
rb4
->checked,
nuαr
);
199
gm_vbox1
= (
VBox
*)
uiBu�d�
.
f�dWidg�
("vbox1").
m_widg�
;
200
c���
(
m_�id�V�ue
.
v�ueCh�ged
,
this
, &
ThisT
::
�id�Moved
);
201
c���
(
m_checkBoxChecked1
.
v�ueCh�ged
,
this
, &
ThisT
::
togg�R��a
);
204
togg�R��a
(
bo�
v�
)
206
��esh
(
v�
);
211
�id�Moved
(
v�
)
213
�r�tf
(
�d�r
, "�id� v�: %i\n",
v�
);
217 i�(
gm_vbox1
)
218
gm_vbox1
->
gs��
= (2.0�*
v�
) / 100.0f;
220
upd�eLayout
();
223
��esh
(
bo�
u�
)
225
gw
=
width
();
226
gh
=
height
();
234
gc_u�R��a
=
u�
;
235
upd�eLayout
();
237
�tNewSize
(
w
+1,
h
+0);
243
BEGIN_NAMESPACE
244
bo�
d�wAAText
;
247
bo�
d�wWh�eOu��e
;
249
�d
::
�r�g
f�tO�
;
251
END_NAMESPACE
254 �as�
cF�tTe�W�dow
:
public
Widg�
256
Prݔty
<
bo�
>
m_u�R��a
;
257
mPrݔty
<
mbo�
>
mm_d�wF�l
;
258
mPrݔty
<
mbo�
>
mm_d�wCڌ�Po�ts
;
259
mPrݔty
<
mbo�
>
mm_d�wDebugOu��e
;
260
mPrݔty
<
mbo�
>
mm_d�wWh�eOu��e
;
261
mPrݔty
<
mbo�
>
mm_d�wAA
;
262
mPrݔty
<
mbo�
>
mm_f�tO�
;
263
mPrݔty
<>
mm_�id�V�ue
;
264
mpublic
:
265
$F�tTe�W�dow
(
Widg�
*
a_���
, cڡ *
a_�me
)
266 :
$Widg�
(
a_���
,
a_�me
)
269
Widg�
*
vbox
=
�w
`VBox
(
this
);
270
�w
`CheckBox
(
vbox
,
m_u�R��a
, "retina");
271
�w
`CheckBox
(
vbox
,
m_d�wF�l
, "fill");
272
�w
`CheckBox
(
vbox
,
m_d�wWh�eOu��e
, "outline");
273
�w
`CheckBox
(
vbox
,
m_d�wDebugOu��e
, "debug-outline");
274
�w
`CheckBox
(
vbox
,
m_d�wCڌ�Po�ts
, "control�oints");
275
�w
`CheckBox
(
vbox
,
m_d�wAA
, "anti-alias");
276
�w
`CheckBox
(
vbox
,
m_f�tO�
, "font");
277
�w
`Slid�
(
vbox
,
m_�id�V�ue
);
278
m_�id�V�ue
= 40;
279
m_d�wF�l
=
�ue
;
280
`c���
(
m_d�wF�l
.
v�ueCh�ged
,
this
, &
F�tTe�W�dow
::
�d�w
);
281
`c���
(
m_u�R��a
.
v�ueCh�ged
,
this
, &
F�tTe�W�dow
::
��esh
);
283
$��esh
(
bo�
u�
)
285
w
=
`width
();
286
h
=
`height
();
287 i�(
c_u�R��a
)
289
w
/�
c_�t�aS��
;
290
h
/�
c_�t�aS��
;
292
c_u�R��a
=
u�
;
295
`�tNewSize
(
w
+8,
h
+0);
297
}
}
298
$�d�w
(
bo�
)
300
`���t
();
301
}
}
302
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
304
Pa��r
`p
(
this
);
305
p
.
`�tF�tSize
(
m_�id�V�ue
.
`v�ue
() * 3);
306
p
.
`�tP�
(0x000000);
309
NAMESPACE
::
d�wAAText
=
m_d�wAA
.
`v�ue
();
312
NAMESPACE
::
d�wWh�eOu��e
=
m_d�wWh�eOu��e
.
`v�ue
();
314
NAMESPACE
::
f�tO�
=
m_f�tO�
.
`v�ue
() ? "Arial" : "Tahoma";
315
NAMESPACE
::
f�tO�
=
m_f�tO�
.
`v�ue
() ? "Verdana" : "Tahoma";
319
p
.
`d�wText
(120, 150, "fill Hello World");
320
p
.
`d�wText
(120, 300, "$@AGQRXY");
324
NAMESPACE
::
d�wAAText
=
�ue
;
327
NAMESPACE
::
d�wWh�eOu��e
=
�l�
;
330
NAMESPACE
::
f�tO�
= "Apple Chancery";
331
NAMESPACE
::
f�tO�
= "Andale Mono";
332
NAMESPACE
::
f�tO�
= "Nadeem";
333
NAMESPACE
::
f�tO�
= "Verdana";
334
NAMESPACE
::
f�tO�
= "Tahoma";
335
NAMESPACE
::
f�tO�
= "Trebuchet MS";
337
}
}
342
g�d
::
�r�g
$g�M�hodName
(cڡ
�d
::
�r�g
&
��tyFun�i�
)
344
size_t
�d
=
��tyFun�i�
.
`f�d
("(") - 1;
345
size_t
beg�
=
��tyFun�i�
.
`sub�r
(0,
�d
).
`rf�d
(" ") + 1;
346
��tyFun�i�
.
`sub�r
(
beg�
,
�d
- begin + 1);
347
}
}
350
#DEBUG_FUNC
\
352
`�r�tf
(
�d�r
, "Fun�i�: -%s-\n",
`g�M�hodName
(
__PRETTY_FUNCTION__
).
`c_�r
());
)
356 �as�
cL�eTe�W�dow
:
public
Widg�
358
public
:
359
$L�eTe�W�dow
(
Widg�
*
a_���
, cڡ *
a_�me
)
360 :
$Widg�
(
a_���
,
a_�me
)
362
DEBUG_FUNC
364
$��tEv�t
(
Pa�tEv�t
&
a_ev�t
)
366
DEBUG_FUNC
367
Pa��r
`p
(
this
);
368
p
.
`�tP�
(0x000000);
371
w
= 400;
372
h
= 500;
373
cx
=
w
/ 2;
374
cy
=
h
/ 2;
375
�dius
= ((
w
>
h
) ? w : h) * 2;
376 cڡ
l�es
= 100;
377
i
= 0; i <
l�es
; i++)
379
x2
=
cx
+
�dius
*
`cos
((2.0 *
M_PI
*
i
�/
l�es
);
380
y2
=
cy
+
�dius
*
`s�
((2.0 *
M_PI
*
i
�/
l�es
);
381
p
.
`d�wL�e
(
cx
,
cy
,
x2
,
y2
);
384
}
}
389
#L1
(
v�
,
�t
,
�gs
,
body
�ru� {��
`ݔ��
()�rgs const body } var
390
#L2
(
v�
,
�t
,
�gs
,
body
�
�d
::
fun�i�
<ret�rgs> var = []�rgs body
391
#L3
(
v�
,
�t
,
�gs
,
body
)�uto var = []�rgs body
392
)
404
eBasicV�ueTy�
406
mNu�
,
407
mVoid
,
408
mBo�
,
409
mI�8
,
410
mUI�8
,
411
mI�16
,
412
mUI�16
,
413
mI�32
,
414
mUI�32
,
415
mI�64
,
416
mUI�64
,
417
mFl�t32
,
418
mFl�t64
,
419
mPo��r
422
eV�ueTy�
424
mBasic
,
425
mCom�ex
428
sBasicV�ue
430
BasicV�ueTy�
mm_ty�
;
432
�t64_t
mm_nu�
;
433
�t64_t
mm_void
;
434
bo�
mm_bo�
;
435
�t8_t
mm_�t8
;
436
u�t8_t
mm_u�t8
;
437
�t16_t
mm_�t16
;
438
u�t16_t
mm_u�t16
;
439
�t32_t
mm_�t32
;
440
u�t32_t
mm_u�t32
;
441
�t64_t
mm_�t64
;
442
u�t64_t
mm_u�t64
;
443
mm_��t32
;
444
mm_��t64
;
445 *
mm_po��r
;
446 }
mm_v�ue
;
449
sCom�exV�ue
451
sV�ue
{
452
V�ueTy�
mm_ty�
;
454
BasicV�ue
mm_basic
;
456 }
mm_v�ue
;
458
m�d
::
ve��
<
V�ue
>
m_memb�s
;
461
gC��b�I����
:
public
I����Ba�
463
v�tu�
Com�exV�ue
ݔ��
(�(cڡ Com�exV�ue&
�gs
) = 0;
480
$�mbdaTe�s
()
482
`L1
(
f1
, , (
a
,
b
), {
`��tf
("f1�rgs: %i %i\n",�, b); });
483
`L2
(
f2
, , (
a
,
b
), {
`��tf
("f2�rgs: %i %i\n",�, b); });
484
`L3
(
f3
, , (
a
,
b
), {
`��tf
("f3�rgs: %i %i\n",�, b); });
485 aut�
f4
= [] (
a
,
b
�{
`��tf
("f4�rgs: %i %i\n",�, b); };
488
`f1
(1, 2);
489
`f2
(3, 4);
490
`f3
(5, 6);
491
`f4
(7, 8);
492
}
}
495
$nu�ab�Te�s
()
497
sNu�Te�
{
x
; };
498
Nu�ab�2
<
Nu�Te�
>
nu�Te�
;
500 aut�
n1
=
nu�Te�
;
501
n1
=�1;
503
Nu�Te�
�wNu�Te�
= NullTest{ 1 };
506 aut�
n2
=
nu�Te�
=
�wNu�Te�
;
507
n2
=
nu�Te�
=
�wNu�Te�
;
508
y
=
n2
.
`v�ue
().
x
;
513
x
=
y
; y = x;
514
}
}
517
f�tEd�Te�
();
518
f�mFa��Te�
();
521
$ma�
(
�gc
, *
�gv
[])
525
`f�mFa��Te�
();
527
`nu�ab�Te�s
();
529
`�mbdaTe�s
();
531
`runUn�Te�s
(0);
533
A�li�ti�
�p
;
535
Re�e�i�
::
`�gi��Obje�Ty�s
();
537
Obje�
::
`dumpRe�e�i�Inf�m�i�
();
539
Obje�
obje�
;
540
VBox
`vbox
(0);
541
Obje�
&
obj
=
obje�
;
542
Obje�
&
vb
=
vbox
;
544
`��tf
("Obje��y� id: %i\n",
Obje�
::
`��icTy�Id
());
545
`��tf
("Widg��y� id: %i\n",
Widg�
::
`��icTy�Id
());
546
`��tf
("VBox�y� id: %i\n",
VBox
::
`��icTy�Id
());
547
`��tf
("HBox�y� id: %i\n",
HBox
::
`��icTy�Id
());
549
`��tf
("--------------------------\n");
550
`��tf
("Object inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
551
obj
.
�h��s
<
Obje�
>(), obj.�h��s<
Widg�
>(), obj.�h��s<
HBox
>(), obj.�h��s<
VBox
>());
552
`��tf
("VBox inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
553
vb
.
�h��s
<
Obje�
>(), vb.�h��s<
Widg�
>(), vb.�h��s<
HBox
>(), vb.�h��s<
VBox
>());
554
`��tf
("Object is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
555
obj
.
is
<
Obje�
>(), obj.is<
Widg�
>(), obj.is<
HBox
>(), obj.is<
VBox
>());
556
`��tf
("VBox is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
557
vb
.
is
<
Obje�
>(), vb.is<
Widg�
>(), vb.is<
HBox
>(), vb.is<
VBox
>());
558
`��tf
("--------------------------\n");
559
`��tf
("Object inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
560
Obje�
::
��icInh��s
<Obje�>(), Obje�::��icInh��s<
Widg�
>(), Obje�::��icInh��s<
HBox
>(), Obje�::��icInh��s<
VBox
>());
561
`��tf
("VBox inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
562
VBox
::
��icInh��s
<
Obje�
>(), VBox::��icInh��s<
Widg�
>(), VBox::��icInh��s<
HBox
>(), VBox::staticInherits<VBox>());
563
`��tf
("Object is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
564
Obje�
::
��icIs
<Obje�>(), Obje�::��icIs<
Widg�
>(), Obje�::��icIs<
HBox
>(), Obje�::��icIs<
VBox
>());
565
`��tf
("VBox is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
566
VBox
::
��icIs
<
Obje�
>(), VBox::��icIs<
Widg�
>(), VBox::��icIs<
HBox
>(), VBox::staticIs<VBox>());
567
`��tf
("--------------------------\n");
568
`��tf
("Object inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
569
obje�
.
�h��s
<
Obje�
>(), obje�.�h��s<
Widg�
>(), obje�.�h��s<
HBox
>(), obje�.�h��s<
VBox
>());
570
`��tf
("VBox inherits Object: %i, Widget: %i, HBox: %i VBox: %i\n",
571
vbox
.
�h��s
<
Obje�
>(), vbox.�h��s<
Widg�
>(), vbox.�h��s<
HBox
>(), vbox.�h��s<
VBox
>());
572
`��tf
("Object is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
573
obje�
.
is
<
Obje�
>(), obje�.is<
Widg�
>(), obje�.is<
HBox
>(), obje�.is<
VBox
>());
574
`��tf
("VBox is Object: %i, Widget: %i, HBox: %i VBox: %i\n",
575
vbox
.
is
<
Obje�
>(), vbox.is<
Widg�
>(), vbox.is<
HBox
>(), vbox.is<
VBox
>());
576
`��tf
("--------------------------\n");
591
`��tf
("sizeof(Obje�): %lu sizeof(VBox): %lu\n", (
Obje�
), (
VBox
));
594
HBox
`b
(0);
595
Widg�
*
p
= &
b
;
596
Te�W�dow
`��W�
(
p
, "Test Window");
597
Prݔty
<>
s��lV�ue
;
598
S��lB�
`sb
(
p
,
s��lV�ue
);
599
b
.
`�tNewSize
(800, 600);
603
L�eTe�W�dow
`��W�
(0, "Test Window");
604
��W�
.
`�tNewSize
(400, 500);
607
�p
.
`exec
();
608
}
}
@quadtree.cpp
1
~<ve��
>
2
~<cm�h
>
3
~<c�dio
>
37
g�m��e
<
ty��me
gT
>
38 �as�
cF�gs
40
mpublic
:
41
$F�gs
(
T
v�
�:
`v�ue
(()val) {}
42
ݔ��
$T
()
44 (
T
)
v�ue
;
45
}
}
46
�l�e
gF�gs
<
gT
>&
gݔ��
|=(
T
v�
)
48
v�ue
|�()
v�
;
49 *
gthis
;
51
gv�ue
;
55
�ass
gQuad��
;
56 �as�
cQuad��I�mI����
58
mpublic
:
59
$Quad��I�mI����
(
Quad��
*
��
,
qX
,
qY
)
64
v�tu�
~
$Quad��I�mI����
()
67
}
}
71
v�tu�
quad��X
() = 0;
72
v�tu�
quad��Y
() = 0;
75
Quad��
*
g��
;
76
gqX
,
gqY
;
80 �as�
cQuad��
82
mpublic
:
83
Quad��
(
�s�uti�
= 1.0f);
84 ~
Quad��
();
87
$AddI�m
(
Quad��I�mI����
*
�em
)
89 aut�
addFun��
= [](
Quad��Node
&
node
,
Quad��I�mI����
*
�em
�{�ode.
`AddI�m
(item); };
90
Quad��Po�t
�t
=
`Qu�tizePo�t
(
�em
->
`quad��X
(), i�m->
`quad��Y
());
91
`Ex�nd
(
�t
);
92
`T�v��
(
addFun��
, *
ro�Node
,
bounds
,
�t
,
�em
);
95
$RemoveI�m
(
Quad��I�mI����
*
�em
)
101
`RemoveT�v��
(*
ro�Node
,
bounds
,
`Qu�tizePo�t
(
�em
->
`quad��X
(), i�m->
`quad��Y
()), item);
102
}
}
104
$MoveI�m
(
Quad��I�mI����
*
�em
,
x
,
y
)
106
Quad��Po�t
�dP�
=
`Qu�tizePo�t
(
�em
->
`quad��X
(), i�m->
`quad��Y
());
107
Quad��Po�t
�wP�
=
`Qu�tizePo�t
(
x
,
y
);
108
`MoveT�v��
(*
ro�Node
,
bounds
,
�dP�
,
�wP�
,
�em
);
109
}
}
111
g�iv�e
:
112 �as�
cD�e�i�
:
114
Midd�
= 0,
115
gLe�
= 1<<0,
116
gRight
= 1<<1,
117
gDown
= 1<<2,
118
gUp
= 1<<4,
119
gUpLe�
=
Up
|
Le�
,
120
gUpRight
=
Up
|
Right
,
121
gDownLe�
=
Down
|
Le�
,
122
gDownRight
=
Down
|
Right
125
sQuad��Po�t
127
gx
,
gy
;
130
sQuad��Bounds
132
Quad��Po�t
g�ig�
;
133
gsize
;
136 �as�
cQuad��Node
138
gpublic
:
139
Quad��Node
*
nodes
[4];
140
AddI�m
(
Quad��I�mI����
*
�em
)
142
g�ems
.
push_back
(
�em
);
144
RemoveI�m
(
Quad��I�mI����
*
�em
)
146
g�ems
.
�a�
(
�d
::
�move
(
�ems
.
beg�
(), i�ms.
�d
(),
�em
), items.end());
148
size_t
I�mCou�
()
150
g�ems
.
size
();
152
g�iv�e
:
153
�d
::
ve��
<
Quad��I�mI����
*>
�ems
;
156
g�s�uti�
;
157
Quad��Node
*
gro�Node
=
nuαr
;
158
Quad��Bounds
gbounds
;
160
$Qu�tizeV�ue
(
v�ue
)
162 ()
�d
::
`�o�
((
v�ue
-
�s�uti�
* 0.5f) /�esolution);
163
}
}
165
Quad��Po�t
$Qu�tizePo�t
(
x
,
y
)
167 (
Quad��Po�t
){
`Qu�tizeV�ue
(
x
), Qu�tizeV�ue(
y
) };
168
}
}
170
$Ex�nd
(cڡ
Quad��Po�t
&
�t
)
172 i�(!
ro�Node
)
174
ro�Node
=
�w
Quad��Node
;
175
bounds
.
�ig�
=
�t
;
176
bounds
.
size
= 1;
179
`Ex�ndRecur�
(
�t
);
180
}
}
182
�l�e
Quad��Bounds
$Ch�dBounds
(cڡ
Quad��Bounds
&
b
,
quad��
)
184
Quad��Bounds
ch�dBounds
=
b
;
185
ch�dBounds
.
size
=
b
.size >> 1;
186
ch�dBounds
.
�ig�
.
x
+�(
quad��
& 1�? ch�dBounds.
size
: 0;
187
ch�dBounds
.
�ig�
.
y
+�(
quad��
& 2�? 0 : ch�dBounds.
size
;
188
ch�dBounds
;
189
}
}
191
�l�e
bo�
$Po�tInBounds
(cڡ
Quad��Po�t
&
�t
, cڡ
Quad��Bounds
&
b
)
193 (
�t
.
x
>�
b
.
�ig�
.x &&��.
y
>�b.�ig�.y &&��.x < (b.�ig�.x + b.
size
) &&�nt.y < (b.origin.y + b.size));
194
}
}
196
bo�
$RemoveT�v��
(
Quad��Node
&
node
, cڡ
Quad��Bounds
&
b
, cڡ
Quad��Po�t
&
�t
,
Quad��I�mI����
*
�em
)
198 i�(
b
.
size
== 1)
200
node
.
`RemoveI�m
(
�em
);
201
node
.
`I�mCou�
() == 0;
203
q
= 0; q < 4; q++)
205
Quad��Bounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
206 i�(
`Po�tInBounds
(
�t
,
ch�dBounds
))
209 i�(
`RemoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�t
,
�em
))
211
d��e
node
.
nodes
[
q
];
212
node
.
nodes
[
q
] = 0;
217 !
node
.
nodes
[0] && !node.nodes[1] && !node.nodes[2] && !node.nodes[3];
218
}
}
221
$MoveT�v��
(
Quad��Node
&
node
, cڡ
Quad��Bounds
&
b
, cڡ
Quad��Po�t
&
�dP�
, cڡ Quad��Po�t&
�wP�
,
Quad��I�mI����
*
�em
)
224
q
= 0; q < 4; q++)
226
Quad��Bounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
227
bo�
�dIn
=
`Po�tInBounds
(
�dP�
,
ch�dBounds
);
228
bo�
�wIn
=
`Po�tInBounds
(
�wP�
,
ch�dBounds
);
229 i�(
�dIn
&&
�wIn
)
232
`MoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�dP�
,
�wP�
,
�em
);
234 i�(
�dIn
)
237
`RemoveT�v��
(*
node
.
nodes
[
q
],
ch�dBounds
,
�dP�
,
�em
);
239 i�(
�wIn
)
241 aut�
addFun��
= [](
Quad��Node
&
node
,
Quad��I�mI����
*
�em
�{�ode.
`AddI�m
(item); };
242
`T�v��
(
addFun��
, *
node
.
nodes
[
q
],
ch�dBounds
,
�wP�
,
�em
);
245
}
}
248
g�m��e
<
ty��me
gF
>
249
$T�v��
(cڡ
F
&
func
,
Quad��Node
&
node
, cڡ
Quad��Bounds
&
b
, cڡ
Quad��Po�t
&
�t
,
Quad��I�mI����
*
�em
)
251 i�(
b
.
size
== 1)
253
`func
(
node
,
�em
);
256
q
= 0; q < 4; q++)
258
Quad��Bounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
259 i�(
`Po�tInBounds
(
�t
,
ch�dBounds
))
261 i�(!
node
.
nodes
[
q
])
262
node
.
nodes
[
q
] =
�w
Quad��Node
;
263
`T�v��
(
func
, *
node
.
nodes
[
q
],
ch�dBounds
,
�t
,
�em
);
276
}
}
278
g�m��e
<
ty��me
gA�i�F
,�y��m�
gT�m��eF
,�y��m�
gTe�F
,�y��m�
gNu�Node
>
279
$T�v��G��ic
(cڡ
A�i�F
&
a�i�
, cڡ
T�m��eF
&
�rm
, cڡ
Te�F
&
��
, cڡ
Nu�Node
&
nu�Node
,
Quad��Node
&
node
, cڡ
Quad��Bounds
&
b
,
bo�
��yOut
)
281 i�(
`�rm
(
node
,
b
))
283
`a�i�
(
node
,
b
);
286
q
= 0; q < 4; q++)
288
Quad��Bounds
ch�dBounds
=
`Ch�dBounds
(
b
,
q
);
289 i�(
`��
(
node
,
ch�dBounds
))
291 i�(!
node
.
nodes
[
q
])
292
`nu�Node
(
node
,
q
);
293 i�(!
node
.
nodes
[
q
])
294
`T�v��G��ic
(
a�i�
,
�rm
,
��
,
nu�Node
, *
node
.
nodes
[
q
],
ch�dBounds
,
��yOut
);
295 i�(
��yOut
)
299
}
}
301
$Ex�ndRecur�
(cڡ
Quad��Po�t
&
�t
)
304
F�gs
<
D�e�i�
>
growD�e�i�F�gs
= D�e�i�::
Midd�
;
305
growD�e�i�F�gs
|�(
�t
.
x
<
bounds
.
�ig�
.x�?
D�e�i�
::
Le�
: D�e�i�::
Midd�
;
306
growD�e�i�F�gs
|�(
�t
.
x
>�(
bounds
.
�ig�
.x + bounds.
size
)�?
D�e�i�
::
Right
: D�e�i�::
Midd�
;
307
growD�e�i�F�gs
|�(
�t
.
y
<
bounds
.
�ig�
.y�?
D�e�i�
::
Down
: D�e�i�::
Midd�
;
308
growD�e�i�F�gs
|�(
�t
.
y
>�(
bounds
.
�ig�
.y + bounds.
size
)�?
D�e�i�
::
Up
: D�e�i�::
Midd�
;
309
�dRo�Quad��
= 0;
310
growD�e�i�F�gs
) {
311
D�e�i�
::
Midd�
: ;
312
D�e�i�
::
Up
:
313
D�e�i�
::
UpLe�
:
�dRo�Quad��
= 3; ;
314
D�e�i�
::
Right
:
315
D�e�i�
::
UpRight
:
�dRo�Quad��
= 2; ;
316
D�e�i�
::
Le�
:
317
D�e�i�
::
DownLe�
:
�dRo�Quad��
= 1; ;
318
D�e�i�
::
Down
:
319
D�e�i�
::
DownRight
:
�dRo�Quad��
= 0; ;
321
q
=
�dRo�Quad��
;
322
bounds
.
�ig�
.
x
-�(
q
& 1�? bounds.
size
: 0;
323
bounds
.
�ig�
.
y
-�(
q
& 2�? 0 : bounds.
size
;
324
bounds
.
size
<<= 1;
325
Quad��Node
*
�wRo�Node
=
�w
QuadtreeNode;
326
�wRo�Node
->
nodes
[
q
] =
ro�Node
;
327
ro�Node
=
�wRo�Node
;
328
`Ex�ndRecur�
(
�t
);
329
}
}
@
1
.
0
45
929
../include/Application.h
../include/Common.h
../include/CommonWidgets.h
../include/Events.h
../include/Graphics.h
../include/MemoryMapping.h
../include/Object.h
../include/Painter.h
../include/Property.h
../include/Reflection.h
../include/SignalSlot.h
../include/Test.h
../include/TrueType.h
../include/UiBuilder.h
../include/Variant.h
../include/Widget.h
../include/Window.h
../include/XmlParser.h
../resources/CheckBoxTick.xbm
../resources/ComboBoxArrow.xbm
../resources/Images.h
../resources/ScrollBarArrow.xbm
../src/Application.cpp
../src/CommonWidgets.cpp
../src/Graphics.cpp
../src/MemoryMapping.cpp
../src/Object.cpp
../src/ObjectiveC.h
../src/Painter.cpp
../src/PicoPNG.cpp
../src/Reflection.cpp
../src/SignalSlot.cpp
../src/Test.cpp
../src/TrueType.cpp
../src/UiBuilder.cpp
../src/Variant.cpp
../src/Widget.cpp
../src/Window.cpp
../src/XmlParser.cpp
Maths.cpp
Maths.h
fontedit.cpp
formfactors.cpp
main.cpp
quadtree.cpp