📄 ui_slider.s01
字号:
JR ?0066
ADC A,0
JR ?0072
JR ?0062
?0024:
; 126. }
; 127. else if(value >= 10)
LD C,10
LD L,(IX-28)
LD H,(IX-27)
AND A
SBC HL,BC
LD C,(IX-30)
LD B,(IX-29)
LD E,(IX-28)
JR C,?0027
?0026:
; 128. {
; 129. itoa_2(value, p);
LD A,BYTE3 itoa_2
LD HL,LWRD itoa_2
CALL LWRD ?BANK_CALL_DIRECT_L08
; 130. p += 2;
LD HL,0
ADD HL,SP
LD A,(HL)
ADD A,2
?0070:
LD (HL),A
INC HL
?0066:
LD A,(HL)
ADC A,0
?0072:
LD (HL),A
; 131. }
; 132. else
JR ?0062
?0027:
; 133. {
; 134. itoa_1(value, p);
LD A,BYTE3 itoa_1
LD HL,LWRD itoa_1
CALL LWRD ?BANK_CALL_DIRECT_L08
; 135. p++;
INC (IX-30)
JR NZ,?0062
INC (IX-29)
?0062:
?0028:
?0025:
?0022:
; 136. }
; 137. *p++ = '>';
LD L,(IX-30)
LD H,(IX-29)
LD (HL),62
; 138. *p++ = '>';
INC HL
INC HL
LD (IX-30),L
LD (IX-29),H
DEC HL
LD (HL),62
; 139. *p = 0;
LD L,(IX-30)
LD H,(IX-29)
LD (HL),0
; 140.
; 141. //show text <-xxxx>
; 142. SetTextPos((SCR_WIDTH - (BYTE)get_text_width(buf)) / 2, 8);
LD C,8
PUSH BC
LD HL,22
ADD HL,SP
EX DE,HL
LD A,BYTE3 get_text_width
LD HL,LWRD get_text_width
CALL LWRD ?BANK_CALL_DIRECT_L08
LD E,L
LD D,0
LD HL,128
AND A
SBC HL,DE
EX DE,HL
LD BC,2
CALL LWRD ?SS_DIV_L02
POP BC
CALL LWRD SetTextPos
; 143. ClearScreen(&num_region);
LD HL,6
ADD HL,SP
EX DE,HL
CALL LWRD ClearScreen
; 144. PutS(buf, -1);
LD C,255
LD HL,20
ADD HL,SP
EX DE,HL
CALL LWRD PutS
; 145. if(ui_auto_update) UpdateScreen(&num_region);
LD A,(ui_auto_update)
OR A
JR Z,?0030
?0029:
LD HL,6
ADD HL,SP
EX DE,HL
CALL LWRD UpdateScreen
?0030:
; 146.
; 147. //check if auto_update
; 148. if(!ui_auto_update) UpdateScreen(NULL);
LD A,(ui_auto_update)
OR A
JR NZ,?0032
?0031:
LD E,A
LD D,A
CALL LWRD UpdateScreen
?0032:
; 149.
; 150. need_draw = FALSE;
LD (IX-12),0
?0013:
; 151.
; 152. }//need draw
; 153.
; 154. //handle message
; 155. key = ap_get_message();
CALL LWRD ap_get_message
; 156. switch( key)
LD E,A
CALL LWRD ?C_V_SWITCH_L06
DEFW 11
DEFB 3
DEFB 4
DEFB 5
DEFB 6
DEFB 30
DEFB 33
DEFB 39
DEFB 67
DEFB 68
DEFB 69
DEFB 70
DEFW ?0050
DEFW ?0034
DEFW ?0040
DEFW ?0034
DEFW ?0040
DEFW ?0069
DEFW ?0069
DEFW ?0047
DEFW ?0034
DEFW ?0040
DEFW ?0034
DEFW ?0040
?0034:
; 157. {
; 158. case AP_KEY_NEXT:
; 159. case AP_KEY_VOLADD:
; 160. case AP_KEY_NEXT | AP_KEY_HOLD:
; 161. case AP_KEY_VOLADD | AP_KEY_HOLD:
; 162. if((slider->value + slider->step) <= slider->max)
LD L,(IY+6)
LD H,(IY+7)
LD C,(IY+4)
LD B,(IY+5)
ADD HL,BC
LD C,L
LD B,H
LD L,(IY+2)
LD H,(IY+3)
OR 128
SBC HL,BC
JP PO,?0063
XOR H
?0063:
JP M,?0036
?0035:
; 163. {
; 164. slider->value += slider->step;
LD HL,4
PUSH IY
POP BC
ADD HL,BC
LD A,(HL)
ADD A,(IY+6)
LD (HL),A
INC HL
LD A,(HL)
ADC A,(IY+7)
LD (HL),A
; 165. value_changed = TRUE;
; 166. need_draw = TRUE;
LD (IX-13),1
LD (IX-12),1
?0036:
?0038:
; 167. }
; 168. while(ap_get_message() != NULL); /*clear message pool */
CALL LWRD ap_get_message
OR A
JR Z,?0054
?0039:
; 169. break;
JR ?0036
?0037:
JR ?0054
?0040:
; 170.
; 171.
; 172. case AP_KEY_PREV:
; 173. case AP_KEY_VOLSUB:
; 174. case AP_KEY_PREV | AP_KEY_HOLD:
; 175. case AP_KEY_VOLSUB | AP_KEY_HOLD:
; 176. if((slider->value - slider->step) >= slider->min)
LD C,(IY+0)
LD B,(IY+1)
LD E,(IY+6)
LD D,(IY+7)
LD L,(IY+4)
LD H,(IY+5)
AND A
SBC HL,DE
OR 128
SBC HL,BC
JP PO,?0064
XOR H
?0064:
JP M,?0042
?0041:
; 177. {
; 178. slider->value -= slider->step;
LD HL,4
PUSH IY
POP BC
ADD HL,BC
LD A,(HL)
SUB (IY+6)
LD (HL),A
INC HL
LD A,(HL)
SBC A,(IY+7)
LD (HL),A
; 179. value_changed = TRUE;
; 180. need_draw = TRUE;
LD (IX-13),1
LD (IX-12),1
?0042:
?0044:
; 181. }
; 182. while(ap_get_message() != NULL); /*clear message pool */
CALL LWRD ap_get_message
OR A
JR Z,?0054
?0045:
; 183. break;
JR ?0042
?0043:
JR ?0054
?0046:
; 184.
; 185. // //hold 用来控制加速开关
; 186. // case AP_KEY_NEXT | AP_KEY_HOLD:
; 187. // case AP_KEY_VOLADD | AP_KEY_HOLD:
; 188. // if(hold_state == 0) hold_state = 1;
; 189. //
; 190. // break;
; 191.
; 192. //
; 193. // case AP_KEY_PREV | AP_KEY_HOLD:
; 194. // case AP_KEY_VOLSUB | AP_KEY_HOLD:
; 195. // if(hold_state == 0) hold_state = 2;
; 196. //
; 197. // break;
; 198. //
; 199.
; 200. // case AP_KEY_NEXT | AP_KEY_UP:
; 201. // case AP_KEY_VOLADD | AP_KEY_UP:
; 202. // case AP_KEY_PREV | AP_KEY_UP:
; 203. // case AP_KEY_VOLSUB | AP_KEY_UP:
; 204. // hold_state = 0;
; 205. //
; 206. // break;
; 207.
; 208.
; 209. case AP_KEY_MODE | AP_KEY_UP:
; 210. case AP_KEY_PLAY | AP_KEY_UP:
; 211. return 0; //ok and return
JR ?0069
; 212.
; 213.
; 214. case AP_MSG_WAIT_TIMEOUT:
JR ?0059
?0047:
; 215. if(ui_auto_select) return 0;
LD A,(ui_auto_select)
OR A
JR Z,?0054
?0048:
JR ?0069
; 216.
; 217. break;
JR ?0059
?0049:
JR ?0054
?0050:
; 218.
; 219.
; 220. default:
; 221. key = ap_handle_hotkey(key);
CALL LWRD ap_handle_hotkey
LD (IX-14),A
; 222. if(key == RESULT_REDRAW) //need_draw = TRUE;
CP 46
JR NZ,?0052
?0051:
; 223. {
; 224. //直接退出,因为控件不能重画背景
; 225. return 0;
?0069:
LD HL,0
; 226. }
JR ?0059
?0052:
; 227. else if(key != 0) return key;
XOR A
OR (IX-14)
JR Z,?0054
?0053:
LD L,A
LD H,0
; 228. }
?0059:
LD SP,IX
POP IX
POP IY
POP BC
JP LWRD ?BANK_FAST_LEAVE_L08
?0054:
?0033:
; 229. //ASSERT(slider->value <= slider->max);
; 230. //ASSERT(slider->value >= slider->min);
; 231. //
; 232. // //check if holding
; 233. // if(hold_state == 1) //holding up
; 234. // {
; 235. // if((slider->value + slider->step) <= slider->max)
; 236. // {
; 237. // slider->value += slider->step;
; 238. // value_changed = TRUE;
; 239. // need_draw = TRUE;
; 240. //
; 241. // while(key != NULL)
; 242. // {
; 243. // if((key & AP_KEY_UP) != NULL)
; 244. // hold_state = 0;
; 245. // key = ap_get_message();
; 246. // }
; 247. // }
; 248. // else
; 249. // {
; 250. // hold_state = 0; //disable holding
; 251. // slider->value=slider->max;
; 252. // }
; 253. // }
; 254. // else if(hold_state == 2) //holding down
; 255. // {
; 256. // if((slider->value - slider->step) >= slider->min)
; 257. // {
; 258. // slider->value -= slider->step;
; 259. // value_changed = TRUE;
; 260. // need_draw = TRUE;
; 261. //
; 262. // while(key != NULL)
; 263. // {
; 264. // if((key & AP_KEY_UP) != NULL)
; 265. // hold_state = 0;
; 266. // key = ap_get_message();
; 267. // }
; 268. // }
; 269. // else
; 270. // {
; 271. // hold_state = 0; //disable holding
; 272. // slider->value=slider->min;
; 273. // }
; 274. // }
; 275. //handle callback
; 276. if(callback != NULL && value_changed)
LD A,(IX+10)
OR (IX+11)
OR (IX+12)
JP Z,?0010
XOR A
OR (IX-13)
JP Z,?0010
?0058:
?0057:
?0055:
; 277. {
; 278. callback(slider->value);
LD E,(IY+4)
LD D,(IY+5)
LD A,(IX+12)
LD L,(IX+10)
LD H,(IX+11)
CALL LWRD ?BANK_CALL_DIRECT_L08
; 279. value_changed = FALSE;
LD (IX-13),0
?0056:
; 280. }
; 281.
; 282. }//while(1)
; 283. //return 0;
; 284. }
JP LWRD ?0010
; 285.
; 286.
RSEG CONST
?0007:
DEFB 0
DEFB 16
DEFB 128
DEFB 16
?0008:
DEFB ','
DEFB 8
DEFB '('
DEFB 8
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -