MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / PiuSkinDraw

Function PiuSkinDraw

modules/piu/All/piuSkin.c:143–198  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

141}
142
143void PiuSkinDraw(PiuSkin* self, PiuView* view, PiuRectangle bounds, PiuVariant variant, PiuState state, PiuAlignment horizontal, PiuAlignment vertical)
144{
145 PiuFlags flags = (*self)->flags;
146 PiuColorRecord color;
147 if (state < 0) state = 0;
148 else if (3 < state) state = 3;
149 if (flags & piuSkinPattern) {
150 PiuState index = c_floor(state);
151 if (flags & piuSkinColorized) {
152 PiuColorsBlend((*self)->data.pattern.color, state, &color);
153 PiuViewPushColorFilter(view, &color);
154 PiuSkinDrawAux(self, view, bounds, variant, index, horizontal, vertical);
155 PiuViewPopColorFilter(view);
156 }
157 else {
158 color.r = color.g = color.b = 0;
159 color.a = 255;
160 PiuViewPushColor(view, &color);
161 PiuSkinDrawAux(self, view, bounds, variant, index, horizontal, vertical);
162 PiuViewPopColor(view);
163 if (index < state) {
164 color.a = (uint8_t)c_round((state - index) * 255.0);
165 PiuViewPushColor(view, &color);
166 PiuSkinDrawAux(self, view, bounds, variant, index + 1, horizontal, vertical);
167 PiuViewPopColor(view);
168 }
169 }
170 }
171 else {
172 PiuCoordinate x = bounds->x;
173 PiuCoordinate y = bounds->y;
174 PiuCoordinate dx = bounds->width;
175 PiuCoordinate dy = bounds->height;
176 PiuCoordinate dl = (*self)->data.color.borders.left;
177 PiuCoordinate dr = (*self)->data.color.borders.right;
178 PiuCoordinate dt = (*self)->data.color.borders.top;
179 PiuCoordinate db = (*self)->data.color.borders.bottom;
180 PiuColorsBlend((*self)->data.color.fill, state, &color);
181 PiuViewPushColor(view, &color);
182 PiuViewFillColor(view, x + dl, y + dt, dx - dl - dr, dy - dt - db);
183 PiuViewPopColor(view);
184 if (dl || dr || dt || db) {
185 PiuColorsBlend((*self)->data.color.stroke, state, &color);
186 PiuViewPushColor(view, &color);
187 if (dt)
188 PiuViewFillColor(view, x + dl, y, dx - dl, dt);
189 if (dr)
190 PiuViewFillColor(view, x + dx - dr, y + dt, dr, dy - dt);
191 if (db)
192 PiuViewFillColor(view, x, y + dy - db, dx - dr, db);
193 if (dl)
194 PiuViewFillColor(view, x, y, dl, dy - db);
195 PiuViewPopColor(view);
196 }
197 }
198}
199
200void PiuSkinDrawAux(PiuSkin* self, PiuView* view, PiuRectangle bounds, PiuVariant variant, PiuState state, PiuAlignment horizontal, PiuAlignment vertical)

Callers 4

PiuPort_drawContentFunction · 0.85
PiuPort_drawLabelFunction · 0.85
PiuPort_drawSkinFunction · 0.85
PiuContentDrawFunction · 0.85

Calls 7

PiuColorsBlendFunction · 0.85
PiuSkinDrawAuxFunction · 0.85
PiuViewPushColorFilterFunction · 0.50
PiuViewPopColorFilterFunction · 0.50
PiuViewPushColorFunction · 0.50
PiuViewPopColorFunction · 0.50
PiuViewFillColorFunction · 0.50

Tested by

no test coverage detected