FillOverlayEffect.cs
//
// This code is part of Document Solutions for Word demos.
// Copyright (c) MESCIUS inc. All rights reserved.
//
using System;
using System.IO;
using System.Drawing;
using System.Collections.Generic;
using System.Linq;
using GrapeCity.Documents.Word;

namespace DsWordWeb.Demos
{
    // This example shows how to add fill overlay effect to shapes in a DOCX.
    public class FillOverlayEffect
    {
        public GcWordDocument CreateDocx()
        {
            var doc = new GcWordDocument();

            // Shape fill overlay - direct:
            var p = doc.Body.Paragraphs.Add();
            var run = p.GetRange().Runs.Add();
            var shape = run.GetRange().Shapes.Add(100, 100, GeometryType.Star8);
            shape.Fill.Type = FillType.Solid;
            shape.Fill.SolidFill.RGB = Color.LightBlue;
            // Apply solid fill overlay with another color to mix with the main fill:
            FillOverlay overlay = shape.Effects.FillOverlay;
            overlay.BlendMode = BlendMode.Multiply;
            overlay.Fill.Type = FillType.Solid;
            overlay.Fill.SolidFill.RGB = Color.Yellow;
            p.GetRange().Runs.Add("Shape fill overlay - direct.", doc.Styles[BuiltInStyleId.Strong]);

            // Shape FillOverlay - style effects, fixed color:
            p = doc.Body.Paragraphs.Add();
            p.Style.ParagraphFormat.Spacing.SpaceBefore = 30;
            run = p.GetRange().Runs.Add();
            shape = run.GetRange().Shapes.Add(100, 100, GeometryType.Star8);
            shape.Fill.Type = FillType.Solid;
            shape.Fill.SolidFill.RGB = Color.LightBlue;
            // apply solid fill overlay with another color to mix with the main fill
            var fmtEffect = doc.Theme.FormatScheme.Effects.Add();
            overlay = fmtEffect.FillOverlay;
            overlay.BlendMode = BlendMode.Multiply;
            overlay.Fill.Type = FillType.Solid;
            overlay.Fill.SolidFill.RGB = Color.Yellow;
            shape.Style.Effects.ThemeEffects = fmtEffect;
            p.GetRange().Runs.Add("Shape FillOverlay - style effects, fixed color.", doc.Styles[BuiltInStyleId.Strong]);

            // Shape FillOverlay - style effects, fixed and placeholder color usage, pattern color
            // (BackColor uses fixed color, ForeColor uses placeholder color):
            p = doc.Body.Paragraphs.Add();
            p.Style.ParagraphFormat.Spacing.SpaceBefore = 30;
            run = p.GetRange().Runs.Add();
            shape = run.GetRange().Shapes.Add(100, 100, GeometryType.Star8);
            shape.Fill.Type = FillType.Solid;
            shape.Fill.SolidFill.RGB = Color.LightBlue;
            // Apply pattern fill overlay with another color to mix with the main fill:
            fmtEffect = doc.Theme.FormatScheme.Effects.Add();
            overlay = fmtEffect.FillOverlay;
            overlay.BlendMode = BlendMode.Multiply;
            //
            var foFill = overlay.Fill;
            foFill.Type = FillType.Pattern;
            foFill.PatternFill.Type = PatternFillType.DashedHorizontal;
            foFill.PatternFill.ForeColor.ThemeColor = ThemeColorId.None;
            foFill.PatternFill.BackColor.ThemeColor = ThemeColorId.Accent6;
            //
            shape.Style.Effects.PlaceholderColor.ThemeColor = ThemeColorId.Accent3;
            shape.Style.Effects.PlaceholderColor.Transparency = 0.6f;
            shape.Style.Effects.ThemeEffects = fmtEffect;
            p.GetRange().Runs.Add("Shape FillOverlay - style effects, fixed and placeholder color usage, pattern color.", doc.Styles[BuiltInStyleId.Strong]);

            // Done:
            return doc;
        }
    }
}