#include <uobject/uobject.h>
#include <uobject/exportable.h>
#include "texture.h"
+#include "palette.h"
#include "upkg.h"
#define TEXTURE_GET_PRIV(o) \
PROP_VCLAMP,
PROP_UBITS,
PROP_VBITS,
+ PROP_PALETTE,
};
struct texture_priv {
case PROP_VBITS:
t->vbits = g_value_get_uint(val);
break;
+ case PROP_PALETTE:
+ t->palette = g_value_get_object(val);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(o, id, spec);
}
case PROP_VBITS:
g_value_set_uint(val, t->vbits);
break;
+ case PROP_PALETTE:
+ g_value_set_object(val, t->palette);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(o, id, spec);
}
"???",
0, 64, 0,
G_PARAM_READWRITE));
+ g_object_class_install_property(go, PROP_PALETTE,
+ g_param_spec_object("Palette",
+ "Palette",
+ "Palette reference for the texture.",
+ ENGINE_PALETTE_TYPE,
+ G_PARAM_READWRITE));
}
static void engine_texture_class_finalize(EngineTextureClass *class)
return 0;
}
+static int decode_object_property(UObject *uo, GValue *val, unsigned long len)
+{
+ struct u_object_priv *priv = U_OBJECT_GET_PRIV(uo);
+ GObject *obj = NULL;
+ long index;
+ int rc;
+
+ rc = upkg_decode_index(&index, priv->buf+len, priv->nbuf-len);
+ if (rc == 0 || index == 0)
+ return -1;
+
+ if (index < 0) {
+ fprintf(stderr, "Imports not supported yet.\n");
+ } else {
+ obj = u_object_new_from_package(uo->pkg, index-1);
+ }
+
+ g_value_init(val, U_OBJECT_TYPE);
+ g_value_take_object(val, obj);
+ return 0;
+}
+
+/*
+ * XXX: I must have been smoking the happy plant when I started property
+ * decoding. The tracking of various sizes in these functions makes no
+ * sense at all.
+ */
+
static unsigned long
decode_property(UObject *o, const char *name, struct upkg_file *f, unsigned long len)
{
g_value_set_ulong(&val, unpack_32_le(priv->buf+len));
g_object_set_property(G_OBJECT(o), name, &val);
break;
+ case PROPERTY_OBJECT:
+ rc = decode_object_property(o, &val, len);
+ if (rc != 0)
+ return 0;
+ g_object_set_property(G_OBJECT(o), name, &val);
+ break;
default:
fprintf(stderr, "Unhandled property type %x\n", (unsigned)type);
}