Skip to content

Commit

Permalink
Added Image and renamed the BrushType constants respectively.
Browse files Browse the repository at this point in the history
  • Loading branch information
andlabs committed Aug 21, 2018
1 parent 3983f63 commit 0a17df9
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 9 deletions.
14 changes: 7 additions & 7 deletions draw.go
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,10 @@ type DrawContext struct {
// TODO disclaimer
type BrushType int
const (
Solid BrushType = iota
LinearGradient
RadialGradient
Image // presently unimplemented
BrushTypeSolid BrushType = iota
BrushTypeLinearGradient
BrushTypeRadialGradient
BrushTypeImage // presently unimplemented
)

// TODO
Expand Down Expand Up @@ -270,12 +270,12 @@ func (b *Brush) toC() *C.uiDrawBrush {
cb := C.newBrush()
cb.Type = C.uiDrawBrushType(b.Type)
switch b.Type {
case Solid:
case BrushTypeSolid:
cb.R = C.double(b.R)
cb.G = C.double(b.G)
cb.B = C.double(b.B)
cb.A = C.double(b.A)
case LinearGradient, RadialGradient:
case BrushTypeLinearGradient, BrushTypeRadialGradient:
cb.X0 = C.double(b.X0)
cb.Y0 = C.double(b.Y0)
cb.X1 = C.double(b.X1)
Expand All @@ -291,7 +291,7 @@ func (b *Brush) toC() *C.uiDrawBrush {
C.double(s.B),
C.double(s.A))
}
case Image:
case BrushTypeImage:
panic("unimplemented")
default:
panic("invalid brush type in Brush.toC()")
Expand Down
58 changes: 58 additions & 0 deletions image.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// 21 august 2018

package ui

import (
"image"
)

// #include <stdlib.h>
// #include "ui.h"
import "C"

// Image stores an image for display on screen.
//
// Images are built from one or more representations, each with the
// same aspect ratio but a different pixel size. Package ui
// automatically selects the most appropriate representation for
// drawing the image when it comes time to draw the image; what
// this means depends on the pixel density of the target context.
// Therefore, one can use Image to draw higher-detailed images on
// higher-density displays. The typical use cases are either:
//
// - have just a single representation, at which point all screens
// use the same image, and thus uiImage acts like a simple
// bitmap image, or
// - have two images, one at normal resolution and one at 2x
// resolution; this matches the current expectations of some
// desktop systems at the time of writing (mid-2018)
//
// Image allocates OS resources; you must explicitly free an Image
// when you are finished with it.
type Image struct {
i *C.uiImage
}

// NewImage creates a new Image with the given width and
// height. This width and height should be the size in points of the
// image in the device-independent case; typically this is the 1x size.
func NewImage(width, height float64) *Image {
return &Image{
i: C.uiNewImage(C.double(width), C.double(height)),
}
}

// Free frees the Image.
func (i *Image) Free() {
C.uiFreeImage(i.i)
}

// Append adds the given image as a representation of the Image.
func (i *Image) Append(img *image.NRGBA) {
cpix := C.CBytes(img.Pix)
defer C.free(cpix)
C.uiImageAppend(i.i, cpix,
C.int(img.Rect.Dx()),
C.int(img.Rect.Dy()),
C.int(img.Stride))
}
4 changes: 2 additions & 2 deletions zz_histogram.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ const (
// helper to quickly set a brush color
func mkSolidBrush(color uint32, alpha float64) *ui.Brush {
brush := new(ui.Brush)
brush.Type = ui.Solid
brush.Type = ui.BrushTypeSolid
component := uint8((color >> 16) & 0xFF)
brush.R = float64(component) / 255
component = uint8((color >> 8) & 0xFF)
Expand Down Expand Up @@ -125,7 +125,7 @@ func (areaHandler) Draw(a *ui.Area, p *ui.AreaDrawParams) {

// now get the color for the graph itself and set up the brush
graphR, graphG, graphB, graphA := colorButton.Color()
brush.Type = ui.Solid
brush.Type = ui.BrushTypeSolid
brush.R = graphR
brush.G = graphG
brush.B = graphB
Expand Down

0 comments on commit 0a17df9

Please sign in to comment.