Пример #1
0
 private static AdaptiveSubgroup CreateDailySubGroup(DayDataPoint day)
 {
     return(new AdaptiveSubgroup()
     {
         HintWeight = 1,
         Children =
         {
             new AdaptiveText()
             {
                 Text = day.Time.ToString("ddd"),
                 HintAlign = AdaptiveTextAlign.Center,
                 HintStyle = AdaptiveTextStyle.Caption
             },
             new AdaptiveImage()
             {
                 Source = GetIcon(day.Icon),
                 HintRemoveMargin = true
             },
             new AdaptiveText()
             {
                 Text = ((int)day.ApparentMaxTemperature).ToString() + "°",
                 HintAlign = AdaptiveTextAlign.Center,
                 HintStyle = AdaptiveTextStyle.Caption
             },
             new AdaptiveText()
             {
                 Text = ((int)day.ApparentMinTemperature).ToString() + "°",
                 HintAlign = AdaptiveTextAlign.Center,
                 HintStyle = AdaptiveTextStyle.CaptionSubtle
             }
         }
     });
 }
Пример #2
0
        static void InitializeVariables(DayDataPoint day)
        {
            CalculateDeviceSize();

            var afterSunrise = DateTime.Now - day.SunriseTime > TimeSpan.FromMinutes(1);
            var beforeSunset = DateTime.Now - day.SunsetTime < TimeSpan.FromMinutes(0);

            _IsDay = afterSunrise && beforeSunset;
        }
Пример #3
0
        private static Canvas CreatePartlyCloudyNightIcon(DayDataPoint day)
        {
            var moonRadius = 140;

            var container = new Canvas()
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                Margin = new Thickness(-120, -50, 0, 0)
            };

            var compositor = ElementCompositionPreview.GetElementVisual(container).Compositor;

            var containerVisual = compositor.CreateContainerVisual();

            containerVisual.Size = new Vector2(moonRadius * 4, moonRadius * 4);

            var moonColor = Color.FromArgb(255, 245, 215, 110);

            moonColor = _isPremiumUser ? Color.FromArgb(255, 192, 57, 43) : moonColor;

            var moon = CreateMoon(day.MoonPhase, compositor, moonColor);

            var cloudImage  = Visuals.CreateDarkCloudImage(100);
            var cloudVisual = ElementCompositionPreview.GetElementVisual(cloudImage);

            var cloudImage2  = Visuals.CreateDarkCloudImage(100);
            var cloudVisual2 = ElementCompositionPreview.GetElementVisual(cloudImage2);

            cloudVisual2.Offset = new Vector3(80, 80, 0);

            var offsetAnimation = Animations.CreateOffsetAnimation(compositor, -30, 6);

            cloudVisual.StartAnimation("Offset.x", offsetAnimation);

            offsetAnimation.InsertKeyFrame(1f, 60);
            offsetAnimation.Duration = TimeSpan.FromSeconds(8);
            cloudVisual2.StartAnimation("Offset.x", offsetAnimation);

            container.Children.Add(cloudImage);
            container.Children.Add(cloudImage2);

            container.Children.Add(moon);
            containerVisual.Children.InsertAtTop(cloudVisual);
            containerVisual.Children.InsertAtTop(cloudVisual2);


            Visuals.AddShadow(cloudImage, compositor, cloudVisual, containerVisual);
            Visuals.AddShadow(cloudImage2, compositor, cloudVisual2, containerVisual);

            ElementCompositionPreview.SetElementChildVisual(container, containerVisual);
            return(container);
        }
Пример #4
0
        private static Grid TransformMoon(Grid scene, DayDataPoint dayDataPoint)
        {
            var moonContainer = (Grid)scene.FindName("MoonContainer");

            if (moonContainer == null)
            {
                return(scene);
            }

            moonContainer = Icons.CreateMoon(dayDataPoint.MoonPhase, s_compositor, Color.FromArgb(255, 192, 57, 43));

            return(scene);
        }
Пример #5
0
        private void SetMoonPhase(DayDataPoint weatherToday)
        {
            var moonPhase = weatherToday.MoonPhase;

            if (moonPhase == 0)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseNewMoon");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_new.png");
            }
            else if (moonPhase > 0 && moonPhase < .25)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseWaxingCrescent");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_waxing_crescent.png");
            }
            else if (moonPhase == .25)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseFirstQuarter");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_first_quarter.png");
            }
            else if (moonPhase > .25 && moonPhase < .5)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseWaxingGibbous");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_waxing_gibbous.png");
            }
            else if (moonPhase == .5)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseFullMoon");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_full.png");
            }
            else if (moonPhase > .5 && moonPhase < .75)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseWaningGibbous");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_waning_gibbous.png");
            }
            else if (moonPhase == .75)
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseThirdQuarter");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_third_quarter.png");
            }
            else     // moonPhase > .75
            {
                MoonPhaseValue.Text     = App.ResourceLoader.GetString("MoonPhaseWaningCrescent");
                MoonPhaseIcon.UriSource = new Uri("ms-appx:///Assets/Icons/moon_waning_crescent.png");
            }
        }
Пример #6
0
        private void PopulateForecastView(DayDataPoint todayWeather, CurrentDataPoint currentWeather)
        {
            Status.Text = currentWeather.Summary;

            //FeelsLike.Text = string.Format("{0} {1}°{2}", App.ResourceLoader.GetString("FeelsLike"),
            //    currentWeather.ApparentTemperature, Settings.GetTemperatureUnit());

            PrecipProbaValue.Text = $"{todayWeather.PrecipitationProbability * 100}%";
            HumidityValue.Text    = $"{currentWeather.Humidity * 100}%";
            UVIndexValue.Text     = $"{currentWeather.UVIndex}";

            VisibilityValue.Text = $"{currentWeather.Visibility}";

            SunriseTime.Text  = todayWeather.SunriseTime.ToLocalTime().ToString("HH:mm");
            SunsetTime.Text   = todayWeather.SunsetTime.ToLocalTime().ToString("HH:mm");
            MoonriseTime.Text = todayWeather.SunsetTime.ToLocalTime().ToString("HH:mm");
            MoonsetTime.Text  = todayWeather.SunriseTime.ToLocalTime().ToString("HH:mm");

            WindSpeed.Text = $"{currentWeather.WindSpeed}{GetWindSpeedUnits()}";

            WindDirection.Text = $"{currentWeather.WindBearing}°";

            CloudCover.Text = $"{currentWeather.CloudCover * 100}%";

            SetPressureValue(currentWeather, true);

            if (_pageDataSource.Forecast.Daily.Days == null ||
                _pageDataSource.Forecast.Daily.Days.Count == 0)
            {
                return;
            }

            var currentDay = _pageDataSource.Forecast.Daily.Days[0];

            MaxTempValue.Text = $"{(int)currentDay.MaxTemperature}°";
            MinTempValue.Text = $"{(int)currentDay.MinTemperature}°";

            // TODO: Make a pull request to avoid UNIX time conversion (https://github.com/jcheng31/DarkSkyApi)
            DateTimeOffset baseUnixTime = new DateTimeOffset(1970, 1, 1, 0, 0, 0, new TimeSpan());
            var            converted    = baseUnixTime.AddSeconds(currentDay.UVIndexTime);

            UVIndexTimeValue.Text = $"{converted.ToLocalTime().ToString("HH:mm")}";
        }
Пример #7
0
        private static Canvas CreateClearNightIcon(DayDataPoint day)
        {
            var container = new Canvas()
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                Margin = new Thickness(-130, -50, 0, 0)
            };

            var compositor = ElementCompositionPreview.GetElementVisual(container).Compositor;
            var moon       = CreateMoon(day.MoonPhase, compositor, Color.FromArgb(255, 236, 240, 241));

            container.Children.Add(moon);

            // black orbs shadow
            //var shadowBallVisual1 = CreateEllipseVisual(compositor, 20, Color.FromArgb(255, 189, 195, 199));
            //shadowBallVisual1.Offset = new Vector3(moonRadius/2, moonRadius/2, 0);
            //containerVisual.Children.InsertAtTop(shadowBallVisual1);

            return(container);
        }
Пример #8
0
        private static string GetMoonPhaseIcon(DayDataPoint todayForecast)
        {
            var    moonPhase = todayForecast.MoonPhase;
            string path      = null;

            if (moonPhase == 0)
            {
                path = "ms-appx:///Assets/TileIcons/moon_new.png";
            }
            else if (moonPhase > 0 && moonPhase < .25)
            {
                path = "ms-appx:///Assets/TileIcons/moon_waxing_crescent.png";
            }
            else if (moonPhase == .25)
            {
                path = "ms-appx:///Assets/TileIcons/moon_first_quarter.png";
            }
            else if (moonPhase > .25 && moonPhase < .5)
            {
                path = "ms-appx:///Assets/TileIcons/moon_waxing_gibbous.png";
            }
            else if (moonPhase == .5)
            {
                path = "ms-appx:///Assets/TileIcons/moon_full.png";
            }
            else if (moonPhase > .5 && moonPhase < .75)
            {
                path = "ms-appx:///Assets/TileIcons/moon_waning_gibbous.png";
            }
            else if (moonPhase == .75)
            {
                path = "ms-appx:///Assets/TileIcons/moon_third_quarter.png";
            }
            else     // moonPhase > .75
            {
                path = "ms-appx:///Assets/TileIcons/moon_waning_crescent.png";
            }

            return(path);
        }
Пример #9
0
        public static Grid CreateNew(Forecast forecast, bool isPremiumUser, bool deactivateBackgroundColorAnimation = false)
        {
            CurrentDataPoint currentForecast = forecast.Currently;
            DayDataPoint     todayForecast   = forecast.Daily.Days[0];

            InitializeVariables(todayForecast);

            var scene = new Grid();

            scene = Backgrounds.PaintBackground(scene, currentForecast, todayForecast);

            if (!deactivateBackgroundColorAnimation)
            {
                scene = Backgrounds.AnimateBackgroundColor(scene, currentForecast.Icon, _screenSize);
            }

            scene = AddAnimations(scene, currentForecast.Icon);
            scene = Icons.AddWeatherIconCondition(scene, forecast, _IsDay, isPremiumUser);
            //scene = isPremiumUser ? AddSpecialEvents(scene, forecast) : scene;

            return(scene);
        }
Пример #10
0
        private static Canvas CreateCloudyNightIcon(DayDataPoint day)
        {
            var moonRadius = 120;

            var container = new Canvas()
            {
                Margin = new Thickness(-60, 0, 0, 0)
            };

            var compositor = ElementCompositionPreview.GetElementVisual(container).Compositor;

            var containerVisual = compositor.CreateContainerVisual();

            containerVisual.Size = new Vector2(moonRadius * 2, moonRadius * 2);

            var moon = CreateMoon(day.MoonPhase, compositor, Color.FromArgb(255, 245, 215, 110), 120);

            // ------
            // CLOUDS
            // ------
            var cloudImage  = Visuals.CreateDarkCloudImage(100);
            var cloudVisual = ElementCompositionPreview.GetElementVisual(cloudImage);

            cloudVisual.Offset = new Vector3(0, 50, 0);

            var cloudImage2  = Visuals.CreateDarkCloudImage(70);
            var cloudVisual2 = ElementCompositionPreview.GetElementVisual(cloudImage2);

            cloudVisual2.Offset = new Vector3(-30, -20, 0);

            var cloudImage3  = Visuals.CreateDarkCloudImage(70);
            var cloudVisual3 = ElementCompositionPreview.GetElementVisual(cloudImage3);

            cloudVisual3.Offset = new Vector3(-90, -40, 0);

            container.Children.Add(moon);
            container.Children.Add(cloudImage);
            container.Children.Add(cloudImage2);
            container.Children.Add(cloudImage3);

            containerVisual.Children.InsertAtTop(cloudVisual);
            containerVisual.Children.InsertAtTop(cloudVisual2);
            containerVisual.Children.InsertAtBottom(cloudVisual3);

            Visuals.AddShadow(cloudImage, compositor, cloudVisual, containerVisual);
            Visuals.AddShadow(cloudImage2, compositor, cloudVisual2, containerVisual);
            Visuals.AddShadow(cloudImage3, compositor, cloudVisual3, containerVisual);

            // ----------
            // ANIMATIONS
            // ----------
            var animationOffset = Animations.CreateOffsetAnimation(compositor, -30, 6);

            cloudVisual.StartAnimation("Offset.x", animationOffset);

            animationOffset.Duration = TimeSpan.FromSeconds(5);
            animationOffset.InsertKeyFrame(1f, 70);

            cloudVisual2.StartAnimation("Offset.x", animationOffset);

            animationOffset.Duration = TimeSpan.FromSeconds(7);
            cloudVisual3.StartAnimation("Offset.x", animationOffset);

            ElementCompositionPreview.SetElementChildVisual(container, containerVisual);

            return(container);
        }
Пример #11
0
        public static Grid AddWeatherIconCondition(Grid scene, Forecast forecast, bool isDay = true, bool isPremiumUser = false)
        {
            _isPremiumUser = isPremiumUser;
            CurrentDataPoint currentForecast = forecast.Currently;
            DayDataPoint     todayForecast   = forecast.Daily.Days[0];

            var topScene = new Grid()
            {
                Name = "PrimaryConditionScene",
                VerticalAlignment   = VerticalAlignment.Top,
                HorizontalAlignment = HorizontalAlignment.Center,
                Margin = new Thickness(0, 200, 0, 0)
            };

            var    condition        = currentForecast.Icon;
            Canvas weatherCondition = null;

            switch (condition)
            {
            case "clear-day":
                weatherCondition = CreateClearDayIcon();
                break;

            case "clear-night":
                weatherCondition = CreateClearNightIcon(todayForecast);
                break;

            case "partly-cloudy-day":
                weatherCondition = CreatePartlyCloudyDayIcon();
                break;

            case "partly-cloudy-night":
                weatherCondition = CreatePartlyCloudyNightIcon(todayForecast);
                break;

            case "cloudy":
                weatherCondition = isDay == true?
                                   CreateCloudyDayIcon() :
                                       CreateCloudyNightIcon(todayForecast);

                break;

            case "rain":
                weatherCondition = CreateRainIcon();
                break;

            case "sleet":     // neige fondu
                weatherCondition = CreateSnowIcon();
                break;

            case "snow":
                weatherCondition = CreateSnowIcon();
                break;

            case "wind":
                weatherCondition = CreateWindIcon();
                break;

            case "fog":
                weatherCondition = CreateFogIcon();
                break;

            default:
                break;
            }

            //weatherCondition = GetWeatherIcon(); // test prupose
            topScene.Children.Add(weatherCondition);
            scene.Children.Add(topScene);
            return(scene);
        }
Пример #12
0
        public static Grid PaintBackground(Grid scene, CurrentDataPoint current, DayDataPoint day)
        {
            var condition = current.Icon;

            var gradient  = new LinearGradientBrush();
            var firstStop = new GradientStop()
            {
                Offset = 0.0
            };
            var lastStop = new GradientStop()
            {
                Offset = 0.5
            };

            switch (condition)
            {
            case "clear-day":
                firstStop.Color = Color.FromArgb(255, 249, 191, 59);
                lastStop.Color  = Color.FromArgb(255, 249, 105, 14);
                break;

            case "clear-night":
                firstStop.Color = Color.FromArgb(255, 51, 110, 123);
                lastStop.Color  = Color.FromArgb(255, 31, 58, 147);
                break;

            case "partly-cloudy-day":
                firstStop.Color = Color.FromArgb(255, 58, 83, 155);
                lastStop.Color  = Color.FromArgb(255, 34, 49, 63);
                break;

            case "partly-cloudy-night":
                firstStop.Color = Color.FromArgb(255, 58, 83, 155);
                lastStop.Color  = Color.FromArgb(255, 34, 49, 63);
                break;

            case "cloudy":
                firstStop.Color = Color.FromArgb(255, 34, 49, 63);
                lastStop.Color  = Color.FromArgb(255, 103, 128, 159);
                break;

            case "rain":
                firstStop.Color = Color.FromArgb(255, 31, 58, 147);
                lastStop.Color  = Color.FromArgb(255, 75, 119, 190);
                break;

            case "sleet":     // neige fondu
                firstStop.Color = Color.FromArgb(255, 236, 240, 241);
                lastStop.Color  = Color.FromArgb(255, 191, 191, 191);
                break;

            case "snow":
                firstStop.Color = Color.FromArgb(255, 236, 236, 236);
                lastStop.Color  = Color.FromArgb(255, 255, 255, 255);
                break;

            case "wind":
                firstStop.Color = Color.FromArgb(255, 236, 236, 236);
                lastStop.Color  = Color.FromArgb(255, 137, 196, 244);
                break;

            case "fog":
                firstStop.Color = Color.FromArgb(255, 107, 185, 240);
                lastStop.Color  = Color.FromArgb(255, 174, 168, 211);
                break;

            default:
                firstStop.Color = Color.FromArgb(255, 249, 191, 59);
                lastStop.Color  = Color.FromArgb(255, 211, 84, 0);
                break;
            }

            gradient.GradientStops.Add(firstStop);
            gradient.GradientStops.Add(lastStop);

            scene.Background = gradient;

            return(scene);
        }