diff options
author | Andrea Weikert <elubie@gmx.net> | 2007-09-02 21:25:03 +0400 |
---|---|---|
committer | Andrea Weikert <elubie@gmx.net> | 2007-09-02 21:25:03 +0400 |
commit | 356ab943736e8a2434a8ff5845873482597ba5e2 (patch) | |
tree | 910356ace904dc4f11f1daf15330bb0827934f5b /source/blender/blenkernel/intern/icons.c | |
parent | 22c23fb04f7f1297b971f03d69b8b04b7dd9caa4 (diff) |
== imagebrowser ==
Initial commit of imagebrowser in trunk.
BIG COMMIT!
Main changes:
* completely reworked imasel space
* creation and storage of the preview images for materials, textures, world and lamp
* thumbnails of images and movie files when browsing in the file system
* loading previews from external .blend when linking or appending
* thumbnail caching according to the Thumbnail Managing Standard: http://jens.triq.net/thumbnail-spec/
* for now just kept imasel access mostly as old imgbrowser (CTRL+F4, CTRL+F1) a bit hidden still.
* filtering of file types (images, movies, .blend, py,...)
* preliminary managing of bookmarks ('B' button to add, XKEY while bookmark active to delete)
More detailed info which will be updated here: http://wiki.blender.org/index.php/User:Elubie/PreviewImageBrowser
Places that need special review (and probably fixes):
* BLO_blendhandle_get_previews in readblenentry
* readfile.c: do_version and refactorings of do_library_append
* UI integration
TODO and known issues still:
* Accented characters do not display correctly with international fonts
* Crash was reported when browsing in directory with movie files
* Bookmark management still needs some UI work (second scrollbar?), feedback here is welcome!
Credits:
Samir Bharadwaj (samirbharadwaj@yahoo.com) for the icon images.
Many thanks to everyone who gave feedback and helped so far!
Diffstat (limited to 'source/blender/blenkernel/intern/icons.c')
-rw-r--r-- | source/blender/blenkernel/intern/icons.c | 169 |
1 files changed, 137 insertions, 32 deletions
diff --git a/source/blender/blenkernel/intern/icons.c b/source/blender/blenkernel/intern/icons.c index ee37a4ec9f9..f144d2badd1 100644 --- a/source/blender/blenkernel/intern/icons.c +++ b/source/blender/blenkernel/intern/icons.c @@ -1,34 +1,32 @@ /** - * $Id$ - * - * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. The Blender - * Foundation also sells licenses for use in proprietary software under - * the Blender License. See http://www.blender.org/BL/ for information - * about this. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL/BL DUAL LICENSE BLOCK ***** - */ +* $Id$ +* +* ***** BEGIN GPL LICENSE BLOCK ***** +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +* +* The Original Code is Copyright (C) 2006-2007 Blender Foundation. +* All rights reserved. +* +* The Original Code is: all of this file. +* +* Contributor(s): none yet. +* +* ***** END GPL LICENSE BLOCK ***** +* +*/ #include <math.h> #include <stdlib.h> @@ -41,6 +39,11 @@ #include "MEM_guardedalloc.h" #include "DNA_ID.h" +#include "DNA_image_types.h" +#include "DNA_lamp_types.h" +#include "DNA_material_types.h" +#include "DNA_texture_types.h" +#include "DNA_world_types.h" #include "BLI_ghash.h" @@ -111,6 +114,101 @@ void BKE_icons_free() gIcons = NULL; } +struct PreviewImage* BKE_previewimg_create() +{ + PreviewImage* prv_img = NULL; + int i; + + prv_img = MEM_callocN(sizeof(PreviewImage), "img_prv"); + + for (i=0; i<PREVIEW_MIPMAPS; ++i) { + prv_img->changed[i] = 1; + } + return prv_img; +} + +void BKE_previewimg_free(PreviewImage **prv) +{ + if(prv && (*prv)) { + int i; + + for (i=0; i<PREVIEW_MIPMAPS;++i) { + if ((*prv)->rect[i]) { + MEM_freeN((*prv)->rect[i]); + (*prv)->rect[i] = NULL; + } + } + MEM_freeN((*prv)); + *prv = NULL; + } +} + +struct PreviewImage* BKE_previewimg_copy(PreviewImage *prv) +{ + PreviewImage* prv_img = NULL; + int i; + + if (prv) { + prv_img = MEM_dupallocN(prv); + for (i=0; i < PREVIEW_MIPMAPS; ++i) { + if (prv->rect[i]) { + prv_img->rect[i] = MEM_dupallocN(prv->rect[i]); + } else { + prv_img->rect[i] = NULL; + } + } + } + return prv_img; +} + +void BKE_previewimg_free_id(ID *id) +{ + if (GS(id->name) == ID_MA) { + Material *mat = (Material*)id; + BKE_previewimg_free(&mat->preview); + } else if (GS(id->name) == ID_TE) { + Tex *tex = (Tex*)id; + BKE_previewimg_free(&tex->preview); + } else if (GS(id->name) == ID_WO) { + World *wo = (World*)id; + BKE_previewimg_free(&wo->preview); + } else if (GS(id->name) == ID_LA) { + Lamp *la = (Lamp*)id; + BKE_previewimg_free(&la->preview); + } else if (GS(id->name) == ID_IM) { + Image *img = (Image*)id; + BKE_previewimg_free(&img->preview); + } +} + +PreviewImage* BKE_previewimg_get(ID *id) +{ + PreviewImage* prv_img = NULL; + + if (GS(id->name) == ID_MA) { + Material *mat = (Material*)id; + if (!mat->preview) mat->preview = BKE_previewimg_create(); + prv_img = mat->preview; + } else if (GS(id->name) == ID_TE) { + Tex *tex = (Tex*)id; + if (!tex->preview) tex->preview = BKE_previewimg_create(); + prv_img = tex->preview; + } else if (GS(id->name) == ID_WO) { + World *wo = (World*)id; + if (!wo->preview) wo->preview = BKE_previewimg_create(); + prv_img = wo->preview; + } else if (GS(id->name) == ID_LA) { + Lamp *la = (Lamp*)id; + if (!la->preview) la->preview = BKE_previewimg_create(); + prv_img = la->preview; + } else if (GS(id->name) == ID_IM) { + Image *img = (Image*)id; + if (!img->preview) img->preview = BKE_previewimg_create(); + prv_img = img->preview; + } + + return prv_img; +} void BKE_icon_changed(int id) { @@ -122,7 +220,15 @@ void BKE_icon_changed(int id) if (icon) { - icon->changed = 1; + PreviewImage *prv = BKE_previewimg_get((ID*)icon->obj); + + /* all previews changed */ + if (prv) { + int i; + for (i=0; i<PREVIEW_MIPMAPS; ++i) { + prv->changed[i] = 1; + } + } } } @@ -151,7 +257,6 @@ int BKE_icon_getid(struct ID* id) /* next two lines make sure image gets created */ new_icon->drawinfo = 0; new_icon->drawinfo_free = 0; - new_icon->changed = 1; BLI_ghash_insert(gIcons, (void *)id->icon_id, new_icon); |