Subversion Repositories Kolibri OS

Rev

Rev 7571 | Rev 7576 | 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 ;if not panel
1457 IgorA 222
	jne @f
6087 IgorA 223
	push eax ebx ecx edx
224
		mov ecx,ted_wnd_t
225
		shl ecx,16
226
		mov cx,20
227
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
228
229
		mov ebx,(30 shl 16)+25
1338 IgorA 230
 
7573 IgorA 231
		mov ecx,[sc.work_text]
6087 IgorA 232
		or ecx,0x80000000
233
		mcall SF_DRAW_TEXT,,,txtFindCapt
234
235
		stdcall [edit_box_draw], edit2
1338 IgorA 236
 
6087 IgorA 237
		mov ecx,ted_wnd_t
1338 IgorA 238
 
6087 IgorA 239
		shl ecx,16
240
		add ecx,ted_wnd_h
241
		mov edx,ted_scr_h
242
		add cx,word[edx+sb_offs_size_y]
243
		sub cx,20+15-1 ; 15 - height text box
244
		mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
245
246
		mov ecx,ted_wnd_t
1338 IgorA 247
 
6087 IgorA 248
		shl ecx,16
249
		mov cx,20
250
		mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,201,[sc.work_button] ;201 - button id
251
7573 IgorA 252
		mov ebx,(15 shl 16)+(20+15+10)
1338 IgorA 253
 
7573 IgorA 254
		mov ecx,[sc.work_text]
6087 IgorA 255
		or ecx,0x80000000
256
		mcall SF_DRAW_TEXT,,,txtFindNext
257
	pop edx ecx ebx eax
258
	jmp .end_f
259
	@@:
260
	push eax edx
261
		mov edx,201
262
		or edx,0x80000000
263
		mcall SF_DEFINE_BUTTON
264
	pop edx eax
265
	.end_f:
266
	ret
267
endp
268
1449 IgorA 269
;input:
1338 IgorA 270
 
1457 IgorA 271
align 4
272
proc draw_panel_syntax
1456 IgorA 273
	cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
1457 IgorA 274
	jne @f
6087 IgorA 275
	pushad
276
277
	mov ecx,ted_wnd_t
1338 IgorA 278
 
6087 IgorA 279
	mov cx,20
280
	mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;рисование верхнего фонового прямоугольника
281
282
	stdcall dword[tl_draw], tree1
1338 IgorA 283
 
6087 IgorA 284
	stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox
285
286
	ror ecx,16
1338 IgorA 287
 
6087 IgorA 288
	add ecx,20
289
	and ecx,0xffff
290
	ror ecx,16
291
	add ecx,ted_wnd_h
292
	mov esi,ted_scr_h
293
	add cx,word[esi+sb_offs_size_y]
294
	sub cx,20
295
	sub ecx,dword[tree1.box_height]
296
	inc cx
297
	int 0x40 ;рисование нижнего фонового прямоугольника
298
299
	mov ecx,ted_wnd_t
1338 IgorA 300
 
6087 IgorA 301
	add ecx,dword[tree1.box_height]
302
	shl ecx,16
303
	mov cx,20
304
	mcall SF_DEFINE_BUTTON,(5 shl 16)+65,,200,[sc.work_button] ;200 - button id
305
306
	mov ebx,(30 shl 16)+5
1338 IgorA 307
 
6087 IgorA 308
	mov ecx,[sc.work_text]
309
	or ecx,0x80000000
310
	mcall SF_DRAW_TEXT,,,txtFormatCapt
311
312
	mov ebx,(10 shl 16)+31
1338 IgorA 313
 
6087 IgorA 314
	add ebx,ted_wnd_t
315
	mcall ,,,txtFormatApply
316
317
	popad
1338 IgorA 318
 
6087 IgorA 319
	@@:
320
		push eax edx
321
		mov edx,200
322
		or edx,0x80000000
323
		mcall SF_DEFINE_BUTTON ;если нет панели то удаляем кнопку
324
		pop edx eax
325
	.end_f:
326
	ret
327
endp
328
1449 IgorA 329
MIN_M_WND_H equ 100 ;минимальная высота главного окна
1338 IgorA 330
 
2125 IgorA 331
; edi = pointer to tedit struct
332
align 4
333
EvSize:
1456 IgorA 334
	pushad
2125 IgorA 335
	mov ebx,ted_scr_h
6087 IgorA 336
	mov esi,ted_scr_w
337
338
	m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна
1338 IgorA 339
 
6087 IgorA 340
	sub ted_wnd_w,eax ;отнимаем отступ слева
341
	movzx eax,word[esi+sb_offs_size_x]
342
	sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга
343
344
	m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна
1449 IgorA 345
 
6087 IgorA 346
	jg @f
347
		mov ted_wnd_h,MIN_M_WND_H
348
	@@:
349
350
	movzx eax,word[ebx+sb_offs_size_y]
1338 IgorA 351
 
6087 IgorA 352
	mov eax,ted_wnd_t
353
	sub ted_wnd_h,eax	      ;отнимаем отступ сверху
354
355
	stdcall [ted_init_scroll_bars], tedit0,2
1338 IgorA 356
 
6087 IgorA 357
	mov eax,ted_wnd_t
1338 IgorA 358
 
6087 IgorA 359
	mov tl_box_top,eax ;=ted_wnd_t
360
	add tl_box_top,20
361
362
	mov [edit2.top],eax ;=ted_wnd_t
1338 IgorA 363
 
6087 IgorA 364
365
	popad
1338 IgorA 366
 
6087 IgorA 367
368
;input:
1338 IgorA 369
 
1456 IgorA 370
;   cx = ID button
1338 IgorA 371
;  edx = x*2^16+y
7573 IgorA 372
align 4
1338 IgorA 373
draw_but_icon:
1456 IgorA 374
	push eax ebx
1338 IgorA 375
1457 IgorA 376
	mov eax,SF_DEFINE_BUTTON
1338 IgorA 377
 
6087 IgorA 378
		mov ebx,edx
1457 IgorA 379
		mov edx,ecx
380
		mov cx,bx
381
		shl ecx,16
382
		mov cx,19 ;=20-1
383
		mov bx,19 ;=20-1
384
		mov esi,ebx
385
		shr esi,16
386
		add esi,20
387
		cmp esi,[procinfo.client_box.width]
388
		jge @f ;кнопка не влезла в окно
389
			mov esi,[sc.work_button]
4128 IgorA 390
			int 0x40 ;ставим кнопку
1457 IgorA 391
			mov eax,SF_PUT_IMAGE
392
		@@:
6087 IgorA 393
	pop esi edx ecx
1457 IgorA 394
395
	cmp eax,SF_PUT_IMAGE
1338 IgorA 396
 
6087 IgorA 397
		mov ebx,[bmp_icon]
4128 IgorA 398
		bt ecx,30 ;if (ecx & 0x40000000)
1457 IgorA 399
		jc .gray
4308 IgorA 400
			add ebx,TOOLBAR_ICONS_SIZE ;перемещаемся на серые кнопки
4128 IgorA 401
		.gray:
402
		push ecx
403
		sub ecx,ID_BUT_0
1457 IgorA 404
		and ecx,0xffff
7573 IgorA 405
		imul ecx,1200
1457 IgorA 406
		add ebx,ecx
407
		mov ecx,(20 shl 16)+20
408
		int 0x40 ;ставим рисунок на кнопку
7488 IgorA 409
		pop ecx
1457 IgorA 410
	@@:
411
	pop ebx eax
412
	ret
413
414
;descrition:
1338 IgorA 415
 
4128 IgorA 416
;input:
417
; buf_rgb - буфер с входным 24 битным цветным изображением
418
; buf_g24 - буфер с выходным 24 битным серым изображением
419
; pixels - число пикселей в изображении
420
align 4
421
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
422
pushad
4228 IgorA 423
	mov esi,[buf_rgb]
424
	mov edi,[buf_g24]
4128 IgorA 425
	mov ecx,[pixels]
426
	mov ebx,3
427
	@@:
4228 IgorA 428
		movzx eax,byte[esi]
4128 IgorA 429
		movzx edx,byte[esi+1]
430
		add eax,edx
4228 IgorA 431
		movzx edx,byte[esi+2]
432
		add eax,edx
433
		xor edx,edx
434
		div ebx ;shr eax,2
435
		mov ah,al
436
		mov word[edi],ax
4128 IgorA 437
		mov byte[edi+2],al
438
		add esi,3
439
		add edi,3
440
		loop @b
441
popad
442
	ret
4228 IgorA 443
endp
4128 IgorA 444