//
// Copyright (c) Antmicro
//
// Full license details are defined in the 'LICENSE' file.
//
using System;
using Xwt.Drawing;

namespace TermSharp
{
    internal class LayoutParameters : ILayoutParameters
    {
        public LayoutParameters(Font font, Color defaultForegroundColor, Color defaultBackgroundColor, Color selectionColor)
        {
            this.font = font;
            this.defaultForegroundColor = defaultForegroundColor;
            this.defaultBackgroundColor = defaultBackgroundColor;
            this.selectionColor = selectionColor;
        }

        public Font Font
        {
            get
            {
                return font;
            }
            set
            {
                if(font == value)
                {
                    return;
                }
                font = value;
                UpdateGeneration();
            }
        }

        public double Width
        {
            get
            {
                return width;
            }
            set
            {
                if(value == width)
                {
                    return;
                }
                width = value;
                UpdateGeneration();
            }
        }

        public Color DefaultForeground
        {
            get
            {
                return defaultForegroundColor;
            }
            set
            {
                if(value == defaultForegroundColor)
                {
                    return;
                }
                defaultForegroundColor = value;
                UpdateGeneration();
            }
        }
        public Color DefaultBackground
        {
            get
            {
                return defaultBackgroundColor;
            }
            set
            {
                if(value == defaultBackgroundColor)
                {
                    return;
                }
                defaultBackgroundColor = value;
                UpdateGeneration();
            }
        }

        public Color SelectionColor
        {
            get
            {
                return selectionColor;
            }
            set
            {
                if(value == selectionColor)
                {
                    return;
                }
                selectionColor = value;
                UpdateGeneration();
            }
        }

        public int Generation
        {
            get
            {
                return generation;
            }
        }

        private void UpdateGeneration()
        {
            generation++;
        }

        private Font font;
        private int generation;
        private Color defaultForegroundColor;
        private Color defaultBackgroundColor;
        private Color selectionColor;
        private double width;
    }
}

