From 4faef1e10c9d1177eae6350b4471206e91afaff8 Mon Sep 17 00:00:00 2001 From: Bastien Montagne Date: Wed, 2 Apr 2014 12:59:48 +0200 Subject: Add drag-resize to uiTemplatePreview (mat/tex/etc. preview widget). This is done by adding a new button type, GRIP, similar to other numbuttons (scroll, slider, ...), which here controls the preview height. Then, we add a new DNA struct to be able to save that height in Blend files (note I choose not to use Panel struct for this, because we would then have the same limitation we used to have with uiLists, only one preview per panel and no preview outside panel). This implies a change to template_preview UI RNA/py API (each preview needs an ID), but this is backward compatible, as by default datablock type will be used if no ID is given (which means e.g. all material previews with no ID will have same height). Reviewers: brecht Reviewed By: brecht Differential Revision: https://developer.blender.org/D342 --- source/blender/blenloader/intern/readfile.c | 2 ++ source/blender/blenloader/intern/writefile.c | 4 ++++ 2 files changed, 6 insertions(+) (limited to 'source/blender/blenloader') diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 13827f833e0..bcbfdc78013 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -6168,6 +6168,8 @@ static void direct_link_region(FileData *fd, ARegion *ar, int spacetype) IDP_DirectLinkGroup_OrFree(&ui_list->properties, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd); } + link_list(fd, &ar->ui_previews); + if (spacetype == SPACE_EMPTY) { /* unkown space type, don't leak regiondata */ ar->regiondata = NULL; diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 6c4fac60646..894868948f9 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -2487,6 +2487,7 @@ static void write_screens(WriteData *wd, ListBase *scrbase) SpaceLink *sl; Panel *pa; uiList *ui_list; + uiPreview *ui_preview; PanelCategoryStack *pc_act; ARegion *ar; @@ -2503,6 +2504,9 @@ static void write_screens(WriteData *wd, ListBase *scrbase) for (ui_list = ar->ui_lists.first; ui_list; ui_list = ui_list->next) write_uilist(wd, ui_list); + + for (ui_preview = ar->ui_previews.first; ui_preview; ui_preview = ui_preview->next) + writestruct(wd, DATA, "uiPreview", 1, ui_preview); } sl= sa->spacedata.first; -- cgit v1.2.3