1 /* 2 * Copyright (c) 2021 - 2024 the ThorVG project. All rights reserved. 3 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 11 * The above copyright notice and this permission notice shall be included in all 12 * copies or substantial portions of the Software. 13 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 * SOFTWARE. 21 */ 22 23 #include "../../lv_conf_internal.h" 24 #if LV_USE_THORVG_INTERNAL 25 26 #ifndef _TVG_BINARY_DESC_H_ 27 #define _TVG_BINARY_DESC_H_ 28 29 /* TODO: Need to consider whether uin8_t is enough size for extension... 30 Rather than optimal data, we can use enough size and data compress? */ 31 32 using TvgBinByte = uint8_t; 33 using TvgBinCounter = uint32_t; 34 using TvgBinTag = TvgBinByte; 35 using TvgBinFlag = TvgBinByte; 36 37 38 //Header 39 #define TVG_HEADER_SIZE 33 //TVG_HEADER_SIGNATURE_LENGTH + TVG_HEADER_VERSION_LENGTH + 2*SIZE(float) + TVG_HEADER_RESERVED_LENGTH + TVG_HEADER_COMPRESS_SIZE 40 #define TVG_HEADER_SIGNATURE "ThorVG" 41 #define TVG_HEADER_SIGNATURE_LENGTH 6 42 #define TVG_HEADER_VERSION "001500" //Major 00, Minor 15, Micro 00 43 #define TVG_HEADER_VERSION_LENGTH 6 44 #define TVG_HEADER_RESERVED_LENGTH 1 //Storing flags for extensions 45 #define TVG_HEADER_COMPRESS_SIZE 12 //TVG_HEADER_UNCOMPRESSED_SIZE + TVG_HEADER_COMPRESSED_SIZE + TVG_HEADER_COMPRESSED_SIZE_BITS 46 //Compress Size 47 #define TVG_HEADER_UNCOMPRESSED_SIZE 4 //SIZE (TvgBinCounter) 48 #define TVG_HEADER_COMPRESSED_SIZE 4 //SIZE (TvgBinCounter) 49 #define TVG_HEADER_COMPRESSED_SIZE_BITS 4 //SIZE (TvgBinCounter) 50 //Reserved Flag 51 #define TVG_HEAD_FLAG_COMPRESSED 0x01 52 53 //Paint Type 54 #define TVG_TAG_CLASS_PICTURE (TvgBinTag)0xfc 55 #define TVG_TAG_CLASS_SHAPE (TvgBinTag)0xfd 56 #define TVG_TAG_CLASS_SCENE (TvgBinTag)0xfe 57 58 59 //Paint 60 #define TVG_TAG_PAINT_OPACITY (TvgBinTag)0x10 61 #define TVG_TAG_PAINT_TRANSFORM (TvgBinTag)0x11 62 #define TVG_TAG_PAINT_CMP_TARGET (TvgBinTag)0x01 63 #define TVG_TAG_PAINT_CMP_METHOD (TvgBinTag)0x20 64 65 66 //TODO: Keep this for the compatibility, Remove in TVG 1.0 release 67 //Scene 68 #define TVG_TAG_SCENE_RESERVEDCNT (TvgBinTag)0x30 69 70 71 //Shape 72 #define TVG_TAG_SHAPE_PATH (TvgBinTag)0x40 73 #define TVG_TAG_SHAPE_STROKE (TvgBinTag)0x41 74 #define TVG_TAG_SHAPE_FILL (TvgBinTag)0x42 75 #define TVG_TAG_SHAPE_COLOR (TvgBinTag)0x43 76 #define TVG_TAG_SHAPE_FILLRULE (TvgBinTag)0x44 77 78 79 //Stroke 80 #define TVG_TAG_SHAPE_STROKE_CAP (TvgBinTag)0x50 81 #define TVG_TAG_SHAPE_STROKE_JOIN (TvgBinTag)0x51 82 #define TVG_TAG_SHAPE_STROKE_WIDTH (TvgBinTag)0x52 83 #define TVG_TAG_SHAPE_STROKE_COLOR (TvgBinTag)0x53 84 #define TVG_TAG_SHAPE_STROKE_FILL (TvgBinTag)0x54 85 #define TVG_TAG_SHAPE_STROKE_DASHPTRN (TvgBinTag)0x55 86 #define TVG_TAG_SHAPE_STROKE_MITERLIMIT (TvgBinTag)0x56 87 #define TVG_TAG_SHAPE_STROKE_ORDER (TvgBinTag)0x57 88 #define TVG_TAG_SHAPE_STROKE_DASH_OFFSET (TvgBinTag)0x58 89 90 91 //Fill 92 #define TVG_TAG_FILL_LINEAR_GRADIENT (TvgBinTag)0x60 93 #define TVG_TAG_FILL_RADIAL_GRADIENT (TvgBinTag)0x61 94 #define TVG_TAG_FILL_COLORSTOPS (TvgBinTag)0x62 95 #define TVG_TAG_FILL_FILLSPREAD (TvgBinTag)0x63 96 #define TVG_TAG_FILL_TRANSFORM (TvgBinTag)0x64 97 #define TVG_TAG_FILL_RADIAL_GRADIENT_FOCAL (TvgBinTag)0x65 98 99 //Picture 100 #define TVG_TAG_PICTURE_RAW_IMAGE (TvgBinTag)0x70 101 #define TVG_TAG_PICTURE_MESH (TvgBinTag)0x71 102 103 #endif //_TVG_BINARY_DESC_H_ 104 105 #endif /* LV_USE_THORVG_INTERNAL */ 106 107