/* * upkg: tool for manipulating Unreal Tournament packages. * Copyright © 2009-2011 Nick Bowler * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include "texture.h" #include "upkg.h" #define TEXTURE_GET_PRIV(o) \ G_TYPE_INSTANCE_GET_PRIVATE(o, ENGINE_TEXTURE_TYPE, struct texture_priv) enum { PROP_0, PROP_USIZE, PROP_VSIZE, PROP_UCLAMP, PROP_VCLAMP, PROP_UBITS, PROP_VBITS, }; struct texture_priv { unsigned type; struct upkg_file *f; size_t base, len; unsigned char buf[2048]; unsigned long nbuf; }; void exportable_init(UObjectExportable *e) { } G_DEFINE_DYNAMIC_TYPE(EngineTexture, engine_texture, U_OBJECT_TYPE); static int deserialize(UObject *uo) { struct texture_priv *priv = TEXTURE_GET_PRIV(uo); EngineTexture *t = ENGINE_TEXTURE(uo); U_OBJECT_CLASS(engine_texture_parent_class)->deserialize(uo); return 0; } void texture_register(GTypeModule *m) { engine_texture_register_type(m); } static void set_property(GObject *o, guint id, const GValue *val, GParamSpec *spec) { EngineTexture *t = ENGINE_TEXTURE(o); switch (id) { case PROP_USIZE: t->usize = g_value_get_uint(val); break; case PROP_VSIZE: t->vsize = g_value_get_uint(val); break; case PROP_UCLAMP: t->uclamp = g_value_get_uint(val); break; case PROP_VCLAMP: t->vclamp = g_value_get_uint(val); break; case PROP_UBITS: t->ubits = g_value_get_uint(val); break; case PROP_VBITS: t->vbits = g_value_get_uint(val); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(o, id, spec); } } static void get_property(GObject *o, guint id, GValue *val, GParamSpec *spec) { EngineTexture *t = ENGINE_TEXTURE(o); switch (id) { case PROP_USIZE: g_value_set_uint(val, t->usize); break; case PROP_VSIZE: g_value_set_uint(val, t->vsize); break; case PROP_UCLAMP: g_value_set_uint(val, t->uclamp); break; case PROP_VCLAMP: g_value_set_uint(val, t->vclamp); break; case PROP_UBITS: g_value_set_uint(val, t->ubits); break; case PROP_VBITS: g_value_set_uint(val, t->vbits); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(o, id, spec); } } static void engine_texture_init(EngineTexture *t) { t->usize = t->vsize = 0; } static void engine_texture_class_init(EngineTextureClass *class) { UObjectClass *uo = U_OBJECT_CLASS(class); GObjectClass *go = G_OBJECT_CLASS(class); g_type_class_add_private(class, sizeof (struct texture_priv)); uo->deserialize = deserialize; go->set_property = set_property; go->get_property = get_property; g_object_class_install_property(go, PROP_USIZE, g_param_spec_uint("USize", "USize", "Width of the texture.", 0, 2048, 0, G_PARAM_READWRITE)); g_object_class_install_property(go, PROP_VSIZE, g_param_spec_uint("VSize", "VSize", "Height of the texture.", 0, 2048, 0, G_PARAM_READWRITE)); g_object_class_install_property(go, PROP_UCLAMP, g_param_spec_uint("UClamp", "UClamp", "???", 0, 2048, 0, G_PARAM_READWRITE)); g_object_class_install_property(go, PROP_VCLAMP, g_param_spec_uint("VClamp", "VClamp", "???", 0, 2048, 0, G_PARAM_READWRITE)); g_object_class_install_property(go, PROP_UBITS, g_param_spec_uint("UBits", "UBits", "???", 0, 64, 0, G_PARAM_READWRITE)); g_object_class_install_property(go, PROP_VBITS, g_param_spec_uint("VBits", "VBits", "???", 0, 64, 0, G_PARAM_READWRITE)); } static void engine_texture_class_finalize(EngineTextureClass *class) { }