737 lines
21 KiB
C
737 lines
21 KiB
C
/* framebuffer_demo.c generated by valac 0.56.18, the Vala compiler
|
|
* generated from framebuffer_demo.vala, do not modify */
|
|
|
|
#include <glib-object.h>
|
|
#include <glib.h>
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <sys/types.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <gobject/gvaluecollector.h>
|
|
|
|
#define FRAMEBUFFER_DEMO_WIDTH 720
|
|
#define FRAMEBUFFER_DEMO_HEIGHT 720
|
|
#define FRAMEBUFFER_DEMO_BPP 4
|
|
#if !defined(VALA_STRICT_C)
|
|
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
|
|
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
|
|
#elif defined(__clang__) && (__clang_major__ >= 16)
|
|
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
|
|
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
|
|
#endif
|
|
#endif
|
|
#if !defined(VALA_EXTERN)
|
|
#if defined(_MSC_VER)
|
|
#define VALA_EXTERN __declspec(dllexport) extern
|
|
#elif __GNUC__ >= 4
|
|
#define VALA_EXTERN __attribute__((visibility("default"))) extern
|
|
#else
|
|
#define VALA_EXTERN extern
|
|
#endif
|
|
#endif
|
|
|
|
#define TYPE_FRAMEBUFFER_DEMO (framebuffer_demo_get_type ())
|
|
#define FRAMEBUFFER_DEMO(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TYPE_FRAMEBUFFER_DEMO, FramebufferDemo))
|
|
#define FRAMEBUFFER_DEMO_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TYPE_FRAMEBUFFER_DEMO, FramebufferDemoClass))
|
|
#define IS_FRAMEBUFFER_DEMO(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TYPE_FRAMEBUFFER_DEMO))
|
|
#define IS_FRAMEBUFFER_DEMO_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TYPE_FRAMEBUFFER_DEMO))
|
|
#define FRAMEBUFFER_DEMO_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TYPE_FRAMEBUFFER_DEMO, FramebufferDemoClass))
|
|
|
|
typedef struct _FramebufferDemo FramebufferDemo;
|
|
typedef struct _FramebufferDemoClass FramebufferDemoClass;
|
|
typedef struct _FramebufferDemoPrivate FramebufferDemoPrivate;
|
|
#define _framebuffer_demo_unref0(var) ((var == NULL) ? NULL : (var = (framebuffer_demo_unref (var), NULL)))
|
|
#define _g_string_free0(var) ((var == NULL) ? NULL : (var = (g_string_free (var, TRUE), NULL)))
|
|
#define _g_free0(var) (var = (g_free (var), NULL))
|
|
typedef struct _ParamSpecFramebufferDemo ParamSpecFramebufferDemo;
|
|
|
|
struct _FramebufferDemo {
|
|
GTypeInstance parent_instance;
|
|
volatile int ref_count;
|
|
FramebufferDemoPrivate * priv;
|
|
};
|
|
|
|
struct _FramebufferDemoClass {
|
|
GTypeClass parent_class;
|
|
void (*finalize) (FramebufferDemo *self);
|
|
};
|
|
|
|
struct _FramebufferDemoPrivate {
|
|
gint fb_fd;
|
|
guint8* framebuffer;
|
|
gint framebuffer_length1;
|
|
gint _framebuffer_size_;
|
|
};
|
|
|
|
struct _ParamSpecFramebufferDemo {
|
|
GParamSpec parent_instance;
|
|
};
|
|
|
|
static gint FramebufferDemo_private_offset;
|
|
static gpointer framebuffer_demo_parent_class = NULL;
|
|
|
|
VALA_EXTERN gpointer framebuffer_demo_ref (gpointer instance);
|
|
VALA_EXTERN void framebuffer_demo_unref (gpointer instance);
|
|
VALA_EXTERN GParamSpec* param_spec_framebuffer_demo (const gchar* name,
|
|
const gchar* nick,
|
|
const gchar* blurb,
|
|
GType object_type,
|
|
GParamFlags flags);
|
|
VALA_EXTERN void value_set_framebuffer_demo (GValue* value,
|
|
gpointer v_object);
|
|
VALA_EXTERN void value_take_framebuffer_demo (GValue* value,
|
|
gpointer v_object);
|
|
VALA_EXTERN gpointer value_get_framebuffer_demo (const GValue* value);
|
|
VALA_EXTERN GType framebuffer_demo_get_type (void) G_GNUC_CONST ;
|
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (FramebufferDemo, framebuffer_demo_unref)
|
|
VALA_EXTERN FramebufferDemo* framebuffer_demo_new (void);
|
|
VALA_EXTERN FramebufferDemo* framebuffer_demo_construct (GType object_type);
|
|
VALA_EXTERN void framebuffer_demo_set_pixel (FramebufferDemo* self,
|
|
gint x,
|
|
gint y,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a);
|
|
VALA_EXTERN void framebuffer_demo_fill_screen (FramebufferDemo* self,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a);
|
|
VALA_EXTERN void framebuffer_demo_draw_rectangle (FramebufferDemo* self,
|
|
gint x,
|
|
gint y,
|
|
gint w,
|
|
gint h,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a);
|
|
VALA_EXTERN void framebuffer_demo_draw_circle (FramebufferDemo* self,
|
|
gint cx,
|
|
gint cy,
|
|
gint radius,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a);
|
|
VALA_EXTERN void framebuffer_demo_update (FramebufferDemo* self);
|
|
VALA_EXTERN gboolean framebuffer_demo_is_open (FramebufferDemo* self);
|
|
static gint framebuffer_demo_main (gchar** args,
|
|
gint args_length1);
|
|
static void framebuffer_demo_finalize (FramebufferDemo * obj);
|
|
static GType framebuffer_demo_get_type_once (void);
|
|
|
|
static inline gpointer
|
|
framebuffer_demo_get_instance_private (FramebufferDemo* self)
|
|
{
|
|
return G_STRUCT_MEMBER_P (self, FramebufferDemo_private_offset);
|
|
}
|
|
|
|
FramebufferDemo*
|
|
framebuffer_demo_construct (GType object_type)
|
|
{
|
|
FramebufferDemo* self = NULL;
|
|
guint8* _tmp2_;
|
|
FILE* _tmp3_;
|
|
FILE* _tmp4_;
|
|
self = (FramebufferDemo*) g_type_create_instance (object_type);
|
|
self->priv->fb_fd = open ("/dev/fb0", O_RDWR, (mode_t) 0);
|
|
if (self->priv->fb_fd < 0) {
|
|
FILE* _tmp0_;
|
|
FILE* _tmp1_;
|
|
_tmp0_ = stderr;
|
|
fprintf (_tmp0_, "Error: Cannot open framebuffer device /dev/fb0\n");
|
|
_tmp1_ = stderr;
|
|
fprintf (_tmp1_, "Make sure you have permissions (try running with sudo)\n");
|
|
return self;
|
|
}
|
|
_tmp2_ = g_new0 (guint8, (FRAMEBUFFER_DEMO_WIDTH * FRAMEBUFFER_DEMO_HEIGHT) * FRAMEBUFFER_DEMO_BPP);
|
|
self->priv->framebuffer = (g_free (self->priv->framebuffer), NULL);
|
|
self->priv->framebuffer = _tmp2_;
|
|
self->priv->framebuffer_length1 = (FRAMEBUFFER_DEMO_WIDTH * FRAMEBUFFER_DEMO_HEIGHT) * FRAMEBUFFER_DEMO_BPP;
|
|
self->priv->_framebuffer_size_ = self->priv->framebuffer_length1;
|
|
_tmp3_ = stdout;
|
|
fprintf (_tmp3_, "Framebuffer opened successfully\n");
|
|
_tmp4_ = stdout;
|
|
fprintf (_tmp4_, "Resolution: %dx%d, Format: BGRA\n", FRAMEBUFFER_DEMO_WIDTH, FRAMEBUFFER_DEMO_HEIGHT);
|
|
return self;
|
|
}
|
|
|
|
FramebufferDemo*
|
|
framebuffer_demo_new (void)
|
|
{
|
|
return framebuffer_demo_construct (TYPE_FRAMEBUFFER_DEMO);
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_set_pixel (FramebufferDemo* self,
|
|
gint x,
|
|
gint y,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a)
|
|
{
|
|
gboolean _tmp0_ = FALSE;
|
|
gboolean _tmp1_ = FALSE;
|
|
gboolean _tmp2_ = FALSE;
|
|
gint offset = 0;
|
|
guint8* _tmp3_;
|
|
gint _tmp3__length1;
|
|
guint8* _tmp4_;
|
|
gint _tmp4__length1;
|
|
guint8* _tmp5_;
|
|
gint _tmp5__length1;
|
|
guint8* _tmp6_;
|
|
gint _tmp6__length1;
|
|
g_return_if_fail (self != NULL);
|
|
if (x < 0) {
|
|
_tmp2_ = TRUE;
|
|
} else {
|
|
_tmp2_ = x >= FRAMEBUFFER_DEMO_WIDTH;
|
|
}
|
|
if (_tmp2_) {
|
|
_tmp1_ = TRUE;
|
|
} else {
|
|
_tmp1_ = y < 0;
|
|
}
|
|
if (_tmp1_) {
|
|
_tmp0_ = TRUE;
|
|
} else {
|
|
_tmp0_ = y >= FRAMEBUFFER_DEMO_HEIGHT;
|
|
}
|
|
if (_tmp0_) {
|
|
return;
|
|
}
|
|
offset = ((y * FRAMEBUFFER_DEMO_WIDTH) + x) * FRAMEBUFFER_DEMO_BPP;
|
|
_tmp3_ = self->priv->framebuffer;
|
|
_tmp3__length1 = self->priv->framebuffer_length1;
|
|
_tmp3_[offset + 0] = b;
|
|
_tmp4_ = self->priv->framebuffer;
|
|
_tmp4__length1 = self->priv->framebuffer_length1;
|
|
_tmp4_[offset + 1] = g;
|
|
_tmp5_ = self->priv->framebuffer;
|
|
_tmp5__length1 = self->priv->framebuffer_length1;
|
|
_tmp5_[offset + 2] = r;
|
|
_tmp6_ = self->priv->framebuffer;
|
|
_tmp6__length1 = self->priv->framebuffer_length1;
|
|
_tmp6_[offset + 3] = a;
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_fill_screen (FramebufferDemo* self,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a)
|
|
{
|
|
g_return_if_fail (self != NULL);
|
|
{
|
|
gint y = 0;
|
|
y = 0;
|
|
{
|
|
gboolean _tmp0_ = FALSE;
|
|
_tmp0_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp0_) {
|
|
gint _tmp1_;
|
|
_tmp1_ = y;
|
|
y = _tmp1_ + 1;
|
|
}
|
|
_tmp0_ = FALSE;
|
|
if (!(y < FRAMEBUFFER_DEMO_HEIGHT)) {
|
|
break;
|
|
}
|
|
{
|
|
gint x = 0;
|
|
x = 0;
|
|
{
|
|
gboolean _tmp2_ = FALSE;
|
|
_tmp2_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp2_) {
|
|
gint _tmp3_;
|
|
_tmp3_ = x;
|
|
x = _tmp3_ + 1;
|
|
}
|
|
_tmp2_ = FALSE;
|
|
if (!(x < FRAMEBUFFER_DEMO_WIDTH)) {
|
|
break;
|
|
}
|
|
framebuffer_demo_set_pixel (self, x, y, b, g, r, a);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_draw_rectangle (FramebufferDemo* self,
|
|
gint x,
|
|
gint y,
|
|
gint w,
|
|
gint h,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a)
|
|
{
|
|
g_return_if_fail (self != NULL);
|
|
{
|
|
gint dy = 0;
|
|
dy = 0;
|
|
{
|
|
gboolean _tmp0_ = FALSE;
|
|
_tmp0_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp0_) {
|
|
gint _tmp1_;
|
|
_tmp1_ = dy;
|
|
dy = _tmp1_ + 1;
|
|
}
|
|
_tmp0_ = FALSE;
|
|
if (!(dy < h)) {
|
|
break;
|
|
}
|
|
{
|
|
gint dx = 0;
|
|
dx = 0;
|
|
{
|
|
gboolean _tmp2_ = FALSE;
|
|
_tmp2_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp2_) {
|
|
gint _tmp3_;
|
|
_tmp3_ = dx;
|
|
dx = _tmp3_ + 1;
|
|
}
|
|
_tmp2_ = FALSE;
|
|
if (!(dx < w)) {
|
|
break;
|
|
}
|
|
framebuffer_demo_set_pixel (self, x + dx, y + dy, b, g, r, a);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_draw_circle (FramebufferDemo* self,
|
|
gint cx,
|
|
gint cy,
|
|
gint radius,
|
|
guint8 b,
|
|
guint8 g,
|
|
guint8 r,
|
|
guint8 a)
|
|
{
|
|
g_return_if_fail (self != NULL);
|
|
{
|
|
gint y = 0;
|
|
y = -radius;
|
|
{
|
|
gboolean _tmp0_ = FALSE;
|
|
_tmp0_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp0_) {
|
|
gint _tmp1_;
|
|
_tmp1_ = y;
|
|
y = _tmp1_ + 1;
|
|
}
|
|
_tmp0_ = FALSE;
|
|
if (!(y <= radius)) {
|
|
break;
|
|
}
|
|
{
|
|
gint x = 0;
|
|
x = -radius;
|
|
{
|
|
gboolean _tmp2_ = FALSE;
|
|
_tmp2_ = TRUE;
|
|
while (TRUE) {
|
|
if (!_tmp2_) {
|
|
gint _tmp3_;
|
|
_tmp3_ = x;
|
|
x = _tmp3_ + 1;
|
|
}
|
|
_tmp2_ = FALSE;
|
|
if (!(x <= radius)) {
|
|
break;
|
|
}
|
|
if (((x * x) + (y * y)) <= (radius * radius)) {
|
|
framebuffer_demo_set_pixel (self, cx + x, cy + y, b, g, r, a);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_update (FramebufferDemo* self)
|
|
{
|
|
gssize written = 0L;
|
|
guint8* _tmp1_;
|
|
gint _tmp1__length1;
|
|
guint8* _tmp2_;
|
|
gint _tmp2__length1;
|
|
g_return_if_fail (self != NULL);
|
|
if (self->priv->fb_fd < 0) {
|
|
FILE* _tmp0_;
|
|
_tmp0_ = stderr;
|
|
fprintf (_tmp0_, "Error: Framebuffer not opened\n");
|
|
return;
|
|
}
|
|
lseek (self->priv->fb_fd, (off_t) 0, SEEK_SET);
|
|
_tmp1_ = self->priv->framebuffer;
|
|
_tmp1__length1 = self->priv->framebuffer_length1;
|
|
_tmp2_ = self->priv->framebuffer;
|
|
_tmp2__length1 = self->priv->framebuffer_length1;
|
|
written = write (self->priv->fb_fd, _tmp1_, (gsize) _tmp2__length1);
|
|
if (written < ((gssize) 0)) {
|
|
FILE* _tmp3_;
|
|
_tmp3_ = stderr;
|
|
fprintf (_tmp3_, "Error writing to framebuffer\n");
|
|
}
|
|
}
|
|
|
|
gboolean
|
|
framebuffer_demo_is_open (FramebufferDemo* self)
|
|
{
|
|
gboolean result;
|
|
g_return_val_if_fail (self != NULL, FALSE);
|
|
result = self->priv->fb_fd >= 0;
|
|
return result;
|
|
}
|
|
|
|
static gchar*
|
|
g_file_stream_read_line (FILE* self)
|
|
{
|
|
gint c = 0;
|
|
GString* ret = NULL;
|
|
GString* _tmp3_;
|
|
gchar* result;
|
|
g_return_val_if_fail (self != NULL, NULL);
|
|
ret = NULL;
|
|
while (TRUE) {
|
|
GString* _tmp0_;
|
|
GString* _tmp2_;
|
|
c = fgetc (self);
|
|
if (!(c != EOF)) {
|
|
break;
|
|
}
|
|
_tmp0_ = ret;
|
|
if (_tmp0_ == NULL) {
|
|
GString* _tmp1_;
|
|
_tmp1_ = g_string_new ("");
|
|
_g_string_free0 (ret);
|
|
ret = _tmp1_;
|
|
}
|
|
if (c == ((gint) '\n')) {
|
|
break;
|
|
}
|
|
_tmp2_ = ret;
|
|
g_string_append_c ((GString*) _tmp2_, (gchar) c);
|
|
}
|
|
_tmp3_ = ret;
|
|
if (_tmp3_ == NULL) {
|
|
result = NULL;
|
|
_g_string_free0 (ret);
|
|
return result;
|
|
} else {
|
|
GString* _tmp4_;
|
|
gchar* _tmp5_;
|
|
_tmp4_ = ret;
|
|
_tmp5_ = ((GString*) _tmp4_)->str;
|
|
((GString*) _tmp4_)->str = NULL;
|
|
result = _tmp5_;
|
|
_g_string_free0 (ret);
|
|
return result;
|
|
}
|
|
}
|
|
|
|
static gint
|
|
framebuffer_demo_main (gchar** args,
|
|
gint args_length1)
|
|
{
|
|
FramebufferDemo* fb = NULL;
|
|
FramebufferDemo* _tmp0_;
|
|
FramebufferDemo* _tmp1_;
|
|
FILE* _tmp2_;
|
|
FramebufferDemo* _tmp3_;
|
|
FramebufferDemo* _tmp4_;
|
|
FramebufferDemo* _tmp5_;
|
|
FramebufferDemo* _tmp6_;
|
|
FramebufferDemo* _tmp7_;
|
|
FramebufferDemo* _tmp8_;
|
|
FILE* _tmp9_;
|
|
FILE* _tmp10_;
|
|
gchar* _tmp11_;
|
|
gchar* _tmp12_;
|
|
FramebufferDemo* _tmp13_;
|
|
FramebufferDemo* _tmp14_;
|
|
FILE* _tmp15_;
|
|
gint result;
|
|
_tmp0_ = framebuffer_demo_new ();
|
|
fb = _tmp0_;
|
|
_tmp1_ = fb;
|
|
if (!framebuffer_demo_is_open (_tmp1_)) {
|
|
result = 1;
|
|
_framebuffer_demo_unref0 (fb);
|
|
return result;
|
|
}
|
|
_tmp2_ = stdout;
|
|
fprintf (_tmp2_, "Drawing demo graphics...\n");
|
|
_tmp3_ = fb;
|
|
framebuffer_demo_fill_screen (_tmp3_, (guint8) 0, (guint8) 0, (guint8) 0, (guint8) 255);
|
|
_tmp4_ = fb;
|
|
framebuffer_demo_draw_rectangle (_tmp4_, 100, 100, 200, 150, (guint8) 0, (guint8) 0, (guint8) 255, (guint8) 255);
|
|
_tmp5_ = fb;
|
|
framebuffer_demo_draw_circle (_tmp5_, 500, 200, 80, (guint8) 0, (guint8) 255, (guint8) 0, (guint8) 255);
|
|
_tmp6_ = fb;
|
|
framebuffer_demo_draw_rectangle (_tmp6_, 200, 400, 300, 100, (guint8) 255, (guint8) 0, (guint8) 0, (guint8) 255);
|
|
_tmp7_ = fb;
|
|
framebuffer_demo_draw_circle (_tmp7_, 360, 360, 100, (guint8) 0, (guint8) 255, (guint8) 255, (guint8) 255);
|
|
_tmp8_ = fb;
|
|
framebuffer_demo_update (_tmp8_);
|
|
_tmp9_ = stdout;
|
|
fprintf (_tmp9_, "Graphics drawn! Press Enter to clear and exit...\n");
|
|
_tmp10_ = stdin;
|
|
_tmp11_ = g_file_stream_read_line (_tmp10_);
|
|
_tmp12_ = _tmp11_;
|
|
_g_free0 (_tmp12_);
|
|
_tmp13_ = fb;
|
|
framebuffer_demo_fill_screen (_tmp13_, (guint8) 0, (guint8) 0, (guint8) 0, (guint8) 255);
|
|
_tmp14_ = fb;
|
|
framebuffer_demo_update (_tmp14_);
|
|
_tmp15_ = stdout;
|
|
fprintf (_tmp15_, "Done!\n");
|
|
result = 0;
|
|
_framebuffer_demo_unref0 (fb);
|
|
return result;
|
|
}
|
|
|
|
int
|
|
main (int argc,
|
|
char ** argv)
|
|
{
|
|
return framebuffer_demo_main (argv, argc);
|
|
}
|
|
|
|
static void
|
|
value_framebuffer_demo_init (GValue* value)
|
|
{
|
|
value->data[0].v_pointer = NULL;
|
|
}
|
|
|
|
static void
|
|
value_framebuffer_demo_free_value (GValue* value)
|
|
{
|
|
if (value->data[0].v_pointer) {
|
|
framebuffer_demo_unref (value->data[0].v_pointer);
|
|
}
|
|
}
|
|
|
|
static void
|
|
value_framebuffer_demo_copy_value (const GValue* src_value,
|
|
GValue* dest_value)
|
|
{
|
|
if (src_value->data[0].v_pointer) {
|
|
dest_value->data[0].v_pointer = framebuffer_demo_ref (src_value->data[0].v_pointer);
|
|
} else {
|
|
dest_value->data[0].v_pointer = NULL;
|
|
}
|
|
}
|
|
|
|
static gpointer
|
|
value_framebuffer_demo_peek_pointer (const GValue* value)
|
|
{
|
|
return value->data[0].v_pointer;
|
|
}
|
|
|
|
static gchar*
|
|
value_framebuffer_demo_collect_value (GValue* value,
|
|
guint n_collect_values,
|
|
GTypeCValue* collect_values,
|
|
guint collect_flags)
|
|
{
|
|
if (collect_values[0].v_pointer) {
|
|
FramebufferDemo * object;
|
|
object = collect_values[0].v_pointer;
|
|
if (object->parent_instance.g_class == NULL) {
|
|
return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
|
|
} else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) {
|
|
return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL);
|
|
}
|
|
value->data[0].v_pointer = framebuffer_demo_ref (object);
|
|
} else {
|
|
value->data[0].v_pointer = NULL;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
static gchar*
|
|
value_framebuffer_demo_lcopy_value (const GValue* value,
|
|
guint n_collect_values,
|
|
GTypeCValue* collect_values,
|
|
guint collect_flags)
|
|
{
|
|
FramebufferDemo ** object_p;
|
|
object_p = collect_values[0].v_pointer;
|
|
if (!object_p) {
|
|
return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value));
|
|
}
|
|
if (!value->data[0].v_pointer) {
|
|
*object_p = NULL;
|
|
} else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) {
|
|
*object_p = value->data[0].v_pointer;
|
|
} else {
|
|
*object_p = framebuffer_demo_ref (value->data[0].v_pointer);
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
GParamSpec*
|
|
param_spec_framebuffer_demo (const gchar* name,
|
|
const gchar* nick,
|
|
const gchar* blurb,
|
|
GType object_type,
|
|
GParamFlags flags)
|
|
{
|
|
ParamSpecFramebufferDemo* spec;
|
|
g_return_val_if_fail (g_type_is_a (object_type, TYPE_FRAMEBUFFER_DEMO), NULL);
|
|
spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags);
|
|
G_PARAM_SPEC (spec)->value_type = object_type;
|
|
return G_PARAM_SPEC (spec);
|
|
}
|
|
|
|
gpointer
|
|
value_get_framebuffer_demo (const GValue* value)
|
|
{
|
|
g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO), NULL);
|
|
return value->data[0].v_pointer;
|
|
}
|
|
|
|
void
|
|
value_set_framebuffer_demo (GValue* value,
|
|
gpointer v_object)
|
|
{
|
|
FramebufferDemo * old;
|
|
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO));
|
|
old = value->data[0].v_pointer;
|
|
if (v_object) {
|
|
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FRAMEBUFFER_DEMO));
|
|
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
|
|
value->data[0].v_pointer = v_object;
|
|
framebuffer_demo_ref (value->data[0].v_pointer);
|
|
} else {
|
|
value->data[0].v_pointer = NULL;
|
|
}
|
|
if (old) {
|
|
framebuffer_demo_unref (old);
|
|
}
|
|
}
|
|
|
|
void
|
|
value_take_framebuffer_demo (GValue* value,
|
|
gpointer v_object)
|
|
{
|
|
FramebufferDemo * old;
|
|
g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, TYPE_FRAMEBUFFER_DEMO));
|
|
old = value->data[0].v_pointer;
|
|
if (v_object) {
|
|
g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, TYPE_FRAMEBUFFER_DEMO));
|
|
g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value)));
|
|
value->data[0].v_pointer = v_object;
|
|
} else {
|
|
value->data[0].v_pointer = NULL;
|
|
}
|
|
if (old) {
|
|
framebuffer_demo_unref (old);
|
|
}
|
|
}
|
|
|
|
static void
|
|
framebuffer_demo_class_init (FramebufferDemoClass * klass,
|
|
gpointer klass_data)
|
|
{
|
|
framebuffer_demo_parent_class = g_type_class_peek_parent (klass);
|
|
((FramebufferDemoClass *) klass)->finalize = framebuffer_demo_finalize;
|
|
g_type_class_adjust_private_offset (klass, &FramebufferDemo_private_offset);
|
|
}
|
|
|
|
static void
|
|
framebuffer_demo_instance_init (FramebufferDemo * self,
|
|
gpointer klass)
|
|
{
|
|
self->priv = framebuffer_demo_get_instance_private (self);
|
|
self->ref_count = 1;
|
|
}
|
|
|
|
static void
|
|
framebuffer_demo_finalize (FramebufferDemo * obj)
|
|
{
|
|
FramebufferDemo * self;
|
|
self = G_TYPE_CHECK_INSTANCE_CAST (obj, TYPE_FRAMEBUFFER_DEMO, FramebufferDemo);
|
|
g_signal_handlers_destroy (self);
|
|
if (self->priv->fb_fd >= 0) {
|
|
close (self->priv->fb_fd);
|
|
}
|
|
self->priv->framebuffer = (g_free (self->priv->framebuffer), NULL);
|
|
}
|
|
|
|
static GType
|
|
framebuffer_demo_get_type_once (void)
|
|
{
|
|
static const GTypeValueTable g_define_type_value_table = { value_framebuffer_demo_init, value_framebuffer_demo_free_value, value_framebuffer_demo_copy_value, value_framebuffer_demo_peek_pointer, "p", value_framebuffer_demo_collect_value, "p", value_framebuffer_demo_lcopy_value };
|
|
static const GTypeInfo g_define_type_info = { sizeof (FramebufferDemoClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) framebuffer_demo_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (FramebufferDemo), 0, (GInstanceInitFunc) framebuffer_demo_instance_init, &g_define_type_value_table };
|
|
static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) };
|
|
GType framebuffer_demo_type_id;
|
|
framebuffer_demo_type_id = g_type_register_fundamental (g_type_fundamental_next (), "FramebufferDemo", &g_define_type_info, &g_define_type_fundamental_info, 0);
|
|
FramebufferDemo_private_offset = g_type_add_instance_private (framebuffer_demo_type_id, sizeof (FramebufferDemoPrivate));
|
|
return framebuffer_demo_type_id;
|
|
}
|
|
|
|
GType
|
|
framebuffer_demo_get_type (void)
|
|
{
|
|
static volatile gsize framebuffer_demo_type_id__once = 0;
|
|
if (g_once_init_enter (&framebuffer_demo_type_id__once)) {
|
|
GType framebuffer_demo_type_id;
|
|
framebuffer_demo_type_id = framebuffer_demo_get_type_once ();
|
|
g_once_init_leave (&framebuffer_demo_type_id__once, framebuffer_demo_type_id);
|
|
}
|
|
return framebuffer_demo_type_id__once;
|
|
}
|
|
|
|
gpointer
|
|
framebuffer_demo_ref (gpointer instance)
|
|
{
|
|
FramebufferDemo * self;
|
|
self = instance;
|
|
g_atomic_int_inc (&self->ref_count);
|
|
return instance;
|
|
}
|
|
|
|
void
|
|
framebuffer_demo_unref (gpointer instance)
|
|
{
|
|
FramebufferDemo * self;
|
|
self = instance;
|
|
if (g_atomic_int_dec_and_test (&self->ref_count)) {
|
|
FRAMEBUFFER_DEMO_GET_CLASS (self)->finalize (self);
|
|
g_type_free_instance ((GTypeInstance *) self);
|
|
}
|
|
}
|
|
|