Subversion Repositories Kolibri OS

Rev

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

  1. func check_mouse_in_edit_area
  2.         mcall   37,1
  3.         mov     ebx,eax
  4.         and     ebx,0x0000FFFF
  5.         shr     eax,16
  6.         mov     ecx,[top_ofs]
  7.         inc     ecx
  8.         pushd   [left_ofs] ATOPH [p_info.client_box.width] ATOPH
  9.         popd    [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
  10.         sub     [__rc+0x8],SCRLW+6
  11.         imul    ecx,[lines.scr],LINEH
  12.         dec     ecx
  13.         add     [__rc+0xC],ecx
  14.         mov     ecx,__rc
  15.         call    pt_in_rect
  16.         ret
  17. endf
  18.  
  19. func get_mouse_event
  20.         mcall   37,2
  21.         and     al,3
  22.         mov     bl,[ecx]
  23.         cmp     [ecx],al
  24.         mov     [ecx],al
  25.         jne     @f
  26.         mov     eax,MEV_MOVE
  27.         ret
  28.     @@: mov     bh,al
  29.         and     ebx,0x0101
  30.         cmp     bl,bh
  31.         je      .rb
  32.         test    al,1
  33.         jz      @f
  34.         mov     eax,MEV_LDOWN
  35.         ret
  36.     @@: mov     eax,MEV_LUP
  37.         ret
  38.   .rb:  test    al,2
  39.         jz      @f
  40.         mov     eax,MEV_RDOWN
  41.         ret
  42.     @@: mov     eax,MEV_RUP
  43.         ret
  44. endf
  45.  
  46. mouse_ev dd mouse.l_down,mouse.l_up,mouse.r_down,mouse.r_up,mouse.move
  47.  
  48. mouse:
  49.         mov     ecx,mst
  50.         call    get_mouse_event
  51.         cmp     [bot_mode],0
  52.         je      @f
  53.         mov     ah,al
  54.         mov     al,4
  55.         call    [bot_dlg_handler]
  56.         jmp     still
  57.     @@: cmp     al,MEV_MOVE
  58.         jne     .no_move
  59.         cmp     [popup_active],1
  60.         je      @f
  61.   .no_move:
  62.         mov     [s_status],0
  63.  
  64.         push    eax
  65.         mcall   9,p_info,-1
  66.         cmp     ax,[p_info.window_stack_position]
  67.         pop     eax
  68.         jne     still.skip_write
  69.     @@:
  70.         cmp     [just_from_popup],0
  71.         je      @f
  72.         cmp     al,MEV_LUP
  73.         jne     still.skip_write
  74.     @@: mov     [mev],al
  75.         jmp     [mouse_ev+eax*4-4]
  76.  
  77.   .move:
  78.         mcall   37,1
  79.         movsx   ebx,ax
  80.         sar     eax,16
  81.         cmp     [body_capt],0
  82.         jge     .check_body.2
  83.         cmp     [vscrl_capt],0
  84.         jge     .check_vscroll.2
  85.         cmp     [hscrl_capt],0
  86.         jge     .check_hscroll.2
  87.  
  88.         cmp     [do_not_draw],0
  89.         jne     still.skip_write
  90.         mov     eax,[mi_cur]
  91.         call    get_active_menu_item
  92.         cmp     eax,[mi_cur]
  93.         je      still.skip_write
  94.         push    [mi_cur]
  95.         cmp     [popup_active],0
  96.         je      @f
  97.         mov     [mi_cur],eax
  98.     @@: call    draw_main_menu
  99.         pop     [mi_cur]
  100.         cmp     [popup_active],0
  101.         je      still.skip_write
  102. ;        mcall   18,2,[h_popup]
  103.         mov     ecx,[mi_cur]
  104.         or      ecx,ecx
  105.         js      still.skip_write
  106.         mov     eax,[main_menu.popups+ecx*4-4]
  107.         mov     edx,main_menu
  108.         call    dword[main_menu.onshow+ecx*4-4]
  109.         call    setup_main_menu_popup
  110.         mcall   60,2,[h_popup],POPUP_STACK,4
  111. ;       mcall   51,1,popup_thread_start,POPUP_STACK
  112.  
  113.         jmp     still.skip_write
  114.  
  115.  
  116.   .r_down:
  117.     @@: cmp     [popup_active],0
  118.         je      @f
  119.         mcall   5,1
  120.         jmp     @b
  121.     @@: cmp     [mouse_captured],0
  122.         jne     still.skip_write
  123.         call    check_mouse_in_edit_area
  124.         jnc     still.skip_write
  125.         mcall   37,0
  126.         mov     [popup_edit+POPUP.pos],eax
  127.     @@: mcall   37,2
  128.         cmp     eax,ebx
  129.         jnz     @f
  130.         mcall   5,1
  131.         jmp     @b
  132.     @@: and     [mst],0xFD
  133.         call    onshow.edit
  134.         mov     dword[POPUP_STACK],popup_edit
  135.         mcall   51,1,popup_thread_start,POPUP_STACK
  136.         mov     [h_popup],eax
  137.         jmp     still.skip_write
  138.  
  139.   .r_up:
  140.         jmp     still.skip_write
  141.  
  142.   .l_down:
  143.         call    check_mouse_in_edit_area
  144.         jnc     .check_vscroll
  145.         mov     [mouse_captured],1
  146.         mov     [body_capt],1
  147.  
  148.         call    clear_selection
  149.  
  150.   .check_body.2:
  151.         sub     eax,[left_ofs]
  152.         sub     ebx,[top_ofs]
  153.         dec     ebx
  154. ;       sub     ebx,[__rc+0x4]
  155.         push    eax
  156.         mov     eax,ebx
  157.         cdq;xor     edx,edx
  158.         mov     ecx,LINEH
  159.         idiv    ecx
  160.     @@: add     eax,[top_line]
  161.         mov     ebx,eax
  162.         pop     eax
  163.         cdq;xor     edx,edx
  164.         mov     ecx,6
  165.         idiv    ecx
  166.     @@: add     eax,[left_col]
  167.  
  168.         cmp     eax,[columns]
  169.         jl      @f
  170.         mov     eax,[columns]
  171.     @@: cmp     ebx,[lines]
  172.         jl      @f
  173.         mov     ebx,[lines]
  174.         dec     ebx
  175.     @@:
  176.         cmp     [pos.x],eax
  177.         jne     .change_cur_pos
  178.         cmp     [pos.y],ebx
  179.         je      still.skip_write
  180.  
  181.   .change_cur_pos:
  182.         mov     [pos.x],eax
  183.         mov     eax,[pos.y]
  184.         mov     [pos.y],ebx
  185.         call    check_cur_vis_inv
  186.         jc      .check_ldown
  187. ;        cmp     eax,ebx
  188. ;        je      @f
  189. ;        push    ebx
  190. ;        mov     ebx,eax
  191. ;        call    drawfile.ex
  192. ;        pop     eax
  193. ;    @@: mov     ebx,eax
  194.         call    draw_file.ex
  195.   .check_ldown:
  196.         jmp     still
  197.  
  198.   .check_vscroll:
  199.         mov     ecx,[p_info.client_box.width]
  200.         sub     ecx,SCRLW-2
  201.         pushd   ecx [top_ofs] ecx [bot_ofs]
  202.         popd    [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
  203.         add     [__rc+0x8],SCRLW-1;!!!!!!!!!!!!!!-2
  204.         add     [__rc+0x4],SCRLW;!!!!!!!!!!!!!!+1
  205.         sub     [__rc+0xC],SCRLW*2+3
  206.         mov     ecx,__rc
  207.         call    pt_in_rect
  208.         jnc     .check_hscroll
  209.  
  210.   .check_vscroll.2:
  211.         sub     ebx,[top_ofs]
  212.         sub     ebx,SCRLW;!!!!!!!!!!!!!!+1
  213. ;       sub     ebx,[__rc+0x4]
  214.         cmp     [vscrl_capt],0
  215.         jge     .vcaptured
  216.         mov     eax,[vscrl_top]
  217.         cmp     ebx,eax
  218.         jb      .center_vcapture
  219.         add     eax,[vscrl_size]
  220.         cmp     ebx,eax
  221.         jae     .center_vcapture
  222.         mov     eax,ebx
  223.         sub     eax,[vscrl_top]
  224.         dec     eax
  225.         mov     [vscrl_capt],eax
  226.         dec     ebx
  227.         jmp     .vcaptured
  228.   .center_vcapture:
  229.         mov     eax,[vscrl_size]
  230.         shr     eax,1
  231.         mov     [vscrl_capt],eax
  232.   .vcaptured:
  233.         sub     ebx,[vscrl_capt]
  234.         jns     @f
  235.         xor     ebx,ebx
  236.     @@: mov     [mouse_captured],1
  237.         mov     eax,[bot_ofs]
  238.         sub     eax,[top_ofs]
  239.         sub     eax,[vscrl_size]
  240.         sub     eax,SCRLW*3-2
  241.         cmp     eax,ebx
  242.         jge     @f
  243.         mov     ebx,eax
  244.     @@:
  245.         mov     [vscrl_top],ebx
  246.         mov     eax,[lines]
  247.         sub     eax,[lines.scr]
  248.         imul    ebx
  249.         mov     ebx,[bot_ofs]
  250.         sub     ebx,[top_ofs]
  251.         sub     ebx,SCRLW*3-2         ;**
  252.         sub     ebx,[vscrl_size]
  253.         idiv    ebx
  254.         cmp     eax,[top_line]
  255.         je      still.skip_write
  256.         mov     [top_line],eax
  257.         call    check_bottom_right
  258.         call    draw_file
  259.         jmp     still.skip_write
  260.  
  261.   .check_hscroll:
  262.         pushd   (5+SCRLW+1) [bot_ofs] [p_info.box.width] [bot_ofs]
  263.         popd    [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
  264.         add     [__rc+0x8],-SCRLW*2-10-1
  265.         add     [__rc+0x4],-SCRLW
  266.         add     [__rc+0xC],-2
  267.         mov     ecx,__rc
  268.         call    pt_in_rect
  269.         jnc     .check_main_menu
  270.  
  271.   .check_hscroll.2:
  272.         mov     ebx,eax
  273.         sub     ebx,(5+SCRLW+1)
  274. ;       sub     ebx,[__rc+0x0]
  275.         cmp     [hscrl_capt],0
  276.         jge     .hcaptured
  277.         mov     eax,[hscrl_top]
  278.         cmp     ebx,eax
  279.         jl      .center_hcapture
  280.         add     eax,[hscrl_size]
  281.         cmp     ebx,eax
  282.         jge     .center_hcapture
  283.         mov     eax,ebx
  284.         sub     eax,[hscrl_top]
  285.         dec     eax
  286.         mov     [hscrl_capt],eax
  287.         dec     ebx
  288.         jmp     .hcaptured
  289.   .center_hcapture:
  290.         mov     eax,[hscrl_size]
  291.         shr     eax,1
  292.         mov     [hscrl_capt],eax
  293.   .hcaptured:
  294.         sub     ebx,[hscrl_capt]
  295.         jns     @f
  296.         xor     ebx,ebx
  297.     @@: mov     [mouse_captured],1
  298.         mov     eax,[p_info.box.width]
  299.         sub     eax,[hscrl_size]
  300.         sub     eax,SCRLW*3+10+1
  301.         cmp     eax,ebx
  302.         jge     @f
  303.         mov     ebx,eax
  304.     @@:
  305.         mov     [hscrl_top],ebx
  306.         mov     eax,[columns]
  307.         sub     eax,[columns.scr]
  308.         imul    ebx
  309.         mov     ebx,[p_info.box.width]
  310.         sub     ebx,SCRLW*3+10+1        ;**
  311.         sub     ebx,[hscrl_size]
  312.         idiv    ebx
  313.         cmp     eax,[left_col]
  314.         je      still.skip_write
  315.         mov     [left_col],eax
  316.         call    check_bottom_right
  317.         call    draw_file
  318.         jmp     still.skip_write
  319.  
  320.   .check_main_menu:
  321.         cmp     [do_not_draw],0
  322.         jne     .capture_off
  323.  
  324.     @@: mcall   37,2
  325.         test    eax,0x01
  326.         jz      @f
  327.         mcall   5,1
  328.         jmp     @b
  329.     @@: and     [mst],0xFE
  330.  
  331.         cmp     [mi_cur],0
  332.         jle     .capture_off
  333.         mov     ecx,[mi_cur]
  334.         mov     eax,[main_menu.popups+ecx*4-4]
  335.         mov     edx,main_menu
  336.         call    dword[main_menu.onshow+ecx*4-4]
  337.         call    setup_main_menu_popup
  338.         mcall   51,1,popup_thread_start,POPUP_STACK
  339.         mov     [h_popup],eax
  340.  
  341.   .l_up:
  342.   .capture_off:
  343.         or      eax,-1
  344.         mov     [vscrl_capt],eax
  345.         mov     [hscrl_capt],eax
  346.         mov     [body_capt],eax
  347.         mov     [mouse_captured],0
  348.         mov     [just_from_popup],0
  349.         jmp     still.skip_write
  350.  
  351.  
  352. func setup_main_menu_popup
  353.         mov     ebx,[p_info.box.left]
  354.         add     ebx,[p_info.client_box.left]
  355.     @@: dec     ecx
  356.         jz      @f
  357.         add     edx,8+1
  358.         movzx   esi,byte[edx-1]
  359.         add     edx,esi
  360.         jmp     @b
  361.     @@: movzx   ecx,word[edx+2]
  362.         add     ebx,ecx
  363.  
  364.         mov     [eax+POPUP.x],bx
  365.         mov     ebx,[p_info.box.top]
  366.         add     ebx,[p_info.client_box.top]
  367.         add     ebx,ATOPH-1
  368.         mov     [eax+POPUP.y],bx
  369.         mov     [POPUP_STACK],eax
  370.         ret
  371. endf
  372.  
  373. onshow:
  374.  
  375.   .file:
  376.         or      byte[popup_file+3],0x01
  377.         cmp     [f_info.length],0
  378.         jne     @f
  379.         and     byte[popup_file+3],0xFE
  380.     @@: ret
  381.  
  382.   .edit:
  383.         or      byte[popup_edit+2],0x01
  384.         cmp     [copy_size],0
  385.         jne     @f
  386.         and     byte[popup_edit+2],0xFE
  387.     @@: or      dword[popup_edit+0],0x01000101
  388.         cmp     [sel.selected],0
  389.         jne     @f
  390.         and     dword[popup_edit+0],0xFEFFFEFE
  391.     @@: ret
  392.  
  393.   .search:
  394.         mov     byte[popup_search+0],0
  395.         ;mov     byte[popup_search+4],0
  396.         ret
  397.   .run:
  398.         ret
  399.   .options:
  400.         mov     word[popup_options+0],0
  401.         mov     byte[popup_options+5],0
  402.         or      byte[popup_options+2],0x02
  403.         test    [options],OPTS_SECURESEL
  404.         jnz     @f
  405.         and     byte[popup_options+2],0xFD
  406.     @@: or      byte[popup_options+3],0x02
  407.         test    [options],OPTS_AUTOBRACES
  408.         jnz     @f
  409.         and     byte[popup_options+3],0xFD
  410.     @@: or      byte[popup_options+4],0x02
  411.         test    [options],OPTS_AUTOINDENT
  412.         jnz     @f
  413.         and     byte[popup_options+4],0xFD
  414.     @@: or      byte[popup_options+6],0x02
  415.         test    [options],OPTS_OPTIMSAVE
  416.         jnz     @f
  417.         and     byte[popup_options+6],0xFD
  418.     @@: or      byte[popup_options+8],0x02
  419.         test    [options],OPTS_LINENUMS
  420.         jnz     @f
  421.         and     byte[popup_options+8],0xFD
  422.     @@: ret