public override void AnalyzeImage(IBitmapCore image) { int points = 100; // TODO: Make option ToneStageOperationParameters pm = (ToneStageOperationParameters)Parameters; if (pm.AutoDarkTone) { mAnalyzedDarkTone = image.FindDarkTone( pm.LightTone, pm.Edge, pm.Softness, pm.AutoDarkCenter, pm.AutoDarkRadius, points); toneselectorwidget1.SelectedDarkTone = mAnalyzedDarkTone; toneselectorwidget1.DarkToneSelectorSymbol = ToneSelectorSymbol.Dot; } if (pm.AutoLightTone) { mAnalyzedLightTone = image.FindLightTone( pm.DarkTone, pm.Edge, pm.Softness, pm.AutoLightCenter, pm.AutoLightRadius, points); toneselectorwidget1.SelectedLightTone = mAnalyzedLightTone; toneselectorwidget1.LightToneSelectorSymbol = ToneSelectorSymbol.Dot; } }
public override bool ReportMouseButton(int x, int y, int width, int height, uint button_id, bool is_down) { if (width == 0 || height == 0) { return(false); } if (is_down) { mIsMouseDown = true; mButtonDown = button_id; mScrCenter = new Point(x, y); mScrSide = new Point(x + 1, y + 1); } else { // Setting the Parameters if (mButtonDown == 1 /* left */) { ToneStageOperationParameters pms = (ToneStageOperationParameters)Parameters; pms.AutoDarkCenter = new Point(mScrCenter.X / width, mScrCenter.Y / height); pms.AutoDarkRadius = Point.Distance(mScrCenter, mScrSide) * 2 / (width + height); pms.AutoDarkTone = true; toneselectorwidget1.DarkToneSelectorSymbol = ToneSelectorSymbol.None; } else if (mButtonDown == 3 /* right */) { ToneStageOperationParameters pms = (ToneStageOperationParameters)Parameters; pms.AutoLightCenter = new Point(mScrCenter.X / width, mScrCenter.Y / height); pms.AutoLightRadius = Point.Distance(mScrCenter, mScrSide) * 2 / (width + height); pms.AutoLightTone = true; toneselectorwidget1.LightToneSelectorSymbol = ToneSelectorSymbol.None; } mIsMouseDown = false; mScrCenter = null; mScrSide = null; } return(true); }
public override void DrawEditor(IBitmapView view) { Gdk.Drawable target = ((FloatPixmapViewWidget)view).GdkWindow; Gdk.Rectangle image_position = ((FloatPixmapViewWidget)view).CurrentImagePosition; ToneStageOperationParameters pms = (ToneStageOperationParameters)Parameters; Gdk.GC gc = new Gdk.GC(target); gc.Function = Gdk.Function.Copy; if (pms.AutoDarkTone) { // Drawing dark selection Point scrDarkCenter = new Point(image_position.X + (int)(pms.AutoDarkCenter.X * view.Image.Width), image_position.Y + (int)(pms.AutoDarkCenter.Y * view.Image.Height)); double scrDarkRadius = pms.AutoDarkRadius * (view.Image.Width + view.Image.Height) / 2; using (Cairo.Context cc = Gdk.CairoHelper.Create(target)) { cc.LineCap = Cairo.LineCap.Round; cc.LineJoin = Cairo.LineJoin.Round; cc.Color = new Cairo.Color(1, 1, 1, 0.3); cc.LineWidth = 3; cc.Arc(scrDarkCenter.X, scrDarkCenter.Y, scrDarkRadius, 0, 2 * Math.PI); cc.ClosePath(); cc.Stroke(); cc.Color = new Cairo.Color(0, 0, 0, 1); cc.LineWidth = 1; cc.SetDash(new double[] { 3, 3 }, 0); cc.Arc(scrDarkCenter.X, scrDarkCenter.Y, scrDarkRadius, 0, 2 * Math.PI); cc.ClosePath(); cc.Stroke(); } } if (pms.AutoLightTone) { // Drawing light selection Point scrLightCenter = new Point(image_position.X + (int)(pms.AutoLightCenter.X * view.Image.Width), image_position.Y + (int)(pms.AutoLightCenter.Y * view.Image.Height)); double scrLightRadius = pms.AutoLightRadius * (view.Image.Width + view.Image.Height) / 2; using (Cairo.Context cc = Gdk.CairoHelper.Create(target)) { cc.LineCap = Cairo.LineCap.Round; cc.LineJoin = Cairo.LineJoin.Round; cc.Color = new Cairo.Color(0, 0, 0, 0.3); cc.LineWidth = 3; cc.Arc(scrLightCenter.X, scrLightCenter.Y, scrLightRadius, 0, 2 * Math.PI); cc.ClosePath(); cc.Stroke(); cc.Color = new Cairo.Color(1, 1, 1, 1); cc.LineWidth = 1; cc.SetDash(new double[] { 3, 3 }, 0); cc.Arc(scrLightCenter.X, scrLightCenter.Y, scrLightRadius, 0, 2 * Math.PI); cc.ClosePath(); cc.Stroke(); } } }