Subversion Repositories Kolibri OS

Rev

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