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
This commit is contained in:
parent
f4133b730c
commit
66437a62a7
|
@ -49,6 +49,7 @@ struct BevList;
|
|||
|
||||
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);
|
||||
|
|
|
@ -43,6 +43,7 @@ struct Object;
|
|||
struct Curve;
|
||||
struct objfnt;
|
||||
struct TmpFont;
|
||||
struct CharInfo;
|
||||
|
||||
struct chartrans {
|
||||
float xof, yof;
|
||||
|
@ -55,20 +56,31 @@ typedef struct SelBox {
|
|||
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);
|
||||
|
|
|
@ -76,8 +76,6 @@ typedef struct Global {
|
|||
/* Used for BMesh transformations */
|
||||
struct BME_Glob *editBMesh;
|
||||
|
||||
float textcurs[4][2];
|
||||
|
||||
/* Frank's variables */
|
||||
int save_over;
|
||||
|
||||
|
|
|
@ -991,7 +991,7 @@ static void font_duplilist(ListBase *lb, Scene *scene, Object *par, int level, i
|
|||
|
||||
/* 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 *));
|
||||
|
|
|
@ -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 @@ void unlink_curve(Curve *cu)
|
|||
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 @@ Curve *add_curve(char *name, int type)
|
|||
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
|
@ -1477,7 +1477,7 @@ void makeDispListCurveTypes(Scene *scene, Object *ob, int forOrco)
|
|||
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);
|
||||
|
||||
|
|
|
@ -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 @@ static VFont *which_vfont(Curve *cu, CharInfo *info)
|
|||
}
|
||||
}
|
||||
|
||||
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 @@ static void buildchar(Curve *cu, unsigned long character, CharInfo *info, float
|
|||
}
|
||||
}
|
||||
|
||||
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 @@ int getselection(Object *ob, int *start, int *end)
|
|||
}
|
||||
}
|
||||
|
||||
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;
|
||||
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;
|
||||
Curve *cu;
|
||||
CharInfo *info, *custrinfo;
|
||||
TextBox *tb;
|
||||
VChar *che;
|
||||
struct chartrans *chartransdata=NULL, *ct;
|
||||
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 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
// 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 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
// 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 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
|
||||
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 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
// 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 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
#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
|
||||
che = vfd->characters.first;
|
||||
while(che)
|
||||
{
|
||||
while(che) {
|
||||
if(che->index == ascii)
|
||||
break;
|
||||
che = che->next;
|
||||
|
@ -771,8 +772,7 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
#endif
|
||||
|
||||
/* No VFont found */
|
||||
if (vfont==0)
|
||||
{
|
||||
if (vfont==0) {
|
||||
if(mem)
|
||||
MEM_freeN(mem);
|
||||
MEM_freeN(chartransdata);
|
||||
|
@ -785,8 +785,7 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
}
|
||||
|
||||
/* VFont Data for VFont couldn't be found */
|
||||
if (!vfd)
|
||||
{
|
||||
if (!vfd) {
|
||||
if(mem)
|
||||
MEM_freeN(mem);
|
||||
MEM_freeN(chartransdata);
|
||||
|
@ -795,13 +794,9 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
|
||||
// The character wasn't found, propably ascii = 0, then the width shall be 0 as well
|
||||
if(!che)
|
||||
{
|
||||
twidth = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
twidth = che->width;
|
||||
}
|
||||
|
||||
// Calculate positions
|
||||
if((tb->w != 0.0) && (ct->dobreak==0) && ((xof-(tb->x/cu->fsize)+twidth)*cu->fsize) > tb->w) {
|
||||
|
@ -815,13 +810,13 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
i = j-1;
|
||||
xof = ct->xof;
|
||||
ct[1].dobreak = 1;
|
||||
cu->strinfo[i+1].flag |= CU_WRAP;
|
||||
custrinfo[i+1].flag |= CU_WRAP;
|
||||
goto makebreak;
|
||||
}
|
||||
if (chartransdata[j].dobreak) {
|
||||
// fprintf(stderr, "word too long: %c%c%c...\n", mem[j], mem[j+1], mem[j+2]);
|
||||
ct->dobreak= 1;
|
||||
cu->strinfo[i+1].flag |= CU_WRAP;
|
||||
custrinfo[i+1].flag |= CU_WRAP;
|
||||
ct -= 1;
|
||||
cnr -= 1;
|
||||
i--;
|
||||
|
@ -831,6 +826,8 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
}
|
||||
}
|
||||
if(ascii== '\n' || ascii== '\r' || ascii==0 || ct->dobreak) {
|
||||
float maxlen;
|
||||
|
||||
ct->xof= xof;
|
||||
ct->yof= yof;
|
||||
ct->linenr= lnr;
|
||||
|
@ -864,6 +861,8 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
wsnr= 0;
|
||||
}
|
||||
else if(ascii==9) { /* TAB */
|
||||
float tabfac;
|
||||
|
||||
ct->xof= xof;
|
||||
ct->yof= yof;
|
||||
ct->linenr= lnr;
|
||||
|
@ -874,13 +873,16 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
xof= cu->xof+tabfac;
|
||||
}
|
||||
else {
|
||||
SelBox *sb= NULL;
|
||||
float wsfac;
|
||||
|
||||
ct->xof= xof;
|
||||
ct->yof= yof;
|
||||
ct->linenr= lnr;
|
||||
ct->charnr= cnr++;
|
||||
|
||||
if (selboxes && (i>=selstart) && (i<=selend)) {
|
||||
sb = &(selboxes[i-selstart]);
|
||||
if (cu->selboxes && (i>=selstart) && (i<=selend)) {
|
||||
sb = &(cu->selboxes[i-selstart]);
|
||||
sb->y = yof*cu->fsize-linedist*cu->fsize*0.1;
|
||||
sb->h = linedist*cu->fsize;
|
||||
sb->w = xof*cu->fsize;
|
||||
|
@ -889,25 +891,23 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
if (ascii==32) {
|
||||
wsfac = cu->wordspace;
|
||||
wsnr++;
|
||||
} else wsfac = 1.0;
|
||||
}
|
||||
else wsfac = 1.0;
|
||||
|
||||
// Set the width of the character
|
||||
if(!che)
|
||||
{
|
||||
twidth = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
else
|
||||
twidth = che->width;
|
||||
}
|
||||
|
||||
xof += (twidth*wsfac*(1.0+(info->kern/40.0)) ) + xtrax;
|
||||
|
||||
if (selboxes && (i>=selstart) && (i<=selend)) sb->w = (xof*cu->fsize) - sb->w;
|
||||
if (sb)
|
||||
sb->w = (xof*cu->fsize) - sb->w;
|
||||
}
|
||||
ct++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
cu->lines= 1;
|
||||
ct= chartransdata;
|
||||
tmp = mem;
|
||||
|
@ -949,9 +949,9 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
// }
|
||||
ct++;
|
||||
}
|
||||
} else if((cu->spacemode==CU_JUSTIFY) &&
|
||||
(cu->tb[0].w != 0.0)) {
|
||||
curofs= 0;
|
||||
}
|
||||
else if((cu->spacemode==CU_JUSTIFY) && (cu->tb[0].w != 0.0)) {
|
||||
float curofs= 0.0f;
|
||||
for (i=0; i<=slen; i++) {
|
||||
for (j=i; (mem[j]) && (mem[j]!='\n') &&
|
||||
(mem[j]!='\r') && (chartransdata[j].dobreak==0) && (j<slen); j++);
|
||||
|
@ -968,14 +968,17 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
|
||||
/* TEXT ON CURVE */
|
||||
if(cu->textoncurve) {
|
||||
cucu= cu->textoncurve->data;
|
||||
Curve *cucu= cu->textoncurve->data;
|
||||
int oldflag= cucu->flag;
|
||||
|
||||
oldflag= cucu->flag;
|
||||
cucu->flag |= (CU_PATH+CU_FOLLOW);
|
||||
|
||||
if(cucu->path==NULL) makeDispListCurveTypes(scene, cu->textoncurve, 0);
|
||||
if(cucu->path) {
|
||||
float imat[4][4], imat3[3][3];
|
||||
float distfac, imat[4][4], imat3[3][3], cmat[3][3];
|
||||
float minx, maxx, miny, maxy;
|
||||
float timeofs, sizefac;
|
||||
|
||||
Mat4Invert(imat, ob->obmat);
|
||||
Mat3CpyMat4(imat3, imat);
|
||||
|
||||
|
@ -1020,27 +1023,24 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
|
||||
ct= chartransdata;
|
||||
for (i=0; i<=slen; i++, ct++) {
|
||||
float ctime, dtime, vec[4], tvec[4], rotvec[3];
|
||||
float si, co;
|
||||
|
||||
/* rotate around center character */
|
||||
ascii = mem[i];
|
||||
|
||||
// Find the character
|
||||
che = vfd->characters.first;
|
||||
while(che)
|
||||
{
|
||||
while(che) {
|
||||
if(che->index == ascii)
|
||||
break;
|
||||
che = che->next;
|
||||
}
|
||||
|
||||
if(che)
|
||||
{
|
||||
twidth = che->width;
|
||||
}
|
||||
else
|
||||
{
|
||||
twidth = 0;
|
||||
}
|
||||
|
||||
dtime= distfac*0.35f*twidth; /* why not 0.5? */
|
||||
dtime= distfac*0.5f*twidth; /* why not 0.5? */
|
||||
|
@ -1070,12 +1070,12 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
}
|
||||
}
|
||||
|
||||
if (selboxes) {
|
||||
if (cu->selboxes) {
|
||||
ct= chartransdata;
|
||||
for (i=0; i<=selend; i++, ct++) {
|
||||
if (i>=selstart) {
|
||||
selboxes[i-selstart].x = ct->xof*cu->fsize;
|
||||
selboxes[i-selstart].y = ct->yof*cu->fsize;
|
||||
cu->selboxes[i-selstart].x = ct->xof*cu->fsize;
|
||||
cu->selboxes[i-selstart].y = ct->yof*cu->fsize;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1111,12 +1111,14 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
}
|
||||
|
||||
/* cursor first */
|
||||
if(cu->editstr) {
|
||||
if(cu->editfont) {
|
||||
float si, co;
|
||||
|
||||
ct= chartransdata+cu->pos;
|
||||
si= (float)sin(ct->rot);
|
||||
co= (float)cos(ct->rot);
|
||||
|
||||
f= G.textcurs[0];
|
||||
f= cu->editfont->textcurs[0];
|
||||
|
||||
f[0]= cu->fsize*(-0.1f*co + ct->xof);
|
||||
f[1]= cu->fsize*(0.1f*si + ct->yof);
|
||||
|
@ -1146,57 +1148,62 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
if(mode==0) {
|
||||
/* make nurbdata */
|
||||
unsigned long cha;
|
||||
|
||||
|
||||
freeNurblist(&cu->nurb);
|
||||
|
||||
ct= chartransdata;
|
||||
if (cu->sepchar==0) {
|
||||
for (i= 0; i<slen; i++) {
|
||||
cha = (unsigned long) mem[i];
|
||||
info = &(cu->strinfo[i]);
|
||||
if (info->mat_nr > (ob->totcol)) {
|
||||
/* printf("Error: Illegal material index (%d) in text object, setting to 0\n", info->mat_nr); */
|
||||
info->mat_nr = 0;
|
||||
}
|
||||
for (i= 0; i<slen; i++) {
|
||||
cha = (unsigned long) mem[i];
|
||||
info = &(custrinfo[i]);
|
||||
|
||||
if (info->mat_nr > (ob->totcol)) {
|
||||
/* printf("Error: Illegal material index (%d) in text object, setting to 0\n", info->mat_nr); */
|
||||
info->mat_nr = 0;
|
||||
}
|
||||
|
||||
// We do not want to see any character for \n or \r
|
||||
if(cha != '\n' && cha != '\r')
|
||||
buildchar(cu, cha, info, ct->xof, ct->yof, ct->rot, i);
|
||||
|
||||
if ((info->flag & CU_UNDERLINE) && (cu->textoncurve == NULL) && (cha != '\n') && (cha != '\r')) {
|
||||
uloverlap = 0;
|
||||
float ulwidth, uloverlap= 0.0f;
|
||||
|
||||
if ( (i<(slen-1)) && (mem[i+1] != '\n') && (mem[i+1] != '\r') &&
|
||||
((mem[i+1] != ' ') || (cu->strinfo[i+1].flag & CU_UNDERLINE)) && ((cu->strinfo[i+1].flag & CU_WRAP)==0)
|
||||
) {
|
||||
((mem[i+1] != ' ') || (custrinfo[i+1].flag & CU_UNDERLINE)) && ((custrinfo[i+1].flag & CU_WRAP)==0)
|
||||
) {
|
||||
uloverlap = xtrax + 0.1;
|
||||
}
|
||||
// Find the character, the characters has to be in the memory already
|
||||
// since character checking has been done earlier already.
|
||||
che = vfd->characters.first;
|
||||
while(che)
|
||||
{
|
||||
while(che) {
|
||||
if(che->index == cha)
|
||||
break;
|
||||
che = che->next;
|
||||
}
|
||||
|
||||
|
||||
if(!che) twidth =0; else twidth=che->width;
|
||||
ulwidth = cu->fsize * ((twidth* (1.0+(info->kern/40.0)))+uloverlap);
|
||||
build_underline(cu, ct->xof*cu->fsize, ct->yof*cu->fsize + (cu->ulpos-0.05)*cu->fsize,
|
||||
ct->xof*cu->fsize + ulwidth,
|
||||
ct->yof*cu->fsize + (cu->ulpos-0.05)*cu->fsize - cu->ulheight*cu->fsize,
|
||||
i, info->mat_nr);
|
||||
ct->xof*cu->fsize + ulwidth,
|
||||
ct->yof*cu->fsize + (cu->ulpos-0.05)*cu->fsize - cu->ulheight*cu->fsize,
|
||||
i, info->mat_nr);
|
||||
}
|
||||
ct++;
|
||||
}
|
||||
ct++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
outta = 0;
|
||||
for (i= 0; (i<slen) && (outta==0); i++) {
|
||||
ascii = mem[i];
|
||||
info = &(cu->strinfo[i]);
|
||||
int outta = 0;
|
||||
for (i= 0; (i<slen) && (outta==0); i++) {
|
||||
ascii = mem[i];
|
||||
info = &(custrinfo[i]);
|
||||
if (cu->sepchar == (i+1)) {
|
||||
float vecyo[3];
|
||||
|
||||
mem[0] = ascii;
|
||||
mem[1] = 0;
|
||||
cu->strinfo[0]= *info;
|
||||
custrinfo[0]= *info;
|
||||
cu->pos = 1;
|
||||
cu->len = 1;
|
||||
vecyo[0] = ct->xof;
|
||||
|
@ -1207,10 +1214,10 @@ struct chartrans *text_to_curve(Scene *scene, Object *ob, int mode)
|
|||
outta = 1;
|
||||
cu->sepchar = 0;
|
||||
}
|
||||
ct++;
|
||||
ct++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(mode==FO_DUPLI) {
|
||||
MEM_freeN(mem);
|
||||
|
|
|
@ -2658,7 +2658,7 @@ static void direct_link_curve(FileData *fd, Curve *cu)
|
|||
cu->editnurb= NULL;
|
||||
cu->lastselbp= NULL;
|
||||
cu->path= NULL;
|
||||
cu->editstr= NULL;
|
||||
cu->editfont= NULL;
|
||||
|
||||
nu= cu->nurb.first;
|
||||
while(nu) {
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
/**
|
||||
* $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) 2008 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Contributor(s): Blender Foundation
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#ifndef ED_CURVE_INTERN_H
|
||||
#define ED_CURVE_INTERN_H
|
||||
|
||||
/* internal exports only */
|
||||
struct wmOperatorType;
|
||||
|
||||
/* lorem.c */
|
||||
char *ED_lorem;
|
||||
|
||||
/* editfont.c */
|
||||
void FONT_OT_textedit(struct wmOperatorType *ot);
|
||||
|
||||
#endif /* ED_UTIL_INTERN_H */
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
/**
|
||||
* $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) 2009 Blender Foundation.
|
||||
* All rights reserved.
|
||||
*
|
||||
*
|
||||
* Contributor(s): Blender Foundation
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "DNA_object_types.h"
|
||||
#include "DNA_scene_types.h"
|
||||
#include "DNA_screen_types.h"
|
||||
#include "DNA_space_types.h"
|
||||
#include "DNA_userdef_types.h"
|
||||
#include "DNA_view3d_types.h"
|
||||
#include "DNA_windowmanager_types.h"
|
||||
|
||||
#include "BLI_arithb.h"
|
||||
#include "BLI_blenlib.h"
|
||||
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_utildefines.h"
|
||||
|
||||
#include "RNA_access.h"
|
||||
#include "RNA_define.h"
|
||||
|
||||
#include "WM_api.h"
|
||||
#include "WM_types.h"
|
||||
|
||||
#include "ED_screen.h"
|
||||
#include "ED_object.h"
|
||||
|
||||
#include "curve_intern.h"
|
||||
|
||||
|
||||
/* ************************** registration **********************************/
|
||||
|
||||
|
||||
void ED_operatortypes_curve(void)
|
||||
{
|
||||
WM_operatortype_append(FONT_OT_textedit);
|
||||
}
|
||||
|
||||
void ED_keymap_curve(wmWindowManager *wm)
|
||||
{
|
||||
ListBase *keymap= WM_keymap_listbase(wm, "Font", 0, 0);
|
||||
|
||||
/* only set in editmode font, by space_view3d listener */
|
||||
WM_keymap_add_item(keymap, "FONT_OT_textedit", KM_TEXTINPUT, KM_ANY, KM_ANY, 0);
|
||||
|
||||
/* only set in editmode curve, by space_view3d listener */
|
||||
// keymap= WM_keymap_listbase(wm, "Curve", 0, 0);
|
||||
|
||||
// WM_keymap_add_item(keymap, "OBJECT_OT_de_select_all", AKEY, KM_PRESS, 0, 0);
|
||||
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,513 @@
|
|||
/**
|
||||
* $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.
|
||||
*
|
||||
* ***** END GPL LICENSE BLOCK *****
|
||||
*/
|
||||
|
||||
#include "curve_intern.h"
|
||||
|
||||
char *ED_lorem =
|
||||
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. "
|
||||
"Aliquam tristique interdum sem. "
|
||||
"Nullam pretium, tortor non euismod varius, nulla odio sodales nulla, at bibendum lorem metus sed nulla. "
|
||||
"Vestibulum in lectus at pede blandit viverra. "
|
||||
"Fusce scelerisque ipsum nec enim. "
|
||||
"Fusce euismod nunc id enim. "
|
||||
"In venenatis cursus arcu. "
|
||||
"Aenean quis dui. "
|
||||
"Maecenas laoreet. "
|
||||
"Nulla tempor, arcu pulvinar pretium suscipit, tortor wisi dapibus libero, id ornare felis ipsum suscipit purus. "
|
||||
"Maecenas ipsum. "
|
||||
"Morbi cursus. "
|
||||
"Vestibulum diam purus, commodo et, convallis eu, posuere at, ligula. "
|
||||
"Nulla aliquam aliquet lorem. "
|
||||
"Nunc et mauris hendrerit est bibendum suscipit. "
|
||||
"Donec pellentesque libero eu nisl. "
|
||||
"Pellentesque eget libero. "
|
||||
"Donec tempus ipsum sed quam. "
|
||||
"Sed blandit nunc quis enim. "
|
||||
"Quisque lectus diam, adipiscing hendrerit, placerat non, pulvinar id, felis. "
|
||||
"In congue magna sit amet urna. "
|
||||
"Nunc non augue sed nisl dictum laoreet. "
|
||||
"Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. "
|
||||
"In venenatis dapibus massa. "
|
||||
"Nulla hendrerit sapien et quam. "
|
||||
"Nunc ac magna lobortis tellus tincidunt posuere. "
|
||||
"Cras augue mauris, mattis lobortis, fermentum at, semper ac, tellus. "
|
||||
"Cras vitae ligula sit amet sem posuere iaculis. "
|
||||
"Aliquam condimentum eleifend felis. "
|
||||
"Ut sit amet sapien. "
|
||||
"Suspendisse potenti. "
|
||||
"Mauris urna. "
|
||||
"Ut eu enim eu ante porta vestibulum. "
|
||||
"Aenean scelerisque est ac felis. "
|
||||
"Suspendisse auctor. "
|
||||
"Nunc pellentesque. "
|
||||
"Morbi laoreet ante et nibh. "
|
||||
"Donec feugiat arcu eget enim. "
|
||||
"Morbi vehicula tortor ac ipsum. "
|
||||
"Quisque lacus arcu, elementum ac, faucibus vel, posuere id, est. "
|
||||
"Proin commodo gravida sem. "
|
||||
"Vivamus tincidunt vehicula libero. "
|
||||
"Phasellus wisi. "
|
||||
"Maecenas pretium tellus eu sapien. "
|
||||
"Nunc sit amet nunc. "
|
||||
"In hac habitasse platea dictumst. "
|
||||
"Aenean dictum neque sed tortor. "
|
||||
"Donec et erat. "
|
||||
"Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed justo turpis, scelerisque ut, mattis sit amet, ornare rutrum, massa. "
|
||||
"Vestibulum bibendum enim sit amet velit. "
|
||||
"Vivamus tellus ipsum, luctus ut, consectetuer vitae, dignissim non, ligula. "
|
||||
"Phasellus lacinia wisi at est. "
|
||||
"Donec elit wisi, commodo non, placerat in, convallis id, elit. "
|
||||
"Nunc dolor dolor, vestibulum id, bibendum vitae, lacinia id, erat. "
|
||||
"Cras sit amet eros. "
|
||||
"Suspendisse suscipit lobortis lectus. "
|
||||
"Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. "
|
||||
"Cras orci. "
|
||||
"Praesent massa urna, lobortis semper, auctor a, pretium vitae, tellus. "
|
||||
"Curabitur at purus. "
|
||||
"Morbi tortor quam, imperdiet venenatis, egestas a, cursus eu, est. "
|
||||
"Nunc interdum lectus sit amet libero. "
|
||||
"Quisque dignissim placerat ligula. "
|
||||
"Nunc porttitor posuere arcu. "
|
||||
"Mauris faucibus quam at massa. "
|
||||
"Vivamus sodales aliquet mauris. "
|
||||
"In id ante. "
|
||||
"Pellentesque varius ipsum in arcu. "
|
||||
"Fusce mauris lacus, tristique ac, lobortis quis, lobortis luctus, pede. "
|
||||
"Sed wisi. "
|
||||
"Vestibulum mattis. "
|
||||
"Maecenas hendrerit sem nec purus. "
|
||||
"Proin id quam. "
|
||||
"Cras nec mauris. "
|
||||
"Integer orci. "
|
||||
"Nullam dui sem, molestie sed, egestas quis, cursus in, magna. "
|
||||
"Mauris neque lacus, consectetuer nec, sagittis eu, porttitor eget, dui. "
|
||||
"Fusce consectetuer. "
|
||||
"Donec nec tellus quis leo lobortis ullamcorper. "
|
||||
"Etiam metus urna, aliquet pretium, ultrices eu, cursus ut, turpis. "
|
||||
"Morbi bibendum vehicula lectus. "
|
||||
"Sed non ante vitae arcu pellentesque tempor. "
|
||||
"Fusce sed ligula in sem tempor imperdiet. "
|
||||
"Aliquam vel est. "
|
||||
"Phasellus sollicitudin sollicitudin nibh. "
|
||||
"Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. "
|
||||
"Sed vel leo nec eros blandit imperdiet. "
|
||||
"Nulla facilisi. "
|
||||
"Suspendisse lobortis, dui ut fringilla hendrerit, justo purus ullamcorper ligula, ultricies ultrices dolor enim in libero. "
|
||||
"Sed elementum, pede eget porta convallis, dui nulla dignissim pede, eget vehicula odio ante at sem. "
|
||||
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
|
||||
"Sed ullamcorper tincidunt ipsum. "
|
||||
"Fusce risus nibh, accumsan sit amet, tempus eget, tristique ac, neque. "
|
||||
"Sed quis lorem ut tortor facilisis fermentum. "
|
||||
"Fusce pulvinar quam sit amet ipsum. "
|
||||
"Morbi ac elit quis tellus malesuada blandit. "
|
||||
"Maecenas suscipit sollicitudin sem. "
|
||||
"Nam sed eros vel lacus lobortis congue. "
|
||||
"Proin interdum nunc lobortis orci. "
|
||||
"Donec egestas enim eu odio. "
|
||||
"Vestibulum id metus. "
|
||||
"Pellentesque auctor, sem varius luctus tempus, libero magna cursus neque, et porttitor diam diam quis purus. "
|
||||
"Vestibulum sit amet dolor. "
|
||||
"Nulla in magna. "
|
||||
"Cras id diam at lectus faucibus placerat. "
|
||||
"Nunc porta posuere sapien. "
|
||||
"Etiam scelerisque. "
|
||||
"Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. "
|
||||
"Aliquam pellentesque mi sed tortor. "
|
||||
"Maecenas eleifend diam non urna. "
|
||||
"Donec luctus pharetra tellus. "
|
||||
"Proin ac ipsum eget libero bibendum volutpat. "
|
||||
"Cras id tellus. "
|
||||
"Nulla non risus. "
|
||||
"In dolor. "
|
||||
"Fusce scelerisque quam in massa ultrices porta. "
|
||||
"Morbi ut dolor eu massa egestas condimentum. "
|
||||
"Mauris vulputate. "
|
||||
"In hac habitasse platea dictumst. "
|
||||
"Suspendisse potenti. "
|
||||
"Mauris vehicula leo in tortor. "
|
||||
"Mauris vel erat a urna laoreet semper. "
|
||||
"Pellentesque ut metus ac tellus commodo eleifend. "
|
||||
"Suspendisse quis urna. "
|
||||
"Curabitur lacinia dignissim dui. "
|
||||
"Nam nec ante. "
|
||||
"In id enim. "
|
||||
"Aenean mattis enim. "
|
||||
"In ut neque porttitor risus hendrerit tincidunt. "
|
||||
"Suspendisse potenti. "
|
||||
"Ut vestibulum lectus vitae tortor. "
|
||||
"Duis velit. "
|
||||
"Nulla facilisi. "
|
||||
"Integer sit amet urna. "
|
||||
"Cras varius tortor in pede. "
|
||||
"Sed facilisis. "
|
||||
"Praesent lacinia libero nec nibh. "
|
||||
"Donec aliquam risus non nisl. "
|
||||
"Nam a nunc et felis tempor feugiat. "
|
||||
"Nunc metus. "
|
||||
"Vestibulum euismod, metus in semper laoreet, urna ipsum pharetra lorem, sed ultricies magna lorem sit amet wisi. "
|
||||
"Sed wisi. "
|
||||
"Nullam facilisis elit sed nisl. "
|
||||
"Phasellus mattis leo nec massa. "
|
||||
"Aenean malesuada. "
|
||||
"Cras wisi erat, lobortis nec, cursus eget, lobortis at, libero. "
|
||||
"In massa nisl, rutrum non, cursus nec, faucibus sed, lacus. "
|
||||
"Pellentesque malesuada. "
|
||||
"Cras euismod, neque ac suscipit tempus, velit lorem luctus elit, dapibus rhoncus wisi est ut sem. "
|
||||
"Proin vulputate enim in eros elementum accumsan. "
|
||||
"Ut lorem nisl, hendrerit et, interdum nec, lacinia in, dolor. "
|
||||
"Duis nec quam. "
|
||||
"Praesent velit felis, posuere id, luctus quis, laoreet ut, ipsum. "
|
||||
"Praesent eget arcu. "
|
||||
"Mauris massa felis, ornare non, ultrices id, tristique in, elit. "
|
||||
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
|
||||
"Phasellus vulputate, mi ac bibendum facilisis, libero enim suscipit leo, non nonummy pede diam eget nibh. "
|
||||
"Sed tempus. "
|
||||
"Aenean interdum suscipit dui. "
|
||||
"Aliquam erat volutpat. "
|
||||
"Ut malesuada. "
|
||||
"Nam commodo, nulla ut fringilla rutrum, orci elit viverra diam, vitae mollis odio odio et purus. "
|
||||
"Aliquam erat volutpat. "
|
||||
"Sed aliquet lobortis ipsum. "
|
||||
"In ut est. "
|
||||
"Etiam condimentum. "
|
||||
"Vestibulum pellentesque tortor pulvinar lacus. "
|
||||
"Aenean orci. "
|
||||
"Suspendisse lacus nulla, nonummy a, dictum vitae, egestas quis, eros. "
|
||||
"Donec auctor gravida nisl. "
|
||||
"Cras ac est rutrum augue pulvinar ornare. "
|
||||
"Phasellus mauris nibh, vulputate in, rhoncus imperdiet, dapibus eget, lacus. "
|
||||
"Nam nunc mauris, suscipit at, ultricies a, facilisis at, tellus. "
|
||||
"Nam accumsan mollis libero. "
|
||||
"Vivamus condimentum mattis est. "
|
||||
"Donec lacus. "
|
||||
"Nullam ac sapien id massa lobortis molestie. "
|
||||
"Pellentesque elementum. "
|
||||
"Proin ut purus. "
|
||||
"Integer et sapien quis turpis commodo mollis. "
|
||||
"Nulla consequat. "
|
||||
"Proin a wisi ut tellus blandit elementum. "
|
||||
"Aliquam nulla lorem, bibendum ac, malesuada vel, elementum et, metus. "
|
||||
"Phasellus egestas nibh et ligula. "
|
||||
"Vivamus diam odio, lacinia quis, malesuada quis, sollicitudin ut, eros. "
|
||||
"Phasellus aliquet lorem ac ipsum. "
|
||||
"Sed cursus tellus ac orci. "
|
||||
"Phasellus at nulla. "
|
||||
"Donec porta sodales ante. "
|
||||
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
|
||||
"Sed id lectus at massa ullamcorper tristique. "
|
||||
"Suspendisse porttitor lacus. "
|
||||
"In hac habitasse platea dictumst. "
|
||||
"Nunc non turpis. "
|
||||
"Sed sagittis. "
|
||||
"Morbi laoreet scelerisque dui. "
|
||||
"Nam arcu tellus, tempor vitae, vestibulum et, imperdiet ut, velit. "
|
||||
"In sit amet augue a arcu volutpat suscipit. "
|
||||
"Donec dictum ultrices lectus. "
|
||||
"Phasellus a purus et orci dictum lacinia. "
|
||||
"Ut leo. "
|
||||
"Cras semper, lorem sit amet tincidunt congue, justo eros varius pede, in bibendum turpis lectus non eros. "
|
||||
"Phasellus quam. "
|
||||
"Suspendisse mattis sollicitudin magna. "
|
||||
"Aenean facilisis diam vel nisl nonummy condimentum. "
|
||||
"Suspendisse vel dolor. "
|
||||
"Vestibulum nonummy. "
|
||||
"Mauris imperdiet semper ante. "
|
||||
"Maecenas vulputate eros. "
|
||||
"Vestibulum ac dolor. "
|
||||
"Fusce risus metus, aliquet eget, facilisis et, feugiat vel, orci. "
|
||||
"Ut at nunc id ante sodales vulputate. "
|
||||
"Duis tristique mattis ante. "
|
||||
"Vestibulum neque mauris, laoreet id, congue interdum, aliquet ut, diam. "
|
||||
"Nulla volutpat blandit magna. "
|
||||
"Donec accumsan congue diam. "
|
||||
"Etiam vel dui eget nisl tempor varius. "
|
||||
"Cras dictum massa sed enim. "
|
||||
"Cras urna tortor, fringilla ac, ullamcorper in, euismod vel, arcu. "
|
||||
"Morbi posuere luctus augue. "
|
||||
"Aliquam dui dui, adipiscing in, lobortis eu, luctus eu, nulla. "
|
||||
"Cras velit pede, ullamcorper sit amet, feugiat in, auctor vitae, ante. "
|
||||
"Suspendisse dictum fringilla mauris. "
|
||||
"In a nibh. "
|
||||
"Donec ac ligula. "
|
||||
"In quam. "
|
||||
"Praesent vitae urna ultricies sem aliquam placerat. "
|
||||
"Aliquam erat volutpat. "
|
||||
"Nam est. "
|
||||
"Donec faucibus sodales metus. "
|
||||
"Ut congue. "
|
||||
"Donec arcu tellus, pharetra ac, vulputate ac, mollis sed, lectus. "
|
||||
"Nulla facilisi. "
|
||||
"Nullam volutpat nunc et felis. "
|
||||
"Sed pede odio, tincidunt in, volutpat malesuada, feugiat gravida, nulla. "
|
||||
"Nulla aliquam pede vitae arcu. "
|
||||
"Proin velit elit, nonummy sit amet, elementum vitae, varius vitae, dolor. "
|
||||
"Donec rutrum ipsum eu mi. "
|
||||
"Aliquam et sem. "
|
||||
"In adipiscing rhoncus velit. "
|
||||
"Nam viverra scelerisque arcu. "
|
||||
"Aliquam sem. "
|
||||
"Sed tincidunt nulla quis massa. "
|
||||
"Mauris faucibus tempus nunc. "
|
||||
"Phasellus condimentum. "
|
||||
"Curabitur aliquet iaculis sapien. "
|
||||
"Nunc rhoncus, odio vitae bibendum dignissim, tellus libero commodo ipsum, ut sollicitudin nisl nisl vel justo. "
|
||||
"Nulla facilisi. "
|
||||
"Praesent blandit enim ut justo. "
|
||||
"Proin elementum, elit eget accumsan pulvinar, orci quam auctor neque, sed convallis diam purus vel felis. "
|
||||
"Sed orci leo, eleifend vel, blandit non, semper eu, purus. "
|
||||
"Proin bibendum, libero ac consectetuer commodo, eros sapien blandit nisl, eu eleifend nibh nibh vel lectus. "
|
||||
"Vivamus placerat. "
|
||||
"Integer odio dolor, pharetra non, sodales id, viverra eget, diam. "
|
||||
"Nunc mauris magna, egestas quis, feugiat id, fermentum viverra, mi. "
|
||||
"Aenean suscipit nisl non nunc. "
|
||||
"Proin quis lectus ac tellus nonummy commodo. "
|
||||
"Nunc eget diam ac elit vestibulum auctor. "
|
||||
"Etiam vulputate, odio sed lacinia consequat, justo mi vulputate purus, sit amet euismod libero metus sed tortor. "
|
||||
"Maecenas ac elit sed lorem vulputate gravida. "
|
||||
"Proin lectus eros, ullamcorper id, volutpat quis, condimentum tincidunt, sapien. "
|
||||
"Sed et massa eget lorem aliquet tempus. "
|
||||
"Duis porttitor nisl non risus. "
|
||||
"Nam id quam. "
|
||||
"Nullam est. "
|
||||
"Proin orci diam, posuere et, pharetra commodo, dictum vel, enim. "
|
||||
"Proin eget erat. "
|
||||
"Donec nisl. "
|
||||
"Maecenas auctor velit ut pede. "
|
||||
"Nunc vitae lectus nec libero tincidunt hendrerit. "
|
||||
"Quisque varius, erat ultrices ultrices euismod, purus lacus dictum eros, at condimentum enim dui nec magna. "
|
||||
"Morbi diam. "
|
||||
"Phasellus sed est. "
|
||||
"Phasellus nec libero in arcu fringilla sollicitudin. "
|
||||
"In rutrum nisl at arcu. "
|
||||
"Nulla facilisi. "
|
||||
"Mauris dignissim. "
|
||||
"Etiam est mauris, pharetra sed, viverra et, tincidunt sed, neque. "
|
||||
"Ut at lectus id nibh luctus ornare. "
|
||||
"Mauris varius porttitor risus. "
|
||||
"Ut vulputate aliquet risus. "
|
||||
"Vestibulum luctus neque sit amet nunc. "
|
||||
"Duis fermentum nibh. "
|
||||
"Pellentesque dapibus. "
|
||||
"Proin eros libero, aliquam non, condimentum a, sodales ut, turpis. "
|
||||
"Integer accumsan mi sed lorem. "
|
||||
"Vestibulum pellentesque sodales nisl. "
|
||||
"Nulla eu justo quis dui pretium rhoncus. "
|
||||
"Praesent viverra commodo mi. "
|
||||
"Maecenas dolor libero, viverra a, elementum vitae, aliquet vitae, dui. "
|
||||
"Mauris convallis lectus et mi. "
|
||||
"Mauris sagittis. "
|
||||
"Sed arcu. "
|
||||
"Pellentesque auctor. "
|
||||
"Donec pellentesque purus non tellus. "
|
||||
"Ut leo wisi, ultrices sit amet, ultrices eu, gravida ac, libero. "
|
||||
"Mauris fermentum dapibus diam. "
|
||||
"Integer quis lacus dapibus odio pellentesque varius. "
|
||||
"Fusce pede quam, vehicula ut, pulvinar et, tincidunt sed, felis. "
|
||||
"Curabitur eros enim, vulputate sed, aliquam ac, euismod ac, erat. "
|
||||
"Ut dignissim, lacus a interdum iaculis, enim orci posuere nunc, nec ultricies lectus risus in odio. "
|
||||
"Etiam et massa id dui commodo vehicula. "
|
||||
"Nunc blandit tortor quis dui. "
|
||||
"Quisque nisl. "
|
||||
"Sed venenatis blandit ligula. "
|
||||
"Fusce viverra imperdiet magna. "
|
||||
"Donec eget nunc quis est pharetra lobortis. "
|
||||
"Vestibulum quis lectus. "
|
||||
"Mauris vel orci lobortis nunc fermentum bibendum. "
|
||||
"Pellentesque eget leo. "
|
||||
"Morbi vel urna sit amet erat fermentum facilisis. "
|
||||
"Sed vulputate, libero et sollicitudin congue, wisi lectus sodales dolor, eget molestie magna orci vel tellus. "
|
||||
"Sed tempor ante et enim. "
|
||||
"Mauris elit. "
|
||||
"Curabitur ullamcorper vehicula massa. "
|
||||
"Sed viverra. "
|
||||
"Duis nulla. "
|
||||
"Nam bibendum. "
|
||||
"Nam tortor lorem, ullamcorper vitae, dictum sed, posuere eu, justo. "
|
||||
"Aliquam adipiscing arcu vitae turpis. "
|
||||
"Donec malesuada posuere libero. "
|
||||
"Ut sed tellus. "
|
||||
"Fusce sed nunc eget nisl dapibus malesuada. "
|
||||
"Suspendisse potenti. "
|
||||
"Integer tristique libero et metus. "
|
||||
"Vivamus posuere. "
|
||||
"Maecenas non sem non quam fermentum blandit. "
|
||||
"Duis risus tellus, rutrum vitae, imperdiet nec, malesuada nec, ipsum. "
|
||||
"Nunc quam dolor, luctus eget, placerat non, rhoncus at, tellus. "
|
||||
"Duis pede lectus, mattis adipiscing, tempor ut, porta at, mi. "
|
||||
"Pellentesque risus nulla, sodales sed, interdum id, nonummy vitae, ligula. "
|
||||
"Morbi pulvinar pede ut massa. "
|
||||
"Nunc risus mauris, tincidunt et, faucibus eu, suscipit vel, orci. "
|
||||
"In faucibus felis in arcu. "
|
||||
"Nulla sit amet elit. "
|
||||
"Nulla erat sapien, sagittis eget, dignissim eget, viverra eu, felis. "
|
||||
"Nam ac ipsum. "
|
||||
"Suspendisse vulputate turpis vel sem lacinia ullamcorper. "
|
||||
"Mauris ornare ipsum sed ligula. "
|
||||
"Duis facilisis neque quis orci. "
|
||||
"Nullam et erat et orci lacinia pellentesque. "
|
||||
"Donec ac ipsum. "
|
||||
"Duis molestie ipsum ac arcu. "
|
||||
"Aenean congue accumsan ante. "
|
||||
"Integer bibendum, leo ut ornare aliquam, nunc erat condimentum arcu, ut pulvinar mi augue et nulla. "
|
||||
"Quisque lacinia aliquet wisi. "
|
||||
"Vivamus nec dui. "
|
||||
"Etiam wisi leo, euismod vitae, vulputate a, dictum vitae, quam. "
|
||||
"Quisque quis tortor. "
|
||||
"Etiam interdum. "
|
||||
"In massa erat, porttitor sed, tincidunt vel, vehicula fringilla, augue. "
|
||||
"Nulla vel urna. "
|
||||
"In libero mi, pretium sed, mattis tempus, sagittis sed, massa. "
|
||||
"Suspendisse quam wisi, fermentum quis, sagittis at, consequat eget, odio. "
|
||||
"Nullam imperdiet, purus quis aliquam cursus, turpis odio egestas justo, placerat gravida turpis wisi vel tortor. "
|
||||
"Nunc ultricies porta purus. "
|
||||
"Proin elementum erat ac orci. "
|
||||
"Ut vel magna nec mi feugiat tincidunt. "
|
||||
"Ut ligula. "
|
||||
"Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Donec et magna in diam porta nonummy. "
|
||||
"Maecenas ut sem in turpis fermentum viverra. "
|
||||
"Suspendisse at orci. "
|
||||
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
|
||||
"Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque rutrum eleifend justo. "
|
||||
"Nullam vitae pede. "
|
||||
"Donec condimentum nibh et odio. "
|
||||
"Sed et metus. "
|
||||
"Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. "
|
||||
"Nam tempus. "
|
||||
"Sed ac wisi. "
|
||||
"In hac habitasse platea dictumst. "
|
||||
"Sed sed wisi. "
|
||||
"Ut facilisis tellus non ligula. "
|
||||
"Integer metus. "
|
||||
"In lacinia dui. "
|
||||
"Curabitur ornare. "
|
||||
"Mauris vel urna. "
|
||||
"Nam consectetuer dignissim urna. "
|
||||
"Nunc elementum porttitor erat. "
|
||||
"Sed blandit, risus non commodo nonummy, ligula erat fermentum nibh, eu facilisis ante neque sed sem. "
|
||||
"Etiam scelerisque justo eget wisi. "
|
||||
"Nunc dignissim. "
|
||||
"Proin pulvinar quam non lectus. "
|
||||
"Proin ut turpis quis augue pellentesque dictum. "
|
||||
"Fusce et lorem. "
|
||||
"Aliquam urna lacus, blandit sed, vestibulum sit amet, placerat et, dolor. "
|
||||
"Curabitur auctor erat nec lorem. "
|
||||
"Phasellus urna wisi, lacinia ut, molestie tincidunt, condimentum id, odio. "
|
||||
"Curabitur convallis ullamcorper justo. "
|
||||
"Donec vestibulum est ac quam. "
|
||||
"Nullam vitae elit eu massa varius vulputate. "
|
||||
"Nulla facilisi. "
|
||||
"Suspendisse potenti. "
|
||||
"Praesent non libero. "
|
||||
"Nullam tristique massa id magna viverra commodo. "
|
||||
"Vestibulum libero tortor, luctus ac, viverra congue, consectetuer vel, libero. "
|
||||
"Aenean arcu augue, luctus id, laoreet pulvinar, dictum sed, lectus. "
|
||||
"Donec vestibulum volutpat dolor. "
|
||||
"Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. "
|
||||
"Pellentesque augue turpis, laoreet nec, malesuada at, nonummy vitae, nibh. "
|
||||
"Etiam orci sapien, congue in, porttitor sit amet, rutrum vel, nibh. "
|
||||
"Integer eu lorem. "
|
||||
"Mauris pretium leo et elit. "
|
||||
"In nonummy ultricies sapien. "
|
||||
"Mauris varius. "
|
||||
"Mauris sed libero. "
|
||||
"Curabitur ullamcorper elit eu purus. "
|
||||
"Vestibulum velit pede, semper sit amet, lobortis vitae, tincidunt vel, dui. "
|
||||
"Nulla neque ante, sagittis eu, vestibulum et, lacinia a, libero. "
|
||||
"Morbi sit amet wisi. "
|
||||
"Pellentesque non felis quis arcu bibendum ornare. "
|
||||
"Aenean enim metus, commodo eu, hendrerit nonummy, euismod ut, quam. "
|
||||
"Nulla eleifend nisl quis dolor. "
|
||||
"Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos hymenaeos. "
|
||||
"Maecenas pellentesque massa in erat molestie molestie. "
|
||||
"Mauris dignissim dapibus libero. "
|
||||
"Sed sed risus id neque dictum ornare. "
|
||||
"Sed eu ligula at felis sodales accumsan. "
|
||||
"Sed interdum, urna non pharetra hendrerit, quam mi ornare libero, id fringilla tortor orci non velit. "
|
||||
"Aliquam nec risus. "
|
||||
"Donec at nunc vitae tellus molestie vestibulum. "
|
||||
"Pellentesque vel justo. "
|
||||
"Duis ligula libero, vulputate quis, adipiscing bibendum, feugiat vitae, velit. "
|
||||
"Vivamus et arcu. "
|
||||
"Fusce eget quam. "
|
||||
"Ut ante. "
|
||||
"Suspendisse feugiat metus non ipsum. "
|
||||
"Nulla tempus leo ut mi. "
|
||||
"Curabitur vitae nisl. "
|
||||
"Vivamus elementum. "
|
||||
"Etiam a orci. "
|
||||
"Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus urna quam, tincidunt at, ultrices vel, feugiat eget, nulla. "
|
||||
"Maecenas lacus magna, nonummy eu, iaculis sed, consectetuer quis, enim. "
|
||||
"Praesent a eros. "
|
||||
"Aliquam nonummy dignissim neque. "
|
||||
"Nulla enim. "
|
||||
"Praesent molestie, orci quis tristique volutpat, lacus metus luctus sapien, et facilisis eros neque id sapien. "
|
||||
"Nunc condimentum dolor vel orci. "
|
||||
"Integer wisi diam, porttitor sit amet, feugiat in, dapibus in, lectus. "
|
||||
"Aliquam erat volutpat. "
|
||||
"Quisque mollis turpis vitae tortor. "
|
||||
"Mauris turpis mi, pretium ut, ultrices sed, porta in, justo. "
|
||||
"Suspendisse posuere. "
|
||||
"Quisque ultricies lacus vitae enim. "
|
||||
"Donec lacus. "
|
||||
"Suspendisse potenti. "
|
||||
"Donec molestie, magna sed euismod dictum, magna magna interdum diam, vitae sagittis leo lorem ac neque. "
|
||||
"Cras metus. "
|
||||
"Quisque nunc. "
|
||||
"Duis consectetuer. "
|
||||
"Vestibulum gravida sollicitudin urna. "
|
||||
"Integer volutpat, massa quis ultrices pulvinar, eros purus dignissim nunc, eget rhoncus enim lectus quis tortor. "
|
||||
"Integer lacinia quam quis erat convallis mattis. "
|
||||
"Suspendisse iaculis posuere velit. "
|
||||
"Etiam tellus enim, aliquet nec, laoreet a, molestie non, velit. "
|
||||
"Quisque lacus velit, eleifend imperdiet, fringilla id, dapibus scelerisque, lectus. "
|
||||
"Nulla quis lorem. "
|
||||
"Nulla malesuada neque et dui. "
|
||||
"Phasellus malesuada ultricies odio. "
|
||||
"Phasellus vitae ligula. "
|
||||
"Pellentesque feugiat arcu at erat. "
|
||||
"Vivamus ut eros ut lorem pulvinar iaculis. "
|
||||
"Proin lobortis ipsum id nunc. "
|
||||
"Curabitur vel massa. "
|
||||
"Suspendisse nulla ipsum, malesuada vel, posuere eget, mollis at, risus. "
|
||||
"Vestibulum sed diam id est dapibus ultrices. "
|
||||
"Proin tempus, eros a scelerisque vestibulum, ipsum arcu aliquam mi, ut feugiat libero odio in nisl. "
|
||||
"Quisque et massa a mauris luctus congue. "
|
||||
"Ut id eros. "
|
||||
"Fusce ante eros, pharetra non, molestie tristique, bibendum sit amet, wisi. "
|
||||
"Phasellus rutrum, dolor et semper elementum, eros ante malesuada massa, sed sollicitudin lectus velit et massa. "
|
||||
"In auctor. "
|
||||
"Aliquam erat volutpat. "
|
||||
"Etiam risus leo, vulputate suscipit, sollicitudin et, sodales eget, nisl. "
|
||||
"Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Curabitur lobortis, libero ac laoreet mollis, ligula leo porta wisi, ut euismod felis ligula id elit. "
|
||||
"Vivamus malesuada nulla eu enim. "
|
||||
"Donec accumsan faucibus orci. "
|
||||
"Nulla lacinia ante. "
|
||||
"Praesent at nibh. "
|
||||
"Mauris porta dignissim wisi. "
|
||||
"Ut lacinia tortor nec nunc. "
|
||||
"Phasellus et augue. "
|
||||
"Integer rhoncus, libero a pellentesque rhoncus, tortor sapien lobortis pede, eget condimentum sapien risus vitae elit. "
|
||||
"Suspendisse sed turpis ut dolor placerat dignissim. "
|
||||
"Quisque quis leo. "
|
||||
"Cras ultrices. "
|
||||
"Maecenas hendrerit auctor tortor. "
|
||||
"Etiam sit amet arcu. ";
|
|
@ -35,6 +35,10 @@ struct bContext;
|
|||
struct Base;
|
||||
struct View3D;
|
||||
|
||||
/* curve_ops.c */
|
||||
void ED_operatortypes_curve(void);
|
||||
void ED_keymap_curve(struct wmWindowManager *wm);
|
||||
|
||||
/* editcurve.c */
|
||||
void undo_push_curve (struct bContext *C, char *name);
|
||||
ListBase *curve_get_editcurve(struct Object *ob);
|
||||
|
@ -46,6 +50,11 @@ void free_editNurb (struct Object *obedit);
|
|||
|
||||
void mouse_nurb(struct bContext *C, short mval[2], int extend);
|
||||
|
||||
/* editfont.h */
|
||||
void make_editText (struct Object *obedit);
|
||||
void load_editText (struct Object *obedit);
|
||||
void remake_editText (struct Object *obedit);
|
||||
void free_editText (struct Object *obedit);
|
||||
|
||||
#endif /* ED_CURVE_H */
|
||||
|
||||
|
|
|
@ -115,6 +115,7 @@ int ED_operator_uvedit(struct bContext *C);
|
|||
#define ED_KEYMAP_VIEW2D 2
|
||||
#define ED_KEYMAP_MARKERS 4
|
||||
#define ED_KEYMAP_ANIMATION 8
|
||||
#define ED_KEYMAP_FRAMES 16
|
||||
|
||||
#endif /* ED_SCREEN_H */
|
||||
|
||||
|
|
|
@ -2073,7 +2073,7 @@ static void undoMesh_to_editMesh(void *umv, void *emv)
|
|||
static void *getEditMesh(bContext *C)
|
||||
{
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
if(obedit) {
|
||||
if(obedit && obedit->type==OB_MESH) {
|
||||
Mesh *me= obedit->data;
|
||||
return me->edit_mesh;
|
||||
}
|
||||
|
|
|
@ -2816,8 +2816,8 @@ void OBJECT_OT_set_center(wmOperatorType *ot)
|
|||
void ED_object_exit_editmode(bContext *C, int flag)
|
||||
{
|
||||
Scene *scene= CTX_data_scene(C);
|
||||
Object *ob;
|
||||
Object *obedit= CTX_data_edit_object(C);
|
||||
Object *ob;
|
||||
int freedata = flag & EM_FREEDATA;
|
||||
|
||||
if(obedit==NULL) return;
|
||||
|
@ -2852,7 +2852,8 @@ void ED_object_exit_editmode(bContext *C, int flag)
|
|||
if(freedata) free_editNurb(obedit);
|
||||
}
|
||||
else if(obedit->type==OB_FONT && freedata) {
|
||||
// load_editText();
|
||||
load_editText(obedit);
|
||||
if(freedata) free_editText(obedit);
|
||||
}
|
||||
else if(obedit->type==OB_LATTICE) {
|
||||
load_editLatt(obedit);
|
||||
|
@ -2945,8 +2946,8 @@ void ED_object_enter_editmode(bContext *C, int flag)
|
|||
}
|
||||
else if(ob->type==OB_FONT) {
|
||||
scene->obedit= ob; // XXX for context
|
||||
// ok= 1;
|
||||
// XXX make_editText();
|
||||
ok= 1;
|
||||
make_editText(ob);
|
||||
WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_EDITMODE_TEXT, scene);
|
||||
}
|
||||
else if(ob->type==OB_MBALL) {
|
||||
|
@ -4348,7 +4349,7 @@ void copy_attr(Scene *scene, View3D *v3d, short event)
|
|||
cu1->vfontbi= cu->vfontbi;
|
||||
id_us_plus((ID *)cu1->vfontbi);
|
||||
|
||||
text_to_curve(scene, base->object, 0); /* needed? */
|
||||
BKE_text_to_curve(scene, base->object, 0); /* needed? */
|
||||
|
||||
|
||||
strcpy(cu1->family, cu->family);
|
||||
|
|
|
@ -556,6 +556,10 @@ static void ed_default_handlers(wmWindowManager *wm, ListBase *handlers, int fla
|
|||
ListBase *keymap= WM_keymap_listbase(wm, "Animation", 0, 0);
|
||||
WM_event_add_keymap_handler(handlers, keymap);
|
||||
}
|
||||
if(flag & ED_KEYMAP_FRAMES) {
|
||||
ListBase *keymap= WM_keymap_listbase(wm, "Frames", 0, 0);
|
||||
WM_event_add_keymap_handler(handlers, keymap);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1700,6 +1700,9 @@ void ED_keymap_screen(wmWindowManager *wm)
|
|||
{
|
||||
ListBase *keymap= WM_keymap_listbase(wm, "Screen", 0, 0);
|
||||
|
||||
/* standard timers */
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", TIMER0, KM_ANY, KM_ANY, 0);
|
||||
|
||||
WM_keymap_verify_item(keymap, "SCREEN_OT_actionzone", LEFTMOUSE, KM_PRESS, 0, 0);
|
||||
|
||||
WM_keymap_verify_item(keymap, "SCREEN_OT_area_move", LEFTMOUSE, KM_PRESS, 0, 0);
|
||||
|
@ -1716,13 +1719,6 @@ void ED_keymap_screen(wmWindowManager *wm)
|
|||
WM_keymap_add_item(keymap, "SCREEN_OT_region_split", SKEY, KM_PRESS, KM_CTRL|KM_ALT, 0);
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_region_foursplit", SKEY, KM_PRESS, KM_CTRL|KM_ALT|KM_SHIFT, 0);
|
||||
|
||||
/*frame offsets*/
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_animation_play", TIMER0, KM_ANY, KM_ANY, 0);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 10);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -10);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -1);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 1);
|
||||
|
||||
WM_keymap_verify_item(keymap, "SCREEN_OT_repeat_history", F3KEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_verify_item(keymap, "SCREEN_OT_repeat_last", F4KEY, KM_PRESS, 0, 0);
|
||||
WM_keymap_add_item(keymap, "SCREEN_OT_region_flip", F5KEY, KM_PRESS, 0, 0);
|
||||
|
@ -1736,5 +1732,13 @@ void ED_keymap_screen(wmWindowManager *wm)
|
|||
/* screen level global keymaps */
|
||||
// err...
|
||||
ED_marker_keymap(wm);
|
||||
|
||||
/* frame offsets */
|
||||
keymap= WM_keymap_listbase(wm, "Frames", 0, 0);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", UPARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 10);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", DOWNARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -10);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", LEFTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", -1);
|
||||
RNA_int_set(WM_keymap_add_item(keymap, "SCREEN_OT_frame_offset", RIGHTARROWKEY, KM_PRESS, 0, 0)->ptr, "delta", 1);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -404,7 +404,7 @@ void ED_spacetype_action(void)
|
|||
art->init= action_main_area_init;
|
||||
art->draw= action_main_area_draw;
|
||||
art->listener= action_main_area_listener;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D/*|ED_KEYMAP_MARKERS*/|ED_KEYMAP_ANIMATION;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D/*|ED_KEYMAP_MARKERS*/|ED_KEYMAP_ANIMATION|ED_KEYMAP_FRAMES;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
@ -412,7 +412,7 @@ void ED_spacetype_action(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype action region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= action_header_area_init;
|
||||
art->draw= action_header_area_draw;
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
#include "BIF_gl.h"
|
||||
|
||||
#include "ED_anim_api.h"
|
||||
#include "ED_curve.h"
|
||||
#include "ED_mesh.h"
|
||||
#include "ED_object.h"
|
||||
#include "ED_sculpt.h"
|
||||
|
@ -79,6 +80,7 @@ void ED_spacetypes_init(void)
|
|||
ED_operatortypes_mesh();
|
||||
ED_operatortypes_sculpt();
|
||||
ED_operatortypes_uvedit();
|
||||
ED_operatortypes_curve();
|
||||
ui_view2d_operatortypes();
|
||||
|
||||
spacetypes = BKE_spacetypes_list();
|
||||
|
@ -101,6 +103,7 @@ void ED_spacetypes_keymap(wmWindowManager *wm)
|
|||
ED_keymap_object(wm);
|
||||
ED_keymap_mesh(wm);
|
||||
ED_keymap_uvedit(wm);
|
||||
ED_keymap_curve(wm);
|
||||
UI_view2d_keymap(wm);
|
||||
|
||||
spacetypes = BKE_spacetypes_list();
|
||||
|
|
|
@ -266,7 +266,7 @@ void ED_spacetype_buttons(void)
|
|||
art->init= buttons_main_area_init;
|
||||
art->draw= buttons_main_area_draw;
|
||||
art->listener= buttons_area_listener;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
@ -274,7 +274,7 @@ void ED_spacetype_buttons(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype buttons region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= buttons_header_area_init;
|
||||
art->draw= buttons_header_area_draw;
|
||||
|
|
|
@ -439,6 +439,7 @@ void ED_spacetype_image(void)
|
|||
/* regions: main window */
|
||||
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->keymapflag= ED_KEYMAP_FRAMES;
|
||||
art->init= image_main_area_init;
|
||||
art->draw= image_main_area_draw;
|
||||
art->listener= image_main_area_listener;
|
||||
|
@ -450,7 +451,7 @@ void ED_spacetype_image(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype image region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= image_header_area_init;
|
||||
art->draw= image_header_area_draw;
|
||||
|
|
|
@ -317,7 +317,7 @@ void ED_spacetype_ipo(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype ipo region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= ipo_header_area_init;
|
||||
art->draw= ipo_header_area_draw;
|
||||
|
@ -328,7 +328,7 @@ void ED_spacetype_ipo(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype ipo region");
|
||||
art->regionid = RGN_TYPE_CHANNELS;
|
||||
art->minsizex= 200;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= ipo_channel_area_init;
|
||||
art->draw= ipo_channel_area_draw;
|
||||
|
|
|
@ -265,7 +265,7 @@ void ED_spacetype_nla(void)
|
|||
art->init= nla_main_area_init;
|
||||
art->draw= nla_main_area_draw;
|
||||
art->listener= nla_main_area_listener;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
|
|
@ -313,7 +313,7 @@ void ED_spacetype_node(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype node region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= node_header_area_init;
|
||||
art->draw= node_header_area_draw;
|
||||
|
@ -324,7 +324,7 @@ void ED_spacetype_node(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype node region");
|
||||
art->regionid = RGN_TYPE_CHANNELS;
|
||||
art->minsizex= 100;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= node_channel_area_init;
|
||||
art->draw= node_channel_area_draw;
|
||||
|
|
|
@ -222,7 +222,7 @@ void ED_spacetype_sequencer(void)
|
|||
art->init= sequencer_main_area_init;
|
||||
art->draw= drawseqspace;
|
||||
art->listener= sequencer_main_area_listener;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
@ -230,7 +230,7 @@ void ED_spacetype_sequencer(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype sequencer region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= sequencer_header_area_init;
|
||||
art->draw= sequencer_header_area_draw;
|
||||
|
|
|
@ -238,7 +238,7 @@ void ED_spacetype_sound(void)
|
|||
art->init= sound_main_area_init;
|
||||
art->draw= sound_main_area_draw;
|
||||
art->listener= sound_main_area_listener;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
|
||||
BLI_addhead(&st->regiontypes, art);
|
||||
|
||||
|
|
|
@ -309,7 +309,7 @@ void ED_spacetype_time(void)
|
|||
/* regions: main window */
|
||||
art= MEM_callocN(sizeof(ARegionType), "spacetype time region");
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS|ED_KEYMAP_ANIMATION;
|
||||
art->keymapflag= ED_KEYMAP_VIEW2D|ED_KEYMAP_MARKERS|ED_KEYMAP_ANIMATION|ED_KEYMAP_FRAMES;
|
||||
|
||||
art->init= time_main_area_init;
|
||||
art->draw= time_main_area_draw;
|
||||
|
|
|
@ -4053,16 +4053,16 @@ static void curve_draw_speed(Scene *scene, Object *ob)
|
|||
}
|
||||
|
||||
|
||||
static void tekentextcurs(void)
|
||||
static void draw_textcurs(float textcurs[][2])
|
||||
{
|
||||
cpack(0);
|
||||
|
||||
set_inverted_drawing(1);
|
||||
glBegin(GL_QUADS);
|
||||
glVertex2fv(G.textcurs[0]);
|
||||
glVertex2fv(G.textcurs[1]);
|
||||
glVertex2fv(G.textcurs[2]);
|
||||
glVertex2fv(G.textcurs[3]);
|
||||
glVertex2fv(textcurs[0]);
|
||||
glVertex2fv(textcurs[1]);
|
||||
glVertex2fv(textcurs[2]);
|
||||
glVertex2fv(textcurs[3]);
|
||||
glEnd();
|
||||
set_inverted_drawing(0);
|
||||
}
|
||||
|
@ -4932,8 +4932,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
|||
case OB_FONT:
|
||||
cu= ob->data;
|
||||
if (cu->disp.first==NULL) makeDispListCurveTypes(scene, ob, 0);
|
||||
if(cu->editstr) {
|
||||
tekentextcurs();
|
||||
if(cu->editfont) {
|
||||
draw_textcurs(cu->editfont->textcurs);
|
||||
|
||||
if (cu->flag & CU_FAST) {
|
||||
cpack(0xFFFFFF);
|
||||
|
@ -4987,17 +4987,17 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag)
|
|||
setlinestyle(0);
|
||||
|
||||
|
||||
if (getselection(ob, &selstart, &selend) && selboxes) {
|
||||
if (BKE_font_getselection(ob, &selstart, &selend) && cu->selboxes) {
|
||||
float selboxw;
|
||||
|
||||
cpack(0xffffff);
|
||||
set_inverted_drawing(1);
|
||||
for (i=0; i<(selend-selstart+1); i++) {
|
||||
SelBox *sb = &(selboxes[i]);
|
||||
SelBox *sb = &(cu->selboxes[i]);
|
||||
|
||||
if (i<(selend-selstart)) {
|
||||
if (selboxes[i+1].y == sb->y)
|
||||
selboxw= selboxes[i+1].x - sb->x;
|
||||
if (cu->selboxes[i+1].y == sb->y)
|
||||
selboxw= cu->selboxes[i+1].x - sb->x;
|
||||
else
|
||||
selboxw= sb->w;
|
||||
}
|
||||
|
|
|
@ -244,12 +244,18 @@ static void view3d_modal_keymaps(wmWindowManager *wm, ARegion *ar, int stype)
|
|||
else
|
||||
WM_event_remove_keymap_handler(&ar->handlers, keymap);
|
||||
|
||||
|
||||
keymap= WM_keymap_listbase(wm, "EditMesh", 0, 0);
|
||||
if(stype==NS_EDITMODE_MESH)
|
||||
WM_event_add_keymap_handler(&ar->handlers, keymap);
|
||||
else
|
||||
WM_event_remove_keymap_handler(&ar->handlers, keymap);
|
||||
|
||||
/* editfont keymap swallows all... */
|
||||
keymap= WM_keymap_listbase(wm, "Font", 0, 0);
|
||||
if(stype==NS_EDITMODE_TEXT)
|
||||
WM_event_add_keymap_handler_priority(&ar->handlers, keymap, 10);
|
||||
else
|
||||
WM_event_remove_keymap_handler(&ar->handlers, keymap);
|
||||
|
||||
}
|
||||
|
||||
|
@ -458,6 +464,7 @@ void ED_spacetype_view3d(void)
|
|||
/* regions: main window */
|
||||
art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
|
||||
art->regionid = RGN_TYPE_WINDOW;
|
||||
art->keymapflag= ED_KEYMAP_FRAMES;
|
||||
art->draw= view3d_main_area_draw;
|
||||
art->init= view3d_main_area_init;
|
||||
art->free= view3d_main_area_free;
|
||||
|
@ -470,7 +477,7 @@ void ED_spacetype_view3d(void)
|
|||
art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region");
|
||||
art->regionid = RGN_TYPE_HEADER;
|
||||
art->minsizey= HEADERY;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D;
|
||||
art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D|ED_KEYMAP_FRAMES;
|
||||
art->listener= view3d_header_area_listener;
|
||||
|
||||
art->init= view3d_header_area_init;
|
||||
|
|
|
@ -46,6 +46,8 @@ struct Key;
|
|||
struct Material;
|
||||
struct VFont;
|
||||
struct AnimData;
|
||||
struct SelBox;
|
||||
struct EditFont;
|
||||
|
||||
/* These two Lines with # tell makesdna this struct can be excluded. */
|
||||
#
|
||||
|
@ -180,7 +182,9 @@ typedef struct Curve {
|
|||
float linewidth;
|
||||
|
||||
char *str;
|
||||
char *editstr;
|
||||
struct SelBox *selboxes;
|
||||
struct EditFont *editfont;
|
||||
|
||||
char family[24];
|
||||
struct VFont *vfont;
|
||||
struct VFont *vfontb;
|
||||
|
|
|
@ -88,6 +88,8 @@ char *WM_key_event_operator_string(const struct bContext *C, const char *opname
|
|||
struct wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, ListBase *keymap);
|
||||
/* boundbox, optional subwindow boundbox for offset */
|
||||
struct wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, ListBase *keymap, rcti *bb, rcti *swinbb);
|
||||
/* priority not implemented, it adds in begin */
|
||||
struct wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, ListBase *keymap, int priority);
|
||||
|
||||
void WM_event_remove_keymap_handler(ListBase *handlers, ListBase *keymap);
|
||||
|
||||
|
|
|
@ -97,6 +97,9 @@ typedef struct wmEvent {
|
|||
#define KM_ALT2 64
|
||||
#define KM_OSKEY2 128
|
||||
|
||||
/* type: defined in wm_event_types.c */
|
||||
#define KM_TEXTINPUT -2
|
||||
|
||||
/* val */
|
||||
#define KM_ANY -1
|
||||
#define KM_RELEASE 0
|
||||
|
|
|
@ -493,9 +493,12 @@ static int wm_userdef_event_map(int kmitype)
|
|||
static int wm_eventmatch(wmEvent *winevent, wmKeymapItem *kmi)
|
||||
{
|
||||
int kmitype= wm_userdef_event_map(kmi->type);
|
||||
|
||||
|
||||
/* the matching rules */
|
||||
if(winevent->type!=kmitype) return 0;
|
||||
if(kmitype==KM_TEXTINPUT)
|
||||
if(ISKEYBOARD(winevent->type)) return 1;
|
||||
if(kmitype!=KM_ANY)
|
||||
if(winevent->type!=kmitype) return 0;
|
||||
|
||||
if(kmi->val!=KM_ANY)
|
||||
if(winevent->val!=kmi->val) return 0;
|
||||
|
@ -877,6 +880,20 @@ wmEventHandler *WM_event_add_keymap_handler(ListBase *handlers, ListBase *keymap
|
|||
return handler;
|
||||
}
|
||||
|
||||
/* priorities not implemented yet, for time being just insert in begin of list */
|
||||
wmEventHandler *WM_event_add_keymap_handler_priority(ListBase *handlers, ListBase *keymap, int priority)
|
||||
{
|
||||
wmEventHandler *handler;
|
||||
|
||||
WM_event_remove_keymap_handler(handlers, keymap);
|
||||
|
||||
handler= MEM_callocN(sizeof(wmEventHandler), "event keymap handler");
|
||||
BLI_addhead(handlers, handler);
|
||||
handler->keymap= keymap;
|
||||
|
||||
return handler;
|
||||
}
|
||||
|
||||
wmEventHandler *WM_event_add_keymap_handler_bb(ListBase *handlers, ListBase *keymap, rcti *bblocal, rcti *bbwin)
|
||||
{
|
||||
wmEventHandler *handler= WM_event_add_keymap_handler(handlers, keymap);
|
||||
|
@ -1115,6 +1132,10 @@ void wm_event_add_ghostevent(wmWindow *win, int type, void *customdata)
|
|||
event.ascii= kd->ascii;
|
||||
event.val= (type==GHOST_kEventKeyDown); /* XXX eventmatch uses defines, bad code... */
|
||||
|
||||
/* exclude arrow keys, esc, etc from text input */
|
||||
if(type==GHOST_kEventKeyUp || (event.ascii<32 && event.ascii>14))
|
||||
event.ascii= '\0';
|
||||
|
||||
/* modifiers */
|
||||
if (event.type==LEFTSHIFTKEY || event.type==RIGHTSHIFTKEY) {
|
||||
event.shift= evt->shift= event.val;
|
||||
|
|
|
@ -78,7 +78,6 @@
|
|||
#define TIMERJOBS 0x0114 /* timer event, internal use */
|
||||
|
||||
/* standard keyboard */
|
||||
|
||||
#define AKEY 'a'
|
||||
#define BKEY 'b'
|
||||
#define CKEY 'c'
|
||||
|
@ -166,12 +165,10 @@
|
|||
#define PADSLASHKEY 161
|
||||
#define PADASTERKEY 160
|
||||
|
||||
|
||||
#define PADMINUS 162
|
||||
#define PADENTER 163
|
||||
#define PADPLUSKEY 164
|
||||
|
||||
|
||||
#define F1KEY 300
|
||||
#define F2KEY 301
|
||||
#define F3KEY 302
|
||||
|
@ -196,6 +193,10 @@
|
|||
#define COMMANDKEY 172
|
||||
#define GRLESSKEY 173
|
||||
|
||||
/* for event checks */
|
||||
#define ISKEYBOARD(event) (event >='a' && event <=255)
|
||||
|
||||
|
||||
/* **************** BLENDER QUEUE EVENTS ********************* */
|
||||
|
||||
#define CHANGED 0x4000
|
||||
|
|
Loading…
Reference in New Issue