public OnClickEventArgs(int capacity, TMP_FontAsset font, PresetCharacters characters) : base() { Languages = new List <string>(capacity); Font = font; PresetsToAdd = characters; ActionToTake = Action.Append; }
protected override unsafe void OnSaveT(Document input, Stream output, PropertyBasedSaveConfigToken token, Surface scratchSurface, ProgressEventHandler progressCallback) { using (RenderArgs ra = new RenderArgs(scratchSurface)) { input.Render(ra, true); } int w = token.GetProperty <Int32Property>(PropertyNames.HorizCellSize).Value; int h = token.GetProperty <Int32Property>(PropertyNames.VerticalCellSize).Value; int W = scratchSurface.Width, H = scratchSurface.Height; string chars; PresetCharacters preset = (PresetCharacters)token.GetProperty <StaticListChoiceProperty>(PropertyNames.PresetCharacters).Value; switch (preset) { case PresetCharacters.Custom: chars = token.GetProperty <StringProperty>(PropertyNames.Characters).Value; break; case PresetCharacters.AsciiChars: chars = asciiChars; break; case PresetCharacters.Blocks: chars = blocks; break; default: chars = ""; break; } if (chars.Length == 0) { chars = asciiChars; } // Special case where 1 cell corresponds directly to 1 pixel // Written separately for performance if (h == 1 && w == 1) { StreamWriter writer = new StreamWriter(output); for (int y = 0; y < H; y++) { ColorBgra *current = scratchSurface.GetRowAddressUnchecked(y); for (int x = 0; x < W; x++) { int pos = (int)((1 - current->GetIntensity()) * chars.Length); char c = chars[pos == chars.Length ? pos - 1 : pos]; writer.Write(c); current++; } if (y != H - 1) { writer.WriteLine(); } } writer.Flush(); } else { double[,] totals = new double[W / w, H / h]; for (int y = 0; y < H / h * h; y++) { ColorBgra *current = scratchSurface.GetRowAddressUnchecked(y); for (int x = 0; x < W / w * w; x++) { totals[x / w, y / h] += 1 - current->GetIntensity(); current++; } } int ppc = w * h; StreamWriter writer = new StreamWriter(output); for (int y = 0; y < H / h; y++) { for (int x = 0; x < W / w; x++) { int pos = (int)(totals[x, y] / ppc * chars.Length); char c = chars[pos == chars.Length ? pos - 1 : pos]; writer.Write(c); } if (y != H / h - 1) { writer.WriteLine(); } } writer.Flush(); } }
public void UpdateFonts() { // Setup variables SupportedLanguages.Language languageMetadata; PresetCharacters defaultPreset = PresetCharacters.None; OnClickEventArgs fontMetadata; // Reset the list allFonts.Clear(); foreach (OnClickEventArgs data in allMetaData.Values) { data.Languages.Clear(); } // Go through all the languages for (int i = 0; i < languages.Count; ++i) { // Check if we want to check this language if (languageToUpdate[i] == false) { continue; } // Grab the metadata for this language languageMetadata = languages.GetLanguageMetaData(i); defaultPreset = PresetCharacters.None; if (languageMetadata.IsSystemDefault == true) { defaultPreset = GetDefaultPreset(languageMetadata.LanguageMappedTo); } // If so, grab all the fonts foreach (TMP_FontAsset font in languageMetadata.Fonts) { if (font != null) { if (allMetaData.TryGetValue(font, out fontMetadata) == true) { if (fontMetadata.Languages.Count == 0) { // Indicate this is a unique new font allFonts.Add(font); } // Update the font's metadata fontMetadata.Languages.Add(languages[i]); fontMetadata.PresetsToAdd |= defaultPreset; } else { // Indicate this is a unique new font allFonts.Add(font); // Create a new font's metadata fontMetadata = new OnClickEventArgs(languages.Count, font, defaultPreset); fontMetadata.Languages.Add(languages[i]); allMetaData.Add(font, fontMetadata); } } } } }