Просмотр исходного кода

tools: save .font in Database format

Daniele Bartolini 2 лет назад
Родитель
Сommit
5c23e05bc1

+ 1 - 1
src/resource/font_resource.cpp

@@ -59,7 +59,7 @@ namespace font_resource_internal
 			sjson::parse(obj, glyphs[i]);
 
 			GlyphInfo gi;
-			gi.cp           = sjson::parse_int  (obj["id"]);
+			gi.cp           = sjson::parse_int  (json_object::has(obj, "id") ? obj["id"] : obj["cp"]);
 			gi.gd.x         = sjson::parse_float(obj["x"]);
 			gi.gd.y         = sjson::parse_float(obj["y"]);
 			gi.gd.width     = sjson::parse_float(obj["width"]);

+ 6 - 1
tools/core/database.vala

@@ -621,7 +621,7 @@ public class Database
 
 			// Decode object ID.
 			Guid obj_id;
-			if (obj.has_key("id"))
+			if (obj.has_key("id") && owner_type != "font")
 				obj_id = Guid.parse((string)obj["id"]);
 			else if (obj.has_key("_guid"))
 				obj_id = Guid.parse((string)obj["_guid"]);
@@ -656,6 +656,11 @@ public class Database
 					set_object_type(obj_id, "sprite_frame");
 					set_property_internal(0, obj_id, "index", (double)i);
 				}
+			} else if (owner_type == "font") {
+				if (key == "glyphs") {
+					set_object_type(obj_id, "font_glyph");
+					set_property_internal(0, obj_id, "cp", (double)obj["id"]);
+				}
 			}
 
 			decode_object(obj_id, owner_id, "", obj);

+ 18 - 16
tools/resource/font_resource.vala

@@ -103,27 +103,29 @@ public class FontResource
 			SJSON.save(material, project.absolute_path(resource_name) + ".material");
 
 			// Generate .font resource.
-			var glyphs = new Gee.ArrayList<Value?>();
+			Guid font_id = Guid.new_guid();
+			db.create(font_id, OBJECT_TYPE_FONT);
+			db.set_property_double(font_id, "size", size);
+			db.set_property_double(font_id, "font_size", font_size);
+
 			for (int ii = 0; ii < dlg._font_range_max.value - dlg._font_range_min.value + 1; ++ii) {
 				GlyphData* gd = dlg.glyph_data(ii);
 
-				Hashtable glyph = new Hashtable();
-				glyph["id"]        = gd->id;
-				glyph["x"]         = gd->x;
-				glyph["y"]         = gd->y;
-				glyph["width"]     = gd->width;
-				glyph["height"]    = gd->height;
-				glyph["x_offset"]  = gd->x_offset;
-				glyph["y_offset"]  = gd->y_offset;
-				glyph["x_advance"] = gd->x_advance;
-				glyphs.add(glyph);
+				Guid glyph_id = Guid.new_guid();
+				db.create(glyph_id, "font_glyph");
+				db.set_property_double(glyph_id, "cp", gd->id);
+				db.set_property_double(glyph_id, "x", gd->x);
+				db.set_property_double(glyph_id, "y", gd->y);
+				db.set_property_double(glyph_id, "width", gd->width);
+				db.set_property_double(glyph_id, "height", gd->height);
+				db.set_property_double(glyph_id, "x_offset", gd->x_offset);
+				db.set_property_double(glyph_id, "y_offset", gd->y_offset);
+				db.set_property_double(glyph_id, "x_advance", gd->x_advance);
+
+				db.add_to_set(font_id, "glyphs", glyph_id);
 			}
 
-			Hashtable font = new Hashtable();
-			font["size"]      = size;
-			font["font_size"] = font_size;
-			font["glyphs"]    = glyphs;
-			SJSON.save(font, project.absolute_path(resource_name) + ".font");
+			db.save(project.absolute_path(resource_name) + ".font", font_id);
 		}
 
 		dlg.destroy();

+ 1 - 0
tools/resource/types.vala

@@ -20,5 +20,6 @@ const string OBJECT_TYPE_STATE_MACHINE           = "state_machine";
 const string OBJECT_TYPE_TRANSFORM               = "transform";
 const string OBJECT_TYPE_UNIT                    = "unit";
 const string OBJECT_TYPE_SPRITE                  = "sprite";
+const string OBJECT_TYPE_FONT                    = "font";
 
 } /* namespace Crown */