Subversion Repositories NedoOS

Rev

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

  1. showcopywindow
  2. ;hl=x эр ¤ъЁрэх
  3. ;a=y эр ¤ъЁрэх
  4. ;Ёшёєхь юъэю ъюяшЁютрэш , хёыш юъэю ёє∙хёЄтєхЄ (т ы■сюь сшЄь¤ях) ш тъы■ўхэ Ёхцшь windowcopymode!=0
  5.         call iscopywindowvisible
  6.         ret nz
  7.         jp showwindow_calcandshow_noshowwindowcoords
  8.  
  9. iscopywindowvisible
  10. ;out: nz=invisible
  11.         ld bc,(curwindowstate)
  12.         dec c
  13.         dec c
  14.         ret nz ;юъэю эшуфх эх ёє∙хёЄтєхЄ
  15.         ld bc,(windowcopymode)
  16.         dec c
  17.         ret nz ;т√ъы■ўхэ Ёхцшь windowcopymode
  18.         call checkfirezone
  19.         cp ZONE_WORK
  20.         ret ;nz=invisible
  21.  
  22. showwindow
  23. ;hl=x эр ¤ъЁрэх
  24. ;a=y эр ¤ъЁрэх
  25. ;Ёшёєхь юъэю, хёыш юэю т√фхыхэю т Єхъє∙хь сшЄь¤ях
  26.         ld bc,(curwindowstate)
  27.         dec c
  28.         jr z,showwindow_onecorner
  29.         inc c
  30.         ret z ;юъэр эхЄ
  31.         ld bc,(curwindowx)
  32.         ld de,(curwindowy)
  33. showwindow_calcandshow
  34.          ld a,(curwindowbmp)
  35.          ld hl,curbmp
  36.          cp (hl)
  37.          ret nz ;юъэю т√фхыхэю эх т Єхъє∙хь сшЄь¤ях
  38.         push bc
  39.         push de
  40.         call showwindowcoords
  41.         pop de
  42.         pop bc
  43. showwindow_calcandshow_noshowwindowcoords
  44.         call calccoords_frombitmapcoords_noclip ;hl=x, de=y
  45.         ld b,h
  46.         ld c,l ;bc=x, de=y схч єў╕Єр workzone
  47.         push de ;y
  48.         ld hl,(curwindowwid)
  49.         ld de,(curwindowhgt)
  50.         call scalebitmapcoords ;hl=wid, de=hgt (ьюуєЄ юърчрЄ№ё  0)
  51.         dec hl
  52.         bit 7,h
  53.         jr z,$+3
  54.         inc hl
  55.         dec de
  56.         bit 7,d
  57.         jr z,$+3
  58.         inc de
  59.         push de
  60.         pop ix ;hgt
  61.         pop de ;y
  62.         call setpgshapes
  63.         jp shapes_invpixelframe
  64.        
  65. showwindow_onecorner
  66. ;hl=x эр ¤ъЁрэх
  67. ;a=y эр ¤ъЁрэх
  68.         call checkfirezone
  69.         cp ZONE_WORK
  70.         ret nz
  71. ;out: bc=x cur, de=y cur т bitmap (ё ъышяшЁютрэшхь яю workzone)          
  72.         call window_definecorner2
  73. ;bc=x т bitmap
  74. ;de=y т bitmap
  75.         jr showwindow_calcandshow
  76.  
  77. fire_or_rmb_window
  78. ;bc=x т bitmap, de=y т bitmap
  79.         call isitclick
  80.         ret nz ;ъэюяъє єцх фхЁцрыш
  81.          ld a,(curbmp)
  82.          ld (curwindowbmp),a ;юЄэ√эх т√фхы хь юъэю т Єхъє∙хь сшЄь¤ях
  83.         ld hl,(curwindowstate)
  84.         dec l
  85.         jr z,fire_or_rmb_window_onecorner ;чрфрэ юфшэ єуюы - чрфр╕ь тЄюЁющ
  86.         inc l
  87.         ld a,1 ;чрфрэ єуюы
  88.         jr z,fire_or_rmb_window_setcorner ;юъэр эхЄ - чрфр╕ь єуюы
  89. ;юъэю хёЄ№ - юЄьхэ хь юъэю
  90. clearwindowcoords
  91.         ld bc,coordswindowy*256 + (coordswindowx/8) ;b=y ;c=x/8
  92.         ld de,coordswindowhgt*256 + (coordswindowwid/8) ;d=hgt ;e=wid8
  93.         ld a,%00111111 ;a=%33210210
  94.         call shapes_fillbox
  95. clearwindowstate
  96.         xor a
  97.         jr setwindowstate
  98. fire_or_rmb_window_onecorner
  99. ;єуюы єцх чрфрэ, эю эх тё╕ юъэю
  100.         call window_definecorner2
  101. window_settwocorners
  102. ;bc=x т bitmap
  103. ;de=y т bitmap
  104.         ld a,1
  105.         ld (windowcopymode),a
  106.         inc a ;ld a,2 ;юъэю чрфрэю
  107. fire_or_rmb_window_setcorner
  108.         ld (curwindowx),bc ;яхЁхёЄрты хь xcorner
  109.         ld (curwindowy),de ;яхЁхёЄрты хь ycorner
  110. setwindowstate
  111.         ld (curwindowstate),a
  112.         ret
  113.  
  114. window_allpicture
  115.         ld a,#fb
  116.         in a,(#fe)
  117.         rra ;Q
  118.         ret nc ;с√ыю ярЁрчшЄэюх эрцрЄшх W яЁш фтшцхэшш ёЄЁхыъш ўхЁхч OPQA
  119.         ld a,(curwindowstate)
  120.         or a
  121.         jr nz,clearwindowcoords ;юъэю хёЄ№ - юЄьхэ хь юъэю
  122.         ld hl,(curbitmapwid_edit)
  123.         ld (curwindowwid),hl
  124.         ld hl,(curbitmaphgt)
  125.         ld (curwindowhgt),hl
  126.         ld b,a
  127.         ld c,a ;0
  128.         ld d,a
  129.         ld e,a ;0
  130.         jr window_settwocorners
  131.        
  132. window_definecorner2        
  133.         ld hl,(curwindowx)
  134.         or a
  135.         sbc hl,bc ;|hl|+1 = °шЁшэр юъэр
  136.         jr nc,$+2+4 ;с√ы xcorner >= x; яхЁхёЄрты хь xcorner
  137.         ld bc,(curwindowx) ;xcorner < x
  138.         call m,neghl
  139.         inc hl
  140.         ld (curwindowwid),hl
  141.         ld hl,(curwindowy)
  142.         or a
  143.         sbc hl,de ;|hl|+1 = т√ёюЄр юъэр
  144.         jr nc,$+2+4 ;с√ы ycorner >= y; яхЁхёЄрты хь ycorner
  145.         ld de,(curwindowy) ;xcorner < x
  146.         call m,neghl
  147.         inc hl
  148.         ld (curwindowhgt),hl
  149.         ret
  150.  
  151. window_mirrhor
  152.         ld a,(curwindowstate)
  153.         cp 2
  154.         ret nz
  155.         ld hl,(curwindowy)
  156.         ld bc,(curwindowhgt)
  157. window_mirrhor0        
  158.         push bc
  159.         push hl ;y1
  160.         ex de,hl
  161.         call window_x_setpg32k ;y1 ;hl=addr
  162.         ex de,hl ;de=addr[x1]
  163.         ld hl,(curwindowwid)
  164.         ld b,h
  165.         ld c,l
  166.         add hl,de ;hl=addr[x2]+1
  167.         srl b
  168.         rr c ;bc=wid/2
  169. window_mirrhor00
  170.         dec hl
  171.         ld a,(de)
  172.         ldi
  173.         dec hl
  174.         ld (hl),a
  175.         jp pe,window_mirrhor00
  176.         pop hl ;y1
  177.         pop bc
  178.         cpi
  179.         jp pe,window_mirrhor0
  180.         jp showbitmap
  181.        
  182. window_mirrver
  183.         ld a,(curwindowstate)
  184.         cp 2
  185.         ret nz
  186.         ld a,(curpgtemp)
  187.         SETPG16K
  188.         ld de,(curwindowy)
  189.         ld hl,(curwindowhgt)
  190.         add hl,de
  191.         dec hl
  192. window_mirrver0
  193. ;de=y1
  194. ;hl=y2
  195. ;CY=0
  196.         ld a,tempc000/256
  197.         call window_mirrver_ldir ;from y1
  198.         ex de,hl
  199.         ;ld a,tempe000/256
  200.         call window_mirrver_ldir ;from y2
  201.         scf
  202.         ;ld a,tempc000/256
  203.         call window_mirrver_ldir ;to y2
  204.         ex de,hl
  205.         scf
  206.         ;ld a,tempe000/256
  207.         call window_mirrver_ldir ;to y1
  208.         inc de ;y1
  209.         dec hl ;y2
  210.         ;or a
  211.         sbc hl,de
  212.         add hl,de
  213.         jr nc,window_mirrver0
  214.         jp showbitmap
  215.  
  216. window_mirrver_ldir
  217.         push de
  218.         push hl
  219.         push af
  220.         call window_x_setpg32k
  221.         pop af
  222.         jr nc,window_mirrver_ldir_de
  223.         ex de,hl
  224.         ld h,a
  225.         ld l,0
  226.         jr window_mirrver_ldir_go
  227. window_mirrver_ldir_de
  228.         ld d,a
  229.         ld e,0
  230. window_mirrver_ldir_go
  231.         ld bc,(curwindowwid)
  232.         ldir
  233.         pop hl
  234.         pop de
  235.         xor +(tempe000-tempc000)/256
  236.         ret ;CY=0
  237.  
  238. window_copy
  239.         call ahl_coords
  240.         call iscopywindowvisible
  241.         ret nz
  242.         ld a,(curbmp)
  243.         ld (window_curbmp),a
  244. ;out: bc=x cur, de=y cur т bitmap (ё ъышяшЁютрэшхь яю workzone)
  245.         ld (window_copy_xto),bc
  246.         ex de,hl ;hl=y ъєфр
  247. ;ёЁртэхэшх ъююЁфшэрЄ ш ъюяшЁютрэшх ёэшчє ттхЁї, хёыш эрфю
  248.         ld a,(curpgtemp)
  249.         SETPG16K
  250.         ld bc,(curwindowhgt)
  251.         ld de,(curwindowy)
  252.         ;hl=y ъєфр
  253.         or a
  254.         sbc hl,de
  255.         add hl,de
  256.         jr nc,window_copyup ;y ъєфр >= y юЄъєфр, ъюяшЁєхь ёэшчє ттхЁї
  257. ;ъюяшЁєхь ётхЁїє тэшч
  258. window_copyline0
  259.         call window_copylinepp
  260.         inc hl
  261.         inc de
  262.         jr nz,window_copyline0
  263.         jp showbitmap
  264.        
  265. window_copyup
  266. ;bc=curwindowhgt
  267. ;de=curwindowy
  268. ;hl=y ъєфр
  269.         add hl,bc
  270.         ex de,hl
  271.         add hl,bc
  272.         ex de,hl
  273. ;ъюяшЁєхь ёэшчє ттхЁї
  274. window_copylineup0
  275.         dec hl
  276.         dec de
  277.         call window_copylinepp
  278.         jr nz,window_copylineup0
  279.         jp showbitmap
  280.  
  281. window_copylinepp
  282.         push bc
  283.         push de ;y юЄъєфр
  284.         push hl ;y ъєфр
  285.          push hl ;y ъєфр
  286.         push de ;y юЄъєфр
  287.         ld a,(curwindowbmp)
  288.         call selectbmp
  289.         pop de ;y юЄъєфр
  290.         call window_x_setpg32k ;hl=addr юЄъєфр
  291.         ld de,tempc000
  292.         ld bc,(curwindowwid)
  293.         ldir
  294. window_curbmp=$+1
  295.         ld a,0;(curbmp)
  296.         call selectbmp
  297.          pop hl ;y ъєфр
  298.         ld bc,(curbitmaphgt)
  299.         or a
  300.         sbc hl,bc
  301.         add hl,bc
  302.         jr nc,window_copylineppq ;y ъєфр чр уЁрэшЎхщ
  303.          ex de,hl ;de=y ъєфр
  304. window_copy_xto=$+1
  305.         ld bc,0
  306.         call calcbitmap_setpg32k ;hl=addr ъєфр
  307.         ex de,hl ;de=addr ъєфр
  308.         ld hl,(curbitmapwid_edit)
  309.         ld bc,(window_copy_xto)
  310.         or a
  311.         sbc hl,bc ;ёъюы№ъю яшъёхыхщ фюёЄєяэю ёяЁртр
  312.         ld bc,(curwindowwid) ;ёъюы№ъю эрфю яшъёхыхщ
  313.         jr z,window_copylineppq
  314.         call minhl_bc_tobc ;ъышяшЁютрэшх яю x
  315.         ld hl,tempc000
  316.         ld a,(key)
  317.         cp 'a'
  318.         jr nc,window_copylinepp_ldir ;no Caps Shift
  319. ;with Caps Shift - transparent copy
  320. window_copylinepp0
  321.         ld a,(curcolor2)
  322.         cp (hl)
  323.         jr nz,$+4
  324.         ld a,(de)
  325.         ld (hl),a
  326.         ldi
  327.         jp pe,window_copylinepp0
  328.         jr window_copylineppq
  329. window_copylinepp_ldir
  330.         ldir
  331. window_copylineppq
  332.         pop hl ;y ъєфр
  333.         pop de ;y юЄъєфр
  334.         pop bc
  335.         dec bc
  336.         ld a,b
  337.         or c
  338.         ret
  339.  
  340. curwindowbmp
  341.         db 0 ;0..3
  342. windowcopymode
  343.         db 0
  344.  
  345. curwindowstate
  346.         db 0
  347. curwindowx
  348.         dw 0
  349. curwindowy
  350.         dw 0
  351. curwindowwid
  352.         dw 0
  353. curwindowhgt
  354.         dw 0
  355.