/// <summary> /// Initializes this new instance of the Sketch class. /// </summary> internal void Initialize() { // Initialize Oval Style OvalStyle = new KimonoStyle() { StyleType = KimonoStyleType.Standard, HasFill = true, HasFrame = true }; // Configure new Oval Style OvalStyle.Fill.BlendMode = SKBlendMode.SrcOver; OvalStyle.Fill.IsAntialias = true; OvalStyle.FillColor = Orange; OvalStyle.Frame.BlendMode = SKBlendMode.SrcOver; OvalStyle.Frame.IsAntialias = true; OvalStyle.Frame.StrokeWidth = 1f; OvalStyle.Frame.StrokeMiter = 4f; OvalStyle.Frame.StrokeJoin = SKStrokeJoin.Mitter; OvalStyle.Frame.StrokeCap = SKStrokeCap.Butt; OvalStyle.Frame.Color = new SKColor(0, 0, 0, 255); // Property connections for Oval Style. OvalStyle.PropertyConnections.Add(new KimonoPropertyConnection(KimonoPropertyConnectionPoint.FillColor, ColorProperty)); // Initialize Sketch Name = "Sketch"; DrawCanvas = true; Width = 640f; Height = 480f; CanvasColor = new SKColor(255, 255, 255, 255); Portfolio = new KimonoPortfolio(true); Portfolio.Sketches.Add(this); ObiScriptPortfolio.Portfolio = Portfolio; // Draw Oval shape var Oval = new KimonoShapeOval(40.5625f, 47.37891f, 192.1406f, 194.7109f) { RotationDegrees = 0, Visible = true, Style = OvalStyle }; Shapes.Add(Oval); // Accumulate Kimono objects into the portfolio Portfolio.Colors.Add(Orange); Portfolio.Colors.Add(Purple); Portfolio.Styles.Add(OvalStyle); Portfolio.Properties.Add(UseOrange); Portfolio.Properties.Add(ColorProperty); }
/// <summary> /// Attempts to open the file at the specified URL. If the file is currently open /// in a window, that will be brought to the front and selected instead of opening /// another copy of the file. /// </summary> /// <returns><c>true</c>, if file was opened, <c>false</c> otherwise.</returns> /// <param name="url">A <c>NSUrl</c> pointing to the file to open.</param> public bool OpenFile(NSUrl url) { var good = false; // Trap all errors try { var path = url.Path; // Is the file already open? foreach (NSWindow window in NSApplication.SharedApplication.Windows) { var content = window.ContentViewController as ViewController; if (content != null && path == content.FilePath) { // Bring window to front window.MakeKeyAndOrderFront(this); return(true); } } // Load in portfolio var data = File.ReadAllText(path); var portfolio = new KimonoPortfolio(data); // Get new window var storyboard = NSStoryboard.FromName("Main", null); var controller = storyboard.InstantiateControllerWithIdentifier("MainWindow") as NSWindowController; // Display controller.ShowWindow(this); // Load portfolio into the window var viewController = controller.Window.ContentViewController as ViewController; viewController.Surface.Portfolio = portfolio; viewController.View.Window.SetTitleWithRepresentedFilename(Path.GetFileName(path)); viewController.View.Window.RepresentedUrl = url; // Add document to the Open Recent menu NSDocumentController.SharedDocumentController.NoteNewRecentDocumentURL(url); // Make as successful good = true; } catch { // Mark as bad file on error good = false; } // Return results return(good); }
/// <summary> /// Replaces the last undo point with the one being passed in. /// </summary> /// <param name="portfolio">The current state of the <c>KimonoPortfolio</c>.</param> public void ReplaceLastUndoPoint(KimonoPortfolio portfolio) { // Clear the redo stack RedoStack.Clear(); // Save point if (UndoStack.Count > 0) { UndoStack[0] = portfolio; } else { UndoStack.Add(portfolio); } RaiseUndoStateChanged(); }
/// <summary> /// Pushes the undo point onto the stack. /// </summary> /// <param name="portfolio">The current state of the <c>KimonoPortfolio</c>.</param> public void PushUndoPoint(KimonoPortfolio portfolio) { // Clear the redo stack RedoStack.Clear(); // Save point and update UI UndoStack.Insert(0, portfolio.Clone()); RaiseUndoStateChanged(); // Have we reached the maximum number of points? if (UndoStack.Count >= MaximumUndoPoints) { // Yes, discard older points UndoStack.RemoveAt(UndoStack.Count - 1); } }
/// <summary> /// Pops the redo point off the stack. /// </summary> /// <returns>The previous state of the <c>KimonoPortfolio</c>.</returns> /// <param name="portfolio">The current state of the <c>KimonoPortfolio</c>.</param> public KimonoPortfolio PopRedoPoint(KimonoPortfolio portfolio) { // Anything to process? if (!CanRedo) { return(null); } // Grab point var previousVersion = RedoStack[0]; RedoStack.RemoveAt(0); // Save redo point and update UI UndoStack.Insert(0, portfolio); RaiseUndoStateChanged(); // Return point return(previousVersion); }