From c9896d9cb42c482c98514592b039a89594082958 Mon Sep 17 00:00:00 2001 From: Vadim Lopatin Date: Mon, 1 Feb 2016 15:01:56 +0300 Subject: [PATCH] fix theme change handling - close buggins/dlangide#132 --- src/dlangui/widgets/controls.d | 1 + src/dlangui/widgets/lists.d | 10 ++++++++++ src/dlangui/widgets/widget.d | 4 +++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/dlangui/widgets/controls.d b/src/dlangui/widgets/controls.d index 0f681233..10fccfa6 100644 --- a/src/dlangui/widgets/controls.d +++ b/src/dlangui/widgets/controls.d @@ -213,6 +213,7 @@ class ImageWidget : Widget { /// handle theme change: e.g. reload some themed resources override void onThemeChanged() { + super.onThemeChanged(); if (_drawableId !is null) _drawable.clear(); // remove cached drawable } diff --git a/src/dlangui/widgets/lists.d b/src/dlangui/widgets/lists.d index 42b10c56..055ee8f6 100644 --- a/src/dlangui/widgets/lists.d +++ b/src/dlangui/widgets/lists.d @@ -886,6 +886,16 @@ class ListWidget : WidgetGroup, OnScrollHandler, OnAdapterChangeHandler { return true; } + /// handle theme change: e.g. reload some themed resources + override void onThemeChanged() { + super.onThemeChanged(); + _scrollbar.onThemeChanged(); + for (int i = 0; i < itemCount; i++) { + Widget w = itemWidget(i); + w.onThemeChanged(); + } + } + /// Measure widget according to desired width and height constraints. (Step 1 of two phase layout). override void measure(int parentWidth, int parentHeight) { if (visibility == Visibility.Gone) { diff --git a/src/dlangui/widgets/widget.d b/src/dlangui/widgets/widget.d index c351d19d..831ce44a 100644 --- a/src/dlangui/widgets/widget.d +++ b/src/dlangui/widgets/widget.d @@ -255,13 +255,15 @@ public: /// handle theme change: e.g. reload some themed resources void onThemeChanged() { - _cachedStyle = currentTheme.get(_styleId); // default implementation: call recursive for children for (int i = 0; i < childCount; i++) child(i).onThemeChanged(); if (_ownStyle) { _ownStyle.onThemeChanged(); } + if (_cachedStyle) { + _cachedStyle = currentTheme.get(_styleId); + } } /// returns widget id, null if not set