home *** CD-ROM | disk | FTP | other *** search
- ''
- '' $Id: EmBClass.bas,v 1.2 1994/03/16 12:12:10 alex Rel $
- ''
- '' Implementation of a BOOPSI private image class
- ''
- '' Derived from Commodore-Amiga example (c) Copyright 1992 Commodore-Amiga, Inc.
- ''
-
- CONST LINEWIDTH = 1 ' not variable, not fancy
-
- ' fill region centered in a box
- SUB interiorBox(BYVAL rp&, BYVAL l, BYVAL t, BYVAL w, BYVAL h, _
- BYVAL xw, BYVAL yw, BYVAL pen)
- IF w > (xw << 1) AND h > (yw << 1) THEN
- POKEB rp& + RastPortMask, NOT 0
- BNDRYOFF rp&
- SetAfPt rp&, NULL&, 0
- SetDrMd rp&, JAM2&
- SetAPen rp&, pen
- RectFill rp&, l + xw, t + yw, l + w - 1 - xw, t + h - 1 - yw
- END IF
- END SUB
-
- SUB embossedBoxTrim(BYVAL rp&, BYVAL l, BYVAL t, BYVAL w, BYVAL h, _
- BYVAL hthick, BYVAL vthick, BYVAL ulpen, BYVAL lrpen)
- LOCAL bottom, right
-
- bottom = t + h - 1
- right = l + w - 1
-
- ' upper right edges
- SetAPen rp&, ulpen
-
- Move rp&, l, bottom - 1
- Draw rp&, l, t
- Draw rp&, right - 1, t
-
- ' lower right edges
- SetAPen rp&, lrpen
-
- Move rp&, right, t + 1
- Draw rp&, right, bottom
- Draw rp&, l + 1, bottom
- END SUB
-
- FUNCTION drawEmB&(BYVAL cl&, BYVAL o&, BYVAL msg&)
- LOCAL pens&, state&
- LOCAL l, t, w, h
- LOCAL ulpen, lrpen, fillpen
-
- ' let's be sure that we were passed a DrawInfo
- IF PEEKL(msg& + impDrawimp_DrInfo) THEN
- pens& = PEEKL(PEEKL(msg& + impDrawimp_DrInfo) + dri_Pens)
- ELSE
- pens& = NULL&
- END IF
-
- l = PEEKW(o& + ImageLeftEdge) + PEEKW(msg& + impDrawimp_Offset)
- t = PEEKW(o& + ImageTopEdge) + PEEKW(msg& + impDrawimp_Offset + 2)
- w = PEEKW(o& + ImageWidth)
- h = PEEKW(o& + ImageHeight)
-
- state& = PEEKL(msg& + imp_State)
- SELECT CASE state&
- CASE IDS_SELECTED&, IDS_INACTIVESELECTED&
- IF pens& <> NULL& THEN
- ulpen = PEEKW(pens& + SHADOWPEN& * 2)
- lrpen = PEEKW(pens& + SHINEPEN& * 2)
- fillpen = PEEKW(pens& + FILLPEN& * 2)
- ELSE
- ulpen = 2
- lrpen = 1
- fillpen = 3
- END IF
-
- CASE REMAINDER
- IF pens& <> NULL& THEN
- ulpen = PEEKW(pens& + SHINEPEN& * 2)
- lrpen = PEEKW(pens& + SHADOWPEN& * 2)
- fillpen = PEEKW(pens& + BACKGROUNDPEN& * 2)
- ELSE
- ulpen = 2
- lrpen = 1
- fillpen = 3
- END IF
- END SELECT
-
- embossedBoxTrim PEEKL(msg& + impDrawimp_RPort), l, t, w, h, _
- LINEWIDTH, LINEWIDTH, ulpen, lrpen
-
- interiorBox PEEKL(msg& + impDrawimp_RPort), l, t, w, h, _
- LINEWIDTH, LINEWIDTH, fillpen
- drawEmB& = TRUE&
- END FUNCTION
-
- '
- ' Class Despatcher
- '
- FUNCTION despatchEmBClass&(BYVAL cl&, BYVAL o&, BYVAL msg&)
- LOCAL methodID&
-
- methodID& = PEEKL(msg& + MsgMethodID)
- SELECT CASE methodID&
- CASE IM_DRAW& ' draw with state
- despatchEmBClass& = drawEmB&(cl&, o&, msg&)
-
- CASE REMAINDER
- 'use superclass defaults for everything else
-
- despatchEmBClass& = DoSuperMethodA&(cl&, o&, msg&)
- END SELECT
- END FUNCTION
-
- '
- ' Private class initialization
- '
- FUNCTION initEmBClass&
- STATIC cl&
-
- cl& = MakeClass&(NULL&, SADD("imageclass" + CHR$(0)), NULL&, 0, 0)
- IF cl& <> NULL& THEN InitHook cl& + cl_Dispatcher, VARPTRS(despatchEmBClass&)
- initEmBClass& = cl&
- END FUNCTION
-
- '
- ' Private class termination
- '
- FUNCTION freeEmBClass&(BYVAL cl&)
- freeEmBClass& = FreeClass&(cl&)
- END FUNCTION
-