[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53143] trunk/blender: Icons now draw good again!

Ton Roosendaal ton at blender.org
Tue Dec 18 20:35:54 CET 2012


Revision: 53143
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53143
Author:   ton
Date:     2012-12-18 19:35:54 +0000 (Tue, 18 Dec 2012)
Log Message:
-----------
Icons now draw good again!

- Exported via Inkscape a 16 and 32 pixel bitmap version
- Use these as mipmap levels for OpenGL texture drawing.
- Changed code to get right sizes for drawing icons - better than last week's method.

Todo:

- Custom icons don't work yet (old one)
- Missing icons in the svg
- The .sh script for inkscape needs changed to support this
  (now do manual saving)

Modified Paths:
--------------
    trunk/blender/SConstruct
    trunk/blender/source/blender/editors/datafiles/CMakeLists.txt
    trunk/blender/source/blender/editors/datafiles/SConscript
    trunk/blender/source/blender/editors/include/ED_datafiles.h
    trunk/blender/source/blender/editors/interface/interface_icons.c
    trunk/blender/source/blender/editors/interface/interface_widgets.c

Added Paths:
-----------
    trunk/blender/release/datafiles/blender_icons16.png
    trunk/blender/release/datafiles/blender_icons32.png

Removed Paths:
-------------
    trunk/blender/release/datafiles/blender_icons.png

Modified: trunk/blender/SConstruct
===================================================================
--- trunk/blender/SConstruct	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/SConstruct	2012-12-18 19:35:54 UTC (rev 53143)
@@ -532,7 +532,8 @@
 data_to_c_simple("release/datafiles/bmonofont.ttf")
 
 data_to_c_simple("release/datafiles/splash.png")
-data_to_c_simple("release/datafiles/blender_icons.png")
+data_to_c_simple("release/datafiles/blender_icons16.png")
+data_to_c_simple("release/datafiles/blender_icons32.png")
 data_to_c_simple("release/datafiles/prvicons.png")
 
 data_to_c_simple("release/datafiles/brushicons/add.png")

Deleted: trunk/blender/release/datafiles/blender_icons.png
===================================================================
(Binary files differ)

Added: trunk/blender/release/datafiles/blender_icons16.png
===================================================================
(Binary files differ)


Property changes on: trunk/blender/release/datafiles/blender_icons16.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Added: trunk/blender/release/datafiles/blender_icons32.png
===================================================================
(Binary files differ)


Property changes on: trunk/blender/release/datafiles/blender_icons32.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Modified: trunk/blender/source/blender/editors/datafiles/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/editors/datafiles/CMakeLists.txt	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/source/blender/editors/datafiles/CMakeLists.txt	2012-12-18 19:35:54 UTC (rev 53143)
@@ -46,7 +46,8 @@
 
 		# images
 		data_to_c_simple(../../../../release/datafiles/splash.png SRC)
-		data_to_c_simple(../../../../release/datafiles/blender_icons.png SRC)
+		data_to_c_simple(../../../../release/datafiles/blender_icons16.png SRC)
+		data_to_c_simple(../../../../release/datafiles/blender_icons32.png SRC)
 		data_to_c_simple(../../../../release/datafiles/prvicons.png SRC)
 
 		# brushes

Modified: trunk/blender/source/blender/editors/datafiles/SConscript
===================================================================
--- trunk/blender/source/blender/editors/datafiles/SConscript	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/source/blender/editors/datafiles/SConscript	2012-12-18 19:35:54 UTC (rev 53143)
@@ -40,7 +40,8 @@
 	os.path.join(env['DATA_SOURCES'], "bmonofont.ttf.c"),
 
 	os.path.join(env['DATA_SOURCES'], "splash.png.c"),
-	os.path.join(env['DATA_SOURCES'], "blender_icons.png.c"),
+	os.path.join(env['DATA_SOURCES'], "blender_icons16.png.c"),
+	os.path.join(env['DATA_SOURCES'], "blender_icons32.png.c"),
 	os.path.join(env['DATA_SOURCES'], "prvicons.png.c"),
 
 	os.path.join(env['DATA_SOURCES'], "startup.blend.c"),

Modified: trunk/blender/source/blender/editors/include/ED_datafiles.h
===================================================================
--- trunk/blender/source/blender/editors/include/ED_datafiles.h	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/source/blender/editors/include/ED_datafiles.h	2012-12-18 19:35:54 UTC (rev 53143)
@@ -36,9 +36,12 @@
 extern int datatoc_startup_blend_size;
 extern char datatoc_startup_blend[];
 
-extern int datatoc_blender_icons_png_size;
-extern char datatoc_blender_icons_png[];
+extern int datatoc_blender_icons16_png_size;
+extern char datatoc_blender_icons16_png[];
 
+extern int datatoc_blender_icons32_png_size;
+extern char datatoc_blender_icons32_png[];
+
 extern int datatoc_prvicons_png_size;
 extern char datatoc_prvicons_png[];
 

Modified: trunk/blender/source/blender/editors/interface/interface_icons.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_icons.c	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/source/blender/editors/interface/interface_icons.c	2012-12-18 19:35:54 UTC (rev 53143)
@@ -511,13 +511,15 @@
 
 static void init_internal_icons(void)
 {
-	bTheme *btheme = UI_GetTheme();
-	ImBuf *bbuf = NULL;
+//	bTheme *btheme = UI_GetTheme();
+	ImBuf *b16buf = NULL, *b32buf = NULL;
 	int x, y, icontype;
-	char iconfilestr[FILE_MAX];
-	
+
+#if 0 // temp disabled
 	if ((btheme != NULL) && btheme->tui.iconfile[0]) {
 		char *icondir = BLI_get_folder(BLENDER_DATAFILES, "icons");
+		char iconfilestr[FILE_MAX];
+		
 		if (icondir) {
 			BLI_join_dirfile(iconfilestr, sizeof(iconfilestr), icondir, btheme->tui.iconfile);
 			bbuf = IMB_loadiffname(iconfilestr, IB_rect, NULL); /* if the image is missing bbuf will just be NULL */
@@ -531,11 +533,16 @@
 			printf("%s: 'icons' data path not found, continuing\n", __func__);
 		}
 	}
-	if (bbuf == NULL)
-		bbuf = IMB_ibImageFromMemory((unsigned char *)datatoc_blender_icons_png,
-		                             datatoc_blender_icons_png_size, IB_rect, NULL, "<blender icons>");
+#endif
+	if (b16buf == NULL)
+		b16buf = IMB_ibImageFromMemory((unsigned char *)datatoc_blender_icons16_png,
+		                             datatoc_blender_icons16_png_size, IB_rect, NULL, "<blender icons>");
 
-	if (bbuf) {
+	if (b32buf == NULL)
+		b32buf = IMB_ibImageFromMemory((unsigned char *)datatoc_blender_icons32_png,
+		                             datatoc_blender_icons32_png_size, IB_rect, NULL, "<blender icons>");
+	
+	if (b16buf && b32buf) {
 		/* free existing texture if any */
 		if (icongltex.id) {
 			glDeleteTextures(1, &icongltex.id);
@@ -547,17 +554,29 @@
 			glGenTextures(1, &icongltex.id);
 
 			if (icongltex.id) {
-				icongltex.w = bbuf->x;
-				icongltex.h = bbuf->y;
-				icongltex.invw = 1.0f / bbuf->x;
-				icongltex.invh = 1.0f / bbuf->y;
+				int level = 2;
+				
+				icongltex.w = b32buf->x;
+				icongltex.h = b32buf->y;
+				icongltex.invw = 1.0f / b32buf->x;
+				icongltex.invh = 1.0f / b32buf->y;
 
 				glBindTexture(GL_TEXTURE_2D, icongltex.id);
-				glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bbuf->x, bbuf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, bbuf->rect);
-				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+				
+				glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, b32buf->x, b32buf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, b32buf->rect);
+				glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, b16buf->x, b16buf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, b16buf->rect);
+				
+				while (b16buf->x > 1) {
+					b16buf = IMB_onehalf(b16buf);
+					glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA, b16buf->x, b16buf->y, 0, GL_RGBA, GL_UNSIGNED_BYTE, b16buf->rect);
+					level++;
+				}
+				
+				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
+				
 				glBindTexture(GL_TEXTURE_2D, 0);
-
+				
 				if (glGetError() == GL_OUT_OF_MEMORY) {
 					glDeleteTextures(1, &icongltex.id);
 					icongltex.id = 0;
@@ -571,10 +590,10 @@
 	else
 		icontype = ICON_TYPE_BUFFER;
 	
-	if (bbuf) {
+	if (b16buf) {
 		for (y = 0; y < ICON_GRID_ROWS; y++) {
 			for (x = 0; x < ICON_GRID_COLS; x++) {
-				def_internal_icon(bbuf, BIFICONID_FIRST + y * ICON_GRID_COLS + x,
+				def_internal_icon(b32buf, BIFICONID_FIRST + y * ICON_GRID_COLS + x,
 				                  x * (ICON_GRID_W + ICON_GRID_MARGIN) + ICON_GRID_MARGIN,
 				                  y * (ICON_GRID_H + ICON_GRID_MARGIN) + ICON_GRID_MARGIN, ICON_GRID_W,
 				                  icontype);
@@ -593,7 +612,9 @@
 	def_internal_vicon(VICO_X_VEC, vicon_x_draw);
 	def_internal_vicon(VICO_SMALL_TRI_RIGHT_VEC, vicon_small_tri_right_draw);
 
-	IMB_freeImBuf(bbuf);
+	IMB_freeImBuf(b16buf);
+	IMB_freeImBuf(b32buf);
+	
 }
 #endif  /* WITH_HEADLESS */
 
@@ -887,7 +908,7 @@
 		/* first allocate imbuf for scaling and copy preview into it */
 		ima = IMB_allocImBuf(rw, rh, 32, IB_rect);
 		memcpy(ima->rect, rect, rw * rh * sizeof(unsigned int));
-		IMB_scalefastImBuf(ima, w, h); /* scale it */
+		IMB_scaleImBuf(ima, w, h); /* scale it */
 		rect = ima->rect;
 	}
 

Modified: trunk/blender/source/blender/editors/interface/interface_widgets.c
===================================================================
--- trunk/blender/source/blender/editors/interface/interface_widgets.c	2012-12-18 18:25:48 UTC (rev 53142)
+++ trunk/blender/source/blender/editors/interface/interface_widgets.c	2012-12-18 19:35:54 UTC (rev 53143)
@@ -874,13 +874,9 @@
 	/* this icon doesn't need draw... */
 	if (icon == ICON_BLANK1 && (but->flag & UI_ICON_SUBMENU) == 0) return;
 	
-	/* XXX remove hack when new icons are made */
-	if ( icon == ICON_LAYER_ACTIVE || icon == ICON_LAYER_USED)
-		height = 1.2f * BLI_rcti_size_y(rect); else
-	/* icons are 80% of height of button (16 pixels inside 20 height) */
-	height = 0.8f * BLI_rcti_size_y(rect);
-	aspect = height / ICON_DEFAULT_HEIGHT;
-
+	aspect = but->block->aspect / UI_DPI_FAC;
+	height = ICON_DEFAULT_HEIGHT / aspect;
+	
 	/* calculate blend color */
 	if (ELEM4(but->type, TOG, ROW, TOGN, LISTROW)) {
 		if (but->flag & UI_SELECT) {}
@@ -894,10 +890,12 @@
 	glEnable(GL_BLEND);
 	
 	if (icon && icon != ICON_BLANK1) {
+		float ofs = 1.0f / aspect;
+		
 		if (but->flag & UI_ICON_LEFT) {
 			if (but->type == BUT_TOGDUAL) {
 				if (but->drawstr[0]) {
-					xs = rect->xmin - 1.0f * aspect;
+					xs = rect->xmin - ofs;
 				}
 				else {
 					xs = (rect->xmin + rect->xmax - height) / 2.0f;
@@ -905,15 +903,15 @@
 			}
 			else if (but->block->flag & UI_BLOCK_LOOP) {
 				if (but->type == SEARCH_MENU)
-					xs = rect->xmin + 4.0f * aspect;
+					xs = rect->xmin + 4.0f * ofs;
 				else
-					xs = rect->xmin + 1.0f * aspect;
+					xs = rect->xmin + ofs;
 			}
 			else if ((but->type == ICONROW) || (but->type == ICONTEXTROW)) {
-				xs = rect->xmin + 3.0f * aspect;
+				xs = rect->xmin + 3.0f * ofs;
 			}
 			else {
-				xs = rect->xmin + 4.0f * aspect;
+				xs = rect->xmin + 4.0f * ofs;
 			}
 			ys = (rect->ymin + rect->ymax - height) / 2.0f;
 		}
@@ -925,17 +923,17 @@
 		/* to indicate draggable */
 		if (but->dragpoin && (but->flag & UI_ACTIVE)) {
 			float rgb[3] = {1.25f, 1.25f, 1.25f};
-			UI_icon_draw_aspect_color(xs, ys, icon, 1.0f / aspect, rgb);
+			UI_icon_draw_aspect_color(xs, ys, icon, aspect, rgb);
 		}
 		else
-			UI_icon_draw_aspect(xs, ys, icon, 1.0f / aspect, alpha);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list