( GUI Hover )

%RTN { JMP2r }

( devices )

|00 @System [ &vector $2 &pad $6 &r $2 &g $2 &b $2 ]
|20 @Screen [ &vector $2 &width $2 &height $2 &pad $2 &x $2 &y $2 &addr $2 &color $1 ]
|90 @Mouse [ &vector $2 &x $2 &y $2 &state $1 &chord $1 ]

( variables )

|0000

@color [ &byte $1 ]
@pointer [ &x $2 &y $2 &sprite $2 ]
@rect [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@r1 [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@r2 [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]
@r3 [ &x1 $2 &y1 $2 &x2 $2 &y2 $2 ]

( program )

|0100

	( theme ) #0f0f .System/r DEO2 #0fff .System/g DEO2 #0ff0 .System/b DEO2
	( vectors ) ;on-mouse .Mouse/vector DEO2
	
	#0020 #0030 #0060 #0060 .r1/y2 POK2 .r1/x2 POK2 .r1/y1 POK2 .r1/x1 POK2
	#0058 #0050 #0090 #0080 .r2/y2 POK2 .r2/x2 POK2 .r2/y1 POK2 .r2/x1 POK2
	#0048 #0048 #0080 #0098 .r3/y2 POK2 .r3/x2 POK2 .r3/y1 POK2 .r3/x1 POK2

( no BRK, run through to on-mouse )

@on-mouse

	;pointer_icn .pointer/sprite POK2

	#01 .color POK
	( matrix comparison )
	.Mouse/x DEI2 .r1/x1 PEK2 GTH2 .Mouse/x DEI2 .r1/x2 PEK2 LTH2 #0101 EQU2
	.Mouse/y DEI2 .r1/y1 PEK2 GTH2 .Mouse/y DEI2 .r1/y2 PEK2 LTH2 #0101 EQU2
	#0101 NEQ2 ,&draw1 JCN #02 .color POK ;hand_icn .pointer/sprite POK2
	&draw1 .r1/x1 PEK2 .r1/y1 PEK2 .r1/x2 PEK2 .r1/y2 PEK2 .color PEK ;line-rect JSR2
	
	#01 .color POK
	( 2-step comparison )
	.Mouse/x DEI2 .r2/x1 PEK2 GTH2 .Mouse/x DEI2 .r2/x2 PEK2 LTH2 #0101 NEQ2 ,&draw2 JCN
		.Mouse/y DEI2 .r2/y1 PEK2 GTH2 .Mouse/y DEI2 .r2/y2 PEK2 LTH2 #0101 NEQ2 ,&draw2 JCN
			#03 .color POK ;hand_icn .pointer/sprite POK2
	&draw2 .r2/x1 PEK2 .r2/y1 PEK2 .r2/x2 PEK2 .r2/y2 PEK2 .color PEK ;line-rect JSR2
	
	#01 .color POK
	( 4-step comparison )
	.Mouse/x DEI2 .r3/x1 PEK2 LTH2 ,&draw3 JCN
		.Mouse/x DEI2 .r3/x2 PEK2 GTH2 ,&draw3 JCN
			.Mouse/y DEI2 .r3/y1 PEK2 LTH2 ,&draw3 JCN
				.Mouse/y DEI2 .r3/y2 PEK2 GTH2 ,&draw3 JCN
					#02 .color POK ;hand_icn .pointer/sprite POK2
	&draw3 .r3/x1 PEK2 .r3/y1 PEK2 .r3/x2 PEK2 .r3/y2 PEK2 .color PEK ;line-rect JSR2

	;draw-cursor JSR2

BRK

@draw-cursor

	( clear last cursor )
	;clear_icn .Screen/addr DEO2
	.pointer/x PEK2 .Screen/x DEO2
	.pointer/y PEK2 .Screen/y DEO2
	#30 .Screen/color DEO

	( record pointer positions )
	.Mouse/x DEI2 .pointer/x POK2 .Mouse/y DEI2 .pointer/y POK2

	( draw new cursor )
	.pointer/sprite PEK2 .Screen/addr DEO2
	.pointer/x PEK2 .Screen/x DEO2
	.pointer/y PEK2 .Screen/y DEO2
	#31 .Screen/color DEO

RTN

@line-rect ( x1* y1* x2* y2* color -- )

	( load ) .color POK .rect/y2 POK2 .rect/x2 POK2 DUP2 .Screen/y DEO2 .rect/y1 POK2 DUP2 .Screen/x DEO2 .rect/x1 POK2
	&hor
		( incr ) .Screen/x DEI2 #0001 ADD2 .Screen/x DEO2
		( draw ) .rect/y1 PEK2 .Screen/y DEO2 .color PEK .Screen/color DEO
		( draw ) .rect/y2 PEK2 .Screen/y DEO2 .color PEK .Screen/color DEO
		.Screen/x DEI2 .rect/x2 PEK2 LTH2 ,&hor JCN
	.rect/y1 PEK2 .Screen/y DEO2
	&ver
		( draw ) .rect/x1 PEK2 .Screen/x DEO2 .color PEK .Screen/color DEO
		( draw ) .rect/x2 PEK2 .Screen/x DEO2 .color PEK .Screen/color DEO
		( incr ) .Screen/y DEI2 #0001 ADD2 .Screen/y DEO2
		.Screen/y DEI2 .rect/y2 PEK2 #0001 ADD2 LTH2 ,&ver JCN

RTN

@clear_icn   [ 0000 0000 0000 0000 ]
@pointer_icn [ 80c0 e0f0 f8e0 1000 ]
@hand_icn    [ 4040 4070 f8f8 f870 ]