コード例 #1
0
ファイル: ScreenFactory.cs プロジェクト: Fedorm/core-master
        private void ApplyStyles(string screenName, ILayoutable scr, object cache)
        {
            string cssFile = null;
            var    sheet   = scr as ICustomStyleSheet;

            if (sheet != null)
            {
                if (!string.IsNullOrEmpty(sheet.StyleSheet))
                {
                    cssFile = sheet.StyleSheet;
                }
            }

            TimeStamp.Start("Init styles");

            IStyleSheet styleSheet = InitStyles(screenName, cssFile);

            styleSheet.SetCache((IDisposable)cache);

            TimeStamp.Log("Init styles");
            TimeStamp.Start("Assign styles");

            styleSheet.Assign(scr);

            TimeStamp.Log("Assign styles");
            TimeStamp.Start("Apply styles");

            scr.ApplyStyles(styleSheet, StyleSheetContext.Current.EmptyBound, StyleSheetContext.Current.EmptyBound);

            TimeStamp.Log("Apply styles");
        }
コード例 #2
0
ファイル: LayoutBehaviour.cs プロジェクト: Fedorm/core-master
        public IBound Screen(ILayoutable control, IBound screenBound)
        {
            IStyleSheetHelper  style   = _stylesheet.Helper;
            IStyleSheetContext context = StyleSheetContext.Current;

            float parentW     = screenBound.Width;
            float parentH     = screenBound.Height;
            float paddingL    = style.PaddingLeft(_container, parentW);
            float paddingT    = style.PaddingTop(_container, parentH);
            float paddingR    = style.PaddingRight(_container, parentW);
            float paddingB    = style.PaddingBottom(_container, parentH);
            float borderWidth = style.BorderWidth(_container);

            float w       = style.Width(control, parentW);
            float h       = style.Height(control, parentH);
            float marginL = style.MarginLeft(control, parentW);
            float marginT = style.MarginTop(control, parentH);
            float marginR = style.MarginRight(control, parentW);
            float marginB = style.MarginBottom(control, parentH);

            float maxW = parentW - (marginL + marginR) - (paddingL + paddingR) - 2 * borderWidth;

            if (parentW < paddingL + marginL + w + marginR + paddingR + 2 * borderWidth)
            {
                w = maxW;
            }

            float maxH = parentH - (marginT + marginB) - (paddingT + paddingB) - 2 * borderWidth;

            if (parentH < paddingT + marginT + h + marginB + paddingB + 2 * borderWidth)
            {
                h = maxH;
            }

            float l = borderWidth + paddingL + marginL;
            float t = borderWidth + paddingT + marginT;

            IBound bound = control.ApplyStyles(_stylesheet, context.CreateBound(w, h), context.CreateBound(maxW, maxH));

            w = bound.Width > maxW ? maxW : bound.Width;
            h = bound.Height > maxH ? maxH : bound.Height;

            control.Frame = new Rectangle(l, t, w, h);

            return(screenBound);
        }
コード例 #3
0
ファイル: ScreenFactory.cs プロジェクト: Fedorm/core-master
        private void ApplyStyles(string screenName, ILayoutable scr, object cache)
        {
            string cssFile = null;
            var sheet = scr as ICustomStyleSheet;
            if (sheet != null)
            {
                if (!string.IsNullOrEmpty(sheet.StyleSheet))
                    cssFile = sheet.StyleSheet;
            }

            TimeStamp.Start("Init styles");

            IStyleSheet styleSheet = InitStyles(screenName, cssFile);
            styleSheet.SetCache((IDisposable)cache);

            TimeStamp.Log("Init styles");
            TimeStamp.Start("Assign styles");

            styleSheet.Assign(scr);

            TimeStamp.Log("Assign styles");
            TimeStamp.Start("Apply styles");

            scr.ApplyStyles(styleSheet, StyleSheetContext.Current.EmptyBound, StyleSheetContext.Current.EmptyBound);

            TimeStamp.Log("Apply styles");
        }
コード例 #4
0
ファイル: LayoutBehaviour.cs プロジェクト: Fedorm/core-master
        public IBound Screen(ILayoutable control, IBound screenBound)
        {
            IStyleSheetHelper style = _stylesheet.Helper;
            IStyleSheetContext context = StyleSheetContext.Current;

            float parentW = screenBound.Width;
            float parentH = screenBound.Height;
            float paddingL = style.PaddingLeft(_container, parentW);
            float paddingT = style.PaddingTop(_container, parentH);
            float paddingR = style.PaddingRight(_container, parentW);
            float paddingB = style.PaddingBottom(_container, parentH);
            float borderWidth = style.BorderWidth(_container);

            float w = style.Width(control, parentW);
            float h = style.Height(control, parentH);
            float marginL = style.MarginLeft(control, parentW);
            float marginT = style.MarginTop(control, parentH);
            float marginR = style.MarginRight(control, parentW);
            float marginB = style.MarginBottom(control, parentH);

            float maxW = parentW - (marginL + marginR) - (paddingL + paddingR) - 2 * borderWidth;
            if (parentW < paddingL + marginL + w + marginR + paddingR + 2 * borderWidth)
                w = maxW;

            float maxH = parentH - (marginT + marginB) - (paddingT + paddingB) - 2 * borderWidth;
            if (parentH < paddingT + marginT + h + marginB + paddingB + 2 * borderWidth)
                h = maxH;

            float l = borderWidth + paddingL + marginL;
            float t = borderWidth + paddingT + marginT;

            IBound bound = control.ApplyStyles(_stylesheet, context.CreateBound(w, h), context.CreateBound(maxW, maxH));
            w = bound.Width > maxW ? maxW : bound.Width;
            h = bound.Height > maxH ? maxH : bound.Height;

            control.Frame = new Rectangle(l, t, w, h);

            return screenBound;
        }
コード例 #5
0
ファイル: LayoutBehaviour.cs プロジェクト: Fedorm/core-master
        public IBound Dock(IEnumerable <ILayoutable> controls, IBound styleBound, IBound maxBound)
        {
            IStyleSheetHelper  style   = _stylesheet.Helper;
            IStyleSheetContext context = StyleSheetContext.Current;

            float parentW     = styleBound.Width;
            float parentH     = styleBound.Height;
            float paddingL    = style.PaddingLeft(_container, parentW);
            float paddingT    = style.PaddingTop(_container, parentH);
            float paddingR    = style.PaddingRight(_container, parentW);
            float paddingB    = style.PaddingBottom(_container, parentH);
            float borderWidth = style.BorderWidth(_container);

            float left   = borderWidth + paddingL;
            float top    = borderWidth + paddingT;
            float right  = parentW - (paddingR + borderWidth);
            float bottom = parentH - (paddingB + borderWidth);

            float resizedWidth  = parentW;
            float resizedHeight = parentH;

            float freeW = style.SizeToContentWidth(_container) ? maxBound.Width - parentW : 0;
            float freeH = style.SizeToContentHeight(_container) ? maxBound.Height - parentH : 0;

            IList <ILayoutable> controlsList = controls as IList <ILayoutable> ?? controls.ToList();
            var frames = new Rectangle[controlsList.Count];

            for (int i = 0; i < controlsList.Count; i++)
            {
                ILayoutable control = controlsList[i];

                float w = style.Width(control, parentW);
                float h = style.Height(control, parentH);

                float marginL = style.MarginLeft(control, parentW);
                float marginT = style.MarginTop(control, parentH);
                float marginR = style.MarginRight(control, parentW);
                float marginB = style.MarginBottom(control, parentH);

                float maxW = right - left - (marginL + marginR);
                float maxH = bottom - top - (marginT + marginB);

                resizedWidth  += SizeTo(false, ref w, ref maxW, ref freeW, ref right);
                resizedHeight += SizeTo(false, ref h, ref maxH, ref freeH, ref bottom);

                IBound bound = control.ApplyStyles(_stylesheet, context.CreateBound(w, h)
                                                   , context.CreateBound(maxW + freeW, maxH + freeH));
                w = bound.Width;
                h = bound.Height;

                resizedWidth  += SizeTo(false, ref w, ref maxW, ref freeW, ref right);
                resizedHeight += SizeTo(false, ref h, ref maxH, ref freeH, ref bottom);

                float x = left + marginL;
                float y = top + marginT;

                DockAlignValues align = style.DockAlign(control);
                switch (align)
                {
                case DockAlignValues.Left:
                    left += marginL + w + marginR;
                    break;

                case DockAlignValues.Top:
                    top += marginT + h + marginB;
                    break;

                case DockAlignValues.Right:
                    x      = right - (marginR + w);
                    right -= marginL + w + marginR;

                    // reverse reference system, for size to content
                    x = -(resizedWidth - x);

                    break;

                case DockAlignValues.Bottom:
                    y       = bottom - (marginB + h);
                    bottom -= marginT + h + marginB;

                    // reverse reference system, for size to content
                    y = -(resizedHeight - y);

                    break;

                default:
                    throw new Exception("Unknown align: " + align);
                }

                frames[i] = new Rectangle(x, y, w, h);
            }

            // restore reference system
            for (int i = 0; i < controlsList.Count; i++)
            {
                Rectangle f = frames[i];
                float     x = f.Left >= 0 ? f.Left : resizedWidth + f.Left;
                float     y = f.Top >= 0 ? f.Top : resizedHeight + f.Top;
                controlsList[i].Frame = new Rectangle(x, y, f.Width, f.Height);
            }

            return(context.CreateBound(resizedWidth, resizedHeight));
        }
コード例 #6
0
ファイル: LayoutBehaviour.cs プロジェクト: Fedorm/core-master
        private IBound Queue(IEnumerable <ILayoutable> controls, IBound styleBound, IBound maxBound, out float[] borders, bool horizontal, bool extensible)
        {
            if (styleBound.Width > maxBound.Width || styleBound.Height > maxBound.Height)
            {
                throw new ArgumentException("maxBoud lesser than styleBound");
            }

            IStyleSheetHelper  style   = _stylesheet.Helper;
            IStyleSheetContext context = StyleSheetContext.Current;
            var bordersList            = new List <float>();

            float parentW     = styleBound.Width;
            float parentH     = styleBound.Height;
            float paddingL    = style.PaddingLeft(_container, parentW);
            float paddingT    = style.PaddingTop(_container, parentH);
            float paddingR    = style.PaddingRight(_container, parentW);
            float paddingB    = style.PaddingBottom(_container, parentH);
            float borderWidth = style.BorderWidth(_container);

            float left   = paddingL + borderWidth;
            float top    = paddingT + borderWidth;
            float right  = parentW - (borderWidth + paddingR);
            float bottom = parentH - (borderWidth + paddingB);

            float resizedWidth  = parentW;
            float resizedHeight = parentH;

            bool sizeToContentWidth  = style.SizeToContentWidth(_container);
            bool sizeToContentHeight = style.SizeToContentHeight(_container);

            float freeW = sizeToContentWidth ? maxBound.Width - parentW : 0;
            float freeH = sizeToContentHeight ? maxBound.Height - parentH : 0;

            bordersList.Add(horizontal ? left : top);

            IList <ILayoutable> controlsList = controls as IList <ILayoutable> ?? controls.ToList();
            var dirtyFrames = new LayoutParams[controlsList.Count];

            for (int i = 0; i < controlsList.Count; i++)
            {
                ILayoutable control = controlsList[i];
                float       w       = style.Width(control, parentW);
                float       h       = style.Height(control, parentH);

                float marginL = style.MarginLeft(control, parentW);
                float marginT = style.MarginTop(control, parentH);
                float marginR = style.MarginRight(control, parentW);
                float marginB = style.MarginBottom(control, parentH);

                float maxW = right - left - (marginL + marginR);
                float maxH = bottom - top - (marginT + marginB);

                resizedWidth  += SizeTo(horizontal && extensible, ref w, ref maxW, ref freeW, ref right);
                resizedHeight += SizeTo(!horizontal && extensible, ref h, ref maxH, ref freeH, ref bottom);

                float  childMaxW = horizontal && extensible ? float.MaxValue : maxW + freeW;
                float  childMaxH = !horizontal && extensible ? float.MaxValue : maxH + freeH;
                IBound bound     = control.ApplyStyles(_stylesheet, context.CreateBound(w, h), context.CreateBound(childMaxW, childMaxH));
                w = bound.Width;
                h = bound.Height;

                resizedWidth  += SizeTo(horizontal && extensible, ref w, ref maxW, ref freeW, ref right);
                resizedHeight += SizeTo(!horizontal && extensible, ref h, ref maxH, ref freeH, ref bottom);

                dirtyFrames[i] = new LayoutParams(left, top, w, h, marginL, marginT, marginR, marginB); // new Rectangle(left + leftOffset, top + topOffset, w, h);

                if (horizontal)
                {
                    left += marginL + w + marginR;
                }
                else
                {
                    top += marginT + h + marginB;
                }

                bordersList.Add(horizontal ? left : top);
            }

            borders = bordersList.ToArray();

            for (int i = 0; i < controlsList.Count; i++)
            {
                ILayoutable  control      = controlsList[i];
                LayoutParams layoutParams = dirtyFrames[i];

                float topOffset  = layoutParams.MarginTop;
                float leftOffset = layoutParams.MarginLeft;
                if (horizontal)
                {
                    float maxH = bottom - top - (layoutParams.MarginTop + layoutParams.MarginBottom);
                    if (layoutParams.Height < maxH)
                    {
                        VerticalAlignValues align = style.VerticalAlign(control);
                        switch (align)
                        {
                        case VerticalAlignValues.Top:
                            break;

                        case VerticalAlignValues.Center:
                        case VerticalAlignValues.Central:
                            topOffset += (maxH - layoutParams.Height) / 2;
                            break;

                        case VerticalAlignValues.Bottom:
                            topOffset = (bottom - layoutParams.MarginBottom - layoutParams.Height) - top;
                            break;
                        }
                    }
                }
                else
                {
                    float maxW = right - left - (layoutParams.MarginLeft + layoutParams.MarginRight);
                    if (layoutParams.Width < maxW)
                    {
                        HorizontalAlignValues align = style.HorizontalAlign(control);
                        switch (align)
                        {
                        case HorizontalAlignValues.Left:
                            break;

                        case HorizontalAlignValues.Center:
                        case HorizontalAlignValues.Central:
                            leftOffset += (maxW - layoutParams.Width) / 2;
                            break;

                        case HorizontalAlignValues.Right:
                            leftOffset = (right - layoutParams.MarginRight - layoutParams.Width) - left;
                            break;
                        }
                    }
                }

                control.Frame = new Rectangle(layoutParams.Left + leftOffset, layoutParams.Top + topOffset
                                              , layoutParams.Width, layoutParams.Height);
            }

            float contentW = horizontal ? left + paddingR + borderWidth : resizedWidth;
            float contentH = !horizontal ? top + paddingB + borderWidth : resizedHeight;

            return(context.CreateBound(resizedWidth, resizedHeight, contentW, contentH));
        }