?login_element?

Subversion Repositories NedoOS

Rev

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

  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 shapes_prpixelbox
  113.         pop hl
  114.         pop de
  115.         pop bc
  116.         ld lx,0 ;lx=color
  117.         call shapes_prpixelframe
  118.  
  119. ;shapes_prpixelframe(navigatorx+xleft, navigatory+ytop, xright-xleft, ybottom-ytop)
  120.  
  121. ;расчёт k=navigatorwid*256/bitmapwid:
  122.         ;ld hl,navigatorwid*256
  123.         ld hl,(shownavigator_wid-1) ;h=wid
  124.         ld l,0
  125.         ld de,(curbitmapwid_edit)
  126.         call divhlde ;hl=k
  127.         ex de,hl ;de=k
  128. ;xleft=k*bitmapxscroll
  129.         ld bc,(curbitmapxscroll)
  130.         call mulbcde_ahl
  131.         ld b,a
  132.         ld c,h
  133. ;bc=xleft
  134. ;при xleft==0, но bitmapxscroll!=0, сделать xleft++
  135.         ld a,b
  136.         or c
  137.         jr nz,shownavigator_nocorrectxleft
  138.         ld hl,(curbitmapxscroll)
  139.         ld a,h
  140.         or l
  141.         jr z,shownavigator_nocorrectxleft ;bitmapxscroll==0
  142.         inc bc ;xleft++ ;TODO test
  143. shownavigator_nocorrectxleft
  144.         ld hl,navigatorx
  145.         add hl,bc
  146.         ld (shownavigator_xleft),hl
  147. ;xright=min[k*(bitmapxscroll+workzonewid/scale),navigatorwid]
  148.         push de ;k
  149.         ld hl,workzonewid8*8
  150.         call scalescrcoords
  151.         ld bc,(curbitmapxscroll)
  152.         add hl,bc
  153.         ld b,h
  154.         ld c,l
  155.         pop de ;k
  156.         call mulbcde_ahl
  157.         ld l,h
  158.         ld h,a
  159. shownavigator_wid=$+1
  160.         ld bc,navigatorwid
  161.         call minhl_bc_tobc ;bc = наименьшее из k*(bitmapxscroll+workzonewid/scale) и navigatorwid
  162. ;bc=xright
  163. ;если не существует пиксель (workzonex+workzonewid,workzoney), то xright=navigatorwid
  164. ;при xright==navigatorwid, но существует пиксель (workzonex+workzonewid,workzoney), сделать xright--
  165.         push de ;k
  166.         push bc
  167.         ld a,workzoney
  168.         ld hl,workzonex8*8+(workzonewid8*8)
  169.         call checkfirecoords ;out: CY=вне битмэпа ;bc=x в bitmap, de=y в bitmap
  170.         pop bc
  171.         ld hl,(shownavigator_wid)
  172.         jr nc,shownavigator_nogluexright
  173.         ld b,h
  174.         ld c,l
  175.         jr shownavigator_nocorrectxright
  176. shownavigator_nogluexright
  177.         or a
  178.         sbc hl,bc
  179.         jr nz,shownavigator_nocorrectxright ;xright!=navigatorwid
  180.         dec bc ;xleft-- ;TODO test
  181. shownavigator_nocorrectxright
  182.         pop de ;k
  183.         ld hl,navigatorx
  184.         add hl,bc
  185.         ld (shownavigator_xright),hl
  186.  
  187. ;y аналогично
  188.  
  189. ;yleft=k*bitmapyscroll
  190.         ld bc,(curbitmapyscroll)
  191.         call mulbcde_ahl
  192. ;h=ytop
  193. ;при ytop==0, но bitmapyscroll!=0, сделать ytop++
  194.         ld a,h
  195.         or a
  196.         jr nz,shownavigator_nocorrectytop
  197.         ld bc,(curbitmapyscroll)
  198.         ld a,b
  199.         or c
  200.         jr z,shownavigator_nocorrectytop ;bitmaptscroll==0
  201.         inc h ;ytop++ ;TODO test
  202. shownavigator_nocorrectytop
  203.         ld a,h
  204.         add a,navigatory
  205.         ld (shownavigator_ytop),a
  206. ;yright=k*(min[bitmapyscroll+workzonehgt/scale,bitmaphgt])
  207.         push de
  208.         ld hl,workzonehgt
  209.         call scalescrcoords
  210.         ld bc,(curbitmapyscroll)
  211.         add hl,bc
  212.         ld bc,(curbitmaphgt)
  213.         call minhl_bc_tobc ;bc = наименьшее из bitmapyscroll+workzonehgt/scale и bitmaphgt
  214.         pop de
  215.         call mulbcde_ahl
  216. ;h=ybottom
  217. ;если не существует пиксель (workzonex,workzoney+workzonehgt), то ybottom=navigatorhgt
  218. ;при ybottom==navigatorhgt, но существует пиксель (workzonex,workzoney+workzonehgt), сделать ybottom--
  219.         push de ;k
  220.         push hl
  221.         ld a,workzoney+workzonehgt
  222.         ld hl,workzonex8*8
  223.         call checkfirecoords ;out: CY=вне битмэпа ;bc=x в bitmap, de=y в bitmap
  224.         pop hl
  225. shownavigator_hgt=$+1
  226.         ld a,0
  227.         jr nc,shownavigator_noglueybottom
  228.         ld h,a;navigatorhgt
  229.         jr shownavigator_nocorrectybottom
  230. shownavigator_noglueybottom
  231.         cp h
  232.         jr nz,shownavigator_nocorrectybottom ;ybottom!=navigatorhgt
  233.         dec h ;ybottom-- ;TODO test
  234. shownavigator_nocorrectybottom
  235.         pop de ;k
  236.         ld a,h
  237.         add a,navigatory
  238.         ld (shownavigator_ybottom),a
  239.  
  240. shownavigator_xleft=$+1
  241.         ld de,0
  242. shownavigator_xright=$+1
  243.         ld hl,0
  244.         or a
  245.         sbc hl,de ;xright-xleft
  246. shownavigator_ytop=$+1
  247.         ld c,0 ;c=y
  248. shownavigator_ybottom=$+1
  249.         ld a,0
  250.         sub c ;ybottom-ytop
  251.         ld b,a ;b=hgt
  252.        
  253.         ;ld c,navigatory ;c=y
  254.         ;ld de,navigatorx8*8 ;de=x
  255.         ;ld b,navigatorhgt-1 ;b=hgt
  256.         ;ld hl,navigatorwid-1 ;hl=wid
  257.         ld lx,0xe4;%11100100 ;lx=color
  258.         jp shapes_prpixelframe
  259.  
  260. showbitmapcoords
  261. ;hl=x
  262. ;a=y
  263.         call checkfirezone ;out: a=код зоны
  264.         cp ZONE_WORK
  265.         ret nz ;вне рабочей зоны
  266. ;bc=x в bitmap, de=y в bitmap
  267.         call setpgshapes
  268.         ld ix,0xff3f;%00111111 ;lx=фоновый цвет
  269.  
  270.         push de ;y
  271.         ;push bc ;x
  272.  
  273.         ld hl,coordsy*40 + (coordsx/8) + scrbase
  274.         ld de,tnavigator_x
  275.         ;pop bc ;x
  276.         call shapes_prtext_num
  277.         pop bc ;y
  278.         jp shapes_prtext_num
  279.  
  280. showwindowcoords
  281. ;bc=x
  282. ;de=y
  283.         call setpgshapes
  284.         ld ix,0xff3f;%00111111 ;lx=фоновый цвет
  285.  
  286.         push de ;y
  287.         ;push bc ;x
  288.  
  289.         ld hl,coordswindowy*40 + (coordsx/8) + scrbase
  290.         ld de,tnavigator_wx
  291.         ;pop bc
  292.         call shapes_prtext_num
  293.         pop bc ;y
  294.         call shapes_prtext_num
  295.         ld bc,(curwindowwid)
  296.         call shapes_prtext_num
  297.         ld bc,(curwindowhgt)
  298.         jp shapes_prtext_num
  299.  
  300. tnavigator_x
  301.         db "x ",0
  302. tnavigator_y
  303.         db "y ",0
  304. tnavigator_wx
  305.         db "wx ",0
  306. tnavigator_wy
  307.         db "wy ",0
  308. tnavigator_wid
  309.         db "wid ",0
  310. tnavigator_hgt
  311.         db "hgt ",0
  312.