ops.go raw

   1  // SPDX-License-Identifier: Unlicense OR MIT
   2  
   3  package opconst
   4  
   5  type OpType byte
   6  
   7  // Start at a high number for easier debugging.
   8  const firstOpIndex = 200
   9  
  10  const (
  11  	TypeMacro OpType = iota + firstOpIndex
  12  	TypeCall
  13  	TypeDefer
  14  	TypeTransform
  15  	TypeInvalidate
  16  	TypeImage
  17  	TypePaint
  18  	TypeColor
  19  	TypeLinearGradient
  20  	TypeArea
  21  	TypePointerInput
  22  	TypePass
  23  	TypeClipboardRead
  24  	TypeClipboardWrite
  25  	TypeKeyInput
  26  	TypeKeyFocus
  27  	TypeKeySoftKeyboard
  28  	TypeSave
  29  	TypeLoad
  30  	TypeAux
  31  	TypeClip
  32  	TypeProfile
  33  	TypeCursor
  34  	TypePath
  35  	TypeStroke
  36  )
  37  
  38  const (
  39  	TypeMacroLen           = 1 + 4 + 4
  40  	TypeCallLen            = 1 + 4 + 4
  41  	TypeDeferLen           = 1
  42  	TypeTransformLen       = 1 + 4*6
  43  	TypeRedrawLen          = 1 + 8
  44  	TypeImageLen           = 1
  45  	TypePaintLen           = 1
  46  	TypeColorLen           = 1 + 4
  47  	TypeLinearGradientLen  = 1 + 8*2 + 4*2
  48  	TypeAreaLen            = 1 + 1 + 4*4
  49  	TypePointerInputLen    = 1 + 1 + 1 + 2*4 + 2*4
  50  	TypePassLen            = 1 + 1
  51  	TypeClipboardReadLen   = 1
  52  	TypeClipboardWriteLen  = 1
  53  	TypeKeyInputLen        = 1
  54  	TypeKeyFocusLen        = 1
  55  	TypeKeySoftKeyboardLen = 1 + 1
  56  	TypeSaveLen            = 1 + 4
  57  	TypeLoadLen            = 1 + 1 + 4
  58  	TypeAuxLen             = 1
  59  	TypeClipLen            = 1 + 4*4 + 1
  60  	TypeProfileLen         = 1
  61  	TypeCursorLen          = 1 + 1
  62  	TypePathLen            = 1
  63  	TypeStrokeLen          = 1 + 4
  64  )
  65  
  66  // StateMask is a bitmask of state types a load operation
  67  // should restore.
  68  type StateMask uint8
  69  
  70  const (
  71  	TransformState StateMask = 1 << iota
  72  
  73  	AllState = ^StateMask(0)
  74  )
  75  
  76  // InitialStateID is the ID for saving and loading
  77  // the initial operation state.
  78  const InitialStateID = 0
  79  
  80  func (t OpType) Size() int {
  81  	return [...]int{
  82  		TypeMacroLen,
  83  		TypeCallLen,
  84  		TypeDeferLen,
  85  		TypeTransformLen,
  86  		TypeRedrawLen,
  87  		TypeImageLen,
  88  		TypePaintLen,
  89  		TypeColorLen,
  90  		TypeLinearGradientLen,
  91  		TypeAreaLen,
  92  		TypePointerInputLen,
  93  		TypePassLen,
  94  		TypeClipboardReadLen,
  95  		TypeClipboardWriteLen,
  96  		TypeKeyInputLen,
  97  		TypeKeyFocusLen,
  98  		TypeKeySoftKeyboardLen,
  99  		TypeSaveLen,
 100  		TypeLoadLen,
 101  		TypeAuxLen,
 102  		TypeClipLen,
 103  		TypeProfileLen,
 104  		TypeCursorLen,
 105  		TypePathLen,
 106  		TypeStrokeLen,
 107  	}[t-firstOpIndex]
 108  }
 109  
 110  func (t OpType) NumRefs() int {
 111  	switch t {
 112  	case TypeKeyInput, TypeKeyFocus, TypePointerInput, TypeProfile, TypeCall, TypeClipboardRead, TypeClipboardWrite, TypeCursor:
 113  		return 1
 114  	case TypeImage:
 115  		return 2
 116  	default:
 117  		return 0
 118  	}
 119  }
 120