///////////////////////////////////////////////////////////////////////////////// // Paint.NET // // Copyright (C) dotPDN LLC, Rick Brewster, Tom Jackson, and contributors. // // Portions Copyright (C) Microsoft Corporation. All Rights Reserved. // // See license-pdn.txt for full licensing and attribution details. // // // // Ported to Pinta by: Krzysztof Marecki // ///////////////////////////////////////////////////////////////////////////////// using System; using Cairo; using Pinta.Core; namespace Pinta.Effects { //[System.ComponentModel.Composition (typeof (BaseEffect))] public class PosterizeEffect : BaseEffect { UnaryPixelOps.PosterizePixel op = null; public override string Icon { get { return "Menu.Adjustments.Posterize.png"; } } public override string Text { get { return Mono.Unix.Catalog.GetString ("Posterize"); } } public override bool IsConfigurable { get { return true; } } public override EffectAdjustment EffectOrAdjustment { get { return EffectAdjustment.Adjustment; } } public override Gdk.Key AdjustmentMenuKey { get { return Gdk.Key.P; } } public PosterizeData Data { get { return EffectData as PosterizeData; } } public PosterizeEffect () { EffectData = new PosterizeData (); } public override bool LaunchConfiguration () { var dialog = new PosterizeDialog (); dialog.Title = Text; dialog.Icon = PintaCore.Resources.GetIcon (Icon); dialog.EffectData = Data; int response = dialog.Run (); dialog.Destroy (); return (response == (int)Gtk.ResponseType.Ok); } public override void RenderEffect (ImageSurface src, ImageSurface dest, Gdk.Rectangle[] rois) { if (op == null) op = new UnaryPixelOps.PosterizePixel (Data.Red, Data.Green, Data.Blue); op.Apply (dest, src, rois); } } public class PosterizeData : EffectData { public int Red = 16; public int Green = 16; public int Blue = 16; } }