From d85ae61cbca44db848ba9887600808ea2f76419a Mon Sep 17 00:00:00 2001 From: "joogab.yun" Date: Mon, 2 Dec 2024 18:03:27 +0900 Subject: [PATCH] PenWave --- .../src/Internal/Canvas/CanvasRenderer.cs | 24 +- .../{PenWave.cs => Interop.PenWave.cs} | 59 +- .../src/public/Canvas/PenWave.cs | 1631 +++++++++++------ .../src/public/Canvas/PenWaveCanvas.cs | 56 +- .../src/public/Picker/PWToolPicker.cs | 4 +- .../src/public/Picker/PenWaveToolPicker.cs | 642 +++++++ .../src/public/Tools/Command.cs | 53 - .../src/public/Tools/Eraser/EraserTool.cs | 18 +- .../src/public/Tools/ICommand.cs | 35 - .../src/public/Tools/Pencil/PencilTool.cs | 19 +- .../public/Tools/Selection/SelectionTool.cs | 7 +- .../src/public/Tools/Toolbase.cs | 10 +- .../src/public/Tools/UnRedoManager.cs | 33 +- test/Tizen.NUI.PenWave.Sample/screenshot.png | Bin 86366 -> 0 bytes .../screenshot_copy.png | Bin 86366 -> 0 bytes .../src/PenWaveSample.cs | 55 +- 16 files changed, 1875 insertions(+), 771 deletions(-) rename src/Tizen.NUI.PenWave/src/Interop/{PenWave.cs => Interop.PenWave.cs} (92%) create mode 100644 src/Tizen.NUI.PenWave/src/public/Picker/PenWaveToolPicker.cs delete mode 100644 src/Tizen.NUI.PenWave/src/public/Tools/Command.cs delete mode 100644 src/Tizen.NUI.PenWave/src/public/Tools/ICommand.cs delete mode 100644 test/Tizen.NUI.PenWave.Sample/screenshot.png delete mode 100644 test/Tizen.NUI.PenWave.Sample/screenshot_copy.png diff --git a/src/Tizen.NUI.PenWave/src/Internal/Canvas/CanvasRenderer.cs b/src/Tizen.NUI.PenWave/src/Internal/Canvas/CanvasRenderer.cs index 241f002f16d..03bf9a81411 100644 --- a/src/Tizen.NUI.PenWave/src/Internal/Canvas/CanvasRenderer.cs +++ b/src/Tizen.NUI.PenWave/src/Internal/Canvas/CanvasRenderer.cs @@ -51,7 +51,7 @@ internal class CanvasRenderer /// Constructor. Creates a new instance of CanvasRenderer. This constructor sets the current canvas to the specified canvas id. Also it sets paths to resources and initializes textures. /// /// - public CanvasRenderer(uint canvasId) + internal CanvasRenderer(uint canvasId) { this.canvasId = canvasId; engine = PenWave.Instance; @@ -64,7 +64,7 @@ public CanvasRenderer(uint canvasId) /// /// Initializes OpenGL context. This method must be called before any other methods that require OpenGL context. /// - public void InitializeGL() + internal void InitializeGL() { engine.InitializeGL(); } @@ -72,7 +72,7 @@ public void InitializeGL() /// /// Terminates OpenGL context. This method must be called after all methods that require OpenGL context are finished. /// - public void TerminateGL() + internal void TerminateGL() { engine.TerminateGL(); } @@ -82,7 +82,7 @@ public void TerminateGL() /// /// /// - public int RenderFrame(in DirectRenderingGLView.RenderCallbackInput input) + internal int RenderFrame(in DirectRenderingGLView.RenderCallbackInput input) { return engine.RenderFrameGL(); } @@ -92,7 +92,7 @@ public int RenderFrame(in DirectRenderingGLView.RenderCallbackInput input) /// /// /// - public void Resize(int width, int height) + internal void Resize(int width, int height) { engine.UpdateGLWindowSize(width, height); engine.RenderFullyReDraw(); @@ -101,7 +101,7 @@ public void Resize(int width, int height) /// /// Clears the current canvas. All strokes and pictures will be removed. /// - public void ClearCanvas() + internal void ClearCanvas() { engine.ClearCurrentCanvas(); } @@ -110,7 +110,7 @@ public void ClearCanvas() /// Adds picture /// /// - public void AddPicture(string path, Size2D size, Position2D position) + internal void AddPicture(string path, Size2D size, Position2D position) { engine.AddPicture(path, position.X, position.Y, size.Width, size.Height); } @@ -119,7 +119,7 @@ public void AddPicture(string path, Size2D size, Position2D position) /// Toggles the grid /// /// - public void ToggleGrid(GridDensityType gridType) + internal void ToggleGrid(GridDensityType gridType) { engine.ToggleGrid((int)gridType); } @@ -128,7 +128,7 @@ public void ToggleGrid(GridDensityType gridType) /// Sets the canvas background color /// /// - public void SetCanvasColor(Color color) + internal void SetCanvasColor(Color color) { engine.CanvasSetColor(ToHex(color), 1.0f); } @@ -137,7 +137,7 @@ public void SetCanvasColor(Color color) /// Saves the canvas /// /// - public void SaveCanvas(string path) + internal void SaveCanvas(string path) { engine.SaveCanvas(canvasId, path); } @@ -146,7 +146,7 @@ public void SaveCanvas(string path) /// Loads the canvas from the specified path. /// /// - public void LoadCanvas(string path) + internal void LoadCanvas(string path) { if (!File.Exists(path)) { @@ -167,7 +167,7 @@ public void LoadCanvas(string path) /// /// /// - public void TakeScreenShot(string path, int x, int y, int width, int height, PenWave.ThumbnailSavedCallback callback) + internal void TakeScreenShot(string path, int x, int y, int width, int height, PenWave.ThumbnailSavedCallback callback) { engine.TakeScreenshot(canvasId, path, x, y, width, height, callback); } diff --git a/src/Tizen.NUI.PenWave/src/Interop/PenWave.cs b/src/Tizen.NUI.PenWave/src/Interop/Interop.PenWave.cs similarity index 92% rename from src/Tizen.NUI.PenWave/src/Interop/PenWave.cs rename to src/Tizen.NUI.PenWave/src/Interop/Interop.PenWave.cs index db40f94b37f..4cd3801c1fb 100644 --- a/src/Tizen.NUI.PenWave/src/Interop/PenWave.cs +++ b/src/Tizen.NUI.PenWave/src/Interop/Interop.PenWave.cs @@ -12,9 +12,9 @@ namespace Tizen.NUI.PenWave { internal static partial class Interop { - public static partial class PenWave + internal static partial class PenWave { - public const string Lib = "libhand-drawing-engine.so"; + private const string Lib = "libhand-drawing-engine.so"; [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "InitializeGL")] public static extern void InitializeGL(); @@ -72,8 +72,9 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CanvasGetZoomValue")] public static extern int CanvasGetZoomValue(); + [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CanvasSetZoomValue")] - public static extern float CanvasSetZoomValue(float zoomValue); + public static extern void CanvasSetZoomValue(float zoomValue); [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CanvasMoveBegin")] public static extern bool CanvasMoveBegin(); @@ -122,9 +123,6 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "GetBrushSize")] public static extern float GetBrushSize(); - [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "GetBrushColor")] - public static extern float GetBrushColor([MarshalAs(UnmanagedType.LPStr)] StringBuilder hex); - [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "GetBrushType")] public static extern int GetBrushType(); @@ -143,10 +141,8 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CreateCanvas")] public static extern uint CreateCanvas(int canvasWidth, int canvasHeight); - // #if PICTURE [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CreateCanvasWithBackgroundImage")] public static extern uint CreateCanvasWithBackgroundImage([MarshalAs(UnmanagedType.LPStr)] string path); - // #endif [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "SetCurrentCanvas")] public static extern void SetCurrentCanvas(uint canvasID); @@ -223,13 +219,13 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "ToggleGrid")] public static extern void ToggleGrid(int densityType); - // #if CHART + //CHART [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "ToggleChartGrid")] public static extern void ToggleChartGrid(int densityType); [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "GetChartGridDensity")] public static extern int GetChartGridDensity(); - // #endif + // [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "Dump")] public static extern void Dump(); @@ -249,7 +245,7 @@ public static partial class PenWave [return:MarshalAs(UnmanagedType.I1)] public static extern bool Remove(); - // #if CHART + //CHART [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "AddChart")] public static extern void AddChart(int chartType, [MarshalAs(UnmanagedType.LPStr)] string path); @@ -258,21 +254,21 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "ChartPosition")] public static extern void ChartPosition(ref float x, ref float y); - // #endif + // - // #if PICTURE + // PICTURE [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "PlacePicture")] public static extern void AddPicture([MarshalAs(UnmanagedType.LPStr)] string path, float x, float y, float width, float height); [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "SetCanvasBackground")] public static extern void SetCanvasBackground([MarshalAs(UnmanagedType.LPStr)] string path, float x, float y, float width, float height); - // #endif + // - // #if TEXT + // TEXT [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "AddText")] public static extern void AddText([MarshalAs(UnmanagedType.LPStr)] string text, float x, float y, float size); - // #endif - // #if NOTES + // + // NOTES [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "AddNote")] public static extern uint AddNote(float x, float y, float w, float h); @@ -296,7 +292,7 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "TouchedNote")] public static extern uint TouchedNote(float x, float y); - // #endif + // [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "Undo")] [return:MarshalAs(UnmanagedType.I1)] @@ -306,6 +302,15 @@ public static partial class PenWave [return:MarshalAs(UnmanagedType.I1)] public static extern bool Redo(); + [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CanUndo")] + [return:MarshalAs(UnmanagedType.I1)] + public static extern bool CanUndo(); + + [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "CanRedo")] + [return:MarshalAs(UnmanagedType.I1)] + public static extern bool CanRedo(); + + [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "ResetUndo")] public static extern void ResetUndo(); @@ -343,24 +348,6 @@ public static partial class PenWave [global::System.Runtime.InteropServices.DllImport(Lib, EntryPoint = "ResetProfiler")] public static extern void ResetProfiler(); - - //Wrappers for Marshalled APIS - // public static void GetConfigurations(out ConfigParameter[] configParameters, out int count) - // { - // IntPtr configArrayPtr = GetAllConfigurations(); - // int engineConfigCount = GetConfigurationCount(); - // count = engineConfigCount; - - // ConfigParameter[] configArray = new ConfigParameter[count]; - - // for (int i = 0; i < count; i++) - // { - // configArray[i] = Marshal.PtrToStructure(configArrayPtr); - // configArrayPtr += Marshal.SizeOf(); - // } - - // configParameters = configArray; - // } } } } diff --git a/src/Tizen.NUI.PenWave/src/public/Canvas/PenWave.cs b/src/Tizen.NUI.PenWave/src/public/Canvas/PenWave.cs index efaeec7cad3..9b23f614baf 100644 --- a/src/Tizen.NUI.PenWave/src/public/Canvas/PenWave.cs +++ b/src/Tizen.NUI.PenWave/src/public/Canvas/PenWave.cs @@ -11,583 +11,1058 @@ namespace Tizen.NUI.PenWave { - public class PenWave - { - /// - /// The delegate for the thumbnail saved callback. - /// - [UnmanagedFunctionPointer(CallingConvention.StdCall)] - [EditorBrowsable(EditorBrowsableState.Never)] - public delegate void ThumbnailSavedCallback(); - - private static readonly PenWave instance = new PenWave(); - private PenWave() { } - - /// - /// Gets the singleton instance of PenWave. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public static PenWave Instance => instance; - - /// - /// Initializes the PenWave library. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public void InitializeGL() - { - Interop.PenWave.InitializeGL(); - } - - /// - /// Renders the frame using OpenGL. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public int RenderFrameGL() - { - return Interop.PenWave.RenderFrameGL(); - } - - /// - /// Renders the fully redraw frame using OpenGL. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public void RenderFullyReDraw() - { - Interop.PenWave.RenderFullyReDraw(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void TerminateGL() - { - Interop.PenWave.TerminateGL(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void UpdateGLWindowSize(int w, int h) - { - Interop.PenWave.UpdateGLWindowSize(w, h); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void UpdateGLWindowOrientation(int angle) - { - Interop.PenWave.UpdateGLWindowOrientation(angle); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint BeginShapeDraw(float x, float y, uint time = 1) - { - return Interop.PenWave.BeginShapeDraw(x, y, time); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int DrawShape(uint shapeID, float x, float y, uint time = 1) - { - return Interop.PenWave.DrawShape(shapeID, x, y, time); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int EndShapeDraw(uint shapeID, uint time = 1) - { - return Interop.PenWave.EndShapeDraw(shapeID, time); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void StopErasing() - { - Interop.PenWave.StopErasing(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool EraseShape(int x, int y, float radius, bool partial) - { - return Interop.PenWave.EraseShape(x, y, radius, partial); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint AddRectanglePath(float xStart, float yStart, float x, float y, bool finished) - { - return Interop.PenWave.AddRectanglePath(xStart, yStart, x, y, finished); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint AddArcPath(float xCenter, float yCenter, float radius, float x, float y, bool finished) - { - return Interop.PenWave.AddArcPath(xCenter, yCenter, radius, x, y, finished); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int ResizeShapePath(uint shapeID, float x, float y) - { - return Interop.PenWave.ResizeShapePath(shapeID, x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int FinishShapePath(uint shapeID) - { - return Interop.PenWave.FinishShapePath(shapeID); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasZoomBegin() - { - return Interop.PenWave.CanvasZoomBegin(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasZoom(float x, float y, float zoom, float dx, float dy) - { - return Interop.PenWave.CanvasZoom(x, y, zoom, dx, dy); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasZoomEnd() - { - return Interop.PenWave.CanvasZoomEnd(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int CanvasGetZoomValue() - { - return Interop.PenWave.CanvasGetZoomValue(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public float CanvasSetZoomValue(float zoomValue) - { - return Interop.PenWave.CanvasSetZoomValue(zoomValue); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasMoveBegin() - { - return Interop.PenWave.CanvasMoveBegin(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasMove(int x, int y) - { - return Interop.PenWave.CanvasMove(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanvasMoveEnd() - { - return Interop.PenWave.CanvasMoveEnd(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void CanvasSetColor(string hexColor, float a) - { - Interop.PenWave.CanvasSetColor(hexColor, a); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void CanvasSetSize(int width, int height) - { - Interop.PenWave.CanvasSetSize(width, height); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetResourcePath(string resourcePath) - { - Interop.PenWave.SetResourcePath(resourcePath); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetFontPath(string fontPath) - { - Interop.PenWave.SetFontPath(fontPath); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetTexturePaths(string[] texturePaths, int textureCount) - { - Interop.PenWave.SetTexturePaths(texturePaths, textureCount); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetStrokeSize(float val) - { - Interop.PenWave.SetStrokeSize(val); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetStrokeColor(string hexColor, float a) - { - Interop.PenWave.SetStrokeColor(hexColor, a); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetStrokeType(int brushId) - { - Interop.PenWave.SetStrokeType(brushId); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetBrushTexture(int textureId) - { - Interop.PenWave.SetBrushTexture(textureId); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetBrushDistance(float distance) - { - Interop.PenWave.SetBrushDistance(distance); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetDashArray(string dashArray) - { - Interop.PenWave.SetDashArray(dashArray); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetLineAngle(float angle) - { - Interop.PenWave.SetLineAngle(angle); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public float GetBrushSize() - { - return Interop.PenWave.GetBrushSize(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public float GetBrushColor(StringBuilder hex) - { - return Interop.PenWave.GetBrushColor(hex); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int GetBrushType() - { - return Interop.PenWave.GetBrushType(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int GetBrushTexture() - { - return Interop.PenWave.GetBrushTexture(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public float GetBrushDistance() - { - return Interop.PenWave.GetBrushDistance(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public float GetLineAngle() - { - return Interop.PenWave.GetLineAngle(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int GetShapeCount() - { - return Interop.PenWave.GetShapeCount(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint CreateCanvas(int canvasWidth, int canvasHeight) - { - return Interop.PenWave.CreateCanvas(canvasWidth, canvasHeight); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint CreateCanvasWithBackgroundImage(string path) - { - return Interop.PenWave.CreateCanvasWithBackgroundImage(path); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetCurrentCanvas(uint canvasID) - { - Interop.PenWave.SetCurrentCanvas(canvasID); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ClearCurrentCanvas() - { - Interop.PenWave.ClearCurrentCanvas(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void StartSelectingArea(float x, float y) - { - Interop.PenWave.StartSelectingArea(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ResizeSelectedArea(float x, float y) - { - Interop.PenWave.ResizeSelectedArea(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool InsideSelectedArea(float x, float y) - { - return Interop.PenWave.InsideSelectedArea(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool GetSelectionDimensions(ref float x, ref float y, ref float width, ref float height) - { - return Interop.PenWave.GetSelectionDimensions(ref x, ref y, ref width, ref height); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int TouchedDrawable(float x, float y) - { - return Interop.PenWave.TouchedDrawable(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int SelectDrawable(float x, float y) - { - return Interop.PenWave.SelectDrawable(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int SelectDrawables() - { - return Interop.PenWave.SelectDrawables(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void DragSelectedDrawables(float x, float y) - { - Interop.PenWave.DragSelectedDrawables(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void EndDraging() - { - Interop.PenWave.EndDraging(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool StartRotating(float x, float y) - { - return Interop.PenWave.StartRotating(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool RotateSelected(float x, float y) - { - return Interop.PenWave.RotateSelected(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool EndRotating(float x, float y) - { - return Interop.PenWave.EndRotating(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void StartSelectionScale(bool anchorLeft, bool anchorRight, bool anchorTop, bool anchorBottom, ref float anchorX, ref float anchorY) - { - Interop.PenWave.StartSelectionScale(anchorLeft, anchorRight, anchorTop, anchorBottom, ref anchorX, ref anchorY); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ScaleSelection(float scaleFactorX, float scaleFactorY) - { - Interop.PenWave.ScaleSelection(scaleFactorX, scaleFactorY); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void EndSelectionScale(float scaleFactorX, float scaleFactorY) - { - Interop.PenWave.EndSelectionScale(scaleFactorX, scaleFactorY); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void DropSelectedDrawables() - { - Interop.PenWave.DropSelectedDrawables(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SelectedAreaZoom(float x, float y, float zoom) - { - Interop.PenWave.SelectedAreaZoom(x, y, zoom); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool SaveCanvas(uint canvasID, string path) - { - return Interop.PenWave.SaveCanvas(canvasID, path); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool LoadCanvas(uint canvasID, string path) - { - return Interop.PenWave.LoadCanvas(canvasID, path); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void TakeScreenshot(uint canvasID, string path, int x, int y, int width, int height, ThumbnailSavedCallback thumbSaved) - { - Interop.PenWave.TakeScreenshot(canvasID, path, x, y, width, height, thumbSaved); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ToggleGrid(int densityType) - { - Interop.PenWave.ToggleGrid(densityType); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ToggleChartGrid(int densityType) - { - Interop.PenWave.ToggleChartGrid(densityType); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int GetChartGridDensity() - { - return Interop.PenWave.GetChartGridDensity(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void Dump() - { - Interop.PenWave.Dump(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool Copy() - { - return Interop.PenWave.Copy(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public int Paste(float x, float y) - { - return Interop.PenWave.Paste(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool Cut() - { - return Interop.PenWave.Cut(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool Remove() - { - return Interop.PenWave.Remove(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void AddChart(int chartType, string path) - { - Interop.PenWave.AddChart(chartType, path); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ChangeMode(int mode) - { - Interop.PenWave.ChangeMode(mode); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ChartPosition(ref float x, ref float y) - { - Interop.PenWave.ChartPosition(ref x, ref y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void AddPicture(string path, float x, float y, float width, float height) - { - Interop.PenWave.AddPicture(path, x, y, width, height); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetCanvasBackground(string path, float x, float y, float width, float height) - { - Interop.PenWave.SetCanvasBackground(path, x, y, width, height); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void AddText(string text, float x, float y, float size) - { - Interop.PenWave.AddText(text, x, y, size); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint AddNote(float x, float y, float w, float h) - { - return Interop.PenWave.AddNote(x, y, w, h); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void RemoveNote(uint noteID) - { - Interop.PenWave.RemoveNote(noteID); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ClearNote() - { - Interop.PenWave.ClearNote(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool DragNote(float x, float y) - { - return Interop.PenWave.DragNote(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool EndNoteDragging() - { - return Interop.PenWave.EndNoteDragging(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetNoteColor(string hexColor, float a) - { - Interop.PenWave.SetNoteColor(hexColor, a); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void SetActiveNote(uint noteID) - { - Interop.PenWave.SetActiveNote(noteID); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public uint TouchedNote(float x, float y) - { - return Interop.PenWave.TouchedNote(x, y); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool Undo() - { - return Interop.PenWave.Undo(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public bool Redo() - { - return Interop.PenWave.Redo(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ResetUndo() - { - Interop.PenWave.ResetUndo(); - } - - [EditorBrowsable(EditorBrowsableState.Never)] - public void ResetRedo() - { - Interop.PenWave.ResetRedo(); - } + /// + /// PenWave class provides functions to draw on the canvas. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class PenWave + { + /// + /// The delegate for the thumbnail saved callback. + /// + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + [EditorBrowsable(EditorBrowsableState.Never)] + public delegate void ThumbnailSavedCallback(); + + private static readonly PenWave instance = new PenWave(); + private PenWave() { } + + /// + /// Gets the singleton instance of PenWave. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public static PenWave Instance => instance; + + /// + /// Initializes the PenWave library. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void InitializeGL() + { + Interop.PenWave.InitializeGL(); + } + + /// + /// Renders the frame using OpenGL. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int RenderFrameGL() + { + return Interop.PenWave.RenderFrameGL(); + } + + /// + /// Renders the fully redraw frame using OpenGL. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void RenderFullyReDraw() + { + Interop.PenWave.RenderFullyReDraw(); + } + + /// + /// Terminates the PenWave library. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void TerminateGL() + { + Interop.PenWave.TerminateGL(); + } + + /// + /// Updates the window size in OpenGL. This should be called when the window is resized. + /// + /// The width + /// The height + [EditorBrowsable(EditorBrowsableState.Never)] + public void UpdateGLWindowSize(int w, int h) + { + Interop.PenWave.UpdateGLWindowSize(w, h); + } + + /// + /// Updates the window orientation in OpenGL. This should be called when the window is rotated. + /// + /// The angle + [EditorBrowsable(EditorBrowsableState.Never)] + public void UpdateGLWindowOrientation(int angle) + { + Interop.PenWave.UpdateGLWindowOrientation(angle); + } + + /// + /// Start point for drawing + /// + /// Point X coordinate + /// Point Y coordinate + /// The time + /// unique shape id + [EditorBrowsable(EditorBrowsableState.Never)] + public uint BeginShapeDraw(float x, float y, uint time = 1) + { + return Interop.PenWave.BeginShapeDraw(x, y, time); + } + + /// + /// Draw points on cavas + /// + /// ID of drawn shape + /// Point X coordinate + /// Point Y coordinate + /// The time + /// + /// 0 No error in adding points + /// 1 Too many points (new shape has to be created) + /// 2 No canvas set + /// 3 No shapes in canvas + /// 4 Bad shapeID (not exists) + /// 5 Object with id=shapeID is not a shape + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int DrawShape(uint shapeID, float x, float y, uint time = 1) + { + return Interop.PenWave.DrawShape(shapeID, x, y, time); + } + + /// + /// Finish shape drawing + /// + /// ID of drawn shape + /// The time + /// + /// 0 No error in adding points + /// 1 Too many points (new shape has to be created) + /// 2 No canvas set + /// 3 No shapes in canvas + /// 4 Bad shapeID (not exists) + /// 5 Object with id=shapeID is not a shape + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int EndShapeDraw(uint shapeID, uint time = 1) + { + return Interop.PenWave.EndShapeDraw(shapeID, time); + } + + /// + /// Stop erasing + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void StopErasing() + { + Interop.PenWave.StopErasing(); + } + + /// + /// Erase selected shape + /// + /// Point X coordinated + /// Point Y coordinated + /// The radius + /// If true, only the touched parts of the shape are erased, otherwise the whole shape is erased. + /// Returns true if erasure was successful. + [EditorBrowsable(EditorBrowsableState.Never)] + public bool EraseShape(int x, int y, float radius, bool partial) + { + return Interop.PenWave.EraseShape(x, y, radius, partial); + } + + /// + /// Adding rectangle with properties of current stroke + /// + /// coordinate of upper left corner of rectangle + /// coordinate of upper left corner of rectangle + /// coordinate of bottom right corner + /// coordinate of bottom right corner + /// true if drawing of rectangle is finished, false when it is set as current shape and has to be call FinishRectanglePath at the end of drawing + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public uint AddRectanglePath(float xStart, float yStart, float x, float y, bool finished) + { + return Interop.PenWave.AddRectanglePath(xStart, yStart, x, y, finished); + } + + /// + /// Adding arc with properties of current stroke + /// + /// coordinate of center of circle + /// coordinate of center of circle + /// radius of circle + /// coordinate of start point + /// coordinate of start point + /// true if drawing of rectangle is finished, false when it is set as current shape and has to be call FinishRectanglePath at the end of drawing + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public uint AddArcPath(float xCenter, float yCenter, float radius, float x, float y, bool finished) + { + return Interop.PenWave.AddArcPath(xCenter, yCenter, radius, x, y, finished); + } + + /// + /// Resize shape on canvas (rectangle or arc) + /// + /// ID of drawn shape + /// Point X coordinate of changed point + /// Point Y coordinate of changed point + /// + /// 0 No error in adding points + /// 1 Too many points (new shape has to be created) + /// 2 No canvas set + /// 3 No shapes in canvas + /// 4 Bad shapeID (not exists) + /// 5 Object with id=shapeID is not a shape + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int ResizeShapePath(uint shapeID, float x, float y) + { + return Interop.PenWave.ResizeShapePath(shapeID, x, y); + } + + /// + /// End drawing shape on cavas (rectangle or arc) + /// + /// ID of drawn shape + /// + /// 0 No error in adding points + /// 1 Too many points (new shape has to be created) + /// 2 No canvas set + /// 3 No shapes in canvas + /// 4 Bad shapeID (not exists) + /// 5 Object with id=shapeID is not a shape + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int FinishShapePath(uint shapeID) + { + return Interop.PenWave.FinishShapePath(shapeID); + } + + /// + /// Zoom Canvas Begin + /// + /// false if some shape is being drawn, true otherwise + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasZoomBegin() + { + return Interop.PenWave.CanvasZoomBegin(); + } + + /// + /// Zoom Canvas Point + /// + /// Point X coordinated + /// Point Y coordinated + /// Zoom level + /// dx + /// dy + /// false if zooming wasn't started with CanvasZoomBegin, true otherwise. + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasZoom(float x, float y, float zoom, float dx, float dy) + { + return Interop.PenWave.CanvasZoom(x, y, zoom, dx, dy); + } + + /// + /// Zoom Canvas End + /// + /// false if zooming wasn't started with CanvasZoomBegin, true otherwise. + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasZoomEnd() + { + return Interop.PenWave.CanvasZoomEnd(); + } + + /// + /// Gets Zoom Canvas Value + /// + /// zoom level + [EditorBrowsable(EditorBrowsableState.Never)] + public int CanvasGetZoomValue() + { + return Interop.PenWave.CanvasGetZoomValue(); + } + + /// + /// Sets Zoom Canvas Value + /// + /// set zoom level + [EditorBrowsable(EditorBrowsableState.Never)] + public void CanvasSetZoomValue(float zoomValue) + { + Interop.PenWave.CanvasSetZoomValue(zoomValue); + } + + /// + /// Move Canvas Begin + /// + /// false if some shape is being drawn, true otherwise + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasMoveBegin() + { + return Interop.PenWave.CanvasMoveBegin(); + } + + /// + /// Move Canvas Area + /// + /// Point X coordinated + /// Point Y coordinated + /// false if moving wasn't started with CanvasMoveBegin, true otherwise. + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasMove(int x, int y) + { + return Interop.PenWave.CanvasMove(x, y); + } + + /// + /// Move Canvas End + /// + /// false if moving wasn't started with CanvasMoveBegin, true otherwise. + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanvasMoveEnd() + { + return Interop.PenWave.CanvasMoveEnd(); + } + + /// + /// Set Canvas Color + /// + /// The rgb color value + /// The alpha value + [EditorBrowsable(EditorBrowsableState.Never)] + public void CanvasSetColor(string hexColor, float a) + { + Interop.PenWave.CanvasSetColor(hexColor, a); + } + + /// + /// Sets canvas size + /// + /// The width + /// The height + [EditorBrowsable(EditorBrowsableState.Never)] + public void CanvasSetSize(int width, int height) + { + Interop.PenWave.CanvasSetSize(width, height); + } + + /// + /// Sets resource path + /// + /// The resource path + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetResourcePath(string resourcePath) + { + Interop.PenWave.SetResourcePath(resourcePath); + } + + /// + /// Sets font path + /// + /// The font path + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetFontPath(string fontPath) + { + Interop.PenWave.SetFontPath(fontPath); + } + + /// + /// Sets the Texture Paths object + /// + /// The texture paths. + /// The number of textures. + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetTexturePaths(string[] texturePaths, int textureCount) + { + Interop.PenWave.SetTexturePaths(texturePaths, textureCount); + } + + /// + /// Sets the radius of stroke line + /// + /// Brush size + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetStrokeSize(float size) + { + Interop.PenWave.SetStrokeSize(size); + } + + /// + /// Sets the stroke color + /// + /// The rgb color value + /// The alpha value + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetStrokeColor(string hexColor, float a) + { + Interop.PenWave.SetStrokeColor(hexColor, a); + } + + /// + /// Sets the stroke type + /// + /// The brush type + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetStrokeType(int brushType) + { + Interop.PenWave.SetStrokeType(brushType); + } + + /// + /// Sets the brush texture + /// + /// The brush texture + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetBrushTexture(int textureId) + { + Interop.PenWave.SetBrushTexture(textureId); + } + + /// + /// Sets the distance between neighbouring textures in brush + /// + /// The brush distance + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetBrushDistance(float distance) + { + Interop.PenWave.SetBrushDistance(distance); + } + + /// + /// Sets used dash array + /// + /// The dash array + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetDashArray(string dashArray) + { + Interop.PenWave.SetDashArray(dashArray); + } + + /// + /// Set the line angle + /// + /// The line angle in degrees + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetLineAngle(float angle) + { + Interop.PenWave.SetLineAngle(angle); + } + + /// + /// Gets Current Brush Size + /// + /// The brush Size + [EditorBrowsable(EditorBrowsableState.Never)] + public float GetBrushSize() + { + return Interop.PenWave.GetBrushSize(); + } + + /// + /// Gets Current Brush Type + /// + /// The brush type + [EditorBrowsable(EditorBrowsableState.Never)] + public int GetBrushType() + { + return Interop.PenWave.GetBrushType(); + } + + /// + /// Gets Current Brush Texture + /// + /// The brush texture + [EditorBrowsable(EditorBrowsableState.Never)] + public int GetBrushTexture() + { + return Interop.PenWave.GetBrushTexture(); + } + + /// + /// Gets the distance between neighbouring textures in brush + /// + /// The brush distance + [EditorBrowsable(EditorBrowsableState.Never)] + public float GetBrushDistance() + { + return Interop.PenWave.GetBrushDistance(); + } + + /// + /// Gets Current Line Angle + /// + /// The line angle + [EditorBrowsable(EditorBrowsableState.Never)] + public float GetLineAngle() + { + return Interop.PenWave.GetLineAngle(); + } + + /// + /// Gets count of shapes on current canvas + /// + /// The shape count + [EditorBrowsable(EditorBrowsableState.Never)] + public int GetShapeCount() + { + return Interop.PenWave.GetShapeCount(); + } + + /// + /// Create Canvas + /// + /// The width + /// The height + /// The canvas ID + [EditorBrowsable(EditorBrowsableState.Never)] + public uint CreateCanvas(int canvasWidth, int canvasHeight) + { + return Interop.PenWave.CreateCanvas(canvasWidth, canvasHeight); + } + + /// + /// Create Canvas with background image from file path. + /// + /// The background image path + /// The canvas ID + [EditorBrowsable(EditorBrowsableState.Never)] + public uint CreateCanvasWithBackgroundImage(string path) + { + return Interop.PenWave.CreateCanvasWithBackgroundImage(path); + } + + /// + /// Sets Current Canvas + /// + /// The canvas ID + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetCurrentCanvas(uint canvasID) + { + Interop.PenWave.SetCurrentCanvas(canvasID); + } + + /// + /// Clear Current Canvas + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ClearCurrentCanvas() + { + Interop.PenWave.ClearCurrentCanvas(); + } + + /// + /// Start Selecting Area + /// + /// Point X coordinate + /// Point Y coordinate + [EditorBrowsable(EditorBrowsableState.Never)] + public void StartSelectingArea(float x, float y) + { + Interop.PenWave.StartSelectingArea(x, y); + } + + /// + /// Resize Current Selected Area + /// + /// Point X coordinate + /// Point Y coordinate + [EditorBrowsable(EditorBrowsableState.Never)] + public void ResizeSelectedArea(float x, float y) + { + Interop.PenWave.ResizeSelectedArea(x, y); + } + + /// + /// Is inside selected area + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if it is inside selected area. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool InsideSelectedArea(float x, float y) + { + return Interop.PenWave.InsideSelectedArea(x, y); + } + + /// + /// Gets screen-space position of top-left corner and size of current selection + /// + /// destination reference for horizontal position or NaN if no selection is present + /// destination reference for vertical position or NaN if no selection is present + /// destination reference for selection width or NaN if no selection is present + /// destination reference for selection height or NaN if no selection is present + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public bool GetSelectionDimensions(ref float x, ref float y, ref float width, ref float height) + { + return Interop.PenWave.GetSelectionDimensions(ref x, ref y, ref width, ref height); + } + + /// + /// TouchedDrawable + /// + /// Point X coordinate + /// Point Y coordinate + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public int TouchedDrawable(float x, float y) + { + return Interop.PenWave.TouchedDrawable(x, y); + } + + /// + /// Select Drawable + /// + /// Point X coordinate + /// Point Y coordinate + /// The DrawableType + [EditorBrowsable(EditorBrowsableState.Never)] + public int SelectDrawable(float x, float y) + { + return Interop.PenWave.SelectDrawable(x, y); + } + + /// + /// Select Drawables + /// + /// The DrawableType + [EditorBrowsable(EditorBrowsableState.Never)] + public int SelectDrawables() + { + return Interop.PenWave.SelectDrawables(); + } + + /// + /// Drag Selected Drawables + /// + /// Point X coordinate + /// Point Y coordinate + [EditorBrowsable(EditorBrowsableState.Never)] + public void DragSelectedDrawables(float x, float y) + { + Interop.PenWave.DragSelectedDrawables(x, y); + } + + /// + /// End Draging + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void EndDraging() + { + Interop.PenWave.EndDraging(); + } + + /// + /// Start rotating selected shapes + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool StartRotating(float x, float y) + { + return Interop.PenWave.StartRotating(x, y); + } + + /// + /// Rotate selected shapes + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool RotateSelected(float x, float y) + { + return Interop.PenWave.RotateSelected(x, y); + } + + /// + /// Finish rotating selected shapes + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool EndRotating(float x, float y) + { + return Interop.PenWave.EndRotating(x, y); + } + + /// + /// Initialize scaling of selected area. + /// Selecting neither or both of left/right or bottom/top anchor will put the anchor in the middle of relevant axis + /// + /// place anchor on the left side of current selection + /// place anchor on the right side of current selection + /// place anchor on the bottom side of current selection + /// place anchor on the top side of current selection + /// x cooridinate of anchor point + /// y cooridinate of anchor point + [EditorBrowsable(EditorBrowsableState.Never)] + public void StartSelectionScale(bool anchorLeft, bool anchorRight, bool anchorTop, bool anchorBottom, ref float anchorX, ref float anchorY) + { + Interop.PenWave.StartSelectionScale(anchorLeft, anchorRight, anchorTop, anchorBottom, ref anchorX, ref anchorY); + } + + /// + /// Scale Selected Area + /// + /// horizontal scale factor relative to initial size + /// vertical scale factor relative to initial size + [EditorBrowsable(EditorBrowsableState.Never)] + public void ScaleSelection(float scaleFactorX, float scaleFactorY) + { + Interop.PenWave.ScaleSelection(scaleFactorX, scaleFactorY); + } + + /// + /// Finalize scaling of selected area + /// + /// horizontal scale factor relative to initial size + /// vertical scale factor relative to initial size + [EditorBrowsable(EditorBrowsableState.Never)] + public void EndSelectionScale(float scaleFactorX, float scaleFactorY) + { + Interop.PenWave.EndSelectionScale(scaleFactorX, scaleFactorY); + } + + /// + /// Drop Selected Drawables + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void DropSelectedDrawables() + { + Interop.PenWave.DropSelectedDrawables(); + } + + /// + /// Zoom Selected Area + /// + /// Point X coordinate + /// Point Y coordinate + /// Zoom lebel + [EditorBrowsable(EditorBrowsableState.Never)] + public void SelectedAreaZoom(float x, float y, float zoom) + { + Interop.PenWave.SelectedAreaZoom(x, y, zoom); + } + + /// + /// Save canvas to file + /// + /// Canvas ID + /// file path + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool SaveCanvas(uint canvasID, string path) + { + return Interop.PenWave.SaveCanvas(canvasID, path); + } + + /// + /// Load canvas from file + /// + /// Canvas ID + /// file path + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool LoadCanvas(uint canvasID, string path) + { + return Interop.PenWave.LoadCanvas(canvasID, path); + } + + /// + /// Take screenshot of canvas to file with given dimensions and save callback function. + /// + /// Canvas ID + /// file path + /// Point X coordinate + /// Point Y coordinate + /// Width + /// Height + /// save callback function + [EditorBrowsable(EditorBrowsableState.Never)] + public void TakeScreenshot(uint canvasID, string path, int x, int y, int width, int height, ThumbnailSavedCallback thumbSaved) + { + Interop.PenWave.TakeScreenshot(canvasID, path, x, y, width, height, thumbSaved); + } + + /// + /// ToggleGrid + /// + /// The density type + [EditorBrowsable(EditorBrowsableState.Never)] + public void ToggleGrid(int densityType) + { + Interop.PenWave.ToggleGrid(densityType); + } + + /// + /// Toggle Chart Grid + /// + /// The density type + [EditorBrowsable(EditorBrowsableState.Never)] + public void ToggleChartGrid(int densityType) + { + Interop.PenWave.ToggleChartGrid(densityType); + } + + /// + /// Gets Chart Grid Density + /// + /// chart grid density + [EditorBrowsable(EditorBrowsableState.Never)] + public int GetChartGridDensity() + { + return Interop.PenWave.GetChartGridDensity(); + } + + /// + /// Copy shape + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Copy() + { + return Interop.PenWave.Copy(); + } + + /// + /// Paste shape in position + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public int Paste(float x, float y) + { + return Interop.PenWave.Paste(x, y); + } + + /// + /// Cut shape + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Cut() + { + return Interop.PenWave.Cut(); + } + + /// + /// Remove shape + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Remove() + { + return Interop.PenWave.Remove(); + } + + /// + /// Add chart + /// + /// chart type + /// path to chart + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddChart(int chartType, string path) + { + Interop.PenWave.AddChart(chartType, path); + } + + /// + /// Change mode + /// + /// mode + [EditorBrowsable(EditorBrowsableState.Never)] + public void ChangeMode(int mode) + { + Interop.PenWave.ChangeMode(mode); + } + + /// + /// Chart Position + /// + /// current chart x position + /// current chart y position + [EditorBrowsable(EditorBrowsableState.Never)] + public void ChartPosition(ref float x, ref float y) + { + Interop.PenWave.ChartPosition(ref x, ref y); + } + + /// + /// Add Picture to canvas with original size and at 0;0 position + /// + /// file path + /// Point X coordinate + /// Point Y coordinate + /// Width + /// Height + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddPicture(string path, float x, float y, float width, float height) + { + Interop.PenWave.AddPicture(path, x, y, width, height); + } + + /// + /// Sets Canvas Background + /// + /// file path + /// file path + /// Point X coordinate + /// Point Y coordinate + /// Width + /// Height + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetCanvasBackground(string path, float x, float y, float width, float height) + { + Interop.PenWave.SetCanvasBackground(path, x, y, width, height); + } + + /// + /// Add Text to canvas + /// + /// The text + /// Point X coordinate + /// Point Y coordinate + /// Text size + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddText(string text, float x, float y, float size) + { + Interop.PenWave.AddText(text, x, y, size); + } + + /// + /// Add Note. + /// + /// Point X coordinate + /// Point Y coordinate + /// Width + /// Height + /// The note ID + [EditorBrowsable(EditorBrowsableState.Never)] + public uint AddNote(float x, float y, float width, float height) + { + return Interop.PenWave.AddNote(x, y, width, height); + } + + /// + /// Remove Note. + /// + /// The note ID + [EditorBrowsable(EditorBrowsableState.Never)] + public void RemoveNote(uint noteID) + { + Interop.PenWave.RemoveNote(noteID); + } + + /// + /// Clear Note. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ClearNote() + { + Interop.PenWave.ClearNote(); + } + + /// + /// Drag the active note. + /// + /// Point X coordinate + /// Point Y coordinate + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool DragNote(float x, float y) + { + return Interop.PenWave.DragNote(x, y); + } + + /// + /// End dragging of the active note. + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool EndNoteDragging() + { + return Interop.PenWave.EndNoteDragging(); + } + + /// + /// Sets color of the active note. + /// + /// hex code of the color + /// alpha value + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetNoteColor(string hexColor, float a) + { + Interop.PenWave.SetNoteColor(hexColor, a); + } + + /// + /// Sets active note. + /// + /// The note ID + [EditorBrowsable(EditorBrowsableState.Never)] + public void SetActiveNote(uint noteID) + { + Interop.PenWave.SetActiveNote(noteID); + } + + /// + /// Undo + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Undo() + { + return Interop.PenWave.Undo(); + } + + /// + /// Redo + /// + /// Returns true if successful. otherwise false + [EditorBrowsable(EditorBrowsableState.Never)] + public bool Redo() + { + return Interop.PenWave.Redo(); + } + + /// + /// CanUndo + /// + /// whether there is an operation to be undone or not + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanUndo() + { + return Interop.PenWave.CanUndo(); + } + + /// + /// CanRedo + /// + /// whether there is an operation to be redone or not + [EditorBrowsable(EditorBrowsableState.Never)] + public bool CanRedo() + { + return Interop.PenWave.CanRedo(); + } + + /// + /// Reset Undo + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ResetUndo() + { + Interop.PenWave.ResetUndo(); + } + + /// + /// Reset Redo + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ResetRedo() + { + Interop.PenWave.ResetRedo(); } + } } diff --git a/src/Tizen.NUI.PenWave/src/public/Canvas/PenWaveCanvas.cs b/src/Tizen.NUI.PenWave/src/public/Canvas/PenWaveCanvas.cs index 08300615327..b5d9fafc66e 100644 --- a/src/Tizen.NUI.PenWave/src/public/Canvas/PenWaveCanvas.cs +++ b/src/Tizen.NUI.PenWave/src/public/Canvas/PenWaveCanvas.cs @@ -29,6 +29,12 @@ namespace Tizen.NUI.PenWave [EditorBrowsable(EditorBrowsableState.Never)] public class PenWaveCanvas : DirectRenderingGLView { + /// + /// The delegate for the thumbnail saved callback. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + private event EventHandler screenShotFinished; + /// /// Events that are triggered when the tool starts an action. /// @@ -117,16 +123,39 @@ public ToolBase Tool } } + /// + /// Notifies that the canvas has started an action. + /// + private void NotifyActionStarted(object sender, EventArgs e) + { + ActionStarted?.Invoke(this, EventArgs.Empty); + } + + /// + /// Notifies that the canvas has finished an action. + /// + private void NotifyActionFinished(object sender, EventArgs e) + { + ActionFinished?.Invoke(this, EventArgs.Empty); + } + + // Event handlers for action started. private void OnStarted(object sender, EventArgs e) { - ActionStarted?.Invoke(this, e); + NotifyActionStarted(sender, e); } // Event handlers for action finished. private void OnFinished(object sender, EventArgs e) { - ActionFinished?.Invoke(this, e); + RegisterUndo(); + NotifyActionFinished(sender, e); + } + + private void RegisterUndo() + { + unredoManager.RegisterUndo(); } /// @@ -135,8 +164,9 @@ private void OnFinished(object sender, EventArgs e) [EditorBrowsable(EditorBrowsableState.Never)] public void ClearCanvas() { - var command = new Command(() => renderer.ClearCanvas()); - unredoManager.Execute(command); + renderer.ClearCanvas(); + RegisterUndo(); + NotifyActionFinished(this, EventArgs.Empty); } /// @@ -198,8 +228,9 @@ public void ToggleGrid(GridDensityType gridType) [EditorBrowsable(EditorBrowsableState.Never)] public void AddPicture(string path, Size2D size, Position2D position) { - var command = new Command(() => renderer.AddPicture(path, size, position)); - unredoManager.Execute(command); + renderer.AddPicture(path, size, position); + RegisterUndo(); + NotifyActionFinished(this, EventArgs.Empty); } /// @@ -209,7 +240,7 @@ public void AddPicture(string path, Size2D size, Position2D position) [EditorBrowsable(EditorBrowsableState.Never)] public void HandleInput(Touch touch) { - currentTool?.HandleInput(touch, unredoManager); + currentTool?.HandleInput(touch); } /// @@ -232,6 +263,7 @@ public void LoadCanvas(string path) renderer.LoadCanvas(path); } + /// /// Takes a screen shot of the canvas and saves it to a file. /// @@ -242,9 +274,15 @@ public void LoadCanvas(string path) /// /// [EditorBrowsable(EditorBrowsableState.Never)] - public void TakeScreenShot(string path, int x, int y, int width, int height, PenWave.ThumbnailSavedCallback callback) + public void TakeScreenShot(string path, int x, int y, int width, int height, EventHandler callback) + { + renderer.TakeScreenShot(path, x, y, width, height, OnTakeScreenShot); + screenShotFinished = callback; + } + + private void OnTakeScreenShot() { - renderer.TakeScreenShot(path, x, y, width, height, callback); + screenShotFinished?.Invoke(this, EventArgs.Empty); } /// diff --git a/src/Tizen.NUI.PenWave/src/public/Picker/PWToolPicker.cs b/src/Tizen.NUI.PenWave/src/public/Picker/PWToolPicker.cs index c2526f6089b..20f1293efd4 100644 --- a/src/Tizen.NUI.PenWave/src/public/Picker/PWToolPicker.cs +++ b/src/Tizen.NUI.PenWave/src/public/Picker/PWToolPicker.cs @@ -105,7 +105,7 @@ public class PWToolPicker : View /// The ToolChanged event. It is triggered when the selected tool changes. /// [EditorBrowsable(EditorBrowsableState.Never)] - public event Action ToolChanged; + public event EventHandler ToolChanged; /// /// Creates a new instance of PWToolPicker. @@ -332,7 +332,7 @@ private void SetTool(ToolBase tool) { canvasView.Tool = tool; ShowToolSettings(tool); - ToolChanged?.Invoke(tool); + ToolChanged?.Invoke(this, EventArgs.Empty); } } diff --git a/src/Tizen.NUI.PenWave/src/public/Picker/PenWaveToolPicker.cs b/src/Tizen.NUI.PenWave/src/public/Picker/PenWaveToolPicker.cs new file mode 100644 index 00000000000..be2dee3aaa0 --- /dev/null +++ b/src/Tizen.NUI.PenWave/src/public/Picker/PenWaveToolPicker.cs @@ -0,0 +1,642 @@ +/* + * Copyright(c) 2024 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +using System; +using System.ComponentModel; +using System.Collections.Generic; +using Tizen.NUI; +using Tizen.NUI.BaseComponents; +using Tizen.NUI.Components; + +namespace Tizen.NUI.PenWave +{ + /// + /// PenWaveToolPicker class provides a user interface for selecting and configuring various drawing tools in the PenWave application. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public class PenWaveToolPicker : View + { + private static readonly string ResourcePath = FrameworkInformation.ResourcePath + "images/light/"; + + // the icons for different brush types + private static readonly Dictionary BrushIconMap = new Dictionary + { + { PencilTool.BrushType.Stroke, "icon_pencil.png" }, + { PencilTool.BrushType.VarStroke, "icon_varstroke_dec.png" }, + { PencilTool.BrushType.VarStrokeInc, "icon_varstroke_inc.png" }, + { PencilTool.BrushType.SprayBrush, "icon_spray.png" }, + { PencilTool.BrushType.DotBrush, "icon_dot.png" }, + { PencilTool.BrushType.DashedLine, "icon_dashed_line.png" }, + { PencilTool.BrushType.Highlighter, "icon_highlighter.png" }, + { PencilTool.BrushType.SoftBrush, "icon_soft_brush.png" }, + { PencilTool.BrushType.SharpBrush, "icon_sharp_brush.png" }, + }; + + // the color palette for brushes + private static readonly List BrushColorMap = new List + { + new Color("#F7B32C"), new Color("#FD5703"), new Color("#DA1727"), + new Color("#FF00A8"), new Color("#74BFB8"), new Color("#4087C5"), + new Color("#070044"), new Color("#0E0E0E") + }; + + // the icons for different eraser types + private static readonly Dictionary EraserIconMap = new Dictionary + { + { EraserTool.EraserType.Partial, "icon_eraser.png" }, + { EraserTool.EraserType.Full, "icon_full_eraser.png" }, + }; + + // the color palette for canvas background color + private static readonly List CanvasColor = new List + { + new Color("#F0F0F0"), new Color("#B7B7B7"), new Color("#E3F2FF"), + new Color("#202022"), new Color("#515151"), new Color("#17234D"), + }; + + // the icons for different grid density types + private static readonly Dictionary GridIconMap = new Dictionary + { + { GridDensityType.Small, "icon_small_grid_density.png" }, + { GridDensityType.Medium, "icon_medium_grid_density.png" }, + { GridDensityType.Large, "icon_large_grid_density.png" }, + }; + + private readonly PenWaveCanvas canvasView; + private readonly Dictionary tools; + + private ImageView selectedButton; + private ImageView undoButton; + private ImageView redoButton; + + + private const string IconStateNormalColor = "#17234d"; + private const string IconStateSelectedColor = "#FF6200"; + private const string IconStateDisabledColor = "#CACACA"; + + + /// + /// The PickerView property. It contains the view that holds the tool buttons. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public View PickerView { get; private set; } + + /// + /// The PopupView property. It contains the view that holds the tool settings. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public View PopupView { get; private set; } + + /// + /// The ToolChanged event. It is triggered when the selected tool changes. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler ToolChanged; + + /// + /// Creates a new instance of PenWaveToolPicker. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public PenWaveToolPicker(PenWaveCanvas canvasView) + { + this.canvasView = canvasView; + tools = new Dictionary(); + + canvasView.ActionFinished += OnFinished; + Initialize(); + } + + // Update UI when action finished. This method is called when the current action is finished. + private void OnFinished(object sender, EventArgs e) + { + UpdateUI(); + } + + // Initialize the tool picker and its components. + private void Initialize() + { + InitializeUI(); + InitializeCanvasTools(); + InitializeTools(); + UpdateUI(); + } + + // Initialize the UI components of the tool picker. + private void InitializeUI() + { + WidthResizePolicy = ResizePolicyType.FillToParent; + HeightResizePolicy = ResizePolicyType.FillToParent; + Layout = new LinearLayout + { + HorizontalAlignment = HorizontalAlignment.Center, + VerticalAlignment = VerticalAlignment.Top, + LinearOrientation = LinearLayout.Orientation.Vertical, + }; + + // Picker View 구성 + PickerView = new View + { + CornerRadius = new Vector4(10, 10, 10, 10), + WidthSpecification = LayoutParamPolicies.WrapContent, + HeightSpecification = LayoutParamPolicies.WrapContent, + Layout = new LinearLayout + { + LinearOrientation = LinearLayout.Orientation.Horizontal, + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center + }, + BackgroundImage = ResourcePath + "menu_bg.png", + }; + PickerView.TouchEvent += (s, e) => { return true; }; // Prevent touch events from propagating to the canvas view + + // Popup View 구성 + PopupView = new View + { + WidthSpecification = LayoutParamPolicies.WrapContent, + HeightSpecification = LayoutParamPolicies.WrapContent, + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Vertical, + }, + BackgroundImage = ResourcePath + "canvas_popup_bg.png", + Padding = new Extents(20, 20, 20, 20), + }; + PopupView.Hide(); + PopupView.TouchEvent += (s, e) => { return true; }; // Prevent touch events from propagating to the canvas view + canvasView.TouchEvent += (s, e) => { ClearPopupView(); return false; }; // Hide popup when touching outside it + + Add(PickerView); + Add(PopupView); + canvasView.Add(this); + } + + // Initialize the canvas tools and their corresponding buttons. + private void InitializeCanvasTools() + { + var backgroundColorButton = CreateToolButton(ResourcePath + "icon_color_palette.png", () => + { + ShowPaletteSetting(); + }); + PickerView.Add(backgroundColorButton); + + var gridButton = CreateToolButton(ResourcePath + "icon_medium_grid_density.png", () => + { + ShowGridSetting(); + }); + PickerView.Add(gridButton); + + undoButton = CreateToolButton(ResourcePath + "icon_undo.png", () => + { + canvasView.Undo(); + UpdateUI(); + }); + PickerView.Add(undoButton); + + redoButton = CreateToolButton(ResourcePath + "icon_redo.png", () => + { + canvasView.Redo(); + UpdateUI(); + }); + PickerView.Add(redoButton); + + var clearButton = CreateToolButton(ResourcePath + "icon_clear.png", () => + { + canvasView.ClearCanvas(); + UpdateUI(); + }); + PickerView.Add(clearButton); + } + + // Show the color palette setting for the canvas background color. + private void ShowPaletteSetting() + { + ClearPopupView(); + + PopupView.Show(); + + var colorPicker = new View + { + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Horizontal, + } + }; + + foreach (var color in CanvasColor) + { + var button = new ImageView + { + Size2D = new Size2D(48, 48), + Color = color, + ResourceUrl = ResourcePath + "/color_icon_base.png", + }; + button.TouchEvent += (s, e) => + { + if (e.Touch.GetState(0) == PointStateType.Down) + { + canvasView.SetCanvasColor(color); + } + return true; + }; + + colorPicker.Add(button); + } + + PopupView.Add(colorPicker); + } + + // Show the grid density setting for the canvas grid. + private void ShowGridSetting() + { + ClearPopupView(); + + PopupView.Show(); + + var gridPicker = new View + { + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Horizontal, + } + }; + + foreach (var icon in GridIconMap) + { + var button = CreateToolButton(ResourcePath + icon.Value, () => + { + canvasView.ToggleGrid(icon.Key); + }); + gridPicker.Add(button); + } + + PopupView.Add(gridPicker); + } + + // Initialize the tools and add them to the tool picker. Each tool has its own settings and behavior. + private void InitializeTools() + { + var pencilToll = new PencilTool(PencilTool.BrushType.Stroke, Color.Black, 3.0f); + var eraserTool = new EraserTool(EraserTool.EraserType.Partial, 48.0f); + var selectionTool = new SelectionTool(SelectionTool.SelectionType.Move); + AddTool(pencilToll, "icon_pencil.png"); + AddTool(eraserTool, "icon_eraser.png"); + AddTool(selectionTool, "icon_select.png"); + + canvasView.Tool = pencilToll; + } + + // Add a tool to the tool picker and create a button for it. The button will be used to select the tool and show its settings. + private void AddTool(ToolBase tool, string icon) + { + tools[tool.GetType()] = tool; + + var toolButton = CreateToolButton(ResourcePath + icon, () => + { + SetTool(tool); + }); + PickerView.Add(toolButton); + + } + + // Set the current tool of the canvas view and show its settings. + private void SetTool(ToolBase tool) + { + if (tools.ContainsKey(tool.GetType())) + { + canvasView.Tool = tool; + ShowToolSettings(tool); + ToolChanged?.Invoke(this, EventArgs.Empty); + } + } + + // Show the settings for the given tool in the popup view. Each tool has its own settings and behavior. + private void ShowToolSettings(ToolBase tool) + { + ClearPopupView(); + + if (tool is PencilTool pencilTool) + ShowPencilToolSettings(pencilTool); + else if (tool is EraserTool eraserTool) + ShowEraserToolSettings(eraserTool); + else if (tool is SelectionTool selectionTool) + ShowSelectionToolSettings(selectionTool); + + PopupView.Show(); + } + + // Show the settings for the pencil tool in the popup view. The pencil tool has brush type, color, and size settings. + private void ShowPencilToolSettings(PencilTool pencilTool) + { + AddBrushPicker(pencilTool); + AddColorPicker(pencilTool); + AddSizeSlider(pencilTool); + } + + // Show the settings for the eraser tool in the popup view. The eraser tool has eraser type and size settings. + private void ShowEraserToolSettings(EraserTool eraserTool) + { + AddEraserTypePicker(eraserTool); + AddSizeSlider(eraserTool); + } + + // Show the settings for the selection tool in the popup view. The selection tool has selection type settings. + private void ShowSelectionToolSettings(SelectionTool selectionTool) + { + AddSelectionTypePicker(selectionTool); + } + + // Create a button for the given tool and add it to the popup view. + private void AddBrushPicker(PencilTool pencilTool) + { + var brushPicker = new View + { + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Horizontal, + } + }; + + foreach (var icon in BrushIconMap) + { + var button = CreateToolButton(ResourcePath + icon.Value, () => + { + pencilTool.Brush = icon.Key; + pencilTool.Activate(); + }); + brushPicker.Add(button); + } + + PopupView.Add(brushPicker); + } + + // Create a button for the given color and add it to the popup view. + private void AddColorPicker(PencilTool pencilTool) + { + var colorPicker = new View + { + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Horizontal, + } + }; + + foreach (var color in BrushColorMap) + { + var button = new ImageView + { + Size2D = new Size2D(48, 48), + Color = color, + ResourceUrl = ResourcePath + "/color_icon_base.png", + }; + button.TouchEvent += (s, e) => + { + if (e.Touch.GetState(0) == PointStateType.Down) + { + pencilTool.BrushColor = color; + pencilTool.Activate(); + } + return true; + }; + + colorPicker.Add(button); + } + + PopupView.Add(colorPicker); + } + + // Create a slider for the given tool and add it to the popup view. The slider controls the size of the tool. + private void AddSizeSlider(ToolBase tool) + { + + var slider = new Slider + { + WidthSpecification = 300 + }; + if (tool is PencilTool pencilTool) + { + slider.MinValue = 1; + slider.MaxValue = 20; + slider.CurrentValue = pencilTool.BrushSize; + } + else if (tool is EraserTool eraserTool) + { + slider.MinValue = 10; + slider.MaxValue = 100; + slider.CurrentValue = eraserTool.EraserRadius; + } + + slider.ValueChanged += (s, e) => + { + if (tool is PencilTool pencilTool) + { + pencilTool.BrushSize = e.CurrentValue; + } + else if (tool is EraserTool eraserTool) + { + eraserTool.EraserRadius = e.CurrentValue; + } + + tool.Activate(); + }; + + PopupView.Add(slider); + } + + // Create a button for the given eraser type and add it to the popup view. The button toggles between partial and full eraser modes. + private void AddEraserTypePicker(EraserTool eraserTool) + { + var eraserPicker = new View + { + Layout = new LinearLayout + { + VerticalAlignment = VerticalAlignment.Center, + HorizontalAlignment = HorizontalAlignment.Center, + LinearOrientation = LinearLayout.Orientation.Horizontal, + } + }; + + foreach (var icon in EraserIconMap) + { + var button = CreateToolButton(ResourcePath + icon.Value, () => + { + eraserTool.Eraser = eraserTool.Eraser == EraserTool.EraserType.Partial + ? EraserTool.EraserType.Full + : EraserTool.EraserType.Partial; + eraserTool.Activate(); + }); + eraserPicker.Add(button); + } + PopupView.Add(eraserPicker); + } + + // Create a button for the given selection type and add it to the popup view. The button toggles between move, resize, and rotate modes. + private void AddSelectionTypePicker(SelectionTool selectionTool) + { + var picker = new View + { + Layout = new LinearLayout + { + LinearOrientation = LinearLayout.Orientation.Horizontal + } + }; + + var types = Enum.GetValues(typeof(SelectionTool.SelectionType)); + foreach (SelectionTool.SelectionType type in types) + { + var button = CreateToolButton(ResourcePath + $"icon_{type.ToString().ToLower()}.png", () => + { + selectionTool.Selection = type; + }); + picker.Add(button); + } + + PopupView.Add(picker); + } + + /// + /// Add a button to the picker view with the given icon path and click action. + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddButtonToPickerView(string iconPath, Action OnClick) + { + var button = CreateToolButton(iconPath, OnClick); + PickerView.Add(button); + } + + /// + /// Add a button to the picker view with the given view. + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddViewToPickerView(View view) + { + PickerView.Add(view); + } + + /// + /// Add a button to the popup view with the given icon path and click action. + /// + /// + /// + public void AddButtonToPopupView(string iconPath, Action OnClick) + { + var button = CreateToolButton(iconPath, OnClick); + PopupView.Add(button); + } + + /// + /// Add a button to the popup view with the given icon path and click action. + /// + /// + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void AddViewToPopupView(View view) + { + PopupView.Add(view); + } + + /// + /// Create a tool button with the given icon path and click action. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + private ImageView CreateToolButton(string iconPath, Action OnClick) + { + var button = new ImageView + { + Size2D = new Size2D(48, 48), + ResourceUrl = iconPath, + Color = new Color(IconStateNormalColor), + }; + + button.TouchEvent += (s, e) => + { + if (e.Touch.GetState(0) == PointStateType.Down) + { + if (selectedButton != null) + { + selectedButton.Color = new Color(IconStateNormalColor); + } + selectedButton = button; + button.Color = new Color(IconStateSelectedColor); + OnClick?.Invoke(); + } + return true; + }; + + return button; + } + + // Update the UI based on the current state of the canvas view. This includes updating the selected tool, the undo/redo buttons, and the tool settings. + private void UpdateUI() + { + ClearPopupView(); + // Update undo/redo buttons state and colors + if (undoButton != null) + { + undoButton.Color = canvasView.CanUndo ? new Color(IconStateNormalColor) : new Color(IconStateDisabledColor); + } + + if (redoButton != null) + { + redoButton.Color = canvasView.CanRedo ? new Color(IconStateNormalColor) : new Color(IconStateDisabledColor); + } + + } + + /// + /// Clear the popup view and hide it. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ClearPopupView() + { + int childNum = (int)PopupView.ChildCount; + for (int i = childNum - 1; i >= 0; i--) + { + PopupView.Remove(PopupView.GetChildAt((uint)i)); + } + PopupView.Hide(); + } + + /// + /// Show the popup view. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public void ShowPopupView() + { + PopupView.Show(); + } + + // Dispose the tool picker and its components. + protected override void Dispose(DisposeTypes type) + { + if(disposed) return; + canvasView.ActionFinished -= OnFinished;; + base.Dispose(type); + } + } +} diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/Command.cs b/src/Tizen.NUI.PenWave/src/public/Tools/Command.cs deleted file mode 100644 index b8879c25f82..00000000000 --- a/src/Tizen.NUI.PenWave/src/public/Tools/Command.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright(c) 2024 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -using System; -using System.ComponentModel; - -namespace Tizen.NUI.PenWave -{ - /// - /// Represents a command that can be executed. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public class Command : ICommand - { - /// - /// The action to be executed when command is invoked. - /// - internal readonly Action executeAction; - - /// - /// Constructor. - /// - /// The action to be executed when the command is invoked. - [EditorBrowsable(EditorBrowsableState.Never)] - public Command(Action executeAction) - { - this.executeAction = executeAction; - } - - /// - /// Executes the command. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public void Execute() - { - executeAction?.Invoke(); - } - } -} diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/Eraser/EraserTool.cs b/src/Tizen.NUI.PenWave/src/public/Tools/Eraser/EraserTool.cs index 41fefd582da..356a17c1542 100644 --- a/src/Tizen.NUI.PenWave/src/public/Tools/Eraser/EraserTool.cs +++ b/src/Tizen.NUI.PenWave/src/public/Tools/Eraser/EraserTool.cs @@ -29,6 +29,9 @@ namespace Tizen.NUI.PenWave [EditorBrowsable(EditorBrowsableState.Never)] public class EraserTool : ToolBase { + /// The current state of the tool. + private bool isActive = false; + /// /// The type of eraser tool. /// @@ -82,7 +85,7 @@ public override void Deactivate() /// Handle input events. /// [EditorBrowsable(EditorBrowsableState.Never)] - internal override void HandleInput(Touch touch, UnRedoManager unredoManager) + public override void HandleInput(Touch touch) { if (touch == null || touch.GetPointCount() == 0) return; @@ -106,8 +109,7 @@ internal override void HandleInput(Touch touch, UnRedoManager unredoManager) break; case PointStateType.Up: case PointStateType.Leave: - var command = new Command(() => EndDrawing()); - unredoManager.Execute(command); + EndDrawing(); break; } } @@ -115,6 +117,7 @@ internal override void HandleInput(Touch touch, UnRedoManager unredoManager) // Start drawing at the given position. private void StartDrawing(Vector2 position, uint touchTime) { + isActive = true; PenWave.Instance.EraseShape((int)position.X, (int)position.Y, EraserRadius, (Eraser == EraserType.Partial)); NotifyActionStarted(); } @@ -128,10 +131,13 @@ private void ContinueDrawing(Vector2 position, uint touchTime) // End drawing at the given position. private void EndDrawing() { - PenWave.Instance.StopErasing(); - NotifyActionFinished(); + if (isActive) + { + PenWave.Instance.StopErasing(); + NotifyActionFinished(); + isActive = false; + } } - } } diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/ICommand.cs b/src/Tizen.NUI.PenWave/src/public/Tools/ICommand.cs deleted file mode 100644 index cf9847d230a..00000000000 --- a/src/Tizen.NUI.PenWave/src/public/Tools/ICommand.cs +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright(c) 2024 Samsung Electronics Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -using System; -using System.ComponentModel; - -namespace Tizen.NUI.PenWave -{ - /// - /// Commands that can be executed. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - public interface ICommand - { - /// - /// Executes the command. - /// - [EditorBrowsable(EditorBrowsableState.Never)] - void Execute(); - } -} diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/Pencil/PencilTool.cs b/src/Tizen.NUI.PenWave/src/public/Tools/Pencil/PencilTool.cs index da574e59b98..2d497f82b4a 100644 --- a/src/Tizen.NUI.PenWave/src/public/Tools/Pencil/PencilTool.cs +++ b/src/Tizen.NUI.PenWave/src/public/Tools/Pencil/PencilTool.cs @@ -133,7 +133,8 @@ public override void Deactivate() /// /// Handles input from the user. /// - internal override void HandleInput(Touch touch, UnRedoManager unredoManager) + [EditorBrowsable(EditorBrowsableState.Never)] + public override void HandleInput(Touch touch) { if (touch == null || touch.GetPointCount() == 0) return; @@ -157,8 +158,6 @@ internal override void HandleInput(Touch touch, UnRedoManager unredoManager) break; case PointStateType.Up: case PointStateType.Leave: - var command = new Command(() => EndDrawing()); - unredoManager.Execute(command); EndDrawing(); break; } @@ -168,7 +167,10 @@ internal override void HandleInput(Touch touch, UnRedoManager unredoManager) private void StartDrawing(Vector2 position, uint touchTime) { currentShapeId = PenWave.Instance.BeginShapeDraw(position.X, position.Y, touchTime); - NotifyActionStarted(); + if (currentShapeId > 0) + { + NotifyActionStarted(); + } } // Continues drawing the current shape. @@ -192,9 +194,12 @@ private void ContinueDrawing(Vector2 position, uint touchTime) // Ends drawing the current shape. private void EndDrawing() { - PenWave.Instance.EndShapeDraw(currentShapeId, 0); - currentShapeId = 0; - NotifyActionFinished(); + if (currentShapeId > 0) + { + PenWave.Instance.EndShapeDraw(currentShapeId, 0); + currentShapeId = 0; + NotifyActionFinished(); + } } } diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/Selection/SelectionTool.cs b/src/Tizen.NUI.PenWave/src/public/Tools/Selection/SelectionTool.cs index 8eab0dea467..120fd5880e3 100644 --- a/src/Tizen.NUI.PenWave/src/public/Tools/Selection/SelectionTool.cs +++ b/src/Tizen.NUI.PenWave/src/public/Tools/Selection/SelectionTool.cs @@ -23,6 +23,10 @@ namespace Tizen.NUI.PenWave { + /// + /// The selection tool allows the user to select + /// + [EditorBrowsable(EditorBrowsableState.Never)] public class SelectionTool : ToolBase { /// @@ -115,7 +119,8 @@ public override void Deactivate() /// /// /// - internal override void HandleInput(Touch touch, UnRedoManager unredoManager) + [EditorBrowsable(EditorBrowsableState.Never)] + public override void HandleInput(Touch touch) { if (touch == null || touch.GetPointCount() == 0) return; diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/Toolbase.cs b/src/Tizen.NUI.PenWave/src/public/Tools/Toolbase.cs index 253fdfd136f..e6bca257bc8 100644 --- a/src/Tizen.NUI.PenWave/src/public/Tools/Toolbase.cs +++ b/src/Tizen.NUI.PenWave/src/public/Tools/Toolbase.cs @@ -29,19 +29,21 @@ public abstract class ToolBase /// /// Events that are triggered when the tool starts an action. /// - internal event EventHandler ActionStarted; + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler ActionStarted; /// /// Events that are triggered when the tool finishes an action. /// - internal event EventHandler ActionFinished; + [EditorBrowsable(EditorBrowsableState.Never)] + public event EventHandler ActionFinished; /// /// Handles input events such as touch events and updates the state of the tool accordingly. /// /// The touch event data. - /// The manager responsible for handling undo and redo operations. - internal virtual void HandleInput(Touch touch, UnRedoManager unredoManager) {} + [EditorBrowsable(EditorBrowsableState.Never)] + public abstract void HandleInput(Touch touch); /// /// Activates the tool, making it ready to receive input and perform its functionality. diff --git a/src/Tizen.NUI.PenWave/src/public/Tools/UnRedoManager.cs b/src/Tizen.NUI.PenWave/src/public/Tools/UnRedoManager.cs index 9eb3f5c9627..02603d7c4bd 100644 --- a/src/Tizen.NUI.PenWave/src/public/Tools/UnRedoManager.cs +++ b/src/Tizen.NUI.PenWave/src/public/Tools/UnRedoManager.cs @@ -25,35 +25,34 @@ namespace Tizen.NUI.PenWave /// The UnRedoManager class manages undo and redo operations for commands. /// [EditorBrowsable(EditorBrowsableState.Never)] - public class UnRedoManager + internal class UnRedoManager { // Stacks to store undo and redo commands - private readonly Stack undoStack = new Stack(); - private readonly Stack redoStack = new Stack(); + private uint undoStack = 0; + private uint redoStack = 0; /// /// Executes a command and clears the redo stack. /// /// The command to be executed. [EditorBrowsable(EditorBrowsableState.Never)] - public void Execute(ICommand command) + internal void RegisterUndo() { - command.Execute(); - undoStack.Push(command); - redoStack.Clear(); // Clear redo stack after executing a new command + undoStack++; // Push command to undo stack + redoStack = 0; // Clear redo stack after executing a new command } /// /// Undoes the last executed command and pushes it to the redo stack. /// [EditorBrowsable(EditorBrowsableState.Never)] - public void Undo() + internal void Undo() { - if (undoStack.Count > 0) + if (undoStack > 0) { - ICommand command = undoStack.Pop(); + undoStack--; // Pop command from undo stack PenWave.Instance.Undo(); - redoStack.Push(command); + redoStack++; // Push command to redo stack } } @@ -61,13 +60,13 @@ public void Undo() /// Redoes the last undone command and pushes it to the undo stack. /// [EditorBrowsable(EditorBrowsableState.Never)] - public void Redo() + internal void Redo() { - if (redoStack.Count > 0) + if (redoStack > 0) { - ICommand command = redoStack.Pop(); + redoStack--; // Pop command from redo stack PenWave.Instance.Redo(); - undoStack.Push(command); + undoStack++; // Push command to undo stack } } @@ -75,12 +74,12 @@ public void Redo() /// Determines whether an undo operation is possible. /// [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanUndo => undoStack.Count > 0; + internal bool CanUndo => undoStack > 0; /// /// Determines whether a redo operation is possible. /// [EditorBrowsable(EditorBrowsableState.Never)] - public bool CanRedo => redoStack.Count > 0; + internal bool CanRedo => redoStack > 0; } } diff --git a/test/Tizen.NUI.PenWave.Sample/screenshot.png b/test/Tizen.NUI.PenWave.Sample/screenshot.png deleted file mode 100644 index 1f332776d651f7e8f516651f3e6dc3006196acd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86366 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 + mToolPickerView.AddButtonToPickerView(Tizen.Applications.Application.Current.DirectoryInfo.Resource + "images/icon_picture.png", () => { - canvasView.AddPicture(Tizen.Applications.Application.Current.DirectoryInfo.Resource+"images/pictures/venus.png", new Size2D(500, 500), new Position2D(100, 200)); + var picker = new View + { + Layout = new LinearLayout + { + LinearOrientation = LinearLayout.Orientation.Horizontal + } + }; + for (int i=0; i<2; i++) + { + var button = new Button() + { + Text = "test_"+i.ToString(), + }; + button.Clicked += (o, e) => + { + canvasView.AddPicture(Tizen.Applications.Application.Current.DirectoryInfo.Resource+"images/pictures/venus.png", new Size2D(500, 500), new Position2D(100, 200)); + }; + picker.Add(button); + } + mToolPickerView.AddViewToPopupView(picker); + mToolPickerView.ShowPopupView(); }); - mToolPickerView.PickerView.Add(pictureButton); - var screenShotButton = mToolPickerView.CreateToolButton(Tizen.Applications.Application.Current.DirectoryInfo.Resource + "images/icon_picture.png", () => + mToolPickerView.AddButtonToPickerView(Tizen.Applications.Application.Current.DirectoryInfo.Resource + "images/icon_picture.png", () => { - PenWave.ThumbnailSavedCallback ThumbnailsDelegate = OnThumbnails; - canvasView.TakeScreenShot("/home/puro/workspace/submit/TizenFX/test/Tizen.NUI.PenWave.Sample/screenshot.png", 0, 0, 1920, 1080, ThumbnailsDelegate); + canvasView.TakeScreenShot("/home/puro/workspace/submit/TizenFX/test/Tizen.NUI.PenWave.Sample/screenshot.png", 0, 0, 1920, 1080, OnThumbnails); }); - mToolPickerView.PickerView.Add(screenShotButton); } - private void OnThumbnails() + private void OnThumbnails(object sender, EventArgs e) { + Tizen.Log.Error("NUI", $"OnThumbnails\n"); string source = "/home/puro/workspace/submit/TizenFX/test/Tizen.NUI.PenWave.Sample/screenshot.png"; string destination = "/home/puro/workspace/submit/TizenFX/test/Tizen.NUI.PenWave.Sample/screenshot_copy.png"; File.Copy(source, destination, true);