Subversion Repositories Kolibri OS

Rev

Rev 7577 | Go to most recent revision | 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 edi, edit:dword
  221.         mov edi,[edit]
  222.         cmp ted_panel_id,TED_PANEL_FIND
  223.         jne @f
  224.                 call p_find
  225.                 jmp .end_f
  226.         @@:
  227.         cmp ted_panel_id,TED_PANEL_REPLACE
  228.         jne @f
  229.                 call p_replace
  230.                 jmp .end_f
  231.         @@:
  232.         cmp ted_panel_id,TED_PANEL_GOTO
  233.         jne @f
  234.                 call p_goto
  235.                 jmp .end_f
  236.         @@:
  237.         cmp ted_panel_id,TED_PANEL_SYNTAX
  238.         jne @f
  239.                 call p_syntax
  240.                 jmp .end_f
  241.         @@:
  242.         push eax edx
  243.                 mcall SF_DEFINE_BUTTON,,,0x80000000+200
  244.                 mcall ,,,0x80000000+201
  245.                 mcall ,,,0x80000000+202
  246.                 mcall ,,,0x80000000+203
  247.                 mcall ,,,0x80000000+204
  248.         pop edx eax
  249.         .end_f:
  250.         ret
  251. endp
  252.  
  253. align 4
  254. p_find:
  255.         push eax ebx ecx edx
  256.                 mov ecx,ted_wnd_t
  257.                 shl ecx,16
  258.                 mov cx,20
  259.                 mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
  260.  
  261.                 mov ecx,ted_wnd_t
  262.                 add cx,20+15 ; 15 - height text box
  263.                 shl ecx,16
  264.                 add ecx,ted_wnd_h
  265.                 mov edx,ted_scr_h
  266.                 add cx,word[edx+sb_offs_size_y]
  267.                 sub cx,20+15-1 ; 15 - height text box
  268.                 mcall ,,,[sc.work]
  269.  
  270.                 stdcall [edit_box_draw], edit_find
  271.  
  272.                 mov ecx,ted_wnd_t
  273.                 shl ecx,16
  274.                 add ecx,(93 shl 16)+20
  275.                 mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,201,[sc.work_button] ;201 - button id
  276.  
  277.                 mov ebx,(23 shl 16)+7
  278.                 add ebx,ted_wnd_t
  279.                 mov ecx,[sc.work_text]
  280.                 or ecx,0x80000000
  281.                 mcall SF_DRAW_TEXT,,,txtFindCapt
  282.  
  283.                 mov ecx,[sc.work_button_text]
  284.                 or ecx,0x80000000
  285.                 mov ebx,(15 shl 16)+100
  286.                 add ebx,ted_wnd_t
  287.                 mcall ,,,txtFindNext
  288.  
  289.                 stdcall [option_box_draw], opt_grlist1
  290.         pop edx ecx ebx eax
  291.         ret
  292.  
  293. align 4
  294. p_replace:
  295.         push eax ebx ecx edx
  296.                 mov ecx,ted_wnd_t
  297.                 shl ecx,16
  298.                 mov cx,20
  299.                 mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
  300.  
  301.                 mov ecx,ted_wnd_t
  302.                 add cx,20+15 ; 15 - height text box
  303.                 shl ecx,16
  304.                 add ecx,ted_wnd_h
  305.                 mov edx,ted_scr_h
  306.                 add cx,word[edx+sb_offs_size_y]
  307.                 sub cx,20+15-1 ; 15 - height text box
  308.                 mcall ,,,[sc.work]
  309.  
  310.                 stdcall [edit_box_draw], edit_replace
  311.                 stdcall [edit_box_draw], edit_find
  312.  
  313.                 mov ecx,ted_wnd_t
  314.                 shl ecx,16
  315.                 add ecx,(133 shl 16)+20
  316.                 mcall SF_DEFINE_BUTTON,(5 shl 16)+95,,202,[sc.work_button] ;replace next
  317.  
  318.                 add ecx,(26 shl 16)
  319.                 mcall ,,,203 ;replace all
  320.  
  321.                 mov ebx,ted_wnd_t
  322.                 add ebx,(23 shl 16)+7
  323.                 mov ecx,[sc.work_text]
  324.                 or ecx,0x80000000
  325.                 mcall SF_DRAW_TEXT,,,txtFindCapt
  326.                 add ebx,93
  327.                 mcall SF_DRAW_TEXT,,,txtRerlaceCapt
  328.  
  329.                 mov ecx,[sc.work_button_text]
  330.                 or ecx,0x80000000
  331.                 mov ebx,ted_wnd_t
  332.                 add ebx,(15 shl 16)+140
  333.                 mcall ,,,txtRerlace
  334.                 add ebx,26
  335.                 mcall ,,,txtRerlaceAll
  336.  
  337.                 stdcall [option_box_draw], opt_grlist1
  338.         pop edx ecx ebx eax
  339.         ret
  340.  
  341. align 4
  342. p_goto:
  343.         push eax ebx ecx edx
  344.                 mov ecx,ted_wnd_t
  345.                 shl ecx,16
  346.                 mov cx,20
  347.                 mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
  348.  
  349.                 mov ecx,ted_wnd_t
  350.                 add cx,20+15 ; 15 - height text box
  351.                 shl ecx,16
  352.                 add ecx,ted_wnd_h
  353.                 mov edx,ted_scr_h
  354.                 add cx,word[edx+sb_offs_size_y]
  355.                 sub cx,20+15-1 ; 15 - height text box
  356.                 mcall ,,,[sc.work]
  357.  
  358.                 stdcall [edit_box_draw], edit_goto
  359.  
  360.                 mov ecx,ted_wnd_t
  361.                 shl ecx,16
  362.                 add ecx,(40 shl 16)+20
  363.                 mcall SF_DEFINE_BUTTON,(5 shl 16)+85,,204,[sc.work_button]
  364.  
  365.                 mov ebx,(23 shl 16)+7
  366.                 add ebx,ted_wnd_t
  367.                 mov ecx,[sc.work_text]
  368.                 or ecx,0x80000000
  369.                 mcall SF_DRAW_TEXT,,,txtGotoCapt
  370.  
  371.                 mov ecx,[sc.work_button_text]
  372.                 or ecx,0x80000000
  373.                 mov ebx,(15 shl 16)+47
  374.                 add ebx,ted_wnd_t
  375.                 mcall ,,,txtGoto
  376.         pop edx ecx ebx eax
  377.         ret
  378.  
  379. ;input:
  380. ; edi = pointer to tedit struct
  381. align 4
  382. p_syntax:
  383.         pushad
  384.  
  385.         mov ecx,ted_wnd_t
  386.         shl ecx,16
  387.         mov cx,20
  388.         mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;ðèñîâàíèå âåðõíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
  389.  
  390.         stdcall [tl_draw], tree1
  391.         mov [ws_dir_lbox.all_redraw],1 ;äëÿ ïîëíîé ïåðåðèñîâêè äî÷åðíåãî ñêðîëëèíãà
  392.         stdcall [scrollbar_ver_draw], ws_dir_lbox
  393.  
  394.         ror ecx,16
  395.         add ecx,[tree1.box_height]
  396.         add ecx,20
  397.         and ecx,0xffff
  398.         ror ecx,16
  399.         add ecx,ted_wnd_h
  400.         mov esi,ted_scr_h
  401.         add cx,word[esi+sb_offs_size_y]
  402.         sub cx,20
  403.         sub ecx,[tree1.box_height]
  404.         inc cx
  405.         int 0x40 ;ðèñîâàíèå íèæíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
  406.  
  407.         mov ecx,ted_wnd_t
  408.         add ecx,25
  409.         add ecx,[tree1.box_height]
  410.         shl ecx,16
  411.         mov cx,20
  412.         mcall SF_DEFINE_BUTTON,(5 shl 16)+65,,200,[sc.work_button] ;200 - button id
  413.  
  414.         mov ebx,(30 shl 16)+5
  415.         add ebx,ted_wnd_t
  416.         mov ecx,[sc.work_text]
  417.         or ecx,0x80000000
  418.         mcall SF_DRAW_TEXT,,,txtFormatCapt
  419.  
  420.         mov ebx,(10 shl 16)+31
  421.         add ebx,[tree1.box_height]
  422.         add ebx,ted_wnd_t
  423.         mov ecx,[sc.work_button_text]
  424.         or ecx,0x80000000
  425.         mcall ,,,txtFormatApply
  426.  
  427.         popad
  428.         ret
  429.  
  430. MIN_M_WND_H equ 100 ;ìèíèìàëüíàÿ âûñîòà ãëàâíîãî îêíà
  431. ;input:
  432. ; edi = pointer to tedit struct
  433. align 4
  434. EvSize:
  435.         pushad
  436.         mov ebx,ted_scr_h
  437.         mov esi,ted_scr_w
  438.  
  439.         m2m ted_wnd_w,[procinfo.client_box.width] ;ñòàâèì øèðèíó îêíà ðåäàêòîðà ðàâíîé øèðèíå âñåãî îêíà
  440.         mov eax,ted_wnd_l
  441.         sub ted_wnd_w,eax ;îòíèìàåì îòñòóï ñëåâà
  442.         movzx eax,word[esi+sb_offs_size_x]
  443.         sub ted_wnd_w,eax ;îòíèìàåì øèðèíó âåðò. ñêðîëëèíãà
  444.  
  445.         m2m ted_wnd_h,[procinfo.client_box.height] ;ñòàâèì âûñîòó îêíà ðåäàêòîðà ðàâíîé âûñîòå âñåãî îêíà
  446.         cmp ted_wnd_h,MIN_M_WND_H
  447.         jg @f
  448.                 mov ted_wnd_h,MIN_M_WND_H
  449.         @@:
  450.  
  451.         movzx eax,word[ebx+sb_offs_size_y]
  452.         sub ted_wnd_h,eax             ;îòíèìàåì âûñîòó ãîðèç. ñêðîëëèíãà
  453.         mov eax,ted_wnd_t
  454.         sub ted_wnd_h,eax             ;îòíèìàåì îòñòóï ñâåðõó
  455.  
  456.         stdcall [ted_init_scroll_bars], tedit0,2
  457.  
  458.         mov eax,ted_wnd_t
  459.         mov edi,tree1
  460.         mov tl_box_top,eax ;=ted_wnd_t
  461.         add tl_box_top,20
  462.  
  463.         mov [edit_find.top],eax ;=ted_wnd_t
  464.         add dword[edit_find.top],20
  465.         mov [edit_replace.top],eax
  466.         add dword[edit_replace.top],113
  467.         mov [edit_goto.top],eax
  468.         add dword[edit_goto.top],20
  469.         popad
  470.         ret
  471.  
  472. ;input:
  473. ;  ecx = 0x4000____
  474. ;   cx = ID button
  475. ;  edx = x*2^16+y
  476. align 4
  477. draw_but_icon:
  478.         push eax ebx
  479.  
  480.         mov eax,SF_DEFINE_BUTTON
  481.         push ecx edx esi
  482.                 mov ebx,edx
  483.                 mov edx,ecx
  484.                 mov cx,bx
  485.                 shl ecx,16
  486.                 mov cx,19 ;=20-1
  487.                 mov bx,19 ;=20-1
  488.                 mov esi,ebx
  489.                 shr esi,16
  490.                 add esi,20
  491.                 cmp esi,[procinfo.client_box.width]
  492.                 jge @f ;êíîïêà íå âëåçëà â îêíî
  493.                         mov esi,[sc.work_button]
  494.                         int 0x40 ;ñòàâèì êíîïêó
  495.                         mov eax,SF_PUT_IMAGE
  496.                 @@:
  497.         pop esi edx ecx
  498.  
  499.         cmp eax,SF_PUT_IMAGE
  500.         jne @f ;êíîïêà íå âëåçëà â îêíî
  501.                 mov ebx,[bmp_icon]
  502.                 bt ecx,30 ;if (ecx & 0x40000000)
  503.                 jc .gray
  504.                         add ebx,TOOLBAR_ICONS_SIZE ;ïåðåìåùàåìñÿ íà ñåðûå êíîïêè
  505.                 .gray:
  506.                 push ecx
  507.                 sub ecx,ID_BUT_0
  508.                 and ecx,0xffff
  509.                 imul ecx,1200
  510.                 add ebx,ecx
  511.                 mov ecx,(20 shl 16)+20
  512.                 int 0x40 ;ñòàâèì ðèñóíîê íà êíîïêó
  513.                 pop ecx
  514.         @@:
  515.         pop ebx eax
  516.         ret
  517.  
  518. ;descrition:
  519. ; ôóíêöèÿ äëÿ ãåíåðèðîâàíèÿ ñåðûõ èêîíîê
  520. ;input:
  521. ; buf_rgb - áóôåð ñ âõîäíûì 24 áèòíûì öâåòíûì èçîáðàæåíèåì
  522. ; buf_g24 - áóôåð ñ âûõîäíûì 24 áèòíûì ñåðûì èçîáðàæåíèåì
  523. ; pixels - ÷èñëî ïèêñåëåé â èçîáðàæåíèè
  524. align 4
  525. proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
  526. pushad
  527.         mov esi,[buf_rgb]
  528.         mov edi,[buf_g24]
  529.         mov ecx,[pixels]
  530.         mov ebx,3
  531.         @@:
  532.                 movzx eax,byte[esi]
  533.                 movzx edx,byte[esi+1]
  534.                 add eax,edx
  535.                 movzx edx,byte[esi+2]
  536.                 add eax,edx
  537.                 xor edx,edx
  538.                 div ebx ;shr eax,2
  539.                 mov ah,al
  540.                 mov word[edi],ax
  541.                 mov byte[edi+2],al
  542.                 add esi,3
  543.                 add edi,3
  544.                 loop @b
  545. popad
  546.         ret
  547. endp
  548.  
  549.