Skip to content

Commit

Permalink
imageview: Allow adding image.Images
Browse files Browse the repository at this point in the history
  • Loading branch information
roblillack committed May 27, 2024
1 parent 0fbdd13 commit 101ca94
Show file tree
Hide file tree
Showing 3 changed files with 87 additions and 30 deletions.
35 changes: 32 additions & 3 deletions imageview.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,12 @@ package gocoa
// #cgo CFLAGS: -x objective-c
// #cgo LDFLAGS: -framework Cocoa
// #import "imageview.h"
// #include <stdlib.h>
import "C"
import "fmt"
import (
"fmt"
"image"
)

// Represents an ImageView control that can display images.
type ImageView struct {
Expand Down Expand Up @@ -45,17 +49,42 @@ const (

var imageViews []*ImageView

func NewImageView(x int, y int, width int, height int, url string) *ImageView {
func NewImageViewWithContentsOfURL(x int, y int, width int, height int, url string) *ImageView {
imageViewID := len(imageViews)
imageViewPtr := C.ImageView_NewWithContentsOfURL(C.int(imageViewID), C.int(x), C.int(y), C.int(width), C.int(height), C.CString(url))

img := &ImageView{
imageViewPtr: imageViewPtr,
}
imageViews = append(imageViews, img)
return img
}

func NewImageView(x int, y int, width int, height int) *ImageView {
imageViewID := len(imageViews)
imageViewPtr := C.ImageView_New(C.int(imageViewID), C.int(x), C.int(y), C.int(width), C.int(height), C.CString(url))
imageViewPtr := C.ImageView_New(C.int(imageViewID), C.int(x), C.int(y), C.int(width), C.int(height))

img := &ImageView{
imageViewPtr: imageViewPtr,
}
imageViews = append(imageViews, img)

return img
}

func NewImageViewWithImage(x int, y int, width int, height int, image *image.RGBA) *ImageView {
img := NewImageView(x, y, width, height)
img.SetImage(image)
return img
}

func (imageView *ImageView) SetImage(img *image.RGBA) {
bytes := C.CBytes(img.Pix)
nsImage := C.Image_NewWithRGBA(C.int(img.Bounds().Dx()), C.int(img.Bounds().Dy()), (*C.uchar)(bytes))
C.ImageView_SetImage(imageView.imageViewPtr, nsImage)
C.free(bytes)
}

func (imageView *ImageView) SetEditable(editable bool) {
if editable {
C.ImageView_SetEditable(imageView.imageViewPtr, 1)
Expand Down
14 changes: 9 additions & 5 deletions imageview.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
#import "image.h"
#import <Cocoa/Cocoa.h>

// typedef void (*callback)(void);
typedef void *ImageViewPtr;

typedef void* ImageViewPtr;

ImageViewPtr ImageView_New(int goImageViewID, int x, int y, int w, int h, const char* url);
ImageViewPtr ImageView_New(int goImageViewID, int x, int y, int w, int h);
ImageViewPtr ImageView_NewWithContentsOfURL(int goImageViewID, int x, int y,
int w, int h, const char *url);
void ImageView_SetAnimates(ImageViewPtr imageViewPtr, int animates);
void ImageView_SetContentTintColor(ImageViewPtr imageViewPtr, int r, int g, int b, int a);
void ImageView_SetContentTintColor(ImageViewPtr imageViewPtr, int r, int g,
int b, int a);
void ImageView_SetEditable(ImageViewPtr imageViewPtr, int editable);
void ImageView_SetFrameStyle(ImageViewPtr imageViewPtr, int frameStyle);
void ImageView_SetImageAlignment(ImageViewPtr imageViewPtr, int imageAlignment);
void ImageView_SetImageScaling(ImageViewPtr imageViewPtr, int imageScaling);
void ImageView_Remove(ImageViewPtr imageViewPtr);

void ImageView_SetImage(ImageViewPtr imageViewPtr, ImagePtr imagePtr);
68 changes: 46 additions & 22 deletions imageview.m
Original file line number Diff line number Diff line change
@@ -1,46 +1,70 @@
#import "imageview.h"
#include "_cgo_export.h"
#import "image.h"

ButtonPtr ImageView_New(int goButtonID, int x, int y, int w, int h, const char* url) {
NSImage *theImage = [[NSImage alloc] initWithContentsOfURL:[NSURL URLWithString:[NSString stringWithUTF8String:url]]];
ImageViewPtr ImageView_New(int goButtonID, int x, int y, int w, int h) {
id nsImageView =
[[[NSImageView alloc] initWithFrame:NSMakeRect(x, y, w, h)] autorelease];

id nsImageView = [[[NSImageView alloc] initWithFrame:NSMakeRect(x, y, w, h)] autorelease];
[nsImageView setImage:theImage];
return (ImageViewPtr)nsImageView;
}

ImageViewPtr ImageView_NewWithContentsOfURL(int goButtonID, int x, int y, int w,
int h, const char *url) {
NSImage *theImage = [[NSImage alloc]
initWithContentsOfURL:[NSURL
URLWithString:[NSString
stringWithUTF8String:url]]];

id nsImageView =
[[[NSImageView alloc] initWithFrame:NSMakeRect(x, y, w, h)] autorelease];
[nsImageView setImage:theImage];

return (ImageViewPtr)nsImageView;
return (ImageViewPtr)nsImageView;
}

void ImageView_SetFrameStyle(ImageViewPtr imageViewPtr, int frameStyle) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setImageFrameStyle:frameStyle];
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setImageFrameStyle:frameStyle];
}

void ImageView_SetImageAlignment(ImageViewPtr imageViewPtr, int imageAlignment) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setImageAlignment:imageAlignment];
void ImageView_SetImageAlignment(ImageViewPtr imageViewPtr,
int imageAlignment) {
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setImageAlignment:imageAlignment];
}

void ImageView_SetImageScaling(ImageViewPtr imageViewPtr, int imageScaling) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setImageScaling:imageScaling];
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setImageScaling:imageScaling];
}

void ImageView_SetAnimates(ImageViewPtr imageViewPtr, int animates) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setAnimates:animates];
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setAnimates:animates];
}

void ImageView_SetContentTintColor(ImageViewPtr imageViewPtr, int r, int g, int b, int a) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setContentTintColor:[NSColor colorWithCalibratedRed:r/255.f green:g/255.f blue:b/255.f alpha:a/255.f]];
void ImageView_SetContentTintColor(ImageViewPtr imageViewPtr, int r, int g,
int b, int a) {
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setContentTintColor:[NSColor colorWithCalibratedRed:r / 255.f
green:g / 255.f
blue:b / 255.f
alpha:a / 255.f]];
}

void ImageView_SetEditable(ImageViewPtr imageViewPtr, int editable) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView setEditable:editable];
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setEditable:editable];
}

void ImageView_Remove(ImageViewPtr imageViewPtr) {
NSImageView* nsImageView = (NSImageView*)imageViewPtr;
[nsImageView removeFromSuperview];
}
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView removeFromSuperview];
}

void ImageView_SetImage(ImageViewPtr imageViewPtr, ImagePtr imagePtr) {
NSImage *theImage = (NSImage *)imagePtr;
NSImageView *nsImageView = (NSImageView *)imageViewPtr;
[nsImageView setImage:theImage];
}

0 comments on commit 101ca94

Please sign in to comment.