public void TestVisualSymbolsController()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            Assert.AreEqual(117, symboler.AvailableSymbols.Count, "Precondition");

            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.AreSame(symboler, visualSymbolsController.Controller);
            Assert.AreEqual(3, visualSymbolsController.ColumnsCount);
            Assert.AreEqual(39, visualSymbolsController.RowsCount);
            Assert.AreEqual(5, visualSymbolsController.VisibleRowsCount);
            Assert.IsTrue(visualSymbolsController.RequiresShift);

            Assert.AreEqual(new Size(96, 150), visualSymbolsController.VisualImage.Size);
        }
예제 #2
0
        public void TestSymbolsFont()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font }, font);

            Assert.AreEqual(1, symboler.AvailableFonts.Count());
            Assert.AreSame(font, symboler.SymbolsFont);
            Assert.AreEqual(font.Name, symboler.SymbolsFontName);

            symboler.CallManipulationsCoreFired = false;

            var otherFont = SAEResources.GetAllFonts().First();

            otherFont.ChangeNameForTest("Other font");
            symboler.AddSymbolsFonts(new[] { otherFont });

            Assert.AreEqual(2, symboler.AvailableFonts.Count());
            Assert.AreSame(font, symboler.SymbolsFont, "Selected font should not be changed.");
            Assert.IsFalse(symboler.CallManipulationsCoreFired, "Should not call manipulations when there are no changes.");

            symboler.SymbolsFontName = "Xyz";

            Assert.AreSame(font, symboler.SymbolsFont, "Selected font should remain if new name is incorrect.");
            Assert.AreEqual(font.Name, symboler.SymbolsFontName);
            Assert.IsFalse(symboler.CallManipulationsCoreFired, "Should not call manipulations when there are no changes.");

            symboler.SymbolsFontName = "Other font";

            Assert.AreSame(otherFont, symboler.SymbolsFont, "New font should be selected");
            Assert.AreEqual("Other font", symboler.SymbolsFontName);
            Assert.IsTrue(symboler.CallManipulationsCoreFired, "Should call manipulations when symbols font is changed.");
        }
        public void TestMouseWheel()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.AreEqual(0, visualSymbolsController.VerticalShift);

            using (visualSymbolsController.SuspendUpdateVisualImage())
            {
                visualSymbolsController.OnMouseWheel(100);
                Assert.AreEqual(0, visualSymbolsController.VerticalShift, "Should not shift beyond top row.");

                visualSymbolsController.OnMouseWheel(-100);
                Assert.AreEqual(10, visualSymbolsController.VerticalShift);

                visualSymbolsController.OnMouseWheel(30);
                Assert.AreEqual(7, visualSymbolsController.VerticalShift);

                visualSymbolsController.OnMouseWheel(-30000);
                Assert.AreEqual(1098, visualSymbolsController.VerticalShift, "Should not shift beyond bottom row.");
            }
        }
예제 #4
0
        public void TestAvailableSymbols()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font }, font);

            symboler.IncludeNumbers = false;
            symboler.IncludeLetters = false;
            symboler.IncludeSymbols = false;
            Assert.AreEqual(1, symboler.AvailableSymbols.Count);
            Assert.AreEqual(' ', symboler.AvailableSymbols[0].Key);

            symboler.IncludeNumbers = true;
            Assert.AreEqual(11, symboler.AvailableSymbols.Count, "10 digits and 1 space.");

            symboler.IncludeNumbers = false;
            symboler.IncludeLetters = true;
            Assert.AreEqual(117, symboler.AvailableSymbols.Count, "26 latin letters in both cases + 32 cyrillic letters in both cases + 1 space.");

            symboler.IncludeNumbers = true;
            Assert.AreEqual(127, symboler.AvailableSymbols.Count, "10+116+1");

            symboler.IncludeSymbols = true;
            Assert.IsTrue(symboler.AvailableSymbols.Count > 127, "10+116+1+more");
        }
예제 #5
0
        /// <summary>
        /// Returns FontFamily from font data in resources by its name.
        /// </summary>
        /// <param name="fontName">Font name.</param>
        /// <returns>FontFamily instance.</returns>
        public static FontFamily GetFontFamily(string fontName)
        {
            FontFamily fontFamily;

            if (cachedFontFamilies.TryGetValue(fontName, out fontFamily))
            {
                return(fontFamily);
            }

            var fontData = SAEResources.GetFontRawData(fontName);

            if (fontData == null)
            {
                return(FontFamily.Families.FirstOrDefault(family => family.Name == fontName));
            }

            var bufferHandle = GCHandle.Alloc(fontData, GCHandleType.Pinned);

            try
            {
                var fontCollection = new PrivateFontCollection();
                fontCollection.AddMemoryFont(Marshal.UnsafeAddrOfPinnedArrayElement(fontData, 0), fontData.Length);
                fontFamily = fontCollection.Families[0];
                cachedFontFamilies.Add(fontName, fontFamily);
                return(fontFamily);
            }
            finally
            {
                bufferHandle.Free();
            }
        }
예제 #6
0
        void comboBoxKit_TextBoxTextChanged(object sender, EventArgs e)
        {
            if (inComboBoxKitTextChange)
            {
                return;
            }

            if (comboBoxKit.TextBoxText == Resources.ManagePalettes)
            {
                inComboBoxKitTextChange = true;
                try
                {
                    using (var threadsManageDialog = new ThreadsManagementDialog())
                    {
                        threadsManageDialog.ShowDialog(this);
                    }
                    wizard.ImageColorer.AddColorPalettes(SAEResources.GetAllPalettes(Settings.Default.UserPalettesLocation), true);
                    InitializeComboBoxKit();
                }
                finally
                {
                    inComboBoxKitTextChange = false;
                }
            }
            else
            {
                wizard.ImageColorer.PaletteName = comboBoxKit.TextBoxText;
            }
        }
예제 #7
0
 /// <summary>
 /// Returns font info for specified font family name.
 /// </summary>
 /// <param name="familyName">Font family name.</param>
 /// <param name="isBold">Specifies if font should be bold.</param>
 /// <param name="isItalic">Specifies if font should be italic.</param>
 /// <returns>Font info with font file name specified family name and font options.</returns>
 public FontResolverInfo ResolveTypeface(string familyName, bool isBold, bool isItalic)
 {
     if (SAEResources.GetAllFontNames().Any(s => s.Equals(familyName, StringComparison.OrdinalIgnoreCase)))
     {
         return(new FontResolverInfo(familyName));
     }
     throw new ArgumentException($"Cannot resolve font with familyName '{familyName}'.");
 }
예제 #8
0
 /// <summary>
 /// Returns font data for specified name.
 /// </summary>
 /// <param name="faceName">Font name.</param>
 /// <returns>Byte array with font file data.</returns>
 public byte[] GetFont(string faceName)
 {
     if (SAEResources.GetAllFontNames().Any(s => s.Equals(faceName, StringComparison.OrdinalIgnoreCase)))
     {
         return(SAEResources.GetFontRawData(faceName));
     }
     throw new ArgumentException($"Cannot resolve font with faceName '{faceName}'.");
 }
예제 #9
0
        public void TestSelectedSymbols()
        {
            var image = new CodedImage {
                Size = new Size(5, 5)
            };

            image.CompletePalette();
            image[1, 1] = new CodedColor(100);
            image[2, 2] = new CodedColor(200);
            image.CompletePalette();
            Assert.AreEqual(3, image.Palette.Count, "Precondition");

            var font     = SAEResources.GetAllFonts().First();
            var symboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font }, font);

            symboler.IncludeNumbers = false;
            symboler.IncludeLetters = true;
            symboler.IncludeSymbols = false;

            Assert.AreEqual(117, symboler.AvailableSymbols.Count);
            Assert.AreEqual(3, symboler.SelectedSymbols.Count(), "Should select enough symbols for available colors.");
            Assert.AreEqual(3, symboler.SelectedCount);

            symboler.CallManipulationsCoreFired = false;
            symboler.SwitchSelection(symboler.SelectedSymbols.First());

            Assert.AreEqual(2, symboler.SelectedSymbols.Count());
            Assert.AreEqual(2, symboler.SelectedCount);
            Assert.IsTrue(symboler.CallManipulationsCoreFired, "Should call manipulations when selected symbols have changed.");

            symboler.CallManipulationsCoreFired = false;
            symboler.AddRandomSymbols();

            Assert.AreEqual(3, symboler.SelectedSymbols.Count(), "Should select enough symbols for available colors.");
            Assert.AreEqual(3, symboler.SelectedCount);
            Assert.IsTrue(symboler.CallManipulationsCoreFired, "Should call manipulations when selected symbols have changed.");

            symboler.IncludeNumbers = true;

            Assert.AreEqual(3, symboler.SelectedSymbols.Count(), "Should not reset selected symbols after adding more available symbols.");
            Assert.AreEqual(3, symboler.SelectedCount);

            symboler.SwitchSelection('0');

            Assert.AreEqual(4, symboler.SelectedSymbols.Count(), "Should select enough symbols for available colors.");
            Assert.AreEqual(4, symboler.SelectedCount);

            symboler.CallManipulationsCoreFired = false;
            symboler.AddRandomSymbols();

            Assert.AreEqual(4, symboler.SelectedSymbols.Count(), "Should not select extra symbols nor remove existing.");
            Assert.AreEqual(4, symboler.SelectedCount);
            Assert.IsFalse(symboler.CallManipulationsCoreFired, "Should not call manipulations if nothing changed.");
        }
        public void TestClick()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            Assert.NotNull(visualSymbolsController.VisualImage);

            using (visualSymbolsController.SuspendUpdateVisualImage())
            {
                foreach (var c in symboler.SelectedSymbols.ToArray())
                {
                    symboler.SwitchSelection(c);
                }
                Assert.AreEqual(0, symboler.SelectedCount);

                visualSymbolsController.OnTouched(new Point(50, 20));                 // (1, 0) = #1 = A (#0 = ' ')
                visualSymbolsController.OnUntouched(new Point(50, 20));
                Assert.AreEqual(1, symboler.SelectedCount);
                Assert.Contains('A', symboler.SelectedSymbols.ToArray());

                visualSymbolsController.OnTouched(new Point(50, 100));                 // (1, 3) = #1 = J
                visualSymbolsController.OnUntouched(new Point(50, 100));
                Assert.AreEqual(2, symboler.SelectedCount);
                Assert.Contains('A', symboler.SelectedSymbols.ToArray());
                Assert.Contains('J', symboler.SelectedSymbols.ToArray());

                visualSymbolsController.OnTouched(new Point(50, 20));                 // (1, 0) = #1 = A
                visualSymbolsController.OnUntouched(new Point(50, 20));
                Assert.AreEqual(1, symboler.SelectedCount);
                Assert.Contains('J', symboler.SelectedSymbols.ToArray());
            }
        }
예제 #11
0
        public void TestDefaultSettings()
        {
            var font1 = SAEResources.GetAllFonts().First();

            font1.ChangeNameForTest("111");
            var font2 = SAEResources.GetAllFonts().First();

            font2.ChangeNameForTest("222");

            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font1, font2 }, font1);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeNumbers  = true;
                symboler.IncludeLetters  = true;
                symboler.IncludeSymbols  = false;
                symboler.SymbolsFontName = "222";
            }

            var newSymboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font1, font2 }, font1);

            Assert.IsFalse(newSymboler.IncludeNumbers, "Precondition check.");
            Assert.IsFalse(newSymboler.IncludeLetters, "Precondition check.");
            Assert.IsTrue(newSymboler.IncludeSymbols, "Precondition check.");
            Assert.AreEqual("111", newSymboler.SymbolsFontName, "Precondition check.");

            symboler.SaveDefaults();

            newSymboler = new ImageSymbolsController4Test(new ImageSymbolsManipulator(image), new[] { font1, font2 }, font1);

            Assert.IsTrue(newSymboler.IncludeNumbers);
            Assert.IsTrue(newSymboler.IncludeLetters);
            Assert.IsFalse(newSymboler.IncludeSymbols);
            Assert.AreEqual("222", newSymboler.SymbolsFontName);

            SAEWizardSettings.Default.Reset();             // Restore defaults
        }
        public void TestHighlightedCell()
        {
            var font  = SAEResources.GetAllFonts().First();
            var image = new CodedImage {
                Size = new Size(5, 5)
            };
            var symboler = new ImageSymbolsController(new ImageSymbolsManipulator(image), new[] { font }, font);

            using (symboler.SuspendCallManipulations())
            {
                symboler.IncludeLetters = true;
                symboler.IncludeNumbers = false;
                symboler.IncludeSymbols = false;
            }
            var visualSymbolsController = new VisualSymbolsController(symboler, new Size(100, 150));

            visualSymbolsController.OnShift(new Point(50, 20));
            Assert.AreEqual(new Point(1, 0), visualSymbolsController.HighlightedCell);

            visualSymbolsController.OnShift(new Point(50, 100));
            Assert.AreEqual(new Point(1, 3), visualSymbolsController.HighlightedCell);
        }
예제 #13
0
        /// <summary>
        /// Creates custom cursor.
        /// </summary>
        /// <param name="cursorType">Cursor type.</param>
        /// <param name="cursorArgb">Cursor color.</param>
        /// <returns>Custom cursor of specified type and color.</returns>
        /// <remarks>Returns Cursors.Default if required resources have not been found.</remarks>
        public static Cursor GetCursor(CursorType cursorType, int cursorArgb)
        {
            var resourceName = GetCursorResourceName(cursorType);

            if (resourceName != null)
            {
                using (var stream = SAEResources.GetRawResourceStream(resourceName))
                {
                    if (stream != null)
                    {
                        var image = IndexedImageExtensions.FromBitmap(new Bitmap(stream));
                        if (image != null)
                        {
                            //ColorCursorImage(image, cursorArgb);
                            return(BitmapToCursor(image.ToBitmap()));
                        }
                    }
                }
            }

            return(Cursors.Default);
        }
예제 #14
0
        public override void TestRestoreManipulationsCore()
        {
            var srcImage = new CodedImage {
                Size = new Size(3, 2)
            };

            srcImage.CompletePalette();
            Assert.AreEqual(1, srcImage.Palette.Count, "Precondition - there should be one color for #00000000.");

            var symboler = new ImageSymbolsManipulator(srcImage);

            Assert.AreSame(symboler.SourceImage, symboler.ManipulatedImage);

            var font = SAEResources.GetAllFonts().First();

            symboler.ApplySymbols(new[] { 'x' }, font);

            Assert.AreEqual('x', srcImage.Palette.First <CodedColor>().SymbolChar);

            int[] pixels;
            using (srcImage.LockPixels(out pixels))
            {
                for (int i = 0; i < pixels.Length; i++)
                {
                    pixels[i] = 0x00ffffff;
                }
            }
            srcImage.CompletePalette();
            srcImage.Palette.SymbolsFont = "abc";

            Assert.AreEqual(1, srcImage.Palette.Count, "There should be one color for #00ffffff.");
            Assert.AreEqual(' ', srcImage.Palette.First <CodedColor>().SymbolChar, "Space should be default symbol for new colors.");
            Assert.AreNotEqual(font.Name, srcImage.Palette.SymbolsFont);

            symboler.RestoreManipulations();

            Assert.AreEqual('x', srcImage.Palette.First <CodedColor>().SymbolChar);
            Assert.AreEqual(font.Name, srcImage.Palette.SymbolsFont);
        }
예제 #15
0
        public void TestApplySymbols()
        {
            var srcImage = new CodedImage {
                Size = new Size(3, 2)
            };

            int[] pixels;
            using (srcImage.LockPixels(out pixels))
            {
                for (int i = 0; i < pixels.Length; i++)
                {
                    pixels[i] = i % 3;
                }
            }
            srcImage.CompletePalette();

            Assert.AreEqual(3, srcImage.Palette.Count, "Precondition - there should be 3 colors.");

            var symboler = new ImageSymbolsManipulator(srcImage);

            Assert.AreSame(symboler.SourceImage, symboler.ManipulatedImage);

            var font = SAEResources.GetAllFonts().First();

            symboler.ApplySymbols(new[] { ' ', '.', 'X' }, font);

            Assert.AreEqual(font.Name, srcImage.Palette.SymbolsFont);

            var colors = srcImage.Palette.OrderByDarknes(true).Cast <CodedColor>().ToArray();

            Assert.AreEqual(3, colors.Length);
            Assert.AreEqual(2, colors[0].Argb);
            Assert.AreEqual(' ', colors[0].SymbolChar);
            Assert.AreEqual(1, colors[1].Argb);
            Assert.AreEqual('.', colors[1].SymbolChar);
            Assert.AreEqual(0, colors[2].Argb);
            Assert.AreEqual('X', colors[2].SymbolChar);
        }
예제 #16
0
        void tabControlRight_Selected(object sender, TabControlEventArgs e)
        {
            if (e.TabPage == tabPageSymbols && scrollControlSymbols.Controller == null)
            {
                scrollControlSymbols.Controller = new VisualSymbolsController(Wizard.ImageSymboler, new Size(scrollControlSymbols.Width, scrollControlSymbols.Height));
                scrollControlSymbols.Controller.VisualImageChanged += Symbols_VisualImageChanged;
            }
            else if (e.TabPage == tabPagePreview && scrollControlGridPreview.Controller == null)
            {
                var patternGridController = new VisualPatternGridController(Wizard.ImageSymboler.Manipulator, Wizard.ImageSymboler.SymbolsFont, SAEResources.GetCrossImage());
                scrollControlGridPreview.Controller = patternGridController;

                switch (patternGridController.PaintMode)
                {
                case PatternGridPainter.StitchesPaintMode.Symbols:
                    buttonSymbols.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.WhiteSymbols:
                    buttonWhiteSymbols.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.ColoredSymbols:
                    buttonColorSymbols.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.HalfTones:
                    buttonHalfTone.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.Full:
                    buttonFull.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.Colors:
                    buttonColors.Checked = true;
                    break;

                case PatternGridPainter.StitchesPaintMode.Cross:
                    buttonCross.Checked = true;
                    break;
                }
                upDownCellSize.TextBoxText = patternGridController.CellSize.ToString();
                checkBoxRulers.Checked     = patternGridController.ShowRulers;
                checkBoxLines.Checked      = patternGridController.ShowLines;
            }
        }