private WndWindowStateConfiguration(
            WndWindowDefinition wndWindow,
            ColorRgba textColor,
            ColorRgba textBorderColor,
            WndDrawData wndDrawData,
            StretchableImage image,
            GraphicsDevice graphicsDevice,
            GraphicsDevice2D graphicsDevice2D)
        {
            TextColor       = textColor;
            TextBorderColor = textBorderColor;

            if (!wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
            {
                BackgroundColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].Color);
            }

            if (BackgroundColor != null || wndWindow.Status.HasFlag(WndWindowStatusFlags.Border))
            {
                BorderColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].BorderColor);
            }

            if (image != null)
            {
                ImageTexture = AddDisposable(image.RenderToTexture(graphicsDevice, graphicsDevice2D));
            }
        }
Exemple #2
0
 internal WndWindowStaticText(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver callbackResolver)
     : base(wndWindow, contentManager, callbackResolver)
 {
     if (!wndWindow.StaticTextData.Centered)
     {
         TextAlignment = TextAlignment.Leading;
     }
 }
Exemple #3
0
        public Texture GetStretchableTexture(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var cacheKey = new WndImageKey
            {
                DestinationSize = wndWindow.ScreenRect.ToRectangle().Size,
                LeftImage       = wndDrawData.Items[leftIndex].Image,
                MiddleImage     = wndDrawData.Items[middleIndex].Image,
                RightImage      = wndDrawData.Items[rightIndex].Image
            };

            if (!_cache.TryGetValue(cacheKey, out var result))
            {
                var leftMappedImageTexture   = GetMappedImage(cacheKey.LeftImage);
                var middleMappedImageTexture = GetMappedImage(cacheKey.MiddleImage);
                var rightMappedImageTexture  = GetMappedImage(cacheKey.RightImage);

                if (leftMappedImageTexture != null &&
                    middleMappedImageTexture != null &&
                    rightMappedImageTexture != null)
                {
                    result = CreateTexture(
                        cacheKey,
                        drawingContext =>
                    {
                        var leftWidth  = leftMappedImageTexture.SourceRect.Width;
                        var rightWidth = rightMappedImageTexture.SourceRect.Width;
                        var leftRect   = new Rectangle(0, 0, leftWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            leftMappedImageTexture.Texture,
                            leftMappedImageTexture.SourceRect,
                            leftRect);
                        var middleRect = new Rectangle(leftRect.Right, 0, cacheKey.DestinationSize.Width - leftWidth - rightWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            middleMappedImageTexture.Texture,
                            middleMappedImageTexture.SourceRect,
                            middleRect);
                        var rightRect = new Rectangle(middleRect.Right, 0, rightWidth, cacheKey.DestinationSize.Height);
                        drawingContext.DrawImage(
                            rightMappedImageTexture.Texture,
                            rightMappedImageTexture.SourceRect,
                            rightRect);
                    });
                }
                else
                {
                    result = null;
                }

                _cache.Add(cacheKey, result);
            }

            return(result);
        }
Exemple #4
0
        public RadioButton(WndWindowDefinition wndWindow, WndImageLoader imageLoader)
        {
            BackgroundImage         = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 1, 2);
            HoverBackgroundImage    = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 1, 2);
            DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 1, 2);

            HoverTextColor    = wndWindow.TextColor.Hilite.ToColorRgbaF();
            DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF();
        }
Exemple #5
0
        public TextBox(WndWindowDefinition wndWindow, ImageLoader imageLoader)
        {
            BackgroundImage         = imageLoader.CreateFromStretchableWndDrawData(wndWindow.EnabledDrawData, 0, 2, 1);
            HoverBackgroundImage    = imageLoader.CreateFromStretchableWndDrawData(wndWindow.HiliteDrawData, 0, 2, 1);
            DisabledBackgroundImage = imageLoader.CreateFromStretchableWndDrawData(wndWindow.DisabledDrawData, 0, 2, 1);

            HoverTextColor    = wndWindow.TextColor.Hilite.ToColorRgbaF();
            DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF();
        }
Exemple #6
0
        public Slider(WndWindowDefinition wndWindow, ImageLoader imageLoader)
        {
            HighlightedBoxImage   = imageLoader.CreateFromWndDrawData(wndWindow.DisabledDrawData, 0);
            UnhighlightedBoxImage = imageLoader.CreateFromWndDrawData(wndWindow.DisabledDrawData, 1);

            MinimumValue = wndWindow.SliderData.MinValue;
            MaximumValue = wndWindow.SliderData.MaxValue;

            Value = wndWindow.SliderData.MinValue + (wndWindow.SliderData.MaxValue - wndWindow.SliderData.MinValue) / 2;
        }
Exemple #7
0
 internal WndWindowGenericWindow(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver callbackResolver)
     : base(wndWindow, contentManager, callbackResolver)
 {
     if (wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
     {
         _imageTexture = contentManager.WndImageTextureCache.GetNormalTexture(
             wndWindow,
             wndWindow.EnabledDrawData,
             0);
     }
 }
Exemple #8
0
        public static StretchableImage CreateNormalImage(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            ContentManager contentManager)
        {
            var image = LoadImage(wndDrawData, 0, contentManager);

            return(image != null
                ? CreateNormal(wndWindow.ScreenRect.ToRectangle().Width, image)
                : null);
        }
Exemple #9
0
        public CheckBox(WndWindowDefinition wndWindow, WndImageLoader imageLoader)
        {
            UncheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 1);
            CheckedImage   = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 2);

            HoverUncheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 1);
            HoverCheckedImage   = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 2);

            DisabledUncheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1);
            DisabledCheckedImage   = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 2);
        }
Exemple #10
0
        private static WndWindow CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver)
        {
            var result = WndWindow.Create(wndWindow, contentManager, wndCallbackResolver);

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver);
                child.Parent = result;
                result.Children.Add(child);
            }

            return(result);
        }
Exemple #11
0
        private static Control CreateControl(WndWindowDefinition wndWindow, ImageLoader imageLoader)
        {
            switch (wndWindow.WindowType)
            {
            case WndWindowType.CheckBox:
                return(new CheckBox(wndWindow, imageLoader));

            case WndWindowType.ComboBox:
                return(new ComboBox(wndWindow, imageLoader));

            case WndWindowType.HorizontalSlider:
                return(new Slider(wndWindow, imageLoader));

            case WndWindowType.ProgressBar:
                return(new ProgressBar(wndWindow, imageLoader));

            case WndWindowType.ListBox:
                return(new ListBox(wndWindow, imageLoader));

            case WndWindowType.PushButton:
                return(new Button(wndWindow, imageLoader));

            case WndWindowType.RadioButton:
                return(new RadioButton(wndWindow, imageLoader));

            case WndWindowType.StaticText:
                return(new Label(wndWindow));

            case WndWindowType.EntryField:
                return(new TextBox(wndWindow, imageLoader));

            default:     // TODO: Implement other window types.
                var control = new Control();
                if (wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
                {
                    control.BackgroundImage = imageLoader.CreateFromWndDrawData(wndWindow.EnabledDrawData, 0);
                }
                else
                {
                    control.BackgroundColor = wndWindow.EnabledDrawData.Items[0].Color.ToColorRgbaF();
                }
                if (control.BackgroundImage == null)
                {
                    control.BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF();
                    control.BorderWidth = 1;
                }
                return(control);
            }
        }
Exemple #12
0
        private WndWindowStateConfiguration(
            WndWindowDefinition wndWindow,
            ColorRgba textColor,
            ColorRgba textBorderColor,
            WndDrawData wndDrawData)
        {
            TextColor       = textColor;
            TextBorderColor = textBorderColor;

            if (!wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
            {
                BackgroundColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].Color);
            }

            if (BackgroundColor != null || wndWindow.Status.HasFlag(WndWindowStatusFlags.Border))
            {
                BorderColor = ConversionExtensions.ToColorRgbaF(wndDrawData.Items[0].BorderColor);
            }
        }
Exemple #13
0
        public static StretchableImage CreatePushButtonImage(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            ContentManager contentManager,
            int leftIndex,
            int middleIndex,
            int rightIndex)
        {
            var imageLeft   = LoadImage(wndDrawData, leftIndex, contentManager);
            var imageMiddle = LoadImage(wndDrawData, middleIndex, contentManager);
            var imageRight  = LoadImage(wndDrawData, rightIndex, contentManager);

            if (imageLeft != null && imageMiddle != null && imageRight != null)
            {
                return(CreateStretchable(wndWindow.ScreenRect.ToRectangle().Width, imageLeft, imageMiddle, imageRight));
            }

            //if (imageLeft != null)
            //    return StretchableImage.CreateNormal(wndWindow.ScreenRect.ToRectangle().Width, imageLeft);

            return(null);
        }
Exemple #14
0
        public static WndWindowStateConfiguration Create(
            WndWindowDefinition wndWindow,
            WndWindowState state,
            ContentManager contentManager)
        {
            WndDrawData wndDrawData;
            ColorRgba   textColor, textColorBorder;

            switch (state)
            {
            case WndWindowState.Enabled:
                wndDrawData     = wndWindow.EnabledDrawData;
                textColor       = wndWindow.TextColor.Enabled;
                textColorBorder = wndWindow.TextColor.EnabledBorder;
                break;

            case WndWindowState.Highlighted:
                wndDrawData     = wndWindow.HiliteDrawData;
                textColor       = wndWindow.TextColor.Hilite;
                textColorBorder = wndWindow.TextColor.HiliteBorder;
                break;

            case WndWindowState.Disabled:
                wndDrawData     = wndWindow.DisabledDrawData;
                textColor       = wndWindow.TextColor.Disabled;
                textColorBorder = wndWindow.TextColor.DisabledBorder;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(state));
            }

            return(new WndWindowStateConfiguration(
                       wndWindow,
                       textColor,
                       textColorBorder,
                       wndDrawData));
        }
Exemple #15
0
        public Texture GetNormalTexture(
            WndWindowDefinition wndWindow,
            WndDrawData wndDrawData,
            int index)
        {
            var cacheKey = new WndImageKey
            {
                DestinationSize = wndWindow.ScreenRect.ToRectangle().Size,
                LeftImage       = wndDrawData.Items[index].Image
            };

            if (!_cache.TryGetValue(cacheKey, out var result))
            {
                var mappedImageTexture = GetMappedImage(cacheKey.LeftImage);

                if (mappedImageTexture != null)
                {
                    result = CreateTexture(
                        cacheKey,
                        drawingContext =>
                    {
                        drawingContext.DrawImage(
                            mappedImageTexture.Texture,
                            mappedImageTexture.SourceRect,
                            new Rectangle(Point2D.Zero, cacheKey.DestinationSize));
                    });
                }
                else
                {
                    result = null;
                }

                _cache.Add(cacheKey, result);
            }

            return(result);
        }
Exemple #16
0
 public Label(WndWindowDefinition wndWindow)
 {
     TextAlignment = wndWindow.StaticTextData.Centered
         ? TextAlignment.Center
         : TextAlignment.Leading;
 }
        public static WndWindowStateConfiguration Create(
            WndWindowDefinition wndWindow,
            WndWindowState state,
            ContentManager contentManager,
            GraphicsDevice graphicsDevice,
            GraphicsDevice2D graphicsDevice2D)
        {
            WndDrawData wndDrawData;
            ColorRgba   textColor, textColorBorder;

            switch (state)
            {
            case WndWindowState.Enabled:
                wndDrawData     = wndWindow.EnabledDrawData;
                textColor       = wndWindow.TextColor.Enabled;
                textColorBorder = wndWindow.TextColor.EnabledBorder;
                break;

            case WndWindowState.Highlighted:
            case WndWindowState.HighlightedPushed:
                wndDrawData     = wndWindow.HiliteDrawData;
                textColor       = wndWindow.TextColor.Hilite;
                textColorBorder = wndWindow.TextColor.HiliteBorder;
                break;

            case WndWindowState.Disabled:
                wndDrawData     = wndWindow.DisabledDrawData;
                textColor       = wndWindow.TextColor.Disabled;
                textColorBorder = wndWindow.TextColor.DisabledBorder;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(state));
            }

            StretchableImage createImage()
            {
                switch (wndWindow.WindowType)
                {
                case WndWindowType.PushButton:
                    switch (state)
                    {
                    case WndWindowState.HighlightedPushed:
                        return(StretchableImage.CreatePushButtonImage(
                                   wndWindow,
                                   wndDrawData,
                                   contentManager,
                                   1, 3, 4));

                    default:
                        return(StretchableImage.CreatePushButtonImage(
                                   wndWindow,
                                   wndDrawData,
                                   contentManager,
                                   0, 5, 6));
                    }

                default:
                    return(StretchableImage.CreateNormalImage(
                               wndWindow,
                               wndDrawData,
                               contentManager));
                }
            }

            var image = wndWindow.Status.HasFlag(WndWindowStatusFlags.Image)
                ? createImage()
                : null;

            return(new WndWindowStateConfiguration(
                       wndWindow,
                       textColor,
                       textColorBorder,
                       wndDrawData,
                       image,
                       graphicsDevice,
                       graphicsDevice2D));
        }
Exemple #18
0
        private WndWindowDefinition ParseWindow()
        {
            NextToken();

            var result = new WndWindowDefinition();

            var childWindows = new List <WndWindowDefinition>();

            while (Current.TokenType == WndTokenType.Identifier)
            {
                if (Current.StringValue == "END")
                {
                    NextToken();
                    break;
                }

                switch (Current.StringValue)
                {
                case "WINDOWTYPE":
                    result.WindowType = ParseProperty(ParseWindowType);
                    break;

                case "SCREENRECT":
                    result.ScreenRect = ParseProperty(ParseScreenRectValue);
                    break;

                case "NAME":
                    result.Name = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "STATUS":
                    result.Status = ParseProperty(ParseStatus);
                    break;

                case "STYLE":
                    result.Style = ParseProperty(ParseStyle);
                    break;

                case "SYSTEMCALLBACK":
                    result.SystemCallback = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "INPUTCALLBACK":
                    result.InputCallback = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "TOOLTIPCALLBACK":
                    result.TooltipCallback = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "DRAWCALLBACK":
                    result.DrawCallback = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "FONT":
                    result.Font = ParseProperty(ParseFont);
                    break;

                case "HEADERTEMPLATE":
                    result.HeaderTemplate = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "TOOLTIPTEXT":
                    result.TooltipText = ParseProperty(NextStringLiteralTokenValue);
                    break;


                case "TOOLTIPDELAY":
                    result.TooltipDelay = ParseProperty(NextIntegerLiteralTokenValue);
                    break;

                case "TEXTCOLOR":
                    result.TextColor = ParseProperty(ParseTextColor);
                    break;

                case "ENABLEDDRAWDATA":
                    result.EnabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "DISABLEDDRAWDATA":
                    result.DisabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "HILITEDRAWDATA":
                    result.HiliteDrawData = ParseProperty(ParseDrawData);
                    break;

                case "CHILD":
                    NextToken();
                    childWindows.Add(ParseWindow());
                    break;

                case "ENDALLCHILDREN":
                    NextToken();
                    break;

                case "TEXT":
                    result.Text = ParseProperty(NextStringLiteralTokenValue);
                    break;

                case "TEXTENTRYDATA":
                    result.TextEntryData = ParseProperty(ParseTextEntryData);
                    break;

                case "STATICTEXTDATA":
                    result.StaticTextData = ParseProperty(ParseStaticTextData);
                    break;

                case "LISTBOXDATA":
                    result.ListBoxData = ParseProperty(ParseListBoxData);
                    break;

                case "LISTBOXENABLEDUPBUTTONDRAWDATA":
                    result.ListBoxEnabledUpButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXDISABLEDUPBUTTONDRAWDATA":
                    result.ListBoxDisabledUpButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXHILITEUPBUTTONDRAWDATA":
                    result.ListBoxHiliteUpButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXENABLEDDOWNBUTTONDRAWDATA":
                    result.ListBoxEnabledDownButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXDISABLEDDOWNBUTTONDRAWDATA":
                    result.ListBoxDisabledDownButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXHILITEDOWNBUTTONDRAWDATA":
                    result.ListBoxHiliteDownButtonDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXENABLEDSLIDERDRAWDATA":
                    result.ListBoxEnabledSliderDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXDISABLEDSLIDERDRAWDATA":
                    result.ListBoxDisabledSliderDrawData = ParseProperty(ParseDrawData);
                    break;

                case "LISTBOXHILITESLIDERDRAWDATA":
                    result.ListBoxHiliteSliderDrawData = ParseProperty(ParseDrawData);
                    break;

                case "SLIDERTHUMBENABLEDDRAWDATA":
                    result.SliderThumbEnabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "SLIDERTHUMBDISABLEDDRAWDATA":
                    result.SliderThumbDisabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "SLIDERTHUMBHILITEDRAWDATA":
                    result.SliderThumbHiliteDrawData = ParseProperty(ParseDrawData);
                    break;

                case "RADIOBUTTONDATA":
                    result.RadioButtonData = ParseProperty(ParseRadioButtonData);
                    break;

                case "COMBOBOXDATA":
                    result.ComboBoxData = ParseProperty(ParseComboBoxData);
                    break;

                case "COMBOBOXDROPDOWNBUTTONENABLEDDRAWDATA":
                    result.ComboBoxDropDownButtonEnabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXDROPDOWNBUTTONDISABLEDDRAWDATA":
                    result.ComboBoxDropDownButtonDisabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXDROPDOWNBUTTONHILITEDRAWDATA":
                    result.ComboBoxDropDownButtonHiliteDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXEDITBOXENABLEDDRAWDATA":
                    result.ComboBoxEditBoxEnabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXEDITBOXDISABLEDDRAWDATA":
                    result.ComboBoxEditBoxDisabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXEDITBOXHILITEDRAWDATA":
                    result.ComboBoxEditBoxHiliteDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXLISTBOXENABLEDDRAWDATA":
                    result.ComboBoxListBoxEnabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXLISTBOXDISABLEDDRAWDATA":
                    result.ComboBoxListBoxDisabledDrawData = ParseProperty(ParseDrawData);
                    break;

                case "COMBOBOXLISTBOXHILITEDRAWDATA":
                    result.ComboBoxListBoxHiliteDrawData = ParseProperty(ParseDrawData);
                    break;

                case "SLIDERDATA":
                    result.SliderData = ParseProperty(ParseSliderData);
                    break;

                default:
                    UnexpectedToken(Current);
                    break;
                }
            }

            result.ChildWindows = childWindows.ToArray();

            return(result);
        }
Exemple #19
0
 public ProgressBar(WndWindowDefinition wndWindow, ImageLoader imageLoader)
 {
 }
Exemple #20
0
        private static Control CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver, Point2D parentOffset)
        {
            var imageLoader = contentManager.WndImageLoader;

            Control createControl()
            {
                switch (wndWindow.WindowType)
                {
                case WndWindowType.CheckBox:
                    return(new CheckBox
                    {
                        UncheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 1),
                        CheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 2),

                        HoverUncheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 1),
                        HoverCheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 2),

                        DisabledUncheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1),
                        DisabledCheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 2)
                    });

                case WndWindowType.ComboBox:
                    return(new ComboBox
                    {
                        IsEditable = wndWindow.ComboBoxData.IsEditable,

                        TextBoxBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxEnabledDrawData, 0, 2, 1),
                        TextBoxHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxHiliteDrawData, 0, 2, 1),
                        TextBoxDisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxDisabledDrawData, 0, 2, 1),

                        DropDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ComboBoxDropDownButtonEnabledDrawData, 0),

                        DropDownUpButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0),
                        DropDownUpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0),

                        DropDownDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0),
                        DropDownDownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0),

                        DropDownThumbImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0),
                        DropDownThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0),

                        DropDownSelectedItemBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2)
                    });

                case WndWindowType.HorizontalSlider:
                    return(new Slider
                    {
                        HighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 0),
                        UnhighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1),

                        MinimumValue = wndWindow.SliderData.MinValue,
                        MaximumValue = wndWindow.SliderData.MaxValue,

                        Value = wndWindow.SliderData.MinValue + (wndWindow.SliderData.MaxValue - wndWindow.SliderData.MinValue) / 2
                    });

                case WndWindowType.ListBox:
                    var listBox = new ListBox
                    {
                        BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF(),
                        BorderWidth = 1,

                        SelectedItemBackgroundImage      = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 1, 3, 2),
                        SelectedItemHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2),

                        ColumnWidths = wndWindow.ListBoxData.ColumnWidths,

                        IsScrollBarVisible = wndWindow.ListBoxData.ScrollBar
                    };
                    if (wndWindow.ListBoxData.ScrollBar)
                    {
                        listBox.UpButtonImage      = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0);
                        listBox.UpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0);

                        listBox.DownButtonImage      = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0);
                        listBox.DownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0);

                        listBox.ThumbImage      = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0);
                        listBox.ThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0);
                    }
                    ;
                    if (wndWindow.ListBoxData.ForceSelect)
                    {
                        listBox.SelectedIndex = 0;
                    }
                    return(listBox);

                case WndWindowType.PushButton:
                    return(new Button
                    {
                        BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 5, 6),
                        HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 5, 6),
                        DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 5, 6),
                        PushedBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 4),

                        HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(),
                        DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF()
                    });

                case WndWindowType.StaticText:
                    return(new Label
                    {
                        TextAlignment = wndWindow.StaticTextData.Centered
                                ? TextAlignment.Center
                                : TextAlignment.Leading
                    });

                case WndWindowType.EntryField:
                    return(new TextBox
                    {
                        BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 2, 1),
                        HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 2, 1),
                        DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 2, 1),

                        HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(),
                        DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF()
                    });

                default:     // TODO: Implement other window types.
                {
                    var control = new Control();
                    if (wndWindow.Status.HasFlag(WndWindowStatusFlags.Image))
                    {
                        control.BackgroundImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 0);
                    }
                    else
                    {
                        control.BackgroundColor = wndWindow.EnabledDrawData.Items[0].Color.ToColorRgbaF();
                    }
                    if (control.BackgroundImage == null)
                    {
                        control.BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF();
                        control.BorderWidth = 1;
                    }
                    return(control);
                }
                }
            }

            var result = createControl();

            result.Name = wndWindow.Name;

            var wndRectangle = wndWindow.ScreenRect.ToRectangle();

            result.Bounds = new Rectangle(
                wndRectangle.X - parentOffset.X,
                wndRectangle.Y - parentOffset.Y,
                wndRectangle.Width,
                wndRectangle.Height);

            var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback);

            if (systemCallback != null)
            {
                result.SystemCallback = systemCallback;
            }

            var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback);

            if (inputCallback != null)
            {
                result.InputCallback = inputCallback;
            }

            var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback);

            if (drawCallback != null)
            {
                result.DrawCallback = drawCallback;
            }

            // TODO: TooltipCallback

            result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden);

            if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru))
            {
                result.BackgroundColor = ColorRgbaF.Transparent;
                result.BorderColor     = ColorRgbaF.Transparent;
            }

            if (wndWindow.HasHeaderTemplate)
            {
                var headerTemplate = contentManager.IniDataContext.HeaderTemplates.First(x => x.Name == wndWindow.HeaderTemplate);
                result.Font = contentManager.GetOrCreateFont(headerTemplate.Font, headerTemplate.Point, headerTemplate.Bold ? FontWeight.Bold : FontWeight.Normal);
            }
            else
            {
                result.Font = contentManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }

            result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF();

            result.Text = contentManager.TranslationManager.Lookup(wndWindow.Text);

            // TODO: TextBorderColor

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver, wndRectangle.Location);
                result.Controls.Add(child);
            }

            return(result);
        }
Exemple #21
0
        internal static Control CreateRecursive(
            WndWindowDefinition wndWindow,
            ImageLoader imageLoader,
            ContentManager contentManager,
            AssetStore assetStore,
            WndCallbackResolver wndCallbackResolver,
            Point2D parentOffset)
        {
            var result = CreateControl(wndWindow, imageLoader);

            result.Name = wndWindow.Name;

            var wndRectangle = wndWindow.ScreenRect.ToRectangle();

            result.Bounds = new Rectangle(
                wndRectangle.X - parentOffset.X,
                wndRectangle.Y - parentOffset.Y,
                wndRectangle.Width,
                wndRectangle.Height);

            var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback);

            if (systemCallback != null)
            {
                result.SystemCallback = systemCallback;
            }

            var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback);

            if (inputCallback != null)
            {
                result.InputCallback = inputCallback;
            }

            var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback);

            if (drawCallback != null)
            {
                result.DrawCallback = drawCallback;
            }

            // TODO: TooltipCallback

            result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden);

            if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru))
            {
                result.BackgroundColor = ColorRgbaF.Transparent;
                result.BorderColor     = ColorRgbaF.Transparent;
            }

            if (wndWindow.HasHeaderTemplate)
            {
                var headerTemplate = assetStore.HeaderTemplates.GetByName(wndWindow.HeaderTemplate);
                result.Font = contentManager.FontManager.GetOrCreateFont(headerTemplate.Font.Name, headerTemplate.Font.Size, headerTemplate.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }
            else
            {
                result.Font = contentManager.FontManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal);
            }

            result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF();

            result.Text = wndWindow.Text.Translate();

            // TODO: TextBorderColor

            foreach (var childWindow in wndWindow.ChildWindows)
            {
                var child = CreateRecursive(childWindow, imageLoader, contentManager, assetStore, wndCallbackResolver, wndRectangle.Location);
                result.Controls.Add(child);
            }

            return(result);
        }