...

Source file src/code.rocket9labs.com/tslocum/etk/box.go

Documentation: code.rocket9labs.com/tslocum/etk

     1  package etk
     2  
     3  import (
     4  	"image"
     5  	"image/color"
     6  	"sync"
     7  
     8  	"github.com/hajimehoshi/ebiten/v2"
     9  )
    10  
    11  // Box is a building block for other widgets. It may also be used as a spacer
    12  // in layout widgets.
    13  type Box struct {
    14  	rect       image.Rectangle
    15  	children   []Widget
    16  	background color.RGBA
    17  	visible    bool
    18  
    19  	sync.Mutex
    20  }
    21  
    22  // NewBox returns a new Box widget.
    23  func NewBox() *Box {
    24  	return &Box{
    25  		background: transparent,
    26  		visible:    true,
    27  	}
    28  }
    29  
    30  // Rect returns the position and size of the widget.
    31  func (b *Box) Rect() image.Rectangle {
    32  	b.Lock()
    33  	defer b.Unlock()
    34  
    35  	return b.rect
    36  }
    37  
    38  // SetRect sets the position and size of the widget.
    39  func (b *Box) SetRect(r image.Rectangle) {
    40  	b.Lock()
    41  	b.rect = r
    42  	b.Unlock()
    43  
    44  	for _, w := range b.children {
    45  		w.SetRect(r)
    46  	}
    47  }
    48  
    49  // Background returns the background color of the widget.
    50  func (b *Box) Background() color.RGBA {
    51  	b.Lock()
    52  	defer b.Unlock()
    53  
    54  	return b.background
    55  }
    56  
    57  // SetBackground sets the background color of the widget.
    58  func (b *Box) SetBackground(background color.RGBA) {
    59  	b.Lock()
    60  	defer b.Unlock()
    61  
    62  	b.background = background
    63  }
    64  
    65  // Focus returns the focus state of the widget.
    66  func (b *Box) Focus() bool {
    67  	return false
    68  }
    69  
    70  // SetFocus sets the focus state of the widget.
    71  func (b *Box) SetFocus(focus bool) bool {
    72  	return false
    73  }
    74  
    75  // Visible returns the visibility of the widget.
    76  func (b *Box) Visible() bool {
    77  	return b.visible
    78  }
    79  
    80  // SetVisible sets the visibility of the widget.
    81  func (b *Box) SetVisible(visible bool) {
    82  	b.visible = visible
    83  }
    84  
    85  // Cursor returns the cursor shape shown when a mouse cursor hovers over the
    86  // widget, or -1 to let widgets beneath determine the cursor shape.
    87  func (b *Box) Cursor() ebiten.CursorShapeType {
    88  	return -1
    89  }
    90  
    91  // HandleKeyboard is called when a keyboard event occurs.
    92  func (b *Box) HandleKeyboard(key ebiten.Key, r rune) (handled bool, err error) {
    93  	return false, nil
    94  }
    95  
    96  // HandleMouse is called when a mouse event occurs. Only mouse events that
    97  // are on top of the widget are passed to the widget.
    98  func (b *Box) HandleMouse(cursor image.Point, pressed bool, clicked bool) (handled bool, err error) {
    99  	return false, nil
   100  }
   101  
   102  // Draw draws the widget on the screen.
   103  func (b *Box) Draw(screen *ebiten.Image) error {
   104  	return nil
   105  }
   106  
   107  // Children returns the children of the widget. Children are drawn in the
   108  // order they are returned. Keyboard and mouse events are passed to children
   109  // in reverse order.
   110  func (b *Box) Children() []Widget {
   111  	b.Lock()
   112  	defer b.Unlock()
   113  
   114  	return b.children
   115  }
   116  
   117  // AddChild adds a child to the widget.
   118  func (b *Box) AddChild(w ...Widget) {
   119  	b.Lock()
   120  	defer b.Unlock()
   121  
   122  	b.children = append(b.children, w...)
   123  }
   124  
   125  // Clear removes all children from the widget.
   126  func (b *Box) Clear() {
   127  	b.Lock()
   128  	defer b.Unlock()
   129  
   130  	b.children = b.children[:0]
   131  }
   132  
   133  var _ Widget = &Box{}
   134  

View as plain text