Newer
Older
Import / research / ui / toolkit / test / cscope.out
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