private void ChangeSelectedEffect() { if (lbScript.SelectedItem != null) { ConfigToken token = (ConfigToken)theEffectToken; int i = lbScript.SelectedIndex; ScriptStep step = token.effects[i]; Type type = step.EffectType; if (type != null) { Effect effect = (Effect)type.GetConstructor(Type.EmptyTypes).Invoke(new object[0]); effect.EnvironmentParameters = Effect.EnvironmentParameters; effect.Services = Services; if (effect.CheckForEffectFlags(EffectFlags.Configurable)) { try { EffectConfigDialog dialog = effect.CreateConfigDialog(); dialog.EffectSourceSurface = EffectSourceSurface; dialog.Selection = Selection; dialog.Effect = effect; dialog.EffectToken = (EffectConfigToken)step.Token.Clone(); if (effect.Image != null) { dialog.Icon = Icon.FromHandle(((Bitmap)effect.Image).GetHicon()); } if (dialog.ShowDialog(this) == DialogResult.OK) { step.Token = dialog.EffectToken; FinishTokenUpdate(); } } catch (Exception e) { MessageBox.Show(this, "Error occurred in configuration dialog for " + effect.Name + ":\n\n" + e.ToString(), effect.Name + " Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } else { MessageBox.Show(this, step.Name + " is not installed.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
void lbScript_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index >= 0) { e.DrawBackground(); e.DrawFocusRectangle(); ScriptStep step = ((ConfigToken)theEffectToken).effects[e.Index]; Image icon = step.Icon; string text = step.Name; if (step.EffectType == null) //effect wasn't found { e.Graphics.DrawRectangle(Pens.Red, Rectangle.Inflate(e.Bounds, -1, -1)); e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(127, Color.Red)), Rectangle.Inflate(e.Bounds, -1, -1)); icon = SystemIcons.Warning.ToBitmap(); text += " (NOT FOUND)"; } else if (e.Index < progressBars.Count) //draw progress bars { int totalbarwidth = 100; int barheight = e.Bounds.Height * 2 / 3; int progressWidth = totalbarwidth * progressBars[e.Index] / _tilesPerEffect; Rectangle progressBarRect = new Rectangle( e.Bounds.Right - e.Bounds.Height - totalbarwidth, e.Bounds.Top + (e.Bounds.Height - barheight) / 2, progressWidth, barheight); e.Graphics.FillRectangle(Brushes.Green, progressBarRect); progressBarRect.Width = totalbarwidth; e.Graphics.DrawRectangle(SystemPens.ButtonShadow, progressBarRect); } ListBoxDrawIcon(e, icon); ListBoxDrawText(e, text); ListBoxDrawSwatches(e, step.PrimaryColor, step.SecondaryColor); } }
private void EnableScriptControlButtons() { if (lbScript.SelectedIndices.Count == 0) { btnChange.Enabled = false; btnChangeColor.Enabled = false; btnMoveUp.Enabled = false; btnMoveDown.Enabled = false; btnDeleteEffect.Enabled = false; } else if (lbScript.SelectedIndices.Count == 1) { btnChange.Enabled = false; btnChangeColor.Enabled = true; btnMoveUp.Enabled = true; btnMoveDown.Enabled = true; btnDeleteEffect.Enabled = true; //check if the selected effect is configurable ConfigToken token = (ConfigToken)theEffectToken; int i = lbScript.SelectedIndex; ScriptStep step = token.effects[i]; Type type = step.EffectType; if (type != null) { Effect effect = (Effect)type.GetConstructor(Type.EmptyTypes).Invoke(new object[0]); if (effect.CheckForEffectFlags(EffectFlags.Configurable)) { btnChange.Enabled = true; } } } else { btnChange.Enabled = false; btnChangeColor.Enabled = true; btnMoveUp.Enabled = false; btnMoveDown.Enabled = false; btnDeleteEffect.Enabled = true; } }
private void ChangeSelectedEffectColors() { if (lbScript.SelectedItem != null) { ConfigToken token = (ConfigToken)theEffectToken; int i = lbScript.SelectedIndex; ScriptStep step = token.effects[i]; using (TwoColorDialog cd = new TwoColorDialog()) { cd.SetColors(step.PrimaryColor, step.SecondaryColor); if (cd.ShowDialog(this) == DialogResult.OK) { foreach (int index in lbScript.SelectedIndices) { step = token.effects[index]; step.PrimaryColor = cd.Color1; step.SecondaryColor = cd.Color2; } lbScript.Invalidate(); FinishTokenUpdate(); } } } }
public override void Render(EffectConfigToken parameters, RenderArgs dstArgs, RenderArgs srcArgs, Rectangle[] rois, int startIndex, int length) { ConfigToken token = (ConfigToken)parameters; PdnRegion selection = EnvironmentParameters.GetSelection(srcArgs.Bounds); if (changed) { changed = false; if (dialog != null) { dialog.SetProgressBarMaximum(token.effects.Count, tilesPerCpu * renderingThreadCount); dialog.EnableOKButton(false); } using (Surface scratch = new Surface(srcArgs.Size)) { scratch.CopySurface(srcArgs.Surface); for (int i = 0; i < token.effects.Count; ++i) { ScriptStep step = token.effects[i]; Type type = step.EffectType; if (type == null) { if (dialog != null) { dialog.IncrementProgressBarValue(i, 1); } } else { Effect effect = (Effect)(type.GetConstructor(Type.EmptyTypes).Invoke(new object[0])); effect.Services = Services; effect.EnvironmentParameters = new EffectEnvironmentParameters( step.PrimaryColor, step.SecondaryColor, EnvironmentParameters.BrushWidth, selection, EnvironmentParameters.SourceSurface); BackgroundEffectRenderer ber = new BackgroundEffectRenderer(effect, step.Token, dstArgs, new RenderArgs(scratch), selection, null, tilesPerCpu * renderingThreadCount, renderingThreadCount); ber.RenderedTile += (sender, e) => RenderedTile((BackgroundEffectRenderer)sender, i, e.TileCount); ber.Start(); ber.Join(); scratch.CopySurface(dstArgs.Surface); } if (IsCancelRequested) { return; } } if (dialog != null) { dialog.ClearProgressBars(); dialog.EnableOKButton(true); } } } }