Subversion Repositories Kolibri OS

Rev

Rev 259 | Rev 824 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. virtual at ebp
  2.   tbox TBOX
  3. end virtual
  4.  
  5. tb.pos.x        db ?
  6. tb.sel.x        db ?
  7. tb.sel.selected db ?
  8.  
  9. func textbox.get_width
  10.         push    ebx edx
  11.         movzx   eax,[tbox.width]
  12.         add     eax,-6
  13.         xor     edx,edx
  14.         mov     ebx,6
  15.         div     ebx
  16.         movzx   ebx,[tbox.length]
  17.         cmp     eax,ebx
  18.         jle     @f
  19.         mov     eax,ebx
  20.     @@: pop     edx ebx
  21.         ret
  22. endf
  23.  
  24. func textbox.delete_selection
  25.         cmp     [tb.sel.selected],0
  26.         je      .exit.2
  27.         pushad
  28.         movzx   ecx,[tbox.length]
  29.         sub     cl,[tb.sel.x]
  30.         lea     eax,[tbox.text]
  31.         movzx   esi,[tb.pos.x]
  32.         movzx   edi,[tb.sel.x]
  33.         add     esi,eax
  34.         add     edi,eax
  35.         mov     eax,esi
  36.         sub     eax,edi
  37.         sub     [tbox.length],al
  38.         cld
  39.         rep     movsb
  40.  
  41.   .exit:
  42.         mov     al,[tb.sel.x]
  43.         mov     [tbox.pos.x],al
  44.         mov     [tbox.sel.x],al
  45.         popad
  46.         clc
  47.         ret
  48.  
  49.   .exit.2:
  50.         stc
  51.         ret
  52. endf
  53.  
  54. func textbox.draw ; TBOX* ebp
  55.         call    textbox.get_width
  56.         movzx   ebx,[tbox.pos.x]
  57.         sub     bl,[tbox.ofs.x]
  58.         sub     ebx,eax
  59.         jle     @f
  60.         mov     bl,[tbox.pos.x]
  61.         sub     bl,al
  62.         mov     [tbox.ofs.x],bl
  63.     @@:
  64.         mov     [tb.sel.selected],0
  65.         mov     al,[tbox.pos.x]
  66.         mov     ah,[tbox.sel.x]
  67.         cmp     al,ah
  68.         je      @f
  69.         inc     [tb.sel.selected]
  70.         ja      @f
  71.         xchg    al,ah
  72.     @@: mov     [tb.pos.x],al
  73.         mov     [tb.sel.x],ah
  74.  
  75.         mcall   13,dword[tbox.width],dword[tbox.height],[color_tbl.back]
  76.         mov     edx,[cl_3d_inset]
  77.         call    draw_framerect
  78.  
  79.         call    textbox.get_width
  80.         mov     esi,eax
  81.         mov     edi,eax
  82.  
  83.         cmp     ebp,[focused_tb]
  84.         je      @f
  85.         mov     ebx,dword[tbox.x-2]
  86.         mov     bx,[tbox.y]
  87.         movzx   eax,[tbox.height]
  88.         shr     eax,1
  89.         add     eax,4*65536-4
  90.         add     ebx,eax
  91.         lea     edx,[tbox.text]
  92.         mcall   4,,[color_tbl.text]
  93.         ret
  94.  
  95.     @@: movzx   eax,[tb.pos.x]
  96.         cmp     al,[tb.sel.x]
  97.         je      @f
  98.         sub     al,[tbox.ofs.x]
  99.         jz      @f
  100.         movzx   ebx,[tb.sel.x]
  101.         sub     bl,[tbox.ofs.x]
  102.         jge     .lp1
  103.         xor     ebx,ebx
  104.   .lp1: push    eax ebx
  105.         sub     eax,ebx
  106.         mov     ecx,edi
  107.         sub     ecx,ebx
  108.         cmp     eax,ecx
  109.         jbe     .lp2
  110.         mov     eax,ecx
  111.   .lp2: imul    eax,6
  112.         imul    ebx,6
  113.         movzx   ecx,[tbox.x]
  114.         add     ecx,3
  115.         add     ebx,ecx
  116.         shl     ebx,16
  117.         add     ebx,eax
  118.         movzx   ecx,[tbox.height]
  119.         shr     ecx,1
  120.         add     cx,[tbox.y]
  121.         shl     ecx,16
  122.         add     ecx,-5*65536+10
  123.         mcall   13,,,[color_tbl.back.sel]
  124.  
  125.         mov     esi,[esp]
  126.         lea     edx,[tbox.text]
  127.         movzx   eax,[tbox.ofs.x]
  128.         add     edx,eax
  129.         mov     ebx,dword[tbox.x-2]
  130.         mov     bx,[tbox.y]
  131.         movzx   eax,[tbox.height]
  132.         shr     eax,1
  133.         add     eax,4*65536-4
  134.         add     ebx,eax
  135.         mov     eax,4
  136.         or      esi,esi
  137.         jz      .lp3
  138.         mcall   ,,[color_tbl.text]
  139.   .lp3: sub     edi,esi
  140.         jnz     .lp4
  141.         add     esp,8
  142.         jmp     .exit
  143.   .lp4:
  144.         add     edx,esi
  145.         imul    esi,6*65536
  146.         add     ebx,esi
  147.         pop     ecx esi
  148.         sub     esi,ecx
  149.         cmp     esi,edi
  150.         jbe     .lp5
  151.         mov     esi,edi
  152.   .lp5:
  153.         mcall   ,,[color_tbl.text.sel]
  154.         sub     edi,esi
  155.         jz      .exit
  156.         add     edx,esi
  157.         imul    esi,6*65536
  158.         add     ebx,esi
  159.         lea     ecx,[tbox.text]
  160.         mcall   ,,[color_tbl.text],,edi
  161.         jmp     .exit
  162.  
  163.     @@: lea     edx,[tbox.text]
  164.         movzx   eax,[tbox.ofs.x]
  165.         add     edx,eax
  166.         mov     ebx,dword[tbox.x-2]
  167.         mov     bx,[tbox.y]
  168.         movzx   eax,[tbox.height]
  169.         shr     eax,1
  170.         add     eax,4*65536-4
  171.         add     ebx,eax
  172.         movzx   eax,[tbox.ofs.x]
  173.         call    textbox.get_width
  174.         mov     esi,eax
  175.         mcall   4,,[color_tbl.text]
  176.  
  177.   .exit:
  178.         movzx   ebx,[tbox.pos.x]
  179.         movzx   eax,[tbox.ofs.x]
  180.         sub     ebx,eax
  181.         imul    ebx,6
  182.         movzx   eax,[tbox.x]
  183.         add     eax,3
  184.         add     ebx,eax
  185.         push    bx
  186.         shl     ebx,16
  187.         pop     bx
  188.         movzx   ecx,[tbox.height]
  189.         shr     ecx,1
  190.         add     cx,[tbox.y]
  191.         push    cx
  192.         shl     ecx,16
  193.         pop     cx
  194.         add     ecx,-5*65536+4
  195.         mcall   38,,,0x01000000
  196.         add     ebx,0x00010001
  197.         mcall
  198.         ret
  199. endf
  200.  
  201. func textbox.key
  202.         mov     ebp,[focused_tb]
  203.         mov     esi,accel_table_textbox
  204.   .acc: cmp     ebx,[esi]
  205.         jne     @f
  206.         call    dword[esi+4]
  207.         jmp     .exit.2
  208.     @@: add     esi,8
  209.         cmp     byte[esi],0
  210.         jne     .acc
  211.  
  212.         test    byte[shi+2],0x06
  213.         jnz     .exit
  214.         cmp     [tbox.length],255
  215.         je      .exit
  216.  
  217.         movzx   eax,[chr]
  218.         movzx   eax,[eax+key0]
  219.         or      al,al
  220.         jz      .exit
  221.         mov     al,[eax+key1]
  222.         cmp     [tb_casesen],0
  223.         je      @f
  224.         cmp     al,$60
  225.         jle     @f
  226.         add     al,[add_table-$60+eax]
  227.     @@:
  228.         call    textbox.delete_selection
  229.  
  230.         mov     ecx,255
  231.         sub     cl,[tbox.pos.x]
  232.         lea     edi,[tbox.text]
  233.         add     edi,255
  234.         lea     esi,[edi-1]
  235.         std
  236.         rep     movsb
  237.         stosb
  238.         cld
  239.         inc     [tbox.length]
  240.         call    key.tb.right
  241.  
  242.   .exit.2:
  243.         call    textbox.draw
  244.   .exit:
  245.         ret
  246. endf
  247.  
  248. textbox.mouse:
  249.         ret
  250.  
  251. func key.tb.bkspace
  252.         call    textbox.delete_selection
  253.         jnc     @f
  254.  
  255.         cmp     [tbox.pos.x],0
  256.         je      @f
  257.         call    key.tb.left
  258.         jmp     key.tb.del.direct
  259.  
  260.     @@: ret
  261. endf
  262.  
  263. func key.tb.home
  264.         xor     al,al
  265.         mov     [tbox.pos.x],al
  266.         mov     [tbox.sel.x],al
  267.         mov     [tbox.ofs.x],al
  268.         ret
  269. endf
  270.  
  271. func key.tb.left
  272.         mov     al,[tbox.pos.x]
  273.         mov     [tbox.sel.x],al
  274.         dec     al
  275.         js      @f
  276.         mov     [tbox.pos.x],al
  277.         mov     [tbox.sel.x],al
  278.         cmp     [tbox.ofs.x],al
  279.         jl      @f
  280.         sub     [tbox.ofs.x],8
  281.         jge     @f
  282.         mov     [tbox.ofs.x],0
  283.     @@: ret
  284. endf
  285.  
  286. func key.tb.right
  287.         call    textbox.get_width
  288.         mov     bl,[tbox.pos.x]
  289.         mov     [tbox.sel.x],bl
  290.         inc     bl
  291.         cmp     bl,[tbox.length]
  292.         ja      @f
  293.         mov     [tbox.pos.x],bl
  294.         mov     [tbox.sel.x],bl
  295.         sub     bl,[tbox.ofs.x]
  296.         cmp     bl,al
  297.         jbe     @f
  298.         inc     [tbox.ofs.x]
  299.     @@: ret
  300. endf
  301.  
  302. func key.tb.end
  303.         call    textbox.get_width
  304.         movzx   ebx,[tbox.length]
  305.         mov     [tbox.pos.x],bl
  306.         mov     [tbox.sel.x],bl
  307.         sub     ebx,eax
  308.         jge     @f
  309.         xor     bl,bl
  310.     @@: mov     [tbox.ofs.x],bl
  311.         ret
  312. endf
  313.  
  314. func key.tb.del
  315.         call    textbox.delete_selection
  316.         jnc     @f
  317.   .direct:
  318.         movzx   ecx,[tbox.length]
  319.         sub     cl,[tbox.pos.x]
  320.         jz      @f
  321.         lea     eax,[tbox.text]
  322.         movzx   edi,[tbox.pos.x]
  323.         add     edi,eax
  324.         lea     esi,[edi+1]
  325.         dec     [tbox.length]
  326.         cld
  327.         rep     movsb
  328.  
  329.     @@: ret
  330. endf
  331.  
  332. func key.tb.shift_home
  333.         xor     al,al
  334.         mov     [tbox.pos.x],al
  335.         mov     [tbox.ofs.x],al
  336.         ret
  337. endf
  338.  
  339. func key.tb.shift_left
  340.         mov     al,[tbox.pos.x]
  341.         dec     al
  342.         js      @f
  343.         mov     [tbox.pos.x],al
  344.         cmp     [tbox.ofs.x],al
  345.         jl      @f
  346.         sub     [tbox.ofs.x],8
  347.         jge     @f
  348.         mov     [tbox.ofs.x],0
  349.     @@: ret
  350. endf
  351.  
  352. func key.tb.shift_right
  353.         call    textbox.get_width
  354.         mov     bl,[tbox.pos.x]
  355.         inc     bl
  356.         cmp     bl,[tbox.length]
  357.         ja      @f
  358.         mov     [tbox.pos.x],bl
  359.         sub     bl,[tbox.ofs.x]
  360.         cmp     bl,al
  361.         jbe     @f
  362.         inc     [tbox.ofs.x]
  363.     @@: ret
  364. endf
  365.  
  366. func key.tb.shift_end
  367.         call    textbox.get_width
  368.         movzx   ebx,[tbox.length]
  369.         mov     [tbox.pos.x],bl
  370.         sub     ebx,eax
  371.         jge     @f
  372.         xor     bl,bl
  373.     @@: mov     [tbox.ofs.x],bl
  374.         ret
  375. endf
  376.