Revision: 18635
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18635
Author:   ton
Date:     2009-01-23 15:43:25 +0100 (Fri, 23 Jan 2009)

Log Message:
-----------
2.5

Font object + editing back.

Was quite some work due to a myriad of globals all over!
Works nicely 100% local now.

To enable a single textedit operator, I've added a new
keymap entry KM_TEXTEDIT, which gives all keyboard events
to the handler. Also had to add a new keymap-add function
to force a keymap handler in beginning of region handlers.
In future this can be used to prioritize handlers.

Also: split off the arrow keys (frame change) to a separate
region level handler. Can be set with default flag in
regiontype->keymapflag ED_KEYMAP_FRAMES

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_font.h
    branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/font.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/editors/include/ED_curve.h
    branches/blender2.5/blender/source/blender/editors/include/ED_screen.h
    branches/blender2.5/blender/source/blender/editors/mesh/editmesh.c
    branches/blender2.5/blender/source/blender/editors/object/object_edit.c
    branches/blender2.5/blender/source/blender/editors/screen/area.c
    branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c
    
branches/blender2.5/blender/source/blender/editors/space_action/space_action.c
    branches/blender2.5/blender/source/blender/editors/space_api/spacetypes.c
    
branches/blender2.5/blender/source/blender/editors/space_buttons/space_buttons.c
    branches/blender2.5/blender/source/blender/editors/space_image/space_image.c
    branches/blender2.5/blender/source/blender/editors/space_ipo/space_ipo.c
    branches/blender2.5/blender/source/blender/editors/space_nla/space_nla.c
    branches/blender2.5/blender/source/blender/editors/space_node/space_node.c
    
branches/blender2.5/blender/source/blender/editors/space_sequencer/space_sequencer.c
    branches/blender2.5/blender/source/blender/editors/space_sound/space_sound.c
    branches/blender2.5/blender/source/blender/editors/space_time/space_time.c
    branches/blender2.5/blender/source/blender/editors/space_view3d/drawobject.c
    
branches/blender2.5/blender/source/blender/editors/space_view3d/space_view3d.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_curve_types.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_api.h
    branches/blender2.5/blender/source/blender/windowmanager/WM_types.h
    
branches/blender2.5/blender/source/blender/windowmanager/intern/wm_event_system.c
    branches/blender2.5/blender/source/blender/windowmanager/wm_event_types.h

Added Paths:
-----------
    branches/blender2.5/blender/source/blender/editors/curve/curve_intern.h
    branches/blender2.5/blender/source/blender/editors/curve/curve_ops.c
    branches/blender2.5/blender/source/blender/editors/curve/editfont.c
    branches/blender2.5/blender/source/blender/editors/curve/lorem.c

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h   
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_curve.h   
2009-01-23 14:43:25 UTC (rev 18635)
@@ -49,6 +49,7 @@
 
 void unlink_curve( struct Curve *cu);
 void free_curve( struct Curve *cu);
+void BKE_free_editfont(struct Curve *cu);
 struct Curve *add_curve(char *name, int type);
 struct Curve *copy_curve( struct Curve *cu);
 void make_local_curve( struct Curve *cu);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_font.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_font.h    
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_font.h    
2009-01-23 14:43:25 UTC (rev 18635)
@@ -43,6 +43,7 @@
 struct Curve;
 struct objfnt;
 struct TmpFont;
+struct CharInfo;
 
 struct chartrans {
        float xof, yof;
@@ -55,20 +56,31 @@
        float x, y, w, h;
 } SelBox;
 
-extern struct SelBox *selboxes;
+typedef struct EditFont {      
+       wchar_t *copybuf;
+       wchar_t *copybufinfo;
+       
+       wchar_t *textbuf;
+       struct CharInfo *textbufinfo;
+       wchar_t *oldstr;
+       struct CharInfo *oldstrinfo;
+       
+       float textcurs[4][2];
+       
+} EditFont;
 
+
 void BKE_font_register_builtin(void *mem, int size);
 
 void free_vfont(struct VFont *sc); 
 void free_ttfont(void);
+struct VFont *get_builtin_font(void);
 struct VFont *load_vfont(char *name);
 struct TmpFont *vfont_find_tmpfont(struct VFont *vfont);
 
-struct chartrans *text_to_curve(struct Scene *scene, struct Object *ob, int 
mode);
-int style_to_sel(int style, int toggle);
-int mat_to_sel(void);
+struct chartrans *BKE_text_to_curve(struct Scene *scene, struct Object *ob, 
int mode);
 
-int getselection(struct Object *ob, int *start, int *end);
+int BKE_font_getselection(struct Object *ob, int *start, int *end);
 
 void chtoutf8(unsigned long c, char *o);
 void wcs2utf8s(char *dst, wchar_t *src);

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h  
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_global.h  
2009-01-23 14:43:25 UTC (rev 18635)
@@ -76,8 +76,6 @@
        /* Used for BMesh transformations */
        struct BME_Glob *editBMesh;
     
-       float textcurs[4][2];
-    
        /* Frank's variables */
        int     save_over;
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c 
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/anim.c 
2009-01-23 14:43:25 UTC (rev 18635)
@@ -991,7 +991,7 @@
        
        /* in par the family name is stored, use this to find the other objects 
*/
        
-       chartransdata= text_to_curve(scene, par, FO_DUPLI);
+       chartransdata= BKE_text_to_curve(scene, par, FO_DUPLI);
        if(chartransdata==0) return;
        
        memset(obar, 0, 256*sizeof(void *));

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c        
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/curve.c        
2009-01-23 14:43:25 UTC (rev 18635)
@@ -56,6 +56,7 @@
 #include "BKE_anim.h"  
 #include "BKE_curve.h"  
 #include "BKE_displist.h"  
+#include "BKE_font.h" 
 #include "BKE_global.h" 
 #include "BKE_key.h"  
 #include "BKE_library.h"  
@@ -86,14 +87,32 @@
        cu->key= 0;
 }
 
+/* frees editcurve entirely */
+void BKE_free_editfont(Curve *cu)
+{
+       if(cu->editfont) {
+               EditFont *ef= cu->editfont;
+               
+               if(ef->oldstr) MEM_freeN(ef->oldstr);
+               if(ef->oldstrinfo) MEM_freeN(ef->oldstrinfo);
+               if(ef->textbuf) MEM_freeN(ef->textbuf);
+               if(ef->textbufinfo) MEM_freeN(ef->textbufinfo);
+               if(ef->copybuf) MEM_freeN(ef->copybuf);
+               if(ef->copybufinfo) MEM_freeN(ef->copybufinfo);
+               
+               MEM_freeN(ef);
+               cu->editfont= NULL;
+       }
+}
 
-/* niet curve zelf vrijgeven */
+/* don't free curve itself */
 void free_curve(Curve *cu)
 {
 
        freeNurblist(&cu->nurb);
        BLI_freelistN(&cu->bev);
        freedisplist(&cu->disp);
+       BKE_free_editfont(cu);
        
        if(cu->editnurb) {
                freeNurblist(cu->editnurb);
@@ -131,6 +150,18 @@
        
        cu->bb= unit_boundbox();
        
+       if(type==OB_FONT) {
+               cu->vfont= cu->vfontb= cu->vfonti= cu->vfontbi= 
get_builtin_font();
+               cu->vfont->id.us+=4;
+               cu->str= MEM_mallocN(12, "str");
+               strcpy(cu->str, "Text");
+               cu->pos= 4;
+               cu->strinfo= MEM_callocN(12*sizeof(CharInfo), "strinfo");
+               cu->totbox= cu->actbox= 1;
+               cu->tb= MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "textbox");
+               cu->tb[0].w = cu->tb[0].h = 0.0;
+       }
+       
        return cu;
 }
 

Modified: 
branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c     
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/displist.c     
2009-01-23 14:43:25 UTC (rev 18635)
@@ -1477,7 +1477,7 @@
                if(cu->path) free_path(cu->path);
                cu->path= NULL;
                
-               if(ob->type==OB_FONT) text_to_curve(scene, ob, 0);
+               if(ob->type==OB_FONT) BKE_text_to_curve(scene, ob, 0);
                
                if(!forOrco) curve_calc_modifiers_pre(scene, ob, 0, 
&originalVerts, &deformedVerts, &numVerts);
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/font.c 
2009-01-23 14:08:02 UTC (rev 18634)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/font.c 
2009-01-23 14:43:25 UTC (rev 18635)
@@ -65,10 +65,6 @@
 #include "BKE_curve.h"
 #include "BKE_displist.h"
 
-#define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name)
- 
-struct SelBox *selboxes= NULL;
-
 static ListBase ttfdata= {NULL, NULL};
 
 /* UTF-8 <-> wchar transformations */
@@ -454,6 +450,17 @@
        }                       
 }
 
+VFont *get_builtin_font(void)
+{
+       VFont *vf;
+       
+       for (vf= G.main->vfont.first; vf; vf= vf->id.next)
+               if (BLI_streq(vf->name, "<builtin>"))
+                       return vf;
+       
+       return load_vfont("<builtin>");
+}
+
 static void build_underline(Curve *cu, float x1, float y1, float x2, float y2, 
int charidx, short mat_nr)
 {
        Nurb *nu2;
@@ -622,11 +629,11 @@
        }
 }
 
-int getselection(Object *ob, int *start, int *end)
+int BKE_font_getselection(Object *ob, int *start, int *end)
 {
        Curve *cu= ob->data;
        
-       if (cu->editstr==NULL || ob->type != OB_FONT) return 0;
+       if (cu->editfont==NULL || ob->type != OB_FONT) return 0;
 
        if (cu->selstart == 0) return 0;
        if (cu->selstart <= cu->selend) {
@@ -641,30 +648,23 @@
        }
 }
 
-struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode) 
+struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) 
 {
        VFont *vfont, *oldvfont;
        VFontData *vfd= NULL;
-       Curve *cu, *cucu;
+       Curve *cu;
+       CharInfo *info, *custrinfo;
+       TextBox *tb;
+       VChar *che;
        struct chartrans *chartransdata=NULL, *ct;
-       float distfac, tabfac, ctime, dtime, tvec[4], vec[4], rotvec[3], minx, 
maxx, miny, maxy;
-       float cmat[3][3], timeofs, si, co, sizefac;
-       float *f, maxlen=0, xof, yof, xtrax, linedist, *linedata, *linedata2, 
*linedata3, *linedata4;
-       int i, slen, oldflag, j;
-       short cnr=0, lnr=0, wsnr= 0;
-       wchar_t *mem, *tmp, ascii;
-       int outta;
-       float vecyo[3], curofs;
-       CharInfo *info;
-       float wsfac;
-       float ulwidth, uloverlap;
-       TextBox *tb;
+       float *f, xof, yof, xtrax, linedist, *linedata, *linedata2, *linedata3, 
*linedata4;
+       float twidth;
+       int i, slen, j;
        int curbox;
        int selstart, selend;
-       SelBox *sb= NULL;       /* to please gcc */
-       VChar *che;
-       float twidth;
        int utf8len;
+       short cnr=0, lnr=0, wsnr= 0;
+       wchar_t *mem, *tmp, ascii;
 
        /* renark: do calculations including the trailing '\0' of a string
           because the cursor can be at that location */
@@ -674,7 +674,7 @@
        // Set font data
        cu= (Curve *) ob->data;
        vfont= cu->vfont;
-
+       
        if(cu->str == NULL) return 0;
        if(vfont == NULL) return 0;
 
@@ -687,19 +687,23 @@
        // Count the wchar_t string length
        slen = wcslen(mem);
 
-       if (cu->ulheight == 0.0) cu->ulheight = 0.05;
-       if (cu->strinfo==NULL) {        /* old file */
+       if (cu->ulheight == 0.0) 
+               cu->ulheight = 0.05;
+       
+       if (cu->strinfo==NULL)  /* old file */
                cu->strinfo = MEM_callocN((slen+1) * sizeof(CharInfo), "strinfo 
compat");
-       }
-       if (cu->tb==NULL) {
+       
+       custrinfo= cu->strinfo;
+       if (cu->editfont)
+               custrinfo= cu->editfont->textbufinfo;
+       
+       if (cu->tb==NULL)
                cu->tb= MEM_callocN(MAXTEXTBOX*sizeof(TextBox), "TextBox 
compat");
-       }
 
        vfd= vfont_get_data(vfont);
 
        /* The VFont Data can not be found */
-       if(!vfd)
-       {
+       if(!vfd) {
                if(mem)
                        MEM_freeN(mem); 
                return 0;
@@ -725,12 +729,12 @@
 
        oldvfont = NULL;
 
-       for (i=0; i<slen; i++) cu->strinfo[i].flag &= ~CU_WRAP;
+       for (i=0; i<slen; i++) custrinfo[i].flag &= ~CU_WRAP;
 
-       if (selboxes) MEM_freeN(selboxes);
-       selboxes = NULL;
-       if (getselection(ob, &selstart, &selend))
-               selboxes = MEM_callocN((selend-selstart+1)*sizeof(SelBox), 
"font selboxes");
+       if (cu->selboxes) MEM_freeN(cu->selboxes);
+       cu->selboxes = NULL;
+       if (BKE_font_getselection(ob, &selstart, &selend))
+               cu->selboxes = MEM_callocN((selend-selstart+1)*sizeof(SelBox), 
"font selboxes");
 
        tb = &(cu->tb[0]);
        curbox= 0;
@@ -739,14 +743,13 @@
                // Characters in the list
                che = vfd->characters.first;
                ascii = mem[i];
-               info = &(cu->strinfo[i]);
+               info = &(custrinfo[i]);
                vfont = which_vfont(cu, info);
                
                if(vfont==NULL) break;
                
                // Find the character
-               while(che)
-               {
+               while(che) {
                        if(che->index == ascii)
                                break;
                        che = che->next;
@@ -755,15 +758,13 @@
 #ifdef WITH_FREETYPE2
                // The character wasn't in the current curve base so load it
                // But if the font is <builtin> then do not try loading since 
whole font is in the memory already
-               if(che == NULL && strcmp(vfont->name, "<builtin>"))
-               {
+               if(che == NULL && strcmp(vfont->name, "<builtin>"))     {
                        BLI_vfontchar_from_freetypefont(vfont, ascii);
                }
 
                // Try getting the character again from the list

@@ 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