Compare commits
	
		
			2 Commits
		
	
	
		
			03740d940b
			...
			10b99f3ffb
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 10b99f3ffb | |||
| 13ffbd4fa3 | 
							
								
								
									
										63
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,63 @@
 | 
				
			||||||
 | 
					# GIOWrap
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					An experimental wrapper package for the Gio immediate mode GUI, designed to reduce
 | 
				
			||||||
 | 
					boilerplate.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The basic concept is to define a `Context` type that contains the Gio variables
 | 
				
			||||||
 | 
					required for layout and drawing. `Context` contains a pointer to `app.Window` and
 | 
				
			||||||
 | 
					`ui.Ops` so that, once layout is complete, you can call `Context.Draw()` to draw
 | 
				
			||||||
 | 
					your objects in your window.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The following types and functions are defined in order to transform a `Context`
 | 
				
			||||||
 | 
					variable during layout:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```go
 | 
				
			||||||
 | 
					type Layout func(Context) Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Widget interface {
 | 
				
			||||||
 | 
						Layout(Context) Context
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func LayoutWithContext(ctx Context, ws ...Widget) Context {
 | 
				
			||||||
 | 
						for _, w := range ws {
 | 
				
			||||||
 | 
							ctx = w.Layout(ctx)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ctx
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type WidgetCombinator func(...Widget) Widget
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Enclosure interface {
 | 
				
			||||||
 | 
						Begin(Context) Context
 | 
				
			||||||
 | 
						End(Context) Context
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func Enclose(e Enclosure, w ...Widget) Widget { ... }
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The `Context` struct also contains a `map[string]interface{}` allowing arbitrary
 | 
				
			||||||
 | 
					data to be maintained. This can be used, for example, to define themes, and control
 | 
				
			||||||
 | 
					the operation of a `WidgetCombinator` during operation. For example>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```go
 | 
				
			||||||
 | 
					type fWidget struct { l Layout }
 | 
				
			||||||
 | 
					func NewfWidget(l layout) fWidget { return fWidget{ l: l } }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (f Flex) Flexible(v float32) Widget {
 | 
				
			||||||
 | 
						return NewfWidget(func(ctx Context) Context {
 | 
				
			||||||
 | 
							ctx.extra["Flexible"] = v
 | 
				
			||||||
 | 
							return ctx
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
						ctx = giowrap.LayoutWithContext(ctx,
 | 
				
			||||||
 | 
							myFlex(
 | 
				
			||||||
 | 
								w1,
 | 
				
			||||||
 | 
								giowrap.Flexible(0.5),
 | 
				
			||||||
 | 
								w2,
 | 
				
			||||||
 | 
								giowrap.Flexible(1),
 | 
				
			||||||
 | 
								w3,
 | 
				
			||||||
 | 
							))
 | 
				
			||||||
 | 
					...
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
| 
						 | 
					@ -57,9 +57,9 @@ func main() {
 | 
				
			||||||
						OuterInset(
 | 
											OuterInset(
 | 
				
			||||||
						    f(
 | 
											    f(
 | 
				
			||||||
							e1,
 | 
												e1,
 | 
				
			||||||
							f.Flexible(5),
 | 
												giowrap.Flexible(5),
 | 
				
			||||||
							InnerInset(e2),
 | 
												InnerInset(e2),
 | 
				
			||||||
							f.Flexible(10),
 | 
												giowrap.Flexible(10),
 | 
				
			||||||
							btn,
 | 
												btn,
 | 
				
			||||||
						)))
 | 
											)))
 | 
				
			||||||
					ctx.Draw()
 | 
										ctx.Draw()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										10
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								main.go
									
									
									
									
									
								
							| 
						 | 
					@ -51,11 +51,9 @@ func (ctx Context) Draw() {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Layout func(Context) Context
 | 
					type Layout func(Context) Context
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type LayoutCombinator func(...Layout) Layout
 | 
					func LayoutWithContext(ctx Context, ws ...Widget) Context {
 | 
				
			||||||
 | 
						for _, w := range ws {
 | 
				
			||||||
func LayoutWithContext(ctx Context, ls ...Widget) Context {
 | 
							ctx = w.Layout(ctx)
 | 
				
			||||||
	for _, l := range ls {
 | 
					 | 
				
			||||||
		ctx = l.Layout(ctx)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return ctx
 | 
						return ctx
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -151,7 +149,7 @@ type FlexChild struct {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Flex WidgetCombinator
 | 
					type Flex WidgetCombinator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (f Flex) Flexible(v float32) Widget {
 | 
					func Flexible(v float32) Widget {
 | 
				
			||||||
	return NewfWidget(func(ctx Context) Context {
 | 
						return NewfWidget(func(ctx Context) Context {
 | 
				
			||||||
		ctx.extra["Flexible"] = v
 | 
							ctx.extra["Flexible"] = v
 | 
				
			||||||
		return ctx
 | 
							return ctx
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user