[Bf-blender-cvs] [7436a3f] master: Correction for recent commit clearing font cache

Campbell Barton noreply at git.blender.org
Mon Jan 20 02:46:41 CET 2014


Commit: 7436a3f4ce2069b7036cc56901f09270686bc0a5
Author: Campbell Barton
Date:   Mon Jan 20 12:43:56 2014 +1100
https://developer.blender.org/rB7436a3f4ce2069b7036cc56901f09270686bc0a5

Correction for recent commit clearing font cache

- move cache reset into view2d and comment about the rationale for resetting cache there.
- missed other places where view2d zoom level can change (smoothview, borderzoom, home and file reload)
- comment about DPI wasn't correct.

===================================================================

M	source/blender/editors/include/UI_view2d.h
M	source/blender/editors/interface/view2d.c
M	source/blender/editors/interface/view2d_ops.c
M	source/blender/windowmanager/intern/wm_files.c

===================================================================

diff --git a/source/blender/editors/include/UI_view2d.h b/source/blender/editors/include/UI_view2d.h
index da26b3d7..0d5198e 100644
--- a/source/blender/editors/include/UI_view2d.h
+++ b/source/blender/editors/include/UI_view2d.h
@@ -157,6 +157,8 @@ void UI_view2d_totRect_set_resize(struct View2D *v2d, int width, int height, int
 /* per tab offsets, returns 1 if tab changed */
 bool UI_view2d_tab_set(struct View2D *v2d, int tab);
 
+void UI_view2d_zoom_cache_reset(void);
+
 /* view matrix operations */
 void UI_view2d_view_ortho(struct View2D *v2d);
 void UI_view2d_view_orthoSpecial(struct ARegion *ar, struct View2D *v2d, short xaxis);
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index 544d9a0..aadb1b3 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -985,6 +985,15 @@ bool UI_view2d_tab_set(View2D *v2d, int tab)
 	return changed;
 }
 
+void UI_view2d_zoom_cache_reset(void)
+{
+	/* While scaling we can accumulate fonts at many sizes (~20 or so).
+	 * Not an issue with embedded font, but can use over 500Mb with i18n ones! See [#38244]. */
+
+	/* note: only some views draw text, we could check for this case to avoid clearning cache */
+	BLF_cache_clear();
+}
+
 /* *********************************************************************** */
 /* View Matrix Setup */
 
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index d299b72..dfd6a9f 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -38,8 +38,6 @@
 #include "BLI_utildefines.h"
 #include "BLI_math_base.h"
 
-#include "BLF_api.h"
-
 #include "BKE_context.h"
 
 #include "RNA_access.h"
@@ -664,9 +662,7 @@ static void view_zoomstep_apply(bContext *C, wmOperator *op)
 /* cleanup temp customdata  */
 static void view_zoomstep_exit(wmOperator *op)
 {
-	/* Fonts are stored at each DPI level, without this we can easy load 100's of fonts.
-	 * Not an issue with embedded font, but can use over 500Mo with i18n ones! See T38244. */
-	BLF_cache_clear();
+	UI_view2d_zoom_cache_reset();
 
 	if (op->customdata) {
 		MEM_freeN(op->customdata);
@@ -899,9 +895,7 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
 /* cleanup temp customdata  */
 static void view_zoomdrag_exit(bContext *C, wmOperator *op)
 {
-	/* Fonts are stored at each DPI level, without this we can easy load 100's of fonts.
-	 * Not an issue with embedded font, but can use over 500Mo with i18n ones! See T38244. */
-	BLF_cache_clear();
+	UI_view2d_zoom_cache_reset();
 
 	if (op->customdata) {
 		v2dViewZoomData *vzd = op->customdata;
@@ -1373,6 +1367,10 @@ static int view2d_smoothview_invoke(bContext *C, wmOperator *UNUSED(op), const w
 	UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY);
 	ED_region_tag_redraw(ar);
 
+	if (v2d->sms == NULL) {
+		UI_view2d_zoom_cache_reset();
+	}
+
 	return OPERATOR_FINISHED;
 }
 
@@ -1865,9 +1863,11 @@ static int reset_exec(bContext *C, wmOperator *UNUSED(op))
 	ED_region_tag_redraw(ar);
 	UI_view2d_sync(CTX_wm_screen(C), CTX_wm_area(C), v2d, V2D_LOCK_COPY);
 	
+	UI_view2d_zoom_cache_reset();
+
 	return OPERATOR_FINISHED;
 }
- 
+
 static void VIEW2D_OT_reset(wmOperatorType *ot)
 {
 	/* identifiers */
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 58209c6..c4c91b4 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -111,6 +111,7 @@
 #include "GHOST_Path-api.h"
 
 #include "UI_interface.h"
+#include "UI_view2d.h"
 
 #include "GPU_draw.h"
 
@@ -398,6 +399,8 @@ void WM_file_read(bContext *C, const char *filepath, ReportList *reports)
 
 	BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE);
 
+	UI_view2d_zoom_cache_reset();
+
 	/* first try to append data from exotic file formats... */
 	/* it throws error box when file doesn't exist and returns -1 */
 	/* note; it should set some error message somewhere... (ton) */
@@ -544,6 +547,8 @@ int wm_homefile_read(bContext *C, ReportList *reports, bool from_memory, const c
 
 	BLI_callback_exec(CTX_data_main(C), NULL, BLI_CB_EVT_LOAD_PRE);
 
+	UI_view2d_zoom_cache_reset();
+
 	G.relbase_valid = 0;
 	if (!from_memory) {
 		const char * const cfgdir = BLI_get_folder(BLENDER_USER_CONFIG, NULL);




More information about the Bf-blender-cvs mailing list