Eyes DA: Make resizable

This commit is contained in:
Joshua Bell 2018-04-17 22:31:23 -07:00
parent 66cae9a01f
commit cc2f1d13a8

View File

@ -69,15 +69,15 @@ vthumbmax: .byte 32
vthumbpos: .byte 0 vthumbpos: .byte 0
status: .byte 0 status: .byte 0
reserved: .byte 0 reserved: .byte 0
mincontwidth: .word da_width mincontwidth: .word screen_width / 5
mincontlength: .word da_height mincontlength: .word screen_height / 5
maxcontwidth: .word da_width maxcontwidth: .word screen_width
maxcontlength: .word da_height maxcontlength: .word screen_height
port: port:
viewloc: DEFINE_POINT da_left, da_top viewloc: DEFINE_POINT da_left, da_top
mapbits: .addr MGTK::screen_mapbits mapbits: .addr MGTK::screen_mapbits
mapwidth: .word MGTK::screen_mapwidth mapwidth: .word MGTK::screen_mapwidth
maprect: DEFINE_RECT 0, 0, da_width, da_height maprect: DEFINE_RECT 0, 0, da_width, da_height, maprect
pattern: .res 8, $FF pattern: .res 8, $FF
colormasks: .byte MGTK::colormask_and, MGTK::colormask_or colormasks: .byte MGTK::colormask_and, MGTK::colormask_or
penloc: DEFINE_POINT 0, 0 penloc: DEFINE_POINT 0, 0
@ -160,6 +160,30 @@ textback: .byte 0
textfont: .addr 0 textfont: .addr 0
.endproc .endproc
grow_box_width := 17
grow_box_height := 7
.proc grow_box_params
viewloc: DEFINE_POINT 0, 0, viewloc
mapbits: .addr grow_box_bitmap
mapwidth: .byte 3
reserved: .byte 0
cliprect: DEFINE_RECT 2, 2, 19, 9
.endproc
grow_box_bitmap:
.byte px(%1111111),px(%1111111),px(%1111111)
.byte px(%1000000),px(%0000000),px(%0000001)
.byte px(%1001111),px(%1111110),px(%0000001)
.byte px(%1001100),px(%0000111),px(%1111001)
.byte px(%1001100),px(%0000110),px(%0011001)
.byte px(%1001100),px(%0000110),px(%0011001)
.byte px(%1001111),px(%1111110),px(%0011001)
.byte px(%1000011),px(%0000000),px(%0011001)
.byte px(%1000011),px(%1111111),px(%1111001)
.byte px(%1000000),px(%0000000),px(%0000001)
.byte px(%1111111),px(%1111111),px(%1111111)
;;; ============================================================ ;;; ============================================================
.proc init .proc init
@ -218,7 +242,10 @@ textfont: .addr 0
beq handle_close beq handle_close
cmp #MGTK::area_dragbar cmp #MGTK::area_dragbar
beq handle_drag beq handle_drag
jmp input_loop cmp #MGTK::area_content
bne :+
jmp handle_grow
: jmp input_loop
.endproc .endproc
;;; ============================================================ ;;; ============================================================
@ -270,7 +297,7 @@ done: jmp input_loop
copy16 event_params::xcoord, dragwindow_params::dragx copy16 event_params::xcoord, dragwindow_params::dragx
copy16 event_params::ycoord, dragwindow_params::dragy copy16 event_params::ycoord, dragwindow_params::dragy
MGTK_CALL MGTK::DragWindow, dragwindow_params MGTK_CALL MGTK::DragWindow, dragwindow_params
lda dragwindow_params::moved common: lda dragwindow_params::moved
bpl :+ bpl :+
;; Draw DeskTop's windows ;; Draw DeskTop's windows
@ -295,6 +322,32 @@ done: jmp input_loop
;;; ============================================================ ;;; ============================================================
.proc handle_grow
;; Is the hit within the grow box area?
copy16 event_params::xcoord, screentowindow_params::screen::xcoord
copy16 event_params::ycoord, screentowindow_params::screen::ycoord
MGTK_CALL MGTK::ScreenToWindow, screentowindow_params
sub16 winfo::maprect::x2, mx, tmpw
cmp16 #grow_box_width, tmpw
bcc nope
sub16 winfo::maprect::y2, my, tmpw
cmp16 #grow_box_height, tmpw
bcc nope
;; Initiate the grow... re-using the drag logic
copy winfo::window_id, dragwindow_params::window_id
copy16 event_params::xcoord, dragwindow_params::dragx
copy16 event_params::ycoord, dragwindow_params::dragy
MGTK_CALL MGTK::GrowWindow, dragwindow_params
jmp handle_drag::common
nope: jmp input_loop
tmpw: .word 0
.endproc
;;; ============================================================
penxor: .byte MGTK::penXOR penxor: .byte MGTK::penXOR
notpencopy: .byte MGTK::notpencopy notpencopy: .byte MGTK::notpencopy
@ -328,37 +381,48 @@ pos_r: DEFINE_POINT 0, 0, pos_r
;;; ============================================================ ;;; ============================================================
.proc draw_window .proc draw_window
ptr := $06
;; Defer until we have mouse coords
lda has_last_coords
bne :+
rts
:
;; Defer if content area is not visible ;; Defer if content area is not visible
MGTK_CALL MGTK::GetWinPort, winport_params MGTK_CALL MGTK::GetWinPort, winport_params
cmp #MGTK::error_window_obscured cmp #MGTK::error_window_obscured
bne :+ bne :+
rts rts
: :
;; Defer until we have mouse coords
lda has_last_coords
bne :+
rts
:
MGTK_CALL MGTK::SetPort, grafport MGTK_CALL MGTK::SetPort, grafport
MGTK_CALL MGTK::HideCursor MGTK_CALL MGTK::HideCursor
copy16 winfo::maprect::x2, rx ; width / 4
lsr16 rx
lsr16 rx
copy16 winfo::maprect::y2, ry ; height / 2
lsr16 ry
lda has_drawn_outline lda has_drawn_outline
bne erase_pupils beq :+
inc has_drawn_outline jmp erase_pupils
: inc has_drawn_outline
;; Draw resize box
MGTK_CALL MGTK::SetPenMode, notpencopy
sub16 winfo::maprect::x2, #grow_box_width, grow_box_params::viewloc::xcoord
sub16 winfo::maprect::y2, #grow_box_height, grow_box_params::viewloc::ycoord
MGTK_CALL MGTK::PaintBits, grow_box_params
;; Draw outline ;; Draw outline
MGTK_CALL MGTK::SetPenMode, notpencopy MGTK_CALL MGTK::SetPenMode, notpencopy
MGTK_CALL MGTK::SetPenSize, outline_pensize MGTK_CALL MGTK::SetPenSize, outline_pensize
copy16 #da_width/4, cx copy16 rx, cx
copy16 #da_height/2, cy copy16 ry, cy
jsr draw_outline jsr draw_outline
copy16 #da_width * 3/4, cx
copy16 #da_height/2, cy add16 rx, cx, cx
add16 rx, cx, cx
jsr draw_outline jsr draw_outline
;; Skip erasing pupils if we're redrawing ;; Skip erasing pupils if we're redrawing
@ -377,16 +441,16 @@ draw_pupils:
MGTK_CALL MGTK::SetPenMode, penxor MGTK_CALL MGTK::SetPenMode, penxor
MGTK_CALL MGTK::SetPenSize, pupil_pensize MGTK_CALL MGTK::SetPenSize, pupil_pensize
copy16 #da_width/4, cx copy16 rx, cx
copy16 #da_height/2, cy copy16 ry, cy
jsr compute_pupil_pos jsr compute_pupil_pos
sub16 ppx, #pupilw/2, pos_l::xcoord sub16 ppx, #pupilw/2, pos_l::xcoord
sub16 ppy, #pupilh/2, pos_l::ycoord sub16 ppy, #pupilh/2, pos_l::ycoord
MGTK_CALL MGTK::MoveTo, pos_l MGTK_CALL MGTK::MoveTo, pos_l
MGTK_CALL MGTK::LineTo, pos_l MGTK_CALL MGTK::LineTo, pos_l
copy16 #da_width*3/4, cx add16 rx, cx, cx
copy16 #da_height/2, cy add16 rx, cx, cx
jsr compute_pupil_pos jsr compute_pupil_pos
sub16 ppx, #pupilw/2, pos_r::xcoord sub16 ppx, #pupilw/2, pos_r::xcoord
sub16 ppy, #pupilh/2, pos_r::ycoord sub16 ppy, #pupilh/2, pos_r::ycoord
@ -395,13 +459,15 @@ draw_pupils:
MGTK_CALL MGTK::ShowCursor MGTK_CALL MGTK::ShowCursor
done: rts done: rts
tmpw: .word 0
.endproc .endproc
;;; ============================================================ ;;; ============================================================
;;; Common input params ;;; Common input params
rx: .word da_width/4 rx: .word 0
ry: .word da_height/2 ry: .word 0
cx: .word 0 cx: .word 0
cy: .word 0 cy: .word 0