Commit: 990598e60cac95bb93e82a548b17bf333cb3dcb0
Author: Bastien Montagne
Date:   Wed Apr 8 14:21:00 2015 +0200
Branches: asset-experiments
https://developer.blender.org/rB990598e60cac95bb93e82a548b17bf333cb3dcb0

Merge branch 'master' into asset-experiments

Conflicts:
        source/blender/editors/space_file/file_draw.c
        source/blender/editors/space_file/filelist.c
        source/blender/imbuf/IMB_thumbs.h
        source/blender/imbuf/intern/thumbs.c
        source/blender/imbuf/intern/thumbs_blend.c

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



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

diff --cc source/blender/editors/space_file/file_draw.c
index 5cc9282,a6f3a73..bf955cc
--- a/source/blender/editors/space_file/file_draw.c
+++ b/source/blender/editors/space_file/file_draw.c
@@@ -296,8 -323,7 +296,9 @@@ void file_calc_previews(const bContext 
        UI_view2d_totRect_set(v2d, sfile->layout->width, sfile->layout->height);
  }
  
- static void file_draw_preview(uiBlock *block, const char *path,
-                               int sx, int sy, ImBuf *imb, int icon, 
FileLayout *layout, bool dropshadow, bool drag)
 -static void file_draw_preview(uiBlock *block, struct direntry *file, int sx, 
int sy, ImBuf *imb, FileLayout *layout, bool is_icon, bool drag)
++static void file_draw_preview(
++        uiBlock *block, const char *path, int sx, int sy,
++        ImBuf *imb, const int icon, FileLayout *layout, const bool is_icon, 
const int typeflags, const bool drag)
  {
        uiBut *but;
        float fx, fy;
@@@ -306,6 -332,7 +307,7 @@@
        float scaledx, scaledy;
        float scale;
        int ex, ey;
 -      bool use_dropshadow = !is_icon && (file->flags & FILE_TYPE_IMAGE);
++      bool use_dropshadow = !is_icon && (typeflags & FILE_TYPE_IMAGE);
  
        BLI_assert(imb != NULL);
  
@@@ -347,15 -375,16 +350,20 @@@
        glEnable(GL_BLEND);
  
        /* the image */
-       glColor4f(1.0, 1.0, 1.0, 1.0);
 -      if (!is_icon && file->flags & FILE_TYPE_FTFONT) {
++      if (!is_icon && typeflags & FILE_TYPE_FTFONT) {
+               UI_ThemeColor(TH_TEXT);
+       }
+       else {
+               glColor4f(1.0, 1.0, 1.0, 1.0);
+       }
        glaDrawPixelsTexScaled((float)xco, (float)yco, imb->x, imb->y, GL_RGBA, 
GL_UNSIGNED_BYTE, GL_NEAREST, imb->rect, scale, scale);
  
 +      if (icon) {
 +              UI_icon_draw((float)xco, (float)yco, icon);
 +      }
 +
        /* border */
-       if (dropshadow) {
+       if (use_dropshadow) {
                glColor4f(0.0f, 0.0f, 0.0f, 0.4f);
                fdrawbox((float)xco, (float)yco, (float)(xco + ex), (float)(yco 
+ ey));
        }
@@@ -544,12 -556,10 +552,11 @@@ void file_draw_list(const bContext *C, 
                                is_icon = 1;
                        }
  
-                       file_draw_preview(block, path, sx, sy, imb, icon, 
layout,
-                                         !is_icon && (file->typeflag & 
FILE_TYPE_IMAGE), do_drag);
 -                      file_draw_preview(block, file, sx, sy, imb, layout, 
is_icon, do_drag);
++                      file_draw_preview(block, path, sx, sy, imb, icon, 
layout, is_icon, file->typeflag, do_drag);
                }
                else {
 -                      file_draw_icon(block, file->path, sx, sy - (UI_UNIT_Y / 
6), get_file_icon(file), ICON_DEFAULT_WIDTH_SCALE, ICON_DEFAULT_HEIGHT_SCALE, 
do_drag);
 +                      file_draw_icon(block, path, sx, sy - (UI_UNIT_Y / 6), 
filelist_geticon(files, i, true),
 +                                     ICON_DEFAULT_WIDTH_SCALE, 
ICON_DEFAULT_HEIGHT_SCALE, do_drag);
                        sx += ICON_DEFAULT_WIDTH_SCALE + 0.2f * UI_UNIT_X;
                }
  
diff --cc source/blender/editors/space_file/filelist.c
index 2f7f47f,5214b61..ed2ed8a
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@@ -843,1006 -679,149 +843,1009 @@@ static ImBuf *filelist_geticon_image_ex
        return ibuf;
  }
  
 -/* ********** Main ********** */
 +ImBuf *filelist_geticon_image(struct FileList *filelist, const int index)
 +{
 +      FileDirEntry *file = filelist_geticon_get_file(filelist, index);
  
 -FileList *filelist_new(short type)
 +      return filelist_geticon_image_ex(file->typeflag, file->relpath);
 +}
 +
 +static int filelist_geticon_ex(
 +        const int typeflag, const int blentype, const char *relpath, const 
bool is_main, const bool ignore_libdir)
  {
 -      FileList *p = MEM_callocN(sizeof(*p), __func__);
 +      if ((typeflag & FILE_TYPE_DIR) && !(ignore_libdir && (typeflag & 
(FILE_TYPE_BLENDERLIB | FILE_TYPE_BLENDER)))) {
 +              if (FILENAME_IS_PARENT(relpath)) {
 +                      return is_main ? ICON_FILE_PARENT : ICON_NONE;
 +              }
 +              else if (typeflag & FILE_TYPE_APPLICATIONBUNDLE) {
 +                      return ICON_UGLYPACKAGE;
 +              }
 +              else if (typeflag & FILE_TYPE_BLENDER) {
 +                      return ICON_FILE_BLEND;
 +              }
 +              else if (is_main) {
 +                      /* Do not return icon for folders if icons are not 
'main' draw type (e.g. when used over previews). */
 +                      return ICON_FILE_FOLDER;
 +              }
 +      }
  
 -      switch (type) {
 -              case FILE_MAIN:
 -                      p->readf = filelist_read_main;
 -                      p->filterf = is_filtered_main;
 -                      break;
 -              case FILE_LOADLIB:
 -                      p->readf = filelist_read_library;
 -                      p->filterf = is_filtered_lib;
 -                      break;
 -              default:
 -                      p->readf = filelist_read_dir;
 -                      p->filterf = is_filtered_file;
 -                      break;
 +      if (typeflag & FILE_TYPE_BLENDER)
 +              return ICON_FILE_BLEND;
 +      else if (typeflag & FILE_TYPE_BLENDER_BACKUP)
 +              return ICON_FILE_BACKUP;
 +      else if (typeflag & FILE_TYPE_IMAGE)
 +              return ICON_FILE_IMAGE;
 +      else if (typeflag & FILE_TYPE_MOVIE)
 +              return ICON_FILE_MOVIE;
 +      else if (typeflag & FILE_TYPE_PYSCRIPT)
 +              return ICON_FILE_SCRIPT;
 +      else if (typeflag & FILE_TYPE_SOUND)
 +              return ICON_FILE_SOUND;
 +      else if (typeflag & FILE_TYPE_FTFONT)
 +              return ICON_FILE_FONT;
 +      else if (typeflag & FILE_TYPE_BTX)
 +              return ICON_FILE_BLANK;
 +      else if (typeflag & FILE_TYPE_COLLADA)
 +              return ICON_FILE_BLANK;
 +      else if (typeflag & FILE_TYPE_TEXT)
 +              return ICON_FILE_TEXT;
 +      else if (typeflag & FILE_TYPE_BLENDERLIB) {
 +              /* TODO: this should most likely be completed and moved to 
UI_interface_icons.h ? unless it already exists somewhere... */
 +              switch (blentype) {
 +                      case ID_AC:
 +                              return ICON_ANIM_DATA;
 +                      case ID_AR:
 +                              return ICON_ARMATURE_DATA;
 +                      case ID_BR:
 +                              return ICON_BRUSH_DATA;
 +                      case ID_CA:
 +                              return ICON_CAMERA_DATA;
 +                      case ID_CU:
 +                              return ICON_CURVE_DATA;
 +                      case ID_GD:
 +                              return ICON_GREASEPENCIL;
 +                      case ID_GR:
 +                              return ICON_GROUP;
 +                      case ID_IM:
 +                              return ICON_IMAGE_DATA;
 +                      case ID_LA:
 +                              return ICON_LAMP_DATA;
 +                      case ID_LS:
 +                              return ICON_LINE_DATA;
 +                      case ID_LT:
 +                              return ICON_LATTICE_DATA;
 +                      case ID_MA:
 +                              return ICON_MATERIAL_DATA;
 +                      case ID_MB:
 +                              return ICON_META_DATA;
 +                      case ID_MC:
 +                              return ICON_CLIP;
 +                      case ID_ME:
 +                              return ICON_MESH_DATA;
 +                      case ID_MSK:
 +                              return ICON_MOD_MASK;  /* TODO! this would need 
its own icon! */
 +                      case ID_NT:
 +                              return ICON_NODETREE;
 +                      case ID_OB:
 +                              return ICON_OBJECT_DATA;
 +                      case ID_PAL:
 +                              return ICON_COLOR;  /* TODO! this would need 
its own icon! */
 +                      case ID_PC:
 +                              return ICON_CURVE_BEZCURVE;  /* TODO! this 
would need its own icon! */
 +                      case ID_SCE:
 +                              return ICON_SCENE_DATA;
 +                      case ID_SPK:
 +                              return ICON_SPEAKER;
 +                      case ID_SO:
 +                              return ICON_SOUND;
 +                      case ID_TE:
 +                              return ICON_TEXTURE_DATA;
 +                      case ID_TXT:
 +                              return ICON_TEXT;
 +                      case ID_VF:
 +                              return ICON_FONT_DATA;
 +                      case ID_WO:
 +                              return ICON_WORLD_DATA;
 +              }
        }
 -      return p;
 +      return is_main ? ICON_FILE_BLANK : ICON_NONE;
  }
  
 -void filelist_free(struct FileList *filelist)
 +int filelist_geticon(struct FileList *filelist, const int index, const bool 
is_main)
  {
 -      if (!filelist) {
 -              printf("Attempting to delete empty filelist.\n");
 -              return;
 -      }
 -      
 -      MEM_SAFE_FREE(filelist->fidx);
 -      filelist->numfiltered = 0;
 -      memset(&filelist->filter_data, 0, sizeof(filelist->filter_data));
 +      FileDirEntry *file = filelist_geticon_get_file(filelist, index);
  
 -      filelist->need_sorting = false;
 -      filelist->sort = FILE_SORT_NONE;
 +      return filelist_geticon_ex(file->typeflag, file->blentype, 
file->relpath, is_main, false);
 +}
 +
 +/* ********** Main ********** */
  
 -      BLI_filelist_free(filelist->filelist, filelist->numfiles, NULL);
 -      filelist->numfiles = 0;
 -      filelist->filelist = NULL;
 +static void filelist_checkdir_dir(struct FileList *UNUSED(filelist), char 
*r_dir)
 +{
 +      BLI_make_exist(r_dir);
  }
  
 -void filelist_freelib(struct FileList *filelist)
 +static void filelist_checkdir_lib(struct FileList *UNUSED(filelist), char 
*r_dir)
  {
 -      if (filelist->libfiledata)
 -              BLO_blendhandle_close(filelist->libfiledata);
 -      filelist->libfiledata = NULL;
 +      char dir[FILE_MAXDIR];
 +      if (!BLO_library_path_explode(r_dir, dir, NULL, NULL)) {
 +              /* if not a valid library, we need it to be a valid directory! 
*/
 +              BLI_make_exist(r_dir);
 +      }
  }
  
 -BlendHandle *filelist_lib(struct FileList *filelist)
 +static void filelist_checkdir_main(struct FileList *filelist, char *r_dir)
  {
 -      return filelist->libfiledata;
 +      /* TODO */
 +      filelist_checkdir_lib(filelist, r_dir);
  }
  
 -int filelist_numfiles(struct FileList *filelist)
 +static void filelist_entry_clear(FileDirEntry *entry)
  {
 -      return filelist->numfiltered;
 +      if (entry->name) {
 +              MEM_freeN(entry->name);
 +      }
 +      if (entry->description) {
 +              MEM_freeN(entry->description);
 +      }
 +      if (entry->relpath) {
 +              MEM_freeN(entry->relpath);
 +      }
 +      if (entry->image) {
 +              IMB_freeImBuf(entry->image);
 +      }
 +      /* For now, consider FileDirEntryRevision::poin as not owned here, so 
no need to do anything about it */
 +
 +      if (!BLI_listbase_is_empty(&entry->variants)) {
 +              FileDirEntryVariant *var;
 +
 +              for (var = entry->variants.first; var; var = var->next) {
 +                      if (var->name) {
 +                              MEM_freeN(var->name);
 +                      }
 +                      if (var->description) {
 +                              MEM_freeN(var->description);
 +                      }
 +
 +                      if (!BLI_listbase_is_empty(&var->revisions)) {
 +                              FileDirEntryRevision *rev;
 +
 +                              for (rev = var->revisions.first; rev; rev = 
rev->next) {
 +                                      if (rev->comment) {
 +                                              MEM_freeN(rev->comment);
 +                                      }
 +                              }
 +
 +                              BLI_freelistN(&var->revisions);
 +                      }
 +              }
 +
 +              /* TODO: tags! */
 +
 +              BLI_freelistN(&entry->variants);
 +      }
 +      else if (entry->entry){
 +              MEM_freeN(entry->entry);
 +      }
  }
  
 -const char *filelist_dir(struct FileList *filelist)
 +static void filelist_entry_free(FileDirEntry *entry)
  {
 -      return filelist->dir;
 +      filelist_entry_clear(entry);
 +      MEM_freeN(entry);
  }
  
 -void filelist_setdir(struct FileList *filelist, const char *dir)
 +static void filelist_direntryarr_free(FileDirEntryArr *array)
  {
 -      BLI_strncpy(filelist->dir, dir, sizeof(filelist->dir));
 +      FileDirEntry *entry;
 +
 +      for (entry = array->entries.first; entry; entry = entry->next) {
 +              filelist_entry_free(entry);
 +      }
 +      BLI_listbase_clear(&array->entries);
 +      array->nbr_entries = 0;
 +      array->nbr_entries_filtered = -1;
 +      array->entry_idx_start = -1;
 +      array->entry_idx_end = -1;
  }
  
 -short filelist_changed(struct FileList *filelist)
 +st

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to