Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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;
            }
        }
Exemple #4
0
 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();
             }
         }
     }
 }
Exemple #5
0
        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);
                    }
                }
            }
        }