Subversion Repositories Kolibri OS

Rev

Rev 7573 | Rev 7577 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7573 IgorA 1
 
2
 
3
	mcall SF_REDRAW,SSF_BEGIN_DRAW
4
5
	mov edx,[sc.work]
6
 
7
	mcall SF_CREATE_WINDOW,dword[wnd_s_pos],dword[wnd_s_pos+4],,,hed
8
9
	mcall SF_THREAD_INFO,procinfo,-1
10
 
11
	call EvSize
12
13
	movzx ebx,word[procinfo.client_box.width]
14
 
15
	mcall SF_DRAW_RECT,,ted_wnd_t ;верхний прямоугольник, для очистки верхней панели
16
	call draw_but_toolbar
17
	stdcall [kmainmenu_draw], [main_menu]
18
	stdcall [ted_draw], tedit0
19
20
	mcall SF_REDRAW,SSF_END_DRAW
21
 
22
23
align 4
24
 
1456 IgorA 25
	pushad
1457 IgorA 26
	mov edi,tedit0
6087 IgorA 27
28
	mov ecx,0x40000000+ID_BUT_NEW
1338 IgorA 29
 
7573 IgorA 30
	bt word[panel_but],0
7488 IgorA 31
	jnc @f
32
		call draw_but_icon ;New
33
	@@:
34
35
	mov cx,ID_BUT_OPEN
1338 IgorA 36
 
7573 IgorA 37
	jnc @f
7488 IgorA 38
		add edx,25 shl 16
39
		call draw_but_icon ;Open
40
	@@:
41
42
	stdcall [ted_can_save],edi
1338 IgorA 43
 
6087 IgorA 44
	je @f
45
		and ecx,0xffff
46
	@@:
47
	mov cx,ID_BUT_SAVE
48
	bt word[panel_but+2],0
7573 IgorA 49
	jnc @f
7488 IgorA 50
		add edx,25 shl 16
51
		call draw_but_icon ;Save
52
	@@:
53
	or ecx,0x40000000
54
6087 IgorA 55
	mov cx,ID_BUT_SAVE_AS
1338 IgorA 56
 
7573 IgorA 57
	jnc @f
7488 IgorA 58
		add edx,25 shl 16
59
		call draw_but_icon ;Save as
7571 IgorA 60
	@@:
61
62
	mov cx,ID_BUT_SELECT
63
 
7573 IgorA 64
	jnc @f
7571 IgorA 65
		add edx,30 shl 16
66
		call draw_but_icon ;Select word
7488 IgorA 67
	@@:
68
69
	call [ted_is_select]
1338 IgorA 70
 
6087 IgorA 71
	jnz @f
7488 IgorA 72
		and ecx,0xffff
73
	@@:
6087 IgorA 74
	mov cx,ID_BUT_CUT
75
	bt word[panel_but+5],0
7573 IgorA 76
	jnc @f
7571 IgorA 77
		add edx,25 shl 16
7488 IgorA 78
		call draw_but_icon ;Cut
79
	@@:
80
81
	mov cx,ID_BUT_COPY
1338 IgorA 82
 
7573 IgorA 83
	jnc @f
7571 IgorA 84
		add edx,25 shl 16
7488 IgorA 85
		call draw_but_icon ;Copy
86
	@@:
87
	or ecx,0x40000000
88
6087 IgorA 89
	cmp dword[buf],0
1338 IgorA 90
 
6087 IgorA 91
		and ecx,0xffff
92
	@@:
93
	mov cx,ID_BUT_PASTE
94
	bt word[panel_but+7],0
7573 IgorA 95
	jnc @f
7571 IgorA 96
		add edx,25 shl 16
7488 IgorA 97
		call draw_but_icon ;Paste
98
	@@:
99
	or ecx,0x40000000
100
6087 IgorA 101
	mov cx,ID_BUT_FIND
1338 IgorA 102
 
7573 IgorA 103
	jnc @f
7571 IgorA 104
		add edx,25 shl 16
7488 IgorA 105
		call draw_but_icon ;Found
106
	@@:
107
108
	mov cx,ID_BUT_REPLACE
1338 IgorA 109
 
7573 IgorA 110
	jnc @f
7571 IgorA 111
		add edx,25 shl 16
7488 IgorA 112
		call draw_but_icon ;Replace
113
	@@:
114
115
	mov cx,ID_BUT_KEY_WORDS
1338 IgorA 116
 
7573 IgorA 117
	jnc @f
7571 IgorA 118
		add edx,25 shl 16
7488 IgorA 119
		call draw_but_icon ;Key words
120
	@@:
121
122
	call [ted_is_select]
1338 IgorA 123
 
7488 IgorA 124
	jnz @f
125
		and ecx,0xffff
126
	@@:
127
	mov cx,ID_BUT_UPPER
128
	bt word[panel_but+11],0
7573 IgorA 129
	jnc @f
7571 IgorA 130
		add edx,30 shl 16
7488 IgorA 131
		call draw_but_icon ;Upper
132
	@@:
133
134
	mov cx,ID_BUT_LOWER
135
 
7573 IgorA 136
	jnc @f
7571 IgorA 137
		add edx,25 shl 16
7488 IgorA 138
		call draw_but_icon ;Lower
139
	@@:
140
141
	mov cx,ID_BUT_REVERSE
142
 
7573 IgorA 143
	jnc @f
7571 IgorA 144
		add edx,25 shl 16
7488 IgorA 145
		call draw_but_icon ;Reverse
146
	@@:
147
	or ecx,0x40000000
148
149
	mov ebx,ted_tim_undo
150
 
6087 IgorA 151
	jg @f
152
		and ecx,0xffff
153
	@@:
154
	mov cx,ID_BUT_UNDO
155
	bt word[panel_but+14],0
7573 IgorA 156
	jnc @f
7571 IgorA 157
		add edx,30 shl 16
7488 IgorA 158
		call draw_but_icon ;Undo
159
	@@:
160
	or ecx,0x40000000
161
6087 IgorA 162
	cmp ted_tim_undo,1
1338 IgorA 163
 
6087 IgorA 164
		and ecx,0xffff
165
	@@:
166
	mov cx,ID_BUT_REDO
167
	bt word[panel_but+15],0
7573 IgorA 168
	jnc @f
7571 IgorA 169
		add edx,25 shl 16
7488 IgorA 170
		call draw_but_icon ;Redo
171
	@@:
172
	or ecx,0x40000000
173
6087 IgorA 174
	mov cx,ID_BUT_INVISIBLE
1338 IgorA 175
 
7573 IgorA 176
	jnc @f
7571 IgorA 177
		add edx,30 shl 16
7488 IgorA 178
		call draw_but_icon ;Invisible on|off
179
	@@:
180
181
	mov cx,ID_BUT_SYNTAX_LIST
1338 IgorA 182
 
7573 IgorA 183
	jnc @f
7571 IgorA 184
		add edx,25 shl 16
7488 IgorA 185
		call draw_but_icon ;Выбор файла подсветки
186
	@@:
7571 IgorA 187
7488 IgorA 188
	mov cx,ID_BUT_SYNTAX_MODE
1338 IgorA 189
 
7573 IgorA 190
	jnc @f
7571 IgorA 191
		add edx,25 shl 16
7488 IgorA 192
		call draw_but_icon ;Подсветка вкл|выкл
193
	@@:
7571 IgorA 194
7488 IgorA 195
	mov cx,ID_BUT_CONVERT_1251_866
1338 IgorA 196
 
7573 IgorA 197
	jnc @f
7571 IgorA 198
		add edx,30 shl 16
7488 IgorA 199
		call draw_but_icon ;cp 1251 -> 866
200
	@@:
201
202
	mov cx,ID_BUT_CONVERT_866_1251
1338 IgorA 203
 
7573 IgorA 204
	jnc @f
7571 IgorA 205
		add edx,25 shl 16
7488 IgorA 206
		call draw_but_icon ;cp 866 -> 1251
207
	@@:
208
209
	popad
4308 IgorA 210
 
211
212
;txtBUp db 24
213
 
1338 IgorA 214
;txtBRi db 26
215
;txtBLe db 27
216
217
;input:
1457 IgorA 218
 
219
align 4
220
proc draw_panel_find
1456 IgorA 221
	cmp ted_panel_id,TED_PANEL_FIND
1457 IgorA 222
	jne @f
7576 IgorA 223
		call p_find
6087 IgorA 224
		jmp .end_f
7576 IgorA 225
	@@:
226
	cmp ted_panel_id,TED_PANEL_REPLACE
227
	jne @f
228
		call p_replace
229
		jmp .end_f
230
	@@:
231
	push eax edx
232
		mcall SF_DEFINE_BUTTON,,,0x80000000+201
233
		mcall ,,,0x80000000+202
234
		mcall ,,,0x80000000+203
235
	pop edx eax
236
	.end_f:
237
	ret
238
endp
239
240
align 4
241
 
242
	push eax ebx ecx edx
243
		mov ecx,ted_wnd_t
6087 IgorA 244
		shl ecx,16
245
		mov cx,20
246
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
247
248
		mov ecx,ted_wnd_t
1338 IgorA 249
 
7576 IgorA 250
		shl ecx,16
251
		add ecx,ted_wnd_h
252
		mov edx,ted_scr_h
253
		add cx,word[edx+sb_offs_size_y]
254
		sub cx,20+15-1 ; 15 - height text box
255
		mcall ,,,[sc.work]
256
257
		stdcall [edit_box_draw], edit2
258
 
259
		mov ecx,ted_wnd_t
260
 
261
		add ecx,(93 shl 16)+20
262
		mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,201,[sc.work_button] ;201 - button id
263
264
		mov ebx,(23 shl 16)+7
265
 
266
		mov ecx,[sc.work_text]
6087 IgorA 267
		or ecx,0x80000000
268
		mcall SF_DRAW_TEXT,,,txtFindCapt
269
270
		mov ecx,[sc.work_button_text]
1338 IgorA 271
 
7576 IgorA 272
		mov ebx,(15 shl 16)+100
273
		add ebx,ted_wnd_t
274
		mcall ,,,txtFindNext
275
276
		stdcall [option_box_draw], opt_grlist1
1338 IgorA 277
 
7576 IgorA 278
	ret
279
280
align 4
281
 
282
	push eax ebx ecx edx
283
		mov ecx,ted_wnd_t
284
		shl ecx,16
6087 IgorA 285
		mov cx,20
7576 IgorA 286
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
287
288
		mov ecx,ted_wnd_t
289
 
290
		shl ecx,16
6087 IgorA 291
		add ecx,ted_wnd_h
292
		mov edx,ted_scr_h
293
		add cx,word[edx+sb_offs_size_y]
294
		sub cx,20+15-1 ; 15 - height text box
295
		mcall ,,,[sc.work]
296
7576 IgorA 297
		stdcall [edit_box_draw], edit1
1338 IgorA 298
 
7576 IgorA 299
300
		mov ecx,ted_wnd_t
301
 
6087 IgorA 302
		add ecx,(133 shl 16)+20
303
		mcall SF_DEFINE_BUTTON,(5 shl 16)+95,,202,[sc.work_button] ;replace next
7576 IgorA 304
305
		add ecx,(26 shl 16)
1338 IgorA 306
 
7576 IgorA 307
308
		mov ebx,ted_wnd_t
309
 
310
		mov ecx,[sc.work_text]
311
		or ecx,0x80000000
6087 IgorA 312
		mcall SF_DRAW_TEXT,,,txtFindCapt
313
		add ebx,93
7576 IgorA 314
		mcall SF_DRAW_TEXT,,,txtRerlaceCapt
315
316
		mov ecx,[sc.work_button_text]
317
 
318
		mov ebx,ted_wnd_t
319
		add ebx,(15 shl 16)+140
320
		mcall ,,,txtRerlace
321
		add ebx,26
322
		mcall ,,,txtRerlaceAll
323
324
		stdcall [option_box_draw], opt_grlist1
325
 
326
	ret
6087 IgorA 327
328
;input:
1338 IgorA 329
 
1457 IgorA 330
align 4
331
proc draw_panel_syntax
1456 IgorA 332
	cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
1457 IgorA 333
	jne @f
6087 IgorA 334
	pushad
335
336
	mov ecx,ted_wnd_t
1338 IgorA 337
 
6087 IgorA 338
	mov cx,20
339
	mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;рисование верхнего фонового прямоугольника
340
341
	stdcall dword[tl_draw], tree1
1338 IgorA 342
 
6087 IgorA 343
	stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox
344
345
	ror ecx,16
1338 IgorA 346
 
6087 IgorA 347
	add ecx,20
348
	and ecx,0xffff
349
	ror ecx,16
350
	add ecx,ted_wnd_h
351
	mov esi,ted_scr_h
352
	add cx,word[esi+sb_offs_size_y]
353
	sub cx,20
354
	sub ecx,dword[tree1.box_height]
355
	inc cx
356
	int 0x40 ;рисование нижнего фонового прямоугольника
357
358
	mov ecx,ted_wnd_t
1338 IgorA 359
 
6087 IgorA 360
	add ecx,dword[tree1.box_height]
361
	shl ecx,16
362
	mov cx,20
363
	mcall SF_DEFINE_BUTTON,(5 shl 16)+65,,200,[sc.work_button] ;200 - button id
364
365
	mov ebx,(30 shl 16)+5
1338 IgorA 366
 
6087 IgorA 367
	mov ecx,[sc.work_text]
368
	or ecx,0x80000000
369
	mcall SF_DRAW_TEXT,,,txtFormatCapt
370
371
	mov ebx,(10 shl 16)+31
1338 IgorA 372
 
6087 IgorA 373
	add ebx,ted_wnd_t
374
	mcall ,,,txtFormatApply
375
376
	popad
1338 IgorA 377
 
6087 IgorA 378
	@@:
379
		push eax edx
380
		mov edx,200
381
		or edx,0x80000000
382
		mcall SF_DEFINE_BUTTON ;если нет панели то удаляем кнопку
383
		pop edx eax
384
	.end_f:
385
	ret
386
endp
387
1449 IgorA 388
MIN_M_WND_H equ 100 ;минимальная высота главного окна
1338 IgorA 389
 
2125 IgorA 390
; edi = pointer to tedit struct
391
align 4
392
EvSize:
1456 IgorA 393
	pushad
2125 IgorA 394
	mov ebx,ted_scr_h
6087 IgorA 395
	mov esi,ted_scr_w
396
397
	m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна
1338 IgorA 398
 
6087 IgorA 399
	sub ted_wnd_w,eax ;отнимаем отступ слева
400
	movzx eax,word[esi+sb_offs_size_x]
401
	sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга
402
403
	m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна
1449 IgorA 404
 
6087 IgorA 405
	jg @f
406
		mov ted_wnd_h,MIN_M_WND_H
407
	@@:
408
409
	movzx eax,word[ebx+sb_offs_size_y]
1338 IgorA 410
 
6087 IgorA 411
	mov eax,ted_wnd_t
412
	sub ted_wnd_h,eax	      ;отнимаем отступ сверху
413
414
	stdcall [ted_init_scroll_bars], tedit0,2
1338 IgorA 415
 
6087 IgorA 416
	mov eax,ted_wnd_t
1338 IgorA 417
 
6087 IgorA 418
	mov tl_box_top,eax ;=ted_wnd_t
7576 IgorA 419
	add tl_box_top,20
6087 IgorA 420
421
	mov [edit2.top],eax ;=ted_wnd_t
1338 IgorA 422
 
6087 IgorA 423
	mov [edit1.top],eax ;=ted_wnd_t
424
	add dword[edit1.top],113
7576 IgorA 425
	popad
426
	ret
6087 IgorA 427
428
;input:
1338 IgorA 429
 
1456 IgorA 430
;   cx = ID button
1338 IgorA 431
;  edx = x*2^16+y
7573 IgorA 432
align 4
1338 IgorA 433
draw_but_icon:
1456 IgorA 434
	push eax ebx
1338 IgorA 435
1457 IgorA 436
	mov eax,SF_DEFINE_BUTTON
1338 IgorA 437
 
6087 IgorA 438
		mov ebx,edx
1457 IgorA 439
		mov edx,ecx
440
		mov cx,bx
441
		shl ecx,16
442
		mov cx,19 ;=20-1
443
		mov bx,19 ;=20-1
444
		mov esi,ebx
445
		shr esi,16
446
		add esi,20
447
		cmp esi,[procinfo.client_box.width]
448
		jge @f ;кнопка не влезла в окно
449
			mov esi,[sc.work_button]
4128 IgorA 450
			int 0x40 ;ставим кнопку
1457 IgorA 451
			mov eax,SF_PUT_IMAGE
452
		@@:
6087 IgorA 453
	pop esi edx ecx
1457 IgorA 454
455
	cmp eax,SF_PUT_IMAGE
1338 IgorA 456
 
6087 IgorA 457
		mov ebx,[bmp_icon]
4128 IgorA 458
		bt ecx,30 ;if (ecx & 0x40000000)
1457 IgorA 459
		jc .gray
4308 IgorA 460
			add ebx,TOOLBAR_ICONS_SIZE ;перемещаемся на серые кнопки
4128 IgorA 461
		.gray:
462
		push ecx
463
		sub ecx,ID_BUT_0
1457 IgorA 464
		and ecx,0xffff
7573 IgorA 465
		imul ecx,1200
1457 IgorA 466
		add ebx,ecx
467
		mov ecx,(20 shl 16)+20
468
		int 0x40 ;ставим рисунок на кнопку
7488 IgorA 469
		pop ecx
1457 IgorA 470
	@@:
471
	pop ebx eax
472
	ret
473
474
;descrition:
1338 IgorA 475
 
4128 IgorA 476
;input:
477
; buf_rgb - буфер с входным 24 битным цветным изображением
478
; buf_g24 - буфер с выходным 24 битным серым изображением
479
; pixels - число пикселей в изображении
480
align 4
481
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
482
pushad
4228 IgorA 483
	mov esi,[buf_rgb]
484
	mov edi,[buf_g24]
4128 IgorA 485
	mov ecx,[pixels]
486
	mov ebx,3
487
	@@:
4228 IgorA 488
		movzx eax,byte[esi]
4128 IgorA 489
		movzx edx,byte[esi+1]
490
		add eax,edx
4228 IgorA 491
		movzx edx,byte[esi+2]
492
		add eax,edx
493
		xor edx,edx
494
		div ebx ;shr eax,2
495
		mov ah,al
496
		mov word[edi],ax
4128 IgorA 497
		mov byte[edi+2],al
498
		add esi,3
499
		add edi,3
500
		loop @b
501
popad
502
	ret
4228 IgorA 503
endp
4128 IgorA 504