diff options
| author | Pietro Gagliardi <[email protected]> | 2018-08-19 22:19:12 -0400 | 
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2018-08-19 22:19:12 -0400 | 
| commit | a0354058ecd8ee9bd88d305162b3d2865ef925cc (patch) | |
| tree | 10e2caf3df65f062bed51fe935a91dd2bd77619e | |
| parent | a0458f7593be62d331ba46aa1b59b87ac64bf540 (diff) | |
Added ColorButton. Will fill in the rest of the histogram example later.
| -rw-r--r-- | colorbutton.go | 83 | ||||
| -rw-r--r-- | zz_histogram.go | 19 | 
2 files changed, 93 insertions, 9 deletions
diff --git a/colorbutton.go b/colorbutton.go new file mode 100644 index 0000000..0129a55 --- /dev/null +++ b/colorbutton.go @@ -0,0 +1,83 @@ +// 12 december 2015 + +package ui + +import ( +	"unsafe" +) + +// #include <stdlib.h> +// #include "ui.h" +// #include "util.h" +// extern void doColorButtonOnChanged(uiColorButton *, void *); +// // see golang/go#19835 +// typedef void (*colorButtonCallback)(uiColorButton *, void *); +// typedef struct pkguiCColor pkguiCColor; +// struct pkguiCColor { double *r; double *g; double *b; double *a; }; +// static inline pkguiCColor pkguiNewCColor(void) +// { +// 	pkguiCColor c; +//  +// 	c.r = (double *) pkguiAlloc(4 * sizeof (double)); +// 	c.g = c.r + 1; +// 	c.b = c.g + 1; +// 	c.a = c.b + 1; +// 	return c; +// } +// static inline void pkguiFreeCColor(pkguiCColor c) +// { +// 	free(c.r); +// } +import "C" + +// ColorButton is a Control that represents a button that the user can +// click to select a color. +type ColorButton struct { +	ControlBase +	b	*C.uiColorButton +	onChanged		func(*ColorButton) +} + +// NewColorButton creates a new ColorButton. +func NewColorButton() *ColorButton { +	b := new(ColorButton) + +	b.b = C.uiNewColorButton() + +	C.uiColorButtonOnChanged(b.b, C.colorButtonCallback(C.doColorButtonOnChanged), nil) + +	b.ControlBase = NewControlBase(b, uintptr(unsafe.Pointer(b.b))) +	return b +} + +// Color returns the color currently selected in the ColorButton. +// Colors are not alpha-premultiplied. +// TODO rename b or bl +func (b *ColorButton) Color() (r, g, bl, a float64) { +	c := C.pkguiNewCColor() +	defer C.pkguiFreeCColor(c) +	C.uiColorButtonColor(b.b, c.r, c.g, c.b, c.a) +	return float64(*(c.r)), float64(*(c.g)), float64(*(c.b)), float64(*(c.a)) +} + +// SetColor sets the currently selected color in the ColorButton. +// Colors are not alpha-premultiplied. +// TODO rename b or bl +func (b *ColorButton) SetColor(r, g, bl, a float64) { +	C.uiColorButtonSetColor(b.b, C.double(r), C.double(g), C.double(bl), C.double(a)) +} + +// OnChanged registers f to be run when the user changes the +// currently selected color in the ColorButton. Only one function +// can be registered at a time. +func (b *ColorButton) OnChanged(f func(*ColorButton)) { +	b.onChanged = f +} + +//export doColorButtonOnChanged +func doColorButtonOnChanged(bb *C.uiColorButton, data unsafe.Pointer) { +	b := ControlFromLibui(uintptr(unsafe.Pointer(bb))).(*ColorButton) +	if b.onChanged != nil { +		b.onChanged(b) +	} +} diff --git a/zz_histogram.go b/zz_histogram.go index bf26358..a783dbd 100644 --- a/zz_histogram.go +++ b/zz_histogram.go @@ -11,6 +11,8 @@ import (  	"github.com/andlabs/ui"  ) +var colorButton *ui.ColorButton +  var datapoints [10]*ui.Spinbox  // some metrics @@ -234,18 +236,17 @@ func setupUI() {  		vbox.Append(datapoints[i], false)  	} -/* -	colorButton = uiNewColorButton(); +	colorButton = ui.NewColorButton()  	// TODO inline these -	setSolidBrush(&brush, colorDodgerBlue, 1.0); -	uiColorButtonSetColor(colorButton, -		brush.R, +	brush := mkSolidBrush(colorDodgerBlue, 1.0); +	colorButton.SetColor(brush.R,  		brush.G,  		brush.B, -		brush.A); -	uiColorButtonOnChanged(colorButton, onColorChanged, NULL); -	uiBoxAppend(vbox, uiControl(colorButton), 0); -*/ +		brush.A) +	colorButton.OnChanged(func(*ui.ColorButton) { +		histogram.QueueRedrawAll() +	}) +	vbox.Append(colorButton, false)  	hbox.Append(histogram, true)  | 
