diff options
| author | Pietro Gagliardi <[email protected]> | 2018-08-26 14:09:49 -0400 |
|---|---|---|
| committer | Pietro Gagliardi <[email protected]> | 2018-08-26 14:09:49 -0400 |
| commit | d8200a9f043458b900911861277216e17058effe (patch) | |
| tree | cbd01048480ccf64c3cbb24755c80b1aaeb0fa74 /image.go | |
| parent | d0fe74d60382dd27dec59d286ca5098ee5dceb6c (diff) | |
Migrated image.go, and migrated draw.go as-is. It needs some refactoring.
Diffstat (limited to 'image.go')
| -rw-r--r-- | image.go | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/image.go b/image.go new file mode 100644 index 0000000..d36a401 --- /dev/null +++ b/image.go @@ -0,0 +1,57 @@ +// 21 august 2018 + +package ui + +import ( + "image" +) + +// #include "pkgui.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)) +} |
