protected override bool OnExposeEvent(Gdk.EventExpose args) { double x = 100; double currTemp; int width = 0; int height = 0; base.OnExposeEvent(args); this.ParentWindow.GetSize(out width, out height); this._x = (width - MainWidth) / 2; this._weatherService.GetWeather(); var current = this._weatherService.GetCurrentCondition(); var forecast = this._weatherService.GetForecast(); if(current == null || forecast == null) { return true; } using (var g = Gdk.CairoHelper.Create(args.Window)) { g.SetSourceRGBA(0, 0, 0, 0.9); this.DrawRoundedRectangle(g, 0, 0, this.WidthRequest, this.HeightRequest, CBaseControl.CornerRadius); g.FillPreserve(); g.SetSourceRGB(1, 1, 1); g.SelectFontFace("Tahoma", FontSlant.Normal, FontWeight.Normal); g.SetFontSize(16); double.TryParse(current.temp, out currTemp); var dto = new RegionDto(); dto.X = 10; dto.Y = 0; dto.Width = 100; dto.Height = 100; dto.Max = current.temp.FtoC(); dto.Min = string.Empty; dto.WeatherCode = current.code; dto.WeekDay = string.Empty; dto.Trend = currTemp - this._lastTemp; this.DrawWeatherRegion(g, dto); this._lastTemp = currTemp; int cnt = 2; foreach(var forest in forecast.ToArray()) { dto.X = x; dto.Y = 0; dto.Width = 100; dto.Height = 100; dto.Max = forest.high.FtoC(); dto.Min = forest.low.FtoC(); dto.WeatherCode = forest.code; dto.WeekDay = forest.day; dto.Trend = null; this.DrawWeatherRegion(g, dto); if(--cnt == 0) { x += 250; } else { x += 110; } } g.SetSourceRGBA(0, 0, 0, 1); } return true; }
private void DrawWeatherRegion(Context g, RegionDto dto) { string trendIcon = string.Empty; g.SetSourceRGB(1, 1, 1); double halfWidth = dto.Width / 2.0; TextExtents extDay; if (string.IsNullOrEmpty(dto.WeekDay)) { extDay = g.TextExtents("test"); } else { extDay = g.TextExtents(dto.WeekDay); } var t_x = dto.X + halfWidth - (extDay.Width / 2); var t_y = dto.Y + extDay.Height + padding; this.DrawTextAt(g, t_x, t_y, dto.WeekDay); //drawe day temp var extMax = g.TextExtents(dto.Max); var extMin = g.TextExtents(dto.Min); t_y = t_y + extDay.Height + padding + 2; t_x = dto.X + halfWidth - (extMax.Width / 2); this.DrawTextAt(g, t_x, t_y, dto.Max); if (dto.Trend.HasValue) { if (dto.Trend.Value > 0) { trendIcon = "up.png"; } else if (dto.Trend < 0) { trendIcon = "dwn.png"; } if (!string.IsNullOrEmpty(trendIcon)) { string pathToImg = global::System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, string.Format("Icons/{0}", trendIcon)); ImageSurface image_surface = new ImageSurface(pathToImg); this.DrawSurfaceAt(g, image_surface, t_x - extMax.Width / 2, t_y - extMax.Height); } } t_x = dto.X + halfWidth - imageWidth / 2; DrawWeatherCode(g, dto.WeatherCode, t_x, t_y); g.SetSourceRGB(0.7, 0.7, 0.7); t_x = dto.X + halfWidth - (extMin.Width / 2); t_y += 68 + extMax.Height / 2; this.DrawTextAt(g, t_x, t_y, dto.Min); }