/* * Greenshot - a free and open source screenshot tool * Copyright (C) 2007-2013 Thomas Braun, Jens Klingen, Robin Krom * * For more information see: http://getgreenshot.org/ * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ using Greenshot.Core; using Greenshot.Plugin.Drawing; using System; using System.Collections.Generic; using System.Drawing; using System.IO; using System.Windows.Forms; namespace Greenshot.Plugin { /// /// Alignment Enums for possitioning /// //public enum HorizontalAlignment {LEFT, CENTER, RIGHT}; public enum VerticalAlignment { TOP, CENTER, BOTTOM }; public enum SurfaceMessageTyp { FileSaved, Error, Info, UploadedUri } public class SurfaceMessageEventArgs : EventArgs { public SurfaceMessageTyp MessageType { get; set; } public string Message { get; set; } public ISurface Surface { get; set; } } public class SurfaceElementEventArgs : EventArgs { public IList Elements { get; set; } } public class SurfaceDrawingModeEventArgs : EventArgs { public DrawingModes DrawingMode { get; set; } } public delegate void SurfaceSizeChangeEventHandler(object sender, EventArgs eventArgs); public delegate void SurfaceMessageEventHandler(object sender, SurfaceMessageEventArgs eventArgs); public delegate void SurfaceElementEventHandler(object sender, SurfaceElementEventArgs eventArgs); public delegate void SurfaceDrawingModeEventHandler(object sender, SurfaceDrawingModeEventArgs eventArgs); public enum DrawingModes { None, Rect, Ellipse, Text, Line, Arrow, Crop, Highlight, Obfuscate, Bitmap, Path } /// /// The interface to the Surface object, so Plugins can use it. /// public interface ISurface : IDisposable { event SurfaceSizeChangeEventHandler SurfaceSizeChanged; event SurfaceMessageEventHandler SurfaceMessage; event SurfaceDrawingModeEventHandler DrawingModeChanged; event SurfaceElementEventHandler MovingElementChanged; /// /// Get/Set the image to the Surface /// get will give the image as is currently visible /// set will overwrite both the visible image as the underlying image /// /// important notice: /// The setter will clone the passed bitmap and dispose it when the Surface is disposed /// This means that the supplied image needs to be disposed by the calling code (if needed!) /// Image Image { get; set; } /// /// Get the current Image from the Editor for Exporting (save/upload etc) /// Don't forget to call image.Dispose() when finished!!! /// /// Bitmap Image GetImageForExport(); /// /// Add a TextContainer, at the given location, to the Surface. /// The TextContainer will be "re"sized to the text size. /// /// String to show /// Left, Center, Right /// TOP, CENTER, BOTTOM /// FontFamily /// Font Size in float /// bool true if italic /// bool true if bold /// bool true if shadow /// size of border (0 for none) /// Color of string /// Color of background (e.g. Color.Transparent) ITextContainer AddTextContainer(string text, HorizontalAlignment horizontalAlignment, VerticalAlignment verticalAlignment, FontFamily family, float size, bool italic, bool bold, bool shadow, int borderSize, Color color, Color fillColor); IImageContainer AddImageContainer(Image image, int x, int y); ICursorContainer AddCursorContainer(Cursor cursor, int x, int y); IIconContainer AddIconContainer(Icon icon, int x, int y); IImageContainer AddImageContainer(string filename, int x, int y); ICursorContainer AddCursorContainer(string filename, int x, int y); IIconContainer AddIconContainer(string filename, int x, int y); long SaveElementsToStream(Stream stream); void LoadElementsFromStream(Stream stream); bool HasSelectedElements { get; } void RemoveSelectedElements(); void CutSelectedElements(); void CopySelectedElements(); void PasteElementFromClipboard(); void DuplicateSelectedElements(); void DeselectElement(IDrawableContainer container); void DeselectAllElements(); void SelectElement(IDrawableContainer container); void Invalidate(Rectangle rectangleToInvalidate); void Invalidate(); bool Modified { get; set; } string LastSaveFullPath { get; set; } string UploadURL { get; set; } void RemoveElement(IDrawableContainer elementToRemove, bool makeUndoable); void SendMessageEvent(object source, SurfaceMessageTyp messageType, string message); void ApplyBitmapEffect(IEffect effect); void RemoveCursor(); bool HasCursor { get; } ICaptureDetails CaptureDetails { get; set; } } }