@@ -10,6 +10,7 @@ import (
1010 "fyne.io/fyne/v2/canvas"
1111 "fyne.io/fyne/v2/container"
1212 "fyne.io/fyne/v2/layout"
13+ "fyne.io/fyne/v2/theme"
1314 "fyne.io/fyne/v2/widget"
1415
1516 "weatherwidget/assets"
@@ -20,10 +21,10 @@ import (
2021type CityPanel struct {
2122 container * fyne.Container
2223 iconWidget * canvas.Image
23- tempLabel * widget. Label
24+ tempText * canvas. Text
2425 descLabel * widget.Label
25- cityLabel * widget. Label
26- timeLabel * widget. Label
26+ cityText * canvas. Text
27+ timeText * canvas. Text
2728 dateLabel * widget.Label
2829 errorIcon * canvas.Image
2930
@@ -50,42 +51,52 @@ func NewCityPanel() *CityPanel {
5051 res := loadIconFromAssets (weather .IconCloudy )
5152 p .iconWidget = canvas .NewImageFromResource (res )
5253 p .iconWidget .FillMode = canvas .ImageFillContain
53- p .iconWidget .SetMinSize (fyne .NewSize (40 , 40 ))
54+ p .iconWidget .SetMinSize (fyne .NewSize (64 , 64 ))
5455
5556 // Error indicator icon — hidden by default.
5657 p .errorIcon = canvas .NewImageFromResource (nil )
5758 p .errorIcon .FillMode = canvas .ImageFillContain
5859 p .errorIcon .SetMinSize (fyne .NewSize (16 , 16 ))
5960 p .errorIcon .Hide ()
6061
61- // Labels with placeholder text.
62- p .tempLabel = widget .NewLabel ("--°C" )
63- p .tempLabel .Alignment = fyne .TextAlignCenter
62+ // Labels with appealing typography.
63+ p .cityText = canvas .NewText ("City, RG" , theme .ForegroundColor ())
64+ p .cityText .TextSize = 18
65+ p .cityText .TextStyle = fyne.TextStyle {Bold : true }
66+ p .cityText .Alignment = fyne .TextAlignCenter
67+
68+ p .tempText = canvas .NewText ("--°C" , theme .ForegroundColor ())
69+ p .tempText .TextSize = 42
70+ p .tempText .TextStyle = fyne.TextStyle {Bold : true }
71+ p .tempText .Alignment = fyne .TextAlignCenter
6472
6573 p .descLabel = widget .NewLabel ("--" )
6674 p .descLabel .Alignment = fyne .TextAlignCenter
75+ p .descLabel .TextStyle = fyne.TextStyle {Italic : true }
6776
68- p .cityLabel = widget .NewLabel ("City, RG" )
69- p .cityLabel .Alignment = fyne .TextAlignCenter
70-
71- p .timeLabel = widget .NewLabel ("--:--:--" )
72- p .timeLabel .Alignment = fyne .TextAlignCenter
77+ p .timeText = canvas .NewText ("--:--:--" , theme .ForegroundColor ())
78+ p .timeText .TextSize = 20
79+ p .timeText .TextStyle = fyne.TextStyle {Bold : true }
80+ p .timeText .Alignment = fyne .TextAlignCenter
7381
7482 p .dateLabel = widget .NewLabel ("--/--/----" )
7583 p .dateLabel .Alignment = fyne .TextAlignCenter
7684
7785 // Icon row: weather icon + error icon overlay.
7886 iconRow := container .NewHBox (layout .NewSpacer (), p .iconWidget , p .errorIcon , layout .NewSpacer ())
7987
80- // Vertical stack: city, icon, temp, description, time, date.
81- p .container = container .NewVBox (
82- container .NewCenter (p .cityLabel ),
88+ // Vertical stack with extra breathing room and separators
89+ p .container = container .NewPadded (container .NewVBox (
90+ container .NewCenter (p .cityText ),
91+ layout .NewSpacer (),
8392 iconRow ,
84- container .NewCenter (p .tempLabel ),
93+ container .NewCenter (p .tempText ),
8594 container .NewCenter (p .descLabel ),
86- container .NewCenter (p .timeLabel ),
95+ layout .NewSpacer (),
96+ widget .NewSeparator (),
97+ container .NewCenter (p .timeText ),
8798 container .NewCenter (p .dateLabel ),
88- )
99+ ))
89100
90101 return p
91102}
@@ -110,9 +121,13 @@ func (p *CityPanel) Update(data *weather.WeatherData) {
110121 }
111122
112123 // Update labels.
113- p .tempLabel .SetText (weather .FormatTemperature (data .Temperature ))
124+ p .tempText .Text = weather .FormatTemperature (data .Temperature )
125+ p .tempText .Refresh ()
126+
114127 p .descLabel .SetText (weather .FormatDescription (data .Description ))
115- p .cityLabel .SetText (weather .FormatCityRegion (data .CityName , data .Region ))
128+
129+ p .cityText .Text = weather .FormatCityRegion (data .CityName , data .Region )
130+ p .cityText .Refresh ()
116131
117132 // Hide error indicator on successful update.
118133 p .errorIcon .Hide ()
@@ -158,7 +173,8 @@ func (p *CityPanel) StartClock(timezone string) {
158173
159174 // Set the time immediately before the first tick.
160175 now := time .Now ()
161- p .timeLabel .SetText (weather .FormatTime (now , timezone ))
176+ p .timeText .Text = weather .FormatTime (now , timezone )
177+ p .timeText .Refresh ()
162178 p .dateLabel .SetText (weather .FormatDate (now , timezone ))
163179
164180 go func () {
@@ -170,7 +186,8 @@ func (p *CityPanel) StartClock(timezone string) {
170186 timeStr := weather .FormatTime (t , timezone )
171187 dateStr := weather .FormatDate (t , timezone )
172188 fyne .Do (func () {
173- p .timeLabel .SetText (timeStr )
189+ p .timeText .Text = timeStr
190+ p .timeText .Refresh ()
174191 p .dateLabel .SetText (dateStr )
175192 })
176193 }
0 commit comments