Subversion Repositories Kolibri OS

Rev

Rev 7579 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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