Subversion Repositories Kolibri OS

Rev

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

  1. ;POP_WIDTH   = (popup_text.max_title+popup_text.max_accel+6)*6
  2. POP_IHEIGHT = 16
  3. ;POP_HEIGHT  = popup_text.cnt_item*POP_IHEIGHT+popup_text.cnt_sep*4+4
  4.  
  5. func calc_middle
  6.         shr     eax,1
  7.         shr     ebx,1
  8.         and     eax,0x007F7F7F
  9.         and     ebx,0x007F7F7F
  10.         add     eax,ebx
  11.         ret
  12. endf
  13.  
  14. func calc_3d_colors
  15.         pushad
  16.         m2m     [cl_3d_normal],[sc.work]
  17.         m2m     [cl_3d_inset],[sc.work_graph]
  18.         push    [cl_3d_normal]
  19.         add     byte[esp],48
  20.         jnc     @f
  21.         mov     byte[esp],255
  22.     @@: add     byte[esp+1],48
  23.         jnc     @f
  24.         mov     byte[esp+1],255
  25.     @@: add     byte[esp+2],48
  26.         jnc     @f
  27.         mov     byte[esp+2],255
  28.     @@: pop     [cl_3d_outset]
  29.         mov     eax,[cl_3d_inset]
  30.         mov     ebx,[cl_3d_outset]
  31.         call    calc_middle
  32.         mov     [cl_3d_pushed],eax
  33.         mov     eax,[cl_3d_normal]
  34.         mov     ebx,[sc.work_text]
  35.         call    calc_middle
  36.         mov     [cl_3d_grayed],eax
  37.         popad
  38.         ret
  39. endf
  40.  
  41. func draw_3d_panel ; x,y,w,h
  42.         cmp     dword[esp+8],4
  43.         jl      .exit
  44.         cmp     dword[esp+4],4
  45.         jl      .exit
  46.         mov     ebx,[esp+16-2]
  47.         mov     bx,[esp+8]
  48.         inc     ebx
  49.         mov     ecx,[esp+12-2]
  50.         mov     cx,[esp+4]
  51.         inc     ecx
  52.         mcall   13,,,[cl_3d_normal];0x00EEEEEE;[sc.work]
  53.         dec     ebx
  54.         add     bx,[esp+16]
  55.         mov     cx,[esp+12]
  56.         mcall   38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
  57.         add     ecx,[esp+4-2]
  58.         add     cx,[esp+4]
  59.         mcall
  60.         mov     bx,[esp+16]
  61.         mov     ecx,[esp+12-2]
  62.         mov     cx,[esp+4]
  63.         add     cx,[esp+12]
  64.         mcall
  65.         add     ebx,[esp+8-2]
  66.         add     bx,[esp+8]
  67.         mcall
  68.         mov     ebx,[esp+16-2]
  69.         mov     bx,[esp+8]
  70.         add     bx,[esp+16]
  71.         add     ebx,1*65536-1
  72.         mov     ecx,[esp+12-2]
  73.         mov     cx,[esp+12]
  74.         add     ecx,0x00010001
  75.         mcall   ,,,[cl_3d_outset]
  76.         mov     bx,[esp+16]
  77.         inc     ebx
  78.         mov     ecx,[esp+12-2]
  79.         mov     cx,[esp+4]
  80.         add     cx,[esp+12]
  81.         add     ecx,2*65536-1
  82.         mcall
  83.   .exit:
  84.         ret     4*4
  85. endf
  86.  
  87. popup_thread_start:
  88.         mov     [popup_active],1
  89.         mov     [pi_cur],0
  90.         mov     ebp,[esp]
  91.         mcall   14
  92.         movzx   ebx,ax
  93.         shr     eax,16
  94.         movzx   ecx,[ebp+POPUP.x]
  95.         add     cx,[ebp+POPUP.width]
  96.         cmp     ecx,eax
  97.         jle     @f
  98.         mov     cx,[ebp+POPUP.width]
  99.         sub     [ebp+POPUP.x],cx
  100.     @@: movzx   ecx,[ebp+POPUP.y]
  101.         add     cx,[ebp+POPUP.height]
  102.         cmp     ecx,ebx
  103.         jle     @f
  104.         mov     cx,[ebp+POPUP.height]
  105.         sub     [ebp+POPUP.y],cx
  106.     @@: mcall   40,01100111b            ; ipc mouse button key redraw
  107.         cmp     [mi_cur],0
  108.         jl      .2
  109.         sub     esp,32-16
  110.         push    0 0 8 0
  111.         mcall   60,1,esp,32
  112.   .2:   call    draw_popup_wnd
  113.  
  114.   still_popup:
  115.         cmp     [main_closed],1
  116.         je      close_popup
  117.         mcall   10
  118.         cmp     eax,1
  119.         je      popup_thread_start.2
  120.         cmp     eax,2
  121.         je      key_popup
  122.         cmp     eax,3
  123.         je      button_popup
  124.         cmp     eax,6
  125.         je      mouse_popup
  126.         cmp     eax,7
  127.         jne     still_popup
  128.  
  129.         mov     ebp,[POPUP_STACK];-32+12+4]
  130.         mov     dword[POPUP_STACK-32+4],8
  131.         movzx   ebx,[ebp+POPUP.x]
  132.         movzx   ecx,[ebp+POPUP.y]
  133.         movzx   edx,[ebp+POPUP.width]
  134.         movzx   esi,[ebp+POPUP.height]
  135.         mcall   67
  136. ;       call    draw_popup_wnd
  137.         jmp     still_popup
  138.  
  139.   mouse_popup:
  140.         mov     ecx,mst2
  141.         call    get_mouse_event
  142.         cmp     al,MEV_LDOWN
  143.         je      check_popup_click
  144.         cmp     al,MEV_MOVE
  145.         je      check_popup_move
  146.  
  147.         mcall   9,p_info2,-1
  148.         cmp     ax,[p_info2.window_stack_position]
  149.         jne     close_popup
  150.  
  151.         jmp     still_popup
  152.  
  153.   check_popup_click:
  154.         mov     eax,[pi_cur]
  155.         or      al,al
  156.         js      close_popup
  157.         jz      still_popup
  158.         mov     ebx,[ebp+POPUP.actions]
  159.         mov     [just_from_popup],1
  160.         call    dword[ebx+eax*4-4];dword[popup_text.actions+eax*4-4]
  161.         inc     [just_from_popup]
  162.         jmp     close_popup
  163.  
  164.   check_popup_move:
  165.         mov     eax,[pi_cur]
  166.         call    get_active_popup_item
  167.         cmp     eax,[pi_cur]
  168.         je      still_popup
  169.         call    draw_popup_wnd
  170.         jmp     still_popup
  171.  
  172.   key_popup:
  173.         mcall   ;2
  174.         cmp     ah,27
  175.         jne     still_popup
  176.  
  177.   button_popup:
  178.         mcall   17
  179.  
  180.   close_popup:
  181.         mcall   18,3,[p_info.PID]
  182.         mov     [popup_active],0
  183.         mcall   -1
  184.  
  185. func draw_popup_wnd
  186.         mcall   12,1
  187.  
  188. ;       mcall   48,3,sc,sizeof.system_colors
  189. ;       call    calc_3d_colors
  190.  
  191. ;        mov     ebx,[p_pos]
  192. ;        mov     ecx,[p_pos-2]
  193. ;        mov     bx,POP_WIDTH
  194. ;        mov     cx,POP_HEIGHT
  195.         mov     ebx,dword[ebp+POPUP.x-2]
  196.         mov     bx,[ebp+POPUP.width]
  197.         mov     ecx,dword[ebp+POPUP.y-2]
  198.         mov     cx,[ebp+POPUP.height]
  199.         mcall   0,,,0x01000000,0x01000000
  200.  
  201.         movzx   ebx,bx
  202.         movzx   ecx,cx
  203.         pushd   0 0 ebx ecx ;POP_WIDTH POP_HEIGHT
  204.         call    draw_3d_panel
  205.  
  206.         mov     [pi_sel],0
  207. ;        mcall   37,1
  208. ;        movsx   ebx,ax
  209. ;        sar     eax,16
  210. ;        mov     [c_pos.x],eax
  211. ;        mov     [c_pos.y],ebx
  212.  
  213.         mov     eax,4
  214.         mpack   ebx,3*6,3
  215.         mov     ecx,[sc.work_text]
  216.         mov     edx,[ebp+POPUP.data];popup_text.data
  217.     @@: inc     [pi_sel]
  218.         inc     edx
  219.         movzx   esi,byte[edx-1]
  220.         cmp     byte[edx],'-'
  221.         jne     .lp1
  222.         pushad
  223.         mov     ecx,ebx
  224.         shl     ecx,16
  225.         mov     cx,bx
  226.         movzx   ebx,[ebp+POPUP.width]
  227.         add     ebx,0x00010000-1
  228. ;       mpack   ebx,1,POP_WIDTH-1
  229.         add     ecx,0x00010001
  230.         mcall   38,,,[cl_3d_inset];0x006382BF;[sc.work_text]
  231.         add     ecx,0x00010001
  232.         mcall   ,,,[cl_3d_outset];0x00FFFFFF
  233.         popad
  234.         add     ebx,4
  235.         jmp     .lp2
  236.   .lp1: mov     edi,[pi_sel]
  237.         cmp     edi,[pi_cur]
  238.         jne     .lp3
  239.         test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  240.         jz      .lp3
  241.         pushad
  242.         movzx   ecx,bx
  243.         shl     ecx,16
  244.         mov     cl,POP_IHEIGHT-1
  245.         movzx   ebx,[ebp+POPUP.width]
  246.         add     ebx,0x00010000-1
  247. ;       mpack   ebx,1,POP_WIDTH-1
  248.         mcall   13,,,[cl_3d_pushed];0x00A3B8CC
  249.         rol     ecx,16
  250.         mov     ax,cx
  251.         rol     ecx,16
  252.         mov     cx,ax
  253.         mcall   38,,,[cl_3d_inset];0x006382BF
  254.         add     ecx,(POP_IHEIGHT-1)*65536+POP_IHEIGHT-1
  255.         mcall   ,,,[cl_3d_outset];0x00FFFFFF
  256.         popad
  257.   .lp3: add     ebx,(POP_IHEIGHT-7)/2
  258.  
  259.         pushad
  260.         test    byte[ebp+edi-1],0x02
  261.         jz      .lp8
  262.         movzx   ecx,bx
  263.         shl     ecx,16
  264.         mov     cx,bx
  265.         shr     ebx,16
  266.         push    bx
  267.         shl     ebx,16
  268.         pop     bx
  269.         add     ecx,0x00040003
  270.         sub     ebx,0x000A000B
  271.         mcall   38,,,[sc.work_text]
  272.         add     ecx,0x00010001
  273.         mcall
  274.         add     ebx,4
  275.         sub     ecx,2
  276.         mcall
  277.         sub     ecx,0x00010001
  278.         mcall
  279.   .lp8: popad
  280.  
  281.         mov     ecx,[sc.work_text];0x00000000
  282.         test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  283.         jnz     .lp5
  284.         add     ebx,0x00010001
  285.         mov     ecx,[cl_3d_outset]
  286.         mcall
  287.         sub     ebx,0x00010001
  288.         mov     ecx,[cl_3d_inset]
  289.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  290.   .lp5: mcall
  291.         push    ebx
  292.         add     edx,esi
  293.         inc     edx
  294.         movzx   esi,byte[edx-1]
  295.         add     ebx,[ebp+POPUP.acc_ofs] ; ((popup_text.max_title+2)*6-1)*65536
  296.         cmp     edi,[pi_cur]
  297.         je      .lp4
  298.         mov     ecx,[cl_3d_inset];0x006382BF
  299.   .lp4: test    byte[ebp+edi-1],0x01 ; byte[popup_text+edi-1],0x01
  300.         jnz     .lp6
  301.         add     ebx,0x00010001
  302.         mov     ecx,[cl_3d_outset]
  303.         mcall
  304.         sub     ebx,0x00010001
  305.         mov     ecx,[cl_3d_inset]
  306.         ;mov     ecx,[sc.grab_text];0x007F7F7F
  307.   .lp6: mcall
  308.         pop     ebx
  309.         add     ebx,POP_IHEIGHT-(POP_IHEIGHT-7)/2
  310.   .lp2: add     edx,esi
  311.         cmp     byte[edx],0
  312.         jne     @b
  313.   .exit:
  314.         mcall   12,2
  315.         ret
  316. endf
  317.  
  318. pi_sel   dd ?
  319. pi_cur   dd ?
  320. p_pos    dd ?
  321. popup_active db 0