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); }
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."); } }
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"); }
/// <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(); } }
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; } }
/// <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}'."); }
/// <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}'."); }
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()); } }
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); }
/// <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); }
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); }
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); }
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; } }