Page MenuHome

oops_fix_and_scripts.txt

oops_fix_and_scripts.txt

Index: source/blender/python/BPY_menus.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/python/BPY_menus.c,v
retrieving revision 1.28
diff -u -r1.28 BPY_menus.c
--- source/blender/python/BPY_menus.c 18 Jul 2005 03:50:36 -0000 1.28
+++ source/blender/python/BPY_menus.c 14 Aug 2005 08:06:48 -0000
@@ -97,6 +97,8 @@
return PYMENU_UV;
else if( !strcmp( str, "FaceSelect" ) )
return PYMENU_FACESELECT;
+ else if( !strcmp( str, "Oops" ) )
+ return PYMENU_OOPS;
/* "Misc" or an inexistent group name: use misc */
else
return PYMENU_MISC;
@@ -152,6 +154,9 @@
break;
case PYMENU_FACESELECT:
return "FaceSelect";
+ break;
+ case PYMENU_OOPS:
+ return "Oops";
break;
case PYMENU_MISC:
return "Misc";
Index: source/blender/python/BPY_menus.h
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/python/BPY_menus.h,v
retrieving revision 1.16
diff -u -r1.16 BPY_menus.h
--- source/blender/python/BPY_menus.h 16 Apr 2005 05:25:42 -0000 1.16
+++ source/blender/python/BPY_menus.h 14 Aug 2005 08:06:48 -0000
@@ -86,6 +86,7 @@
PYMENU_MESH,
PYMENU_MISC,
PYMENU_OBJECT,
+ PYMENU_OOPS, /* oops script menu */
PYMENU_RENDER,/* exporters to external renderers */
PYMENU_SYSTEM,
PYMENU_THEMES,
Index: source/blender/src/drawoops.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/drawoops.c,v
retrieving revision 1.21
diff -u -r1.21 drawoops.c
--- source/blender/src/drawoops.c 4 Aug 2005 22:36:21 -0000 1.21
+++ source/blender/src/drawoops.c 14 Aug 2005 08:06:54 -0000
@@ -75,6 +75,7 @@
float oopscalex;
+struct BMF_Font *font;
void boundbox_oops()
{
@@ -131,8 +132,8 @@
void draw_oopslink(Oops *oops)
{
OopsLink *ol;
- float vec[4][3], dist;
- int a;
+ float vec[4][3], dist, spline_step;
+ short curve_res;
if(oops->type==ID_SCE) {
if(oops->flag & SELECT) {
@@ -150,7 +151,7 @@
}
glEnable(GL_MAP1_VERTEX_3);
- vec[0][2]= vec[1][2]= vec[2][2]= vec[3][2]= 0.0;
+ vec[0][2]= vec[1][2]= vec[2][2]= vec[3][2]= 0.0; /* only 2d spline, set the Z to 0*/
ol= oops->link.first;
while(ol) {
@@ -177,14 +178,32 @@
/* v3 is always pointing down */
vec[2][0]= vec[3][0];
vec[2][1]= vec[3][1] - dist;
-
- glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, vec[0]);
- glBegin(GL_LINE_STRIP);
- for(a=0; a<=30; a++) {
- glEvalCoord1f((float)a/30.0);
+
+ /* Dont draw lines outside the screen
+ All left or all right, all to below or all above, no chance we will cull what should be seen. */
+ if ( !(
+ (vec[0][0] < G.v2d->cur.xmin && vec[1][0] < G.v2d->cur.xmin && vec[2][0] < G.v2d->cur.xmin && vec[3][0] < G.v2d->cur.xmin) ||
+ (vec[0][0] > G.v2d->cur.xmax && vec[1][0] > G.v2d->cur.xmax && vec[2][0] > G.v2d->cur.xmax && vec[3][0] > G.v2d->cur.xmax) ||
+ (vec[0][1] < G.v2d->cur.ymin && vec[1][1] < G.v2d->cur.ymin && vec[2][1] < G.v2d->cur.ymin && vec[3][1] < G.v2d->cur.ymin) ||
+ (vec[0][1] > G.v2d->cur.ymax && vec[1][1] > G.v2d->cur.ymax && vec[2][1] > G.v2d->cur.ymax && vec[3][1] > G.v2d->cur.ymax)))
+ {
+
+ /* calculate a curve resolution to use based on the length of the curve.*/
+ curve_res = MIN2(40, MAX2(2, (short)((dist*2) * (oopscalex))));
+
+ /* we can reuse the dist variable here to increment the GL curve eval amount*/
+ dist = (float)1/curve_res;
+ spline_step = 0.0;
+
+ glMap1f(GL_MAP1_VERTEX_3, 0.0, 1.0, 3, 4, vec[0]);
+ glBegin(GL_LINE_STRIP);
+ while (spline_step < 1.000001) {
+ glEvalCoord1f(spline_step);
+ spline_step += dist;
+ }
+ glEnd();
}
- glEnd();
}
ol= ol->next;
}
@@ -273,7 +292,7 @@
void calc_oopstext(char *str, float *v1)
{
- float f1, f2, size;
+ float f1, f2, size; /* f1 is the lhs of the oops block, f2 is the rhs */
short mval[2], len, flen;
ipoco_to_areaco_noclip(G.v2d, v1, mval);
@@ -281,8 +300,14 @@
v1[0]+= OOPSX;
ipoco_to_areaco_noclip(G.v2d, v1, mval);
f2= mval[0];
- size= f2-f1;
-
+
+ if (oopscalex>1.1) { /* Make text area wider if we have no icon.*/
+ size= f2-f1;
+ } else {
+ size= (f2-f1)*1.7;
+ }
+
+
len= strlen(str);
while( (flen= BMF_GetStringWidth(G.fonts, str)) > size) {
@@ -291,10 +316,19 @@
str[len]= 0;
}
- mval[0]= (f1+f2-flen+1)/2;
+ flen= BMF_GetStringWidth(font, str);
+
+ /* calc centred location for icon and text,
+ else if were zoomed too far out, just push text to the left of the oops block. */
+ if (oopscalex>1.1) {
+ mval[0]= (f1+f2-flen+1)/2;
+ } else {
+ mval[0]= f1;
+ }
+
mval[1]= 1;
areamouseco_to_ipoco(G.v2d, mval, &f1, &f2);
-
+
v1[0]= f1;
}
@@ -341,14 +375,20 @@
}
calc_oopstext(str, v1);
- /* ICON */
- if(str[1] && oopscalex>1.1) {
+
+ if(str[1] && oopscalex>1.1) { /* HAS ICON */
draw_icon_oops(v1, oops->type);
+ } else { /* NO ICON, UNINDENT*/
+ v1[0] -= 1.3 / oopscalex;
}
+
if(oops->flag & SELECT) cpack(0xFFFFFF);
else cpack(0x0);
+
+
glRasterPos3f(v1[0], v1[1], 0.0);
- BMF_DrawString(G.fonts, str);
+
+ BMF_DrawString(font, str);
if(line) setlinestyle(2);
cpack(border);
@@ -417,20 +457,37 @@
} else {
boundbox_oops();
calc_scrollrcts(sa, G.v2d, curarea->winx, curarea->winy);
-
myortho2(G.v2d->cur.xmin, G.v2d->cur.xmax, G.v2d->cur.ymin, G.v2d->cur.ymax);
oopscalex= .14*((float)curarea->winx)/(G.v2d->cur.xmax-G.v2d->cur.xmin);
calc_ipogrid(); /* for scrollvariables */
build_oops();
+
+ /* Set the font size for the oops based on the zoom level */
+ if (oopscalex > 6.0) font = BMF_GetFont(BMF_kScreen15);
+ else if (oopscalex > 3.5) font = G.font;
+ else if (oopscalex > 2.5) font = G.fonts;
+ else font = G.fontss;
+
+ /* Draw unselected oops links */
oops= soops->oops.first;
while(oops) {
- if(oops->hide==0) {
+ if(oops->hide==0 && !(oops->flag & SELECT)) {
draw_oopslink(oops);
}
oops= oops->next;
}
+
+ oops= soops->oops.first;
+ /* Draw selected oops links */
+ while(oops) {
+ if(oops->hide==0 && (oops->flag & SELECT)) {
+ draw_oopslink(oops);
+ }
+ oops= oops->next;
+ }
+
oops= soops->oops.first;
while(oops) {
if(oops->hide==0) {
Index: source/blender/src/header_oops.c
===================================================================
RCS file: /cvsroot/bf-blender/blender/source/blender/src/header_oops.c,v
retrieving revision 1.22
diff -u -r1.22 header_oops.c
--- source/blender/src/header_oops.c 4 Aug 2005 22:36:21 -0000 1.22
+++ source/blender/src/header_oops.c 14 Aug 2005 08:06:55 -0000
@@ -71,6 +71,9 @@
#include "BKE_depsgraph.h"
+#include "BPY_extern.h"
+#include "BPY_menus.h"
+
static int viewmovetemp = 0;
void do_oops_buttons(short event)
@@ -314,6 +317,43 @@
}
+static void do_oops_scriptmenu(void *arg, int event)
+{
+ BPY_menu_do_python(PYMENU_OOPS, event);
+}
+
+
+
+static uiBlock *oops_scriptmenu(void *arg_unused)
+{
+ uiBlock *block;
+ short yco= 0, menuwidth=120;
+ BPyMenu *pym;
+ int i = 0;
+
+ block= uiNewBlock(&curarea->uiblocks, "oops_scriptmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
+ uiBlockSetButmFunc(block, do_oops_scriptmenu, NULL);
+ for (pym = BPyMenuTable[PYMENU_OOPS]; pym; pym = pym->next, i++) {
+ uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
+ menuwidth, 19, NULL, 0.0, 0.0, 1, i,
+ pym->tooltip?pym->tooltip:pym->filename);
+ }
+
+
+ if(curarea->headertype==HEADERTOP) {
+ uiBlockSetDirection(block, UI_DOWN);
+ }
+ else {
+ uiBlockSetDirection(block, UI_TOP);
+ uiBlockFlipOrder(block);
+ }
+
+ uiTextBoundsBlock(block, 50);
+
+ return block;
+}
+
+
void oops_buttons(void)
{
SpaceOops *soops;
@@ -367,6 +407,11 @@
xmax= GetButStringLength("Block");
uiDefPulldownBut(block, oops_blockmenu, NULL, "Block", xco, -2, xmax-3, 24, "");
xco+= xmax;
+
+ xmax= GetButStringLength("Scripts");
+ uiDefPulldownBut(block, oops_scriptmenu, NULL, "Scripts", xco, -2, xmax-3, 24, "");
+ xco+= xmax;
+
}
}

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
e7/c0/3ccb95f53247cac6babd19c2c3a5

Event Timeline