MCPcopy Create free account
hub / github.com/CruiserOne/Astrolog / DrawFill

Function DrawFill

xgeneral.cpp:1126–1194  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1124// specified coordinates.
1125
1126void DrawFill(int x, int y, KV kv)
1127{
1128 KV kvB, kvF;
1129 // Variables for bitmap implementation.
1130 PT2S rgpt[iFillMax];
1131 int iTop = 1, iCur = 0, xnew, ynew, d;
1132
1133 if (!FOnWin(x, y))
1134 return;
1135 if (gi.fFile && (!gi.fBmp || gs.ft == ftWmf)) {
1136 // Use nearest palette fill color in more limited environments.
1137 kvB = gi.kiOff;
1138 kvF = KiFromKv(kv, fFalse);
1139 } else {
1140 // 24 bit color bitmap environments allow all possible colors.
1141 kvB = KvFromKi(gi.kiOff);
1142 kvF = kv;
1143 }
1144 if (kvF == kvB)
1145 return;
1146
1147 if (gi.fFile) {
1148 if (gs.ft == ftBmp) {
1149 if (GetXY(x, y) != kvB)
1150 return;
1151 SetXY(x, y, kvF);
1152 rgpt[0].x = x; rgpt[0].y = y;
1153 // Do a breadth first search to fill in the bitmap area.
1154 while (iCur != iTop) {
1155 x = rgpt[iCur].x; y = rgpt[iCur].y;
1156 for (d = 0; d < 4; d++) {
1157 xnew = x + dxOff[d]; ynew = y + dyOff[d];
1158 if (!FOnWin(xnew, ynew) || GetXY(xnew, ynew) != kvB)
1159 continue;
1160 if (iTop == iCur) // If array completely full, skip and don't add!
1161 continue;
1162 SetXY(xnew, ynew, kvF);
1163 rgpt[iTop].x = xnew; rgpt[iTop].y = ynew;
1164 iTop++;
1165 if (iTop >= iFillMax)
1166 iTop = 0;
1167 }
1168 iCur++;
1169 if (iCur >= iFillMax)
1170 iCur = 0;
1171 }
1172 }
1173#ifdef META
1174 else if (gs.ft == ftWmf) {
1175 // Doesn't seem to work for background colors other than black.
1176 gi.kiFillDes = kvF;
1177 MetaSelect();
1178 MetaFill(x, y, kvB);
1179 return;
1180 }
1181#endif
1182 // Not implemented in PostScript, SVG, or wireframe formats.
1183 }

Callers 2

DrawFillWheelFunction · 0.85
XChartMidpointFunction · 0.85

Calls 4

KiFromKvFunction · 0.85
GetXYFunction · 0.85
SetXYFunction · 0.85
MetaSelectFunction · 0.85

Tested by

no test coverage detected