Xwt.Drawing.Image.WithAlpha C# (CSharp) Method

WithAlpha() public method

Applies an alpha filter to the image
This is a lightweight operation. The alpha filter is applied when the image is rendered. The method doesn't make a copy of the image data.
public WithAlpha ( double alpha ) : Image
alpha double Alpha to apply
return Image
        public Image WithAlpha(double alpha)
        {
            return new Image (this) {
                requestedSize = requestedSize,
                requestedAlpha = alpha
            };
        }

Usage Example

Ejemplo n.º 1
0
        public async void RefreshTiles()
        {
            // Cancel previous loads
            if (_tokenSource != null)
            {
                _tokenSource.Cancel();

                while (_tokenSource != null)
                {
                    await Task.Delay(1);
                }
            }

            Spinner spinner = null;

            Application.Invoke(() => {
                // Clear controls
                _buttons.Clear();
                ClearTiles();

                Content     =
                    spinner = new Spinner {
                    Animate   = true,
                    MinHeight = 50,
                    MinWidth  = 50
                };
            });

            while (spinner == null)
            {
                await Task.Delay(5);
            }

            _buttonsPerRow = CalculateButtonsPerRow((float)Size.Width);
            var i = 0;

            _tokenSource = new CancellationTokenSource();

            try {
                var tiles = await LoadTiles(_tokenSource.Token);

                Application.Invoke(() => {
                    foreach (var tile in tiles)
                    {
                        if (tile == null)
                        {
                            continue;
                        }

                        if (i >= _buttonsPerRow)
                        {
                            PushNewRow();
                            i = 0;
                        }

                        try {
                            Xwt.Drawing.Image image = tile.Image?.ToXwtImage()?.ScaleToSize(100);
                            Widget widget           = null;

                            if (ParkitectNexus.Data.Utilities.OperatingSystem.Detect() == SupportedOperatingSystem.Linux)
                            {
                                if (image != null)
                                {
                                    Image lighterImage            = image.WithAlpha(.7f);
                                    var clickableImage            = new ImageView(image);
                                    clickableImage.ButtonPressed += (sender, args) => tile.ClickAction();

                                    clickableImage.MouseEntered += (object sender, EventArgs e) => {
                                        ((ImageView)sender).Image        = lighterImage;
                                        ((Widget)sender).BackgroundColor = Color.FromBytes(255, 255, 255);
                                    };
                                    clickableImage.MouseExited += (object sender, EventArgs e) => {
                                        ((ImageView)sender).Image        = image;
                                        ((Widget)sender).BackgroundColor = tile.BackgroundColor;
                                    };

                                    widget = clickableImage;
                                }
                                else
                                {
                                    var label            = new Label(tile.Text);
                                    label.ButtonPressed += (sender, args) => tile.ClickAction();
                                    label.Wrap           = WrapMode.Word;
                                    label.TextAlignment  = Alignment.Center;

                                    label.MouseEntered += (object sender, EventArgs e) => {
                                        ((Widget)sender).BackgroundColor = Color.FromBytes(255, 255, 255);
                                    };
                                    label.MouseExited += (object sender, EventArgs e) => {
                                        ((Widget)sender).BackgroundColor = tile.BackgroundColor;
                                    };

                                    widget = label;
                                }
                            }
                            else
                            {
                                var button = new Button(image)
                                {
                                    Label           = tile.Image == null ? tile.Text : null,
                                    TooltipText     = tile.Text,
                                    Style           = ButtonStyle.Borderless,
                                    BackgroundColor = tile.BackgroundColor,
                                    ImagePosition   = ContentPosition.Center
                                };
                                Image lighterImage = image.WithAlpha(.7f);

                                button.MouseEntered += (object sender, EventArgs e) => {
                                    ((Button)sender).Image           = lighterImage;
                                    ((Widget)sender).BackgroundColor = Color.FromBytes(255, 255, 255);
                                };
                                button.MouseExited += (object sender, EventArgs e) => {
                                    ((Button)sender).Image           = image;
                                    ((Widget)sender).BackgroundColor = tile.BackgroundColor;
                                };

                                button.Clicked += (sender, args) => tile.ClickAction();

                                widget = button;
                            }

                            widget.WidthRequest    = 100;
                            widget.HeightRequest   = 100;
                            widget.MinWidth        = 0;
                            widget.BackgroundColor = tile.BackgroundColor;

                            _buttons.Add(widget);
                            _rows.Peek().PackStart(widget);
                            i++;
                        } catch (Exception e) {
                            _log.WriteLine("Failed to convert Tile object to UI");
                            _log.WriteException(e);
                        }
                    }

                    Content = _box;
                });
            } catch (TaskCanceledException) {
            } catch (OperationCanceledException) {
            } finally {
                _tokenSource?.Dispose();
                _tokenSource = null;
            }
        }