?login_element?

Subversion Repositories NedoOS

Rev

Rev 516 | Blame | Compare with Previous | Last modification | View Log | Download

  1. fire_or_rmb_navigator
  2.         call isitclick
  3.         ret nz ;кнопку уже держали
  4.         ld hl,(arrx)
  5.         ld bc,-navigatorx
  6.         add hl,bc
  7.         ex de,hl
  8.         ld bc,(curbitmapwid_edit)
  9.         ;ld a,b
  10.         ;or c
  11.         ;ret z ;пустой битмэп
  12.         call mulbcde_ahl ;hl=bitmapwid * (x-navigatorx)
  13.         push hl ;hl=bitmapwid * (x-navigatorx)
  14.         call calcnavigatorsize ;hl=navigatorwid, b=navigatorhgt
  15.         ex de,hl ;de=navigatorwid
  16.         pop hl ;hl=bitmapwid * (x-navigatorx)
  17.         push bc ;navigatorhgt
  18.         call divhlde ;hl=hl/de = (bitmapwid * (x-navigatorx))/navigatorwid
  19. ;вычесть workzonewid/scale/2 с учётом переполнения
  20.         push hl
  21.         ld hl,workzonewid8*8/2
  22.         call scalescrcoords
  23.         ex de,hl
  24.         pop hl
  25.         ;or a
  26.         ;sbc hl,de
  27.         ;jr nc,$+5
  28.         ;ld hl,0
  29.         call subhldecheck0
  30.        ld (curbitmapxscroll),hl ;ставим в центр
  31.         ld a,(arry)
  32.         sub navigatory
  33.         ld e,a
  34.         ld d,0
  35.         ld bc,(curbitmaphgt)
  36.         call mulbcde_ahl ;hl=bitmaphgt * (y-navigatory)
  37.         pop bc ;b=navigatorhgt
  38.         ld d,0
  39.         ld e,b
  40.         call divhlde ;hl=hl/de = (bitmaphgt * (y-navigatory))/navigatorhgt
  41. ;вычесть workzonehgt/scale/2 с учётом переполнения
  42.         push hl
  43.         ld hl,workzonehgt/2
  44.         call scalescrcoords
  45.         ex de,hl
  46.         pop hl
  47.         ;or a
  48.         ;sbc hl,de
  49.         ;jr nc,$+5
  50.         ;ld hl,0
  51.         call subhldecheck0
  52.        ld (curbitmapyscroll),hl ;ставим в центр
  53.         jp control_scroll_checksize
  54.  
  55. calcnavigatorsize
  56. ;out: hl=wid, b=hgt
  57.         ld hl,(curbitmapwid_edit)
  58.         add hl,hl
  59.         add hl,hl
  60.         add hl,hl
  61.         add hl,hl
  62.         add hl,hl ;при wid>=2048 будет переполнение!
  63.         jr nc,$+5
  64.         ld hl,0xffff ;wid==2048
  65.         ld de,(curbitmaphgt)
  66.         call divhlde ;hl=hl/de
  67.         ld bc,navigatorwid*32/navigatorhgt
  68.         or a
  69.         sbc hl,bc
  70.         jr c,shownavigator_high
  71. ;shownavigator_wide
  72.         ld bc,(curbitmaphgt) ;<2048
  73.         ld de,navigatorwid
  74.         call mulbcde_ahl
  75.         ld de,(curbitmapwid_edit)
  76.         call divhlde ;hl=hl/de
  77.         ld b,l ;b=hgt = (navigatorwid*bitmaphgt)/bitmapwid
  78.         ld hl,navigatorwid ;hl=wid
  79.         ret;jr shownavigator_high_or_wide_q
  80. shownavigator_high
  81.         ld bc,(curbitmapwid_edit) ;<2048
  82.         ld de,navigatorhgt
  83.         call mulbcde_ahl
  84.         ld de,(curbitmaphgt)
  85.         call divhlde ;hl=hl/de
  86.         ;hl=wid = (navigatorhgt*bitmapwid)/bitmaphgt
  87.         ld b,navigatorhgt ;b=hgt
  88. ;shownavigator_high_or_wide_q
  89.         ret
  90.  
  91. shownavigator
  92.         ld hl,(curbitmaphgt)
  93.         ld a,h
  94.         or l
  95.         ret z ;пустой битмэп
  96. ;картинка высокая или широкая?
  97. ;если bitmapwid/bitmaphgt >= navigatorwid/navigatorhgt, то картинка широкая, иначе высокая
  98.         call setpgshapes
  99.  
  100.         call calcnavigatorsize ;hl=wid, b=hgt
  101.        
  102.         ld c,navigatory ;c=y
  103.         ld de,navigatorx ;de=x
  104.         ld a,l
  105.         ld (shownavigator_wid),a
  106.         ld a,b
  107.         ld (shownavigator_hgt),a
  108.         push bc
  109.         push de
  110.         push hl
  111.         ;ld lx,backcolor ;lx=color
  112.         ;call getcontrastcolors
  113.         call getblackongrey
  114.         ;call getgreycolor ;ld a,backcolor
  115.         ;ld lx,a
  116.         call shapes_prpixelbox
  117.         pop hl
  118.         pop de
  119.         pop bc
  120.         ;ld lx,0 ;lx=color
  121.         call getcontrastcolors
  122.         ld lx,hx
  123.         call shapes_prpixelframe
  124.  
  125. ;shapes_prpixelframe(navigatorx+xleft, navigatory+ytop, xright-xleft, ybottom-ytop)
  126.  
  127. ;расчёт k=navigatorwid*256/bitmapwid:
  128.         ;ld hl,navigatorwid*256
  129.         ld hl,(shownavigator_wid-1) ;h=wid
  130.         ld l,0
  131.         ld de,(curbitmapwid_edit)
  132.         call divhlde ;hl=k
  133.         ex de,hl ;de=k
  134. ;xleft=k*bitmapxscroll
  135.         ld bc,(curbitmapxscroll)
  136.         call mulbcde_ahl
  137.         ld b,a
  138.         ld c,h
  139. ;bc=xleft
  140. ;при xleft==0, но bitmapxscroll!=0, сделать xleft++
  141.         ld a,b
  142.         or c
  143.         jr nz,shownavigator_nocorrectxleft
  144.         ld hl,(curbitmapxscroll)
  145.         ld a,h
  146.         or l
  147.         jr z,shownavigator_nocorrectxleft ;bitmapxscroll==0
  148.         inc bc ;xleft++ ;TODO test
  149. shownavigator_nocorrectxleft
  150.         ld hl,navigatorx
  151.         add hl,bc
  152.         ld (shownavigator_xleft),hl
  153. ;xright=min[k*(bitmapxscroll+workzonewid/scale),navigatorwid]
  154.         push de ;k
  155.         ld hl,workzonewid8*8
  156.         call scalescrcoords
  157.         ld bc,(curbitmapxscroll)
  158.         add hl,bc
  159.         ld b,h
  160.         ld c,l
  161.         pop de ;k
  162.         call mulbcde_ahl
  163.         ld l,h
  164.         ld h,a
  165. shownavigator_wid=$+1
  166.         ld bc,navigatorwid
  167.         call minhl_bc_tobc ;bc = наименьшее из k*(bitmapxscroll+workzonewid/scale) и navigatorwid
  168. ;bc=xright
  169. ;если не существует пиксель (workzonex+workzonewid,workzoney), то xright=navigatorwid
  170. ;при xright==navigatorwid, но существует пиксель (workzonex+workzonewid,workzoney), сделать xright--
  171.         push de ;k
  172.         push bc
  173.         ld a,workzoney
  174.         ld hl,workzonex8*8+(workzonewid8*8)
  175.         call checkfirecoords ;out: CY=вне битмэпа ;bc=x в bitmap, de=y в bitmap
  176.         pop bc
  177.         ld hl,(shownavigator_wid)
  178.         jr nc,shownavigator_nogluexright
  179.         ld b,h
  180.         ld c,l
  181.         jr shownavigator_nocorrectxright
  182. shownavigator_nogluexright
  183.         or a
  184.         sbc hl,bc
  185.         jr nz,shownavigator_nocorrectxright ;xright!=navigatorwid
  186.         dec bc ;xleft-- ;TODO test
  187. shownavigator_nocorrectxright
  188.         pop de ;k
  189.         ld hl,navigatorx
  190.         add hl,bc
  191.         ld (shownavigator_xright),hl
  192.  
  193. ;y аналогично
  194.  
  195. ;yleft=k*bitmapyscroll
  196.         ld bc,(curbitmapyscroll)
  197.         call mulbcde_ahl
  198. ;h=ytop
  199. ;при ytop==0, но bitmapyscroll!=0, сделать ytop++
  200.         ld a,h
  201.         or a
  202.         jr nz,shownavigator_nocorrectytop
  203.         ld bc,(curbitmapyscroll)
  204.         ld a,b
  205.         or c
  206.         jr z,shownavigator_nocorrectytop ;bitmaptscroll==0
  207.         inc h ;ytop++ ;TODO test
  208. shownavigator_nocorrectytop
  209.         ld a,h
  210.         add a,navigatory
  211.         ld (shownavigator_ytop),a
  212. ;yright=k*(min[bitmapyscroll+workzonehgt/scale,bitmaphgt])
  213.         push de
  214.         ld hl,workzonehgt
  215.         call scalescrcoords
  216.         ld bc,(curbitmapyscroll)
  217.         add hl,bc
  218.         ld bc,(curbitmaphgt)
  219.         call minhl_bc_tobc ;bc = наименьшее из bitmapyscroll+workzonehgt/scale и bitmaphgt
  220.         pop de
  221.         call mulbcde_ahl
  222. ;h=ybottom
  223. ;если не существует пиксель (workzonex,workzoney+workzonehgt), то ybottom=navigatorhgt
  224. ;при ybottom==navigatorhgt, но существует пиксель (workzonex,workzoney+workzonehgt), сделать ybottom--
  225.         push de ;k
  226.         push hl
  227.         ld a,workzoney+workzonehgt
  228.         ld hl,workzonex8*8
  229.         call checkfirecoords ;out: CY=вне битмэпа ;bc=x в bitmap, de=y в bitmap
  230.         pop hl
  231. shownavigator_hgt=$+1
  232.         ld a,0
  233.         jr nc,shownavigator_noglueybottom
  234.         ld h,a;navigatorhgt
  235.         jr shownavigator_nocorrectybottom
  236. shownavigator_noglueybottom
  237.         cp h
  238.         jr nz,shownavigator_nocorrectybottom ;ybottom!=navigatorhgt
  239.         dec h ;ybottom-- ;TODO test
  240. shownavigator_nocorrectybottom
  241.         pop de ;k
  242.         ld a,h
  243.         add a,navigatory
  244.         ld (shownavigator_ybottom),a
  245.  
  246. shownavigator_xleft=$+1
  247.         ld de,0
  248. shownavigator_xright=$+1
  249.         ld hl,0
  250.         or a
  251.         sbc hl,de ;xright-xleft
  252. shownavigator_ytop=$+1
  253.         ld c,0 ;c=y
  254. shownavigator_ybottom=$+1
  255.         ld a,0
  256.         sub c ;ybottom-ytop
  257.         ld b,a ;b=hgt
  258.        
  259.         ;ld c,navigatory ;c=y
  260.         ;ld de,navigatorx8*8 ;de=x
  261.         ;ld b,navigatorhgt-1 ;b=hgt
  262.         ;ld hl,navigatorwid-1 ;hl=wid
  263.         ld lx,0xe4;%11100100 ;lx=color
  264.         jp shapes_prpixelframe
  265.  
  266. showbitmapcoords
  267. ;hl=x
  268. ;a=y
  269.         call checkfirezone ;out: a=код зоны
  270.         cp ZONE_WORK
  271.         ret nz ;вне рабочей зоны
  272. ;bc=x в bitmap, de=y в bitmap
  273.         call setpgshapes
  274.         call getblackongrey
  275.         ;call getcontrastcolors;ld ix,0xff3f;%00111111 ;lx=фоновый цвет
  276.         ;call getgreycolor
  277.         ;ld lx,a
  278.  
  279.         push de ;y
  280.         ;push bc ;x
  281.  
  282.         ld hl,coordsy*40 + (coordsx/8) + scrbase
  283.         ld de,tnavigator_x
  284.         ;pop bc ;x
  285.         call shapes_prtext_num
  286.         pop bc ;y
  287.         jp shapes_prtext_num
  288.  
  289. showwindowcoords
  290. ;bc=x
  291. ;de=y
  292.         call setpgshapes
  293.         ;ld ix,0xff3f;%00111111 ;lx=фоновый цвет
  294.         call getblackongrey
  295.         ;call getcontrastcolors
  296.         ;call getgreycolor
  297.         ;ld lx,a
  298.  
  299.         push de ;y
  300.         ;push bc ;x
  301.  
  302.         ld hl,coordswindowy*40 + (coordsx/8) + scrbase
  303.         ld de,tnavigator_wx
  304.         ;pop bc
  305.         call shapes_prtext_num
  306.         pop bc ;y
  307.         call shapes_prtext_num
  308.         ld bc,(curwindowwid)
  309.         call shapes_prtext_num
  310.         ld bc,(curwindowhgt)
  311.         jp shapes_prtext_num
  312.  
  313. tnavigator_x
  314.         db "x ",0
  315. tnavigator_y
  316.         db "y ",0
  317. tnavigator_wx
  318.         db "wx ",0
  319. tnavigator_wy
  320.         db "wy ",0
  321. tnavigator_wid
  322.         db "wid ",0
  323. tnavigator_hgt
  324.         db "hgt ",0
  325.