public OnClickEventArgs(int capacity, TMP_FontAsset font, PresetCharacters characters) : base()
 {
     Languages    = new List <string>(capacity);
     Font         = font;
     PresetsToAdd = characters;
     ActionToTake = Action.Append;
 }
Example #2
0
        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);
                            }
                        }
                    }
                }
            }