| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- package giu
- import (
- "github.com/AllenDang/imgui-go"
- )
- var _ Widget = &ListClipperWrapper{}
- // ListClipperWrapper is a ImGuiListClipper implementation.
- // it can be used to diplay a large, vertical list of items and
- // avoid rendering them.
- type ListClipperWrapper struct {
- layout Layout
- }
- // ListClipper creates list clipper.
- func ListClipper() *ListClipperWrapper {
- return &ListClipperWrapper{}
- }
- // Layout sets layout for list clipper.
- func (l *ListClipperWrapper) Layout(layout ...Widget) *ListClipperWrapper {
- l.layout = layout
- return l
- }
- // Build implements widget interface.
- func (l *ListClipperWrapper) Build() {
- // read all the layout widgets and (eventually) split nested layouts
- var layout Layout
- l.layout.Range(func(w Widget) {
- layout = append(layout, w)
- })
- clipper := imgui.NewListClipper()
- defer clipper.Delete()
- clipper.Begin(len(layout))
- for clipper.Step() {
- for i := clipper.DisplayStart(); i < clipper.DisplayEnd(); i++ {
- layout[i].Build()
- }
- }
- clipper.End()
- }
|