Subversion Repositories Kolibri OS

Rev

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