MCPcopy Create free account
hub / github.com/Tencent/libpag / ReadPathInternal

Function ReadPathInternal

src/codec/DataTypes.cpp:126–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

124}
125
126static void ReadPathInternal(DecodeStream* stream, PathData* value, const uint8_t records[],
127 int64_t numVerbs) {
128 auto numBits = stream->readNumBits();
129 float lastX = 0;
130 float lastY = 0;
131 auto& verbs = value->verbs;
132 auto& points = value->points;
133 for (uint32_t i = 0; i < numVerbs; i++) {
134 if (stream->context->hasException()) {
135 break;
136 }
137 auto pathRecord = records[i];
138 switch (static_cast<PathRecord>(pathRecord)) {
139 case PathRecord::Close:
140 verbs.push_back(PathDataVerb::Close);
141 break;
142 case PathRecord::Move:
143 verbs.push_back(PathDataVerb::MoveTo);
144 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
145 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
146 points.push_back({lastX, lastY});
147 break;
148 case PathRecord::Line:
149 verbs.push_back(PathDataVerb::LineTo);
150 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
151 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
152 points.push_back({lastX, lastY});
153 break;
154 case PathRecord::HLine:
155 verbs.push_back(PathDataVerb::LineTo);
156 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
157 points.push_back({lastX, lastY});
158 break;
159 case PathRecord::VLine:
160 verbs.push_back(PathDataVerb::LineTo);
161 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
162 points.push_back({lastX, lastY});
163 break;
164 case PathRecord::Curve01:
165 verbs.push_back(PathDataVerb::CurveTo);
166 points.push_back({lastX, lastY});
167 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
168 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
169 points.push_back({lastX, lastY});
170 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
171 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
172 points.push_back({lastX, lastY});
173 break;
174 case PathRecord::Curve10:
175 verbs.push_back(PathDataVerb::CurveTo);
176 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
177 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
178 points.push_back({lastX, lastY});
179 lastX = stream->readBits(numBits) * SPATIAL_PRECISION;
180 lastY = stream->readBits(numBits) * SPATIAL_PRECISION;
181 points.push_back({lastX, lastY});
182 points.push_back({lastX, lastY});
183 break;

Callers 1

ReadPathFunction · 0.85

Calls 4

hasExceptionMethod · 0.80
push_backMethod · 0.80
readNumBitsMethod · 0.45
readBitsMethod · 0.45

Tested by

no test coverage detected