TempleOSCDV4.10.ISO
This commit is contained in:
1 parent
c5954d3371
commit
9206246147
181 files changed
+4468
-4313
No files matched your search
@@ -616,7 +616,7 @@ U8 *GrBitMap1ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor)
|
||||
return dst;
|
||||
}
|
||||
|
||||
public CDC *DCExtract(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,
|
||||
public CDC *DCExt(CDC *dc=gr.dc,I64 x1,I64 y1,I64 x2,I64 y2,
|
||||
CTask *task=NULL)
|
||||
{//Extract new device context rect from device context.
|
||||
CDC *res;
|
||||
|
||||
+1
-1
@@ -2,4 +2,4 @@
|
||||
extern U8 *GrBitMap4ToBitMap8(U8 *dst,U8 *src,I64 src_size,I64 bkcolor);
|
||||
extern I64 GrBlot3(CDC *dc,I64 x1,I64 y1,I64 z1,CDC *img);
|
||||
extern I64 *Mat4x4New(I64 *src,CTask *mem_task=NULL);
|
||||
extern U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL);
|
||||
extern U8 *SpriteQue2Sprite(CSprite *head,I64 *_size=NULL);
|
||||
+1
-1
@@ -42,7 +42,7 @@ public class CGrGlbls
|
||||
hide_row,hide_col;
|
||||
} gr;
|
||||
|
||||
//See $LK,"RLf_VGA",A="FF:::/Kernel/KStart.CPP,RLf_VGA"$
|
||||
//See $LK,"RLf_VGA",A="FF:::/Kernel/KStart16.CPP,RLf_VGA"$
|
||||
//See $LK,"SysGrInit",A="MN:SysGrInit"$()
|
||||
//Allows consts to be used instead of vars.
|
||||
HashPublic("GR_WIDTH",HTT_DEFINE_STR);;
|
||||
|
||||
@@ -16,7 +16,7 @@ U0 GrUpdateTaskODEs(CTask *task)
|
||||
}
|
||||
|
||||
U0 GrUpdateTaskWin(CTask *task)
|
||||
{ //Draw core0 task win.
|
||||
{ //Draw a win. Only core0 tasks have a win.
|
||||
CDC *dc;
|
||||
CD3I64 saved_scroll;
|
||||
sys_task_being_screen_updated=task;
|
||||
|
||||
@@ -456,7 +456,7 @@ public CDocEntry *DocSprite(CDoc *doc=NULL,U8 *elems,U8 *fmt=NULL)
|
||||
MemCpy(tempb->data,elems,size);
|
||||
tempb->num=doc->cur_bin_num;
|
||||
tempb->use_cnt=1;
|
||||
QueIns(tempb,doc->bin_root.last);
|
||||
QueIns(tempb,doc->bin_head.last);
|
||||
if (fmt)
|
||||
st=MStrPrint(fmt,doc->cur_bin_num++);
|
||||
else
|
||||
|
||||
@@ -139,7 +139,7 @@ U0 GrBitMapEdTrimToExtents(CDC **_img,I64 *_xx1,I64 *_yy1,
|
||||
}
|
||||
|
||||
tr_done:
|
||||
*_img=DCExtract(img,x1,y1,x2,y2);
|
||||
*_img=DCExt(img,x1,y1,x2,y2);
|
||||
*_xx1+=x1; *_yy1+=y1;
|
||||
*_xx2+=x2-(img->width-1); *_yy2+=y2-(img->height-1); //not inclusive
|
||||
DCDel(img);
|
||||
@@ -155,7 +155,7 @@ U0 GrBitMapEdAddOutline(CDC *img,I64 width,
|
||||
old_color=img->color;
|
||||
img->color=color;
|
||||
while (width-->0) {
|
||||
src=DCExtract(img,0,0,img->width-1,img->height-1);
|
||||
src=DCExt(img,0,0,img->width-1,img->height-1);
|
||||
for (i=0;i<img->height;i++)
|
||||
for (j=0;j<img->width;j++)
|
||||
if (GrPeek(src,j,i)==bkcolor)
|
||||
@@ -181,7 +181,7 @@ U0 GrBitMapEdEtch(CDC *img,I64 width,CColorROPU32 bkcolor)
|
||||
old_color=img->color;
|
||||
img->color=bkcolor;
|
||||
while (width-->0) {
|
||||
src=DCExtract(img,0,0,img->width-1,img->height-1);
|
||||
src=DCExt(img,0,0,img->width-1,img->height-1);
|
||||
for (i=0;i<img->height;i++)
|
||||
for (j=0;j<img->width;j++)
|
||||
if (GrPeek(src,j,i)!=bkcolor)
|
||||
@@ -347,7 +347,7 @@ bm_menu:
|
||||
break;
|
||||
}
|
||||
DCDel(undo);
|
||||
undo=DCExtract(img,0,0,img->width-1,img->height-1);
|
||||
undo=DCExt(img,0,0,img->width-1,img->height-1);
|
||||
undo->bkcolor=bkcolor;
|
||||
WinMgrSync(2,TRUE); //Let popup close
|
||||
GrBitMapEdPrepPersistentDC(dc,xx1,yy1,img);
|
||||
@@ -612,7 +612,7 @@ bm_menu:
|
||||
y22=y1;
|
||||
}
|
||||
DCDel(clipboard);
|
||||
clipboard=DCExtract(img,x11-xx1,y11-yy1,x22-xx1,y22-yy1);
|
||||
clipboard=DCExt(img,x11-xx1,y11-yy1,x22-xx1,y22-yy1);
|
||||
clipboard->bkcolor=bkcolor;
|
||||
if (mode==GBM_DELETE) {
|
||||
img->color=bkcolor;
|
||||
|
||||
+23
-23
@@ -204,8 +204,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
CSprite *res,g;
|
||||
CColorROPU32 color;
|
||||
U8 *st,*ptr;
|
||||
CQueD3I32 rootp,*tempp,*tempa1;
|
||||
CQueMeshTri roott,*tempt,*tempt1;
|
||||
CQueD3I32 headp,*tempp,*tempa1;
|
||||
CQueMeshTri headt,*tempt,*tempt1;
|
||||
CQueVectU8 *tempv;
|
||||
MemSet(&g,0,sizeof(CSprite));
|
||||
switch (type) {
|
||||
@@ -338,11 +338,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
case SPT_POLYLINE:
|
||||
Lex(cc); //Skip {
|
||||
g.type=SPT_POLYLINE;
|
||||
QueInit(&rootp);
|
||||
QueInit(&headp);
|
||||
while (cc->token=='(') {
|
||||
tempp=CAlloc(sizeof(CQueD3I32));
|
||||
LexD2I32(cc,&tempp->p);
|
||||
QueIns(tempp,rootp.last);
|
||||
QueIns(tempp,headp.last);
|
||||
g.nu.num++;
|
||||
if (cc->token==',')
|
||||
Lex(cc); //Skip ,
|
||||
@@ -353,8 +353,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
res=MAlloc(size+g.nu.num*sizeof(CD2I32));
|
||||
MemCpy(res,&g,size);
|
||||
ptr=&res->nu.u;
|
||||
tempp=rootp.next;
|
||||
while (tempp!=&rootp) {
|
||||
tempp=headp.next;
|
||||
while (tempp!=&headp) {
|
||||
tempa1=tempp->next;
|
||||
MemCpy(ptr,&tempp->p,sizeof(CD2I32));
|
||||
ptr+=sizeof(CD2I32);
|
||||
@@ -367,11 +367,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
case SPT_BSPLINE2_CLOSED:
|
||||
case SPT_BSPLINE3_CLOSED:
|
||||
Lex(cc); //Skip {
|
||||
QueInit(&rootp);
|
||||
QueInit(&headp);
|
||||
while (cc->token=='(') {
|
||||
tempp=CAlloc(sizeof(CQueD3I32));
|
||||
LexD3I32(cc,&tempp->p);
|
||||
QueIns(tempp,rootp.last);
|
||||
QueIns(tempp,headp.last);
|
||||
g.nu.num++;
|
||||
if (cc->token==',')
|
||||
Lex(cc); //Skip ,
|
||||
@@ -393,8 +393,8 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
}
|
||||
MemCpy(res,&g,size);
|
||||
ptr=&res->nu.u;
|
||||
tempp=rootp.next;
|
||||
while (tempp!=&rootp) {
|
||||
tempp=headp.next;
|
||||
while (tempp!=&headp) {
|
||||
tempa1=tempp->next;
|
||||
MemCpy(ptr,&tempp->p,sizeof(CD3I32));
|
||||
ptr+=sizeof(CD3I32);
|
||||
@@ -482,11 +482,11 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
Lex(cc); //Skip ,
|
||||
}
|
||||
num1=0;
|
||||
QueInit(&rootp);
|
||||
QueInit(&headp);
|
||||
while (cc->token=='(') {
|
||||
tempp=CAlloc(sizeof(CQueD3I32));
|
||||
LexD3I32(cc,&tempp->p);
|
||||
QueIns(tempp,rootp.last);
|
||||
QueIns(tempp,headp.last);
|
||||
num1++;
|
||||
if (cc->token==',')
|
||||
Lex(cc); //Skip ,
|
||||
@@ -495,7 +495,7 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
LexExcept(cc,"Expecting ':' at ");
|
||||
Lex(cc); //Skip :
|
||||
num2=0;
|
||||
QueInit(&roott);
|
||||
QueInit(&headt);
|
||||
while (cc->token=='(') {
|
||||
tempt=CAlloc(sizeof(CQueMeshTri));
|
||||
st=LexFirstRem(cc,",");
|
||||
@@ -517,7 +517,7 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
if (cc->token!=')')
|
||||
LexExcept(cc,"Expecting ')' at ");
|
||||
Lex(cc); //Skip )
|
||||
QueIns(tempt,roott.last);
|
||||
QueIns(tempt,headt.last);
|
||||
num2++;
|
||||
if (cc->token==',')
|
||||
Lex(cc); //Skip ,
|
||||
@@ -534,16 +534,16 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
res=MAlloc(size+num1*sizeof(CD3I32)+num2*sizeof(CMeshTri));
|
||||
MemCpy(res,&g,size);
|
||||
ptr=res(U8 *)+size;
|
||||
tempp=rootp.next;
|
||||
while (tempp!=&rootp) {
|
||||
tempp=headp.next;
|
||||
while (tempp!=&headp) {
|
||||
tempa1=tempp->next;
|
||||
MemCpy(ptr,&tempp->p,sizeof(CD3I32));
|
||||
ptr+=sizeof(CD3I32);
|
||||
Free(tempp);
|
||||
tempp=tempa1;
|
||||
}
|
||||
tempt=roott.next;
|
||||
while (tempt!=&roott) {
|
||||
tempt=headt.next;
|
||||
while (tempt!=&headt) {
|
||||
tempt1=tempt->next;
|
||||
MemCpy(ptr,&tempt->start,sizeof(CMeshTri));
|
||||
ptr+=sizeof(CMeshTri);
|
||||
@@ -561,14 +561,14 @@ CSprite *Code2SpriteElem(CCmpCtrl *cc,I64 type)
|
||||
|
||||
public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL)
|
||||
{//Text to sprite.
|
||||
CSprite root;
|
||||
CSprite head;
|
||||
U8 *res;
|
||||
Bool okay=TRUE,unlock_doc=DocLock(doc);
|
||||
CCmpCtrl *cc=CmpCtrlNew(,CCF_DONT_FREE_BUF);
|
||||
CHashTable *old_hash_table_lst=cc->htc.hash_table_lst;
|
||||
CHashGeneric *temph;
|
||||
I64 i,size=0;
|
||||
QueInit(&root);
|
||||
QueInit(&head);
|
||||
LexAttachDoc(cc,,doc);
|
||||
try {
|
||||
do {
|
||||
@@ -578,7 +578,7 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL)
|
||||
i=temph->user_data0;
|
||||
cc->htc.hash_table_lst=old_hash_table_lst;
|
||||
if (Lex(cc)=='{') //Skip ident
|
||||
QueIns(Code2SpriteElem(cc,i),root.last);
|
||||
QueIns(Code2SpriteElem(cc,i),head.last);
|
||||
} else if (cc->token)
|
||||
LexExcept(cc,"Expecting sprite element type name at ");
|
||||
} while (cc->token);
|
||||
@@ -591,12 +591,12 @@ public U8 *Code2Sprite(CDoc *doc,I64 *_size=NULL)
|
||||
DocUnlock(doc);
|
||||
if (okay) {
|
||||
CmpCtrlDel(cc); //TODO: can crash
|
||||
res=SpriteQue2Sprite(&root,&size);
|
||||
res=SpriteQue2Sprite(&head,&size);
|
||||
} else {
|
||||
res=NULL;
|
||||
size=0;
|
||||
}
|
||||
if (_size) *_size=size;
|
||||
QueDel(&root);
|
||||
QueDel(&head);
|
||||
return res;
|
||||
}
|
||||
+127
-127
@@ -1,14 +1,14 @@
|
||||
#help_index "Graphics/Sprite;Sprites"
|
||||
|
||||
CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *root,I64 elem_num,
|
||||
CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *head,I64 elem_num,
|
||||
I64 x=0,I64 y=0,CColorROPU32 *_color=NULL,I64 *_width=NULL,
|
||||
I64 *_xx=NULL,I64 *_yy=NULL)
|
||||
{
|
||||
CSprite *res=root->next;
|
||||
CSprite *res=head->next;
|
||||
I64 width=1,xx=0,yy=0;
|
||||
CColorROPU32 color=BLACK;
|
||||
if (dc) DCRst(dc);
|
||||
while (elem_num-->0 && res!=root) {
|
||||
while (elem_num-->0 && res!=head) {
|
||||
switch (res->type) {
|
||||
case SPT_COLOR:
|
||||
color=res->c.color;
|
||||
@@ -49,13 +49,13 @@ CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *root,I64 elem_num,
|
||||
return res;
|
||||
}
|
||||
|
||||
Bool SpritePolyPtPlot(CSprite *root,I64 x,I64 y,I64)
|
||||
Bool SpritePolyPtPlot(CSprite *head,I64 x,I64 y,I64)
|
||||
{
|
||||
CSprite *tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PT));
|
||||
tempg->type=SPT_PT;
|
||||
tempg->p.x1=x;
|
||||
tempg->p.y1=y;
|
||||
QueIns(tempg,root->last);
|
||||
QueIns(tempg,head->last);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -76,19 +76,19 @@ CSprite *Sprite2SpriteQue(U8 *elems)
|
||||
return res;
|
||||
}
|
||||
|
||||
U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL)
|
||||
U8 *SpriteQue2Sprite(CSprite *head,I64 *_size=NULL)
|
||||
{
|
||||
I64 i,size=sprite_elem_base_sizes[SPT_END];
|
||||
CSprite *tempg=root->next;
|
||||
CSprite *tempg=head->next;
|
||||
U8 *res,*dst;
|
||||
while (tempg!=root) {
|
||||
while (tempg!=head) {
|
||||
size+=SpriteElemSize(tempg);
|
||||
tempg=tempg->next;
|
||||
}
|
||||
if (_size) *_size=size;
|
||||
res=dst=MAlloc(size);
|
||||
tempg=root->next;
|
||||
while (tempg!=root) {
|
||||
tempg=head->next;
|
||||
while (tempg!=head) {
|
||||
i=SpriteElemSize(tempg);
|
||||
MemCpy(dst,&tempg->start,i);
|
||||
dst+=i;
|
||||
@@ -98,25 +98,25 @@ U8 *SpriteQue2Sprite(CSprite *root,I64 *_size=NULL)
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SpriteEdUpdate(CDoc *doc,CDocEntry *doc_ce,CSprite *root)
|
||||
U0 SpriteEdUpdate(CDoc *doc,CDocEntry *doc_ce,CSprite *head)
|
||||
{
|
||||
CDocBin *tempb=doc_ce->bin_data;
|
||||
I64 size;
|
||||
Bool unlock=DocLock(doc);
|
||||
Free(tempb->data);
|
||||
tempb->data=SpriteQue2Sprite(root,&size);
|
||||
tempb->data=SpriteQue2Sprite(head,&size);
|
||||
tempb->size=size;
|
||||
if (unlock)
|
||||
DocUnlock(doc);
|
||||
}
|
||||
|
||||
U0 SpriteSetOrigin(CSprite *root,I64 dx,I64 dy,I64 dz)
|
||||
U0 SpriteSetOrigin(CSprite *head,I64 dx,I64 dy,I64 dz)
|
||||
{
|
||||
I64 i;
|
||||
I32 *ptr;
|
||||
CD3I32 *p;
|
||||
CSprite *tempg=root->next;
|
||||
while (tempg!=root) {
|
||||
CSprite *tempg=head->next;
|
||||
while (tempg!=head) {
|
||||
if (tempg->sel)
|
||||
switch (tempg->type) {
|
||||
case SPT_ARROW:
|
||||
@@ -372,14 +372,14 @@ CSprite *SpriteTransformBitMap(I64 *r,CSprite *tempg)
|
||||
return tempg1;
|
||||
}
|
||||
|
||||
U0 SpriteTransform(I64 *r,CSprite *root)
|
||||
U0 SpriteTransform(I64 *r,CSprite *head)
|
||||
{
|
||||
I64 i,j,k,num,
|
||||
x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3;
|
||||
I32 *ptr;
|
||||
CD3I32 *p;
|
||||
CSprite *tempg=root->next,root2,*tempg1,*tempg2,*tempg3;
|
||||
while (tempg!=root) {
|
||||
CSprite *tempg=head->next,head2,*tempg1,*tempg2,*tempg3;
|
||||
while (tempg!=head) {
|
||||
if (tempg->sel)
|
||||
switch (tempg->type) {
|
||||
case SPT_WIDTH:
|
||||
@@ -450,7 +450,7 @@ U0 SpriteTransform(I64 *r,CSprite *root)
|
||||
}
|
||||
break;
|
||||
case SPT_POLYPT:
|
||||
QueInit(&root2);
|
||||
QueInit(&head2);
|
||||
x=tempg->npu.x; y=tempg->npu.y; z=0;
|
||||
x1=x; y1=y; z1=z; //unrotated cur coordinates
|
||||
Mat4x4MulXYZ(r,&x,&y,&z);
|
||||
@@ -464,14 +464,14 @@ U0 SpriteTransform(I64 *r,CSprite *root)
|
||||
y1+=gr_y_offsets[j];
|
||||
x=x1; y=y1; z=z1;
|
||||
Mat4x4MulXYZ(r,&x,&y,&z);
|
||||
Line(&root2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot);
|
||||
Line(&head2,x3-x2,y3-y2,0,x-x2,y-y2,0,&SpritePolyPtPlot);
|
||||
x3=x; y3=y; z3=z;
|
||||
}
|
||||
|
||||
num=0;
|
||||
tempg1=root2.next;
|
||||
tempg1=head2.next;
|
||||
x3=0; y3=0; z3=0;
|
||||
while (tempg1!=&root2) {
|
||||
while (tempg1!=&head2) {
|
||||
tempg2=tempg1->next;
|
||||
if (tempg1->p.x1==x3 && tempg1->p.y1==y3) {
|
||||
QueRem(tempg1);
|
||||
@@ -490,8 +490,8 @@ U0 SpriteTransform(I64 *r,CSprite *root)
|
||||
ptr=&tempg3->npu.u;
|
||||
x3=0;y3=0; z3=0;
|
||||
i=0;
|
||||
tempg1=root2.next;
|
||||
while (tempg1!=&root2) {
|
||||
tempg1=head2.next;
|
||||
while (tempg1!=&head2) {
|
||||
tempg2=tempg1->next;
|
||||
BFieldOrU32(ptr,i,
|
||||
polypt_map[SignI64(tempg1->p.x1-x3)+1+
|
||||
@@ -553,12 +553,12 @@ U0 SpriteTransform(I64 *r,CSprite *root)
|
||||
}
|
||||
}
|
||||
|
||||
I64 SpriteQueSelCnt(CSprite *root,Bool val=TRUE)
|
||||
I64 SpriteQueSelCnt(CSprite *head,Bool val=TRUE)
|
||||
{
|
||||
I64 res=0;
|
||||
CSprite *tempg=root->next;
|
||||
CSprite *tempg=head->next;
|
||||
val=ToBool(val);
|
||||
while (tempg!=root) {
|
||||
while (tempg!=head) {
|
||||
if (ToBool(tempg->sel)==val)
|
||||
res++;
|
||||
tempg=tempg->next;
|
||||
@@ -566,11 +566,11 @@ I64 SpriteQueSelCnt(CSprite *root,Bool val=TRUE)
|
||||
return res;
|
||||
}
|
||||
|
||||
I64 SpriteQueSelAll(CSprite *root,Bool val=TRUE)
|
||||
I64 SpriteQueSelAll(CSprite *head,Bool val=TRUE)
|
||||
{
|
||||
I64 res=0;
|
||||
CSprite *tempg=root->next;
|
||||
while (tempg!=root) {
|
||||
CSprite *tempg=head->next;
|
||||
while (tempg!=head) {
|
||||
tempg->sel=val;
|
||||
res++;
|
||||
tempg=tempg->next;
|
||||
@@ -578,17 +578,17 @@ I64 SpriteQueSelAll(CSprite *root,Bool val=TRUE)
|
||||
return res;
|
||||
}
|
||||
|
||||
CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num)
|
||||
CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *head,I64 *_cur_elem_num)
|
||||
{//For the side-bar
|
||||
CSprite *res=CAlloc(sizeof(CSprite)),*tempg;
|
||||
CDocEntry *doc_e=doc->root.next;
|
||||
CDocEntry *doc_e=doc->head.next;
|
||||
Bool found=FALSE;
|
||||
I64 num=0;
|
||||
QueInit(res);
|
||||
while (doc_e!=doc) {
|
||||
if (doc_e->type_u8==DOCT_MENU_VAL && doc_e->left_exp>=0) {
|
||||
tempg=SpriteSetSettings(,root,doc_e->left_exp);
|
||||
if (tempg!=root) {
|
||||
tempg=SpriteSetSettings(,head,doc_e->left_exp);
|
||||
if (tempg!=head) {
|
||||
tempg=MAllocIdent(tempg);
|
||||
tempg->sel=Bt(&doc_e->type,DOCEt_SEL);
|
||||
if (*_cur_elem_num==doc_e->left_exp) {
|
||||
@@ -603,12 +603,12 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *root,I64 *_cur_elem_num)
|
||||
}
|
||||
if (!found)
|
||||
*_cur_elem_num=num;
|
||||
QueDel(root);
|
||||
Free(root);
|
||||
QueDel(head);
|
||||
Free(head);
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num)
|
||||
U0 SpriteSideBarPickNew(CDoc *doc,CSprite *head,I64 old_num)
|
||||
{
|
||||
CSprite *tempg;
|
||||
CDocEntry *doc_cur_e=NULL,*doc_e;
|
||||
@@ -617,15 +617,15 @@ U0 SpriteSideBarPickNew(CDoc *doc,CSprite *root,I64 old_num)
|
||||
DocPrint(doc,"$$PURPLE$$$$TX+CX,\"Sprite SideBar\"$$\n"
|
||||
"$$LK+PU+CX,\"Click for Help\","
|
||||
"A=\"FI:::/Doc/SpriteSideBar.TXT.Z\"$$\n\n");
|
||||
tempg=root->next;
|
||||
while (tempg!=root) {
|
||||
tempg=head->next;
|
||||
while (tempg!=head) {
|
||||
st=SpriteElem2Summary(tempg);
|
||||
if (cur_elem_num==old_num) {
|
||||
DocPrint(doc,"$$LTRED$$");
|
||||
doc_e=doc_cur_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++);
|
||||
} else {
|
||||
DocPrint(doc,"$$LTBLUE$$");
|
||||
doc_e=DocPrint(doc,"$$MU-UL,\"%Q\",LE=%d$$\n",st,cur_elem_num++);
|
||||
doc_e=DocPrint(doc,"$$MU-UL,\"%$$Q\",LE=%d$$\n",st,cur_elem_num++);
|
||||
}
|
||||
BEqu(&doc_e->de_flags,DOCEf_SEL,tempg->sel);
|
||||
BEqu(&doc_e->type,DOCEt_SEL,tempg->sel);
|
||||
@@ -659,29 +659,29 @@ U0 SpriteSideBarTask2(CTask *grand_parent)
|
||||
}
|
||||
}
|
||||
|
||||
U0 SpriteSideBarTask(CTask *parent,CSprite **_root,I64 *_cur_elem_num)
|
||||
U0 SpriteSideBarTask(CTask *parent,CSprite **_head,I64 *_cur_elem_num)
|
||||
{
|
||||
CDocEntry *doc_e;
|
||||
CDoc *doc=DocPut;
|
||||
Spawn(&SpriteSideBarTask2,parent,"CSpriteTask",,Fs);
|
||||
doc->flags|=DOCF_MIN_SIZE|DOCF_FORM;
|
||||
while (TRUE) {
|
||||
SpriteSideBarPickNew(doc,*_root,*_cur_elem_num);
|
||||
SpriteSideBarPickNew(doc,*_head,*_cur_elem_num);
|
||||
DocHighlightCursor(,doc);
|
||||
View;
|
||||
doc_e=doc->cur_entry;
|
||||
if (doc_e->type_u8==DOCT_MENU_VAL)
|
||||
*_cur_elem_num=doc_e->left_exp;
|
||||
*_root=SpriteSideBar2SpriteQue(doc,*_root,_cur_elem_num);
|
||||
*_head=SpriteSideBar2SpriteQue(doc,*_head,_cur_elem_num);
|
||||
DocClear(doc);
|
||||
}
|
||||
}
|
||||
|
||||
Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num)
|
||||
Bool SpriteEdText(CSprite **_head,I64 *_cur_elem_num)
|
||||
{
|
||||
Bool res;
|
||||
CSprite *root=*_root;
|
||||
U8 *elems=SpriteQue2Sprite(root);
|
||||
CSprite *head=*_head;
|
||||
U8 *elems=SpriteQue2Sprite(head);
|
||||
CDoc *doc=DocNew,*doc2,*old_put=DocPut;
|
||||
StrPrint(doc->filename.name,"AI:0x%X",doc);
|
||||
DocPrint(doc,"//$$PURPLE$$$$TX+CX,\"Sprite Edit as Text\"$$$$FG$$\n"
|
||||
@@ -696,11 +696,11 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num)
|
||||
if (elems=Code2Sprite(doc)) {
|
||||
DocDel(doc2);
|
||||
Fs->put_doc=old_put;
|
||||
QueDel(root);
|
||||
Free(root);
|
||||
root=Sprite2SpriteQue(elems);
|
||||
QueDel(head);
|
||||
Free(head);
|
||||
head=Sprite2SpriteQue(elems);
|
||||
Free(elems);
|
||||
*_cur_elem_num=QueCnt(root); //TODO: Might want to improve this.
|
||||
*_cur_elem_num=QueCnt(head); //TODO: Might want to improve this.
|
||||
break;
|
||||
} else {
|
||||
PopUpPrint("DocEd(0x%X,0x%X);",doc2,0);
|
||||
@@ -711,7 +711,7 @@ Bool SpriteEdText(CSprite **_root,I64 *_cur_elem_num)
|
||||
break;
|
||||
}
|
||||
DocDel(doc);
|
||||
if (_root) *_root=root;
|
||||
if (_head) *_head=head;
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -738,7 +738,7 @@ U0 GrInit3()
|
||||
}
|
||||
GrInit3;
|
||||
|
||||
I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num)
|
||||
I64 PopUpSpriteEd(CSprite **_head,I64 *_cur_elem_num)
|
||||
{
|
||||
U8 *st;
|
||||
CTask *pu_task;
|
||||
@@ -760,12 +760,12 @@ I64 PopUpSpriteEd(CSprite **_root,I64 *_cur_elem_num)
|
||||
"$$PURPLE$$$$MU-UL,\"+] Sprite Main Menu\",LE=GED_MAIN_MENU$$$$LTBLUE$$\n"
|
||||
"$$MU-UL,\"Exit Sprite\",LE=GED_EXIT$$\n"
|
||||
"$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$");
|
||||
st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num);
|
||||
st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_head,_cur_elem_num);
|
||||
PopUp(st,NULL,&pu_task);
|
||||
Free(st);
|
||||
i=PopUpMenu(doc);
|
||||
if (TaskValidate(pu_task)) {
|
||||
*_root=SpriteSideBar2SpriteQue(DocPut(pu_task),*_root,_cur_elem_num);
|
||||
*_head=SpriteSideBar2SpriteQue(DocPut(pu_task),*_head,_cur_elem_num);
|
||||
Kill(pu_task);
|
||||
}
|
||||
DocDel(doc);
|
||||
@@ -784,14 +784,14 @@ class CEdSprite
|
||||
I32 *x,*y,*z,*w,*h;
|
||||
};
|
||||
|
||||
U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root)
|
||||
U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head)
|
||||
{
|
||||
I64 i,num=0;
|
||||
I32 *ptr;
|
||||
CD3I32 *p;
|
||||
CEdSprite *temppe;
|
||||
CSprite *tempg=elems-offset(CSprite.start);
|
||||
QueInit(root);
|
||||
QueInit(head);
|
||||
while (tempg->type) {
|
||||
switch (tempg->type) {
|
||||
case SPT_ELLIPSE:
|
||||
@@ -805,7 +805,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root)
|
||||
temppe->w=&tempg->pwha.width;
|
||||
temppe->h=&tempg->pwha.height;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
goto pq_x1_y1;
|
||||
case SPT_RECT:
|
||||
case SPT_ROTATED_RECT:
|
||||
@@ -819,7 +819,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *root)
|
||||
temppe->x=&tempg->pp.x2;
|
||||
temppe->y=&tempg->pp.y2;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
case SPT_TEXT:
|
||||
case SPT_TEXT_BOX:
|
||||
case SPT_TEXT_DIAMOND:
|
||||
@@ -836,7 +836,7 @@ pq_x1_y1:
|
||||
temppe->x=&tempg->p.x1;
|
||||
temppe->y=&tempg->p.y1;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
break;
|
||||
case SPT_SHIFT:
|
||||
x+=tempg->p.x1;
|
||||
@@ -852,7 +852,7 @@ pq_x1_y1:
|
||||
temppe->x=&ptr[i<<1];
|
||||
temppe->y=&ptr[i<<1+1];
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
}
|
||||
break;
|
||||
case SPT_POLYPT:
|
||||
@@ -863,7 +863,7 @@ pq_x1_y1:
|
||||
temppe->x=&tempg->npu.x;
|
||||
temppe->y=&tempg->npu.y;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
break;
|
||||
case SPT_BSPLINE2:
|
||||
case SPT_BSPLINE3:
|
||||
@@ -879,7 +879,7 @@ pq_x1_y1:
|
||||
temppe->y=&p[i].y;
|
||||
temppe->z=&p[i].z;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
}
|
||||
break;
|
||||
case SPT_MESH:
|
||||
@@ -893,7 +893,7 @@ pq_x1_y1:
|
||||
temppe->y=&tempg->pmu.y;
|
||||
temppe->z=&tempg->pmu.z;
|
||||
temppe->num=num;
|
||||
QueIns(temppe,root->last);
|
||||
QueIns(temppe,head->last);
|
||||
break;
|
||||
}
|
||||
tempg(U8 *)+=SpriteElemSize(tempg);
|
||||
@@ -901,15 +901,15 @@ pq_x1_y1:
|
||||
}
|
||||
}
|
||||
|
||||
U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *root)
|
||||
U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *head)
|
||||
{
|
||||
I64 x,y;
|
||||
CEdSprite *temppe;
|
||||
WinMgrSync;
|
||||
DCFill(dc);
|
||||
if (Blink(20)) {
|
||||
temppe=root->next;
|
||||
while (temppe!=root) {
|
||||
temppe=head->next;
|
||||
while (temppe!=head) {
|
||||
switch (temppe->type) {
|
||||
case GSPT_SIMPLE_PT:
|
||||
x=*temppe->x+temppe->xx;
|
||||
@@ -932,11 +932,11 @@ U0 SpriteCtrlPtsDraw(CDC *dc,CEdSprite *root)
|
||||
}
|
||||
}
|
||||
|
||||
U0 SpriteCtrlPtsMove(CEdSprite *root,I64 dx,I64 dy)
|
||||
U0 SpriteCtrlPtsMove(CEdSprite *head,I64 dx,I64 dy)
|
||||
{
|
||||
CEdSprite *temppe;
|
||||
temppe=root->next;
|
||||
while (temppe!=root) {
|
||||
temppe=head->next;
|
||||
while (temppe!=head) {
|
||||
if (temppe->flags&GSPF_SEL)
|
||||
switch (temppe->type) {
|
||||
case GSPT_SIMPLE_PT:
|
||||
@@ -957,13 +957,13 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
I64 msg_code,a1,a2,xx,yy,xx2,yy2,dd,best_dd,cur_elem_num;
|
||||
Bool res=TRUE;
|
||||
CDC *dc=DCAlias;
|
||||
CEdSprite root,*temppe,*best_pe;
|
||||
CEdSprite head,*temppe,*best_pe;
|
||||
|
||||
SpritePtQueNew(elems,x,y,&root);
|
||||
SpritePtQueNew(elems,x,y,&head);
|
||||
cur_elem_num=0;
|
||||
if (root.next!=&root) {
|
||||
if (head.next!=&head) {
|
||||
while (TRUE) {
|
||||
SpriteCtrlPtsDraw(dc,&root); //has WinMgrSync
|
||||
SpriteCtrlPtsDraw(dc,&head); //has WinMgrSync
|
||||
switch (msg_code=ScanMsg(&a1,&a2,
|
||||
1<<MSG_IP_R_UP|1<<MSG_IP_L_DOWN|1<<MSG_KEY_DOWN)) {
|
||||
case MSG_IP_L_DOWN:
|
||||
@@ -971,8 +971,8 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
case GED_SHIFT_PTS:
|
||||
xx=a1; yy=a2;
|
||||
best_dd=MAX_I64;
|
||||
temppe=root.next;
|
||||
while (temppe!=&root) {
|
||||
temppe=head.next;
|
||||
while (temppe!=&head) {
|
||||
switch (temppe->type) {
|
||||
case GSPT_SIMPLE_PT:
|
||||
dd=SqrI64(*temppe->x+temppe->xx-xx)+
|
||||
@@ -995,7 +995,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
case GED_SHIFT_RECTS:
|
||||
xx2=xx=a1; yy2=yy=a2;
|
||||
while (TRUE) {
|
||||
SpriteCtrlPtsDraw(dc,&root);
|
||||
SpriteCtrlPtsDraw(dc,&head);
|
||||
dc->color=ROPF_DITHER+WHITE<<16+RED;
|
||||
GrBorder(dc,xx,yy,xx2,yy2);
|
||||
if (msg_code=ScanMsg(&a1,&a2,1<<MSG_IP_MOVE|1<<MSG_IP_L_UP)) {
|
||||
@@ -1007,8 +1007,8 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
}
|
||||
if (xx2<xx) SwapI64(&xx,&xx2);
|
||||
if (yy2<yy) SwapI64(&yy,&yy2);
|
||||
temppe=root.next;
|
||||
while (temppe!=&root) {
|
||||
temppe=head.next;
|
||||
while (temppe!=&head) {
|
||||
switch (temppe->type) {
|
||||
case GSPT_SIMPLE_PT:
|
||||
if (xx<=*temppe->x+temppe->xx<=xx2 &&
|
||||
@@ -1024,7 +1024,7 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
temppe=temppe->next;
|
||||
}
|
||||
do {
|
||||
SpriteCtrlPtsDraw(dc,&root);
|
||||
SpriteCtrlPtsDraw(dc,&head);
|
||||
msg_code=ScanMsg(&a1,&a2,1<<MSG_KEY_DOWN|1<<MSG_IP_L_DOWN);
|
||||
if (msg_code==MSG_KEY_DOWN) goto gs_key;
|
||||
} while (msg_code!=MSG_IP_L_DOWN);
|
||||
@@ -1032,14 +1032,14 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
break;
|
||||
}
|
||||
do {
|
||||
SpriteCtrlPtsDraw(dc,&root);
|
||||
SpriteCtrlPtsDraw(dc,&head);
|
||||
if (msg_code=ScanMsg(&a1,&a2,1<<MSG_IP_MOVE|1<<MSG_IP_L_UP)) {
|
||||
SpriteCtrlPtsMove(&root,a1-xx,a2-yy);
|
||||
SpriteCtrlPtsMove(&head,a1-xx,a2-yy);
|
||||
xx=a1;yy=a2;
|
||||
}
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
temppe=root.next;
|
||||
while (temppe!=&root) {
|
||||
temppe=head.next;
|
||||
while (temppe!=&head) {
|
||||
temppe->flags&=~GSPF_SEL;
|
||||
temppe=temppe->next;
|
||||
}
|
||||
@@ -1067,7 +1067,7 @@ gs_key:
|
||||
}
|
||||
}
|
||||
gs_done:
|
||||
QueDel(&root,TRUE);
|
||||
QueDel(&head,TRUE);
|
||||
}
|
||||
DCFill(dc);
|
||||
DCDel(dc);
|
||||
@@ -1077,33 +1077,33 @@ gs_done:
|
||||
}
|
||||
|
||||
I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
CSprite **_root,I64 *_cur_elem_num)
|
||||
CSprite **_head,I64 *_cur_elem_num)
|
||||
{
|
||||
CDocEntry *doc_e2;
|
||||
CDocBin *tempb;
|
||||
Bool unlock;
|
||||
I64 i,r[16],msg_code,a1,a2,xx,yy,
|
||||
old_de_flags;
|
||||
CSprite *cur_elem,*root2,*next,*last,*tempg,*insert_pt;
|
||||
CSprite *cur_elem,*head2,*next,*last,*tempg,*insert_pt;
|
||||
|
||||
old_de_flags=doc_ce->de_flags;
|
||||
tempb=doc_ce->bin_data;
|
||||
DocUnlock(doc);
|
||||
SpriteQueSelAll(*_root,FALSE);
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
do {
|
||||
if (winmgr.fps<10)
|
||||
doc_ce->de_flags|=DOCEF_DONT_DRAW;
|
||||
StrCpy(Fs->task_title,"Sprite Edit Menu");
|
||||
i=PopUpSpriteEd(_root,_cur_elem_num);
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
i=PopUpSpriteEd(_head,_cur_elem_num);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
if (0<=i<GED_EXIT) {
|
||||
StrCpy(Fs->task_title,DefineSub(i,"ST_SPRITE_ED_MENU"));
|
||||
switch (i) {
|
||||
case GED_SEL_UNSEL_ALL:
|
||||
if (!SpriteQueSelCnt(*_root))
|
||||
SpriteQueSelAll(*_root);
|
||||
if (!SpriteQueSelCnt(*_head))
|
||||
SpriteQueSelAll(*_head);
|
||||
else
|
||||
SpriteQueSelAll(*_root,FALSE);
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case GED_SEL:
|
||||
case GED_UNSEL:
|
||||
@@ -1115,7 +1115,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
WinMgrSync(2);
|
||||
if (msg_code==MSG_IP_L_DOWN) {
|
||||
*_cur_elem_num=doc->nearest_sprite_elem_num;
|
||||
cur_elem=SpriteSetSettings(,*_root,*_cur_elem_num);
|
||||
cur_elem=SpriteSetSettings(,*_head,*_cur_elem_num);
|
||||
cur_elem->sel=ToBool(i==GED_SEL);
|
||||
GetMsg(,,1<<MSG_IP_L_UP);
|
||||
}
|
||||
@@ -1123,28 +1123,28 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
doc->cur_sprite=NULL;
|
||||
break;
|
||||
case GED_SET_ORIGIN:
|
||||
SpriteQueSelAll(*_root);
|
||||
SpriteQueSelAll(*_head);
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
GetMsg(&a1,&a2,1<<MSG_IP_L_UP);
|
||||
SpriteSetOrigin(*_root,x-a1,y-a2,0);
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteQueSelAll(*_root,FALSE);
|
||||
SpriteSetOrigin(*_head,x-a1,y-a2,0);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case GED_SHIFT_SEL:
|
||||
if (!SpriteQueSelCnt(*_root))
|
||||
SpriteQueSelAll(*_root);
|
||||
if (!SpriteQueSelCnt(*_head))
|
||||
SpriteQueSelAll(*_head);
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
GetMsg(&a1,&a2,1<<MSG_IP_L_DOWN);
|
||||
xx=a1; yy=a2;
|
||||
do {
|
||||
msg_code=GetMsg(&a1,&a2,
|
||||
1<<MSG_IP_L_UP+1<<MSG_IP_MOVE);
|
||||
SpriteSetOrigin(*_root,a1-xx,a2-yy,0);
|
||||
SpriteSetOrigin(*_head,a1-xx,a2-yy,0);
|
||||
xx=a1; yy=a2;
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
if (!SpriteQueSelCnt(*_root,FALSE))
|
||||
SpriteQueSelAll(*_root,FALSE);
|
||||
if (!SpriteQueSelCnt(*_head,FALSE))
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case GED_SHIFT_PTS:
|
||||
case GED_SHIFT_RECTS:
|
||||
@@ -1155,25 +1155,25 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
"to OR another rectangle.\n");
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
if (SpriteShiftPts(tempb->data,x,y,_cur_elem_num,i)) {
|
||||
QueDel(*_root);
|
||||
Free(*_root);
|
||||
*_root=Sprite2SpriteQue(tempb->data);
|
||||
QueDel(*_head);
|
||||
Free(*_head);
|
||||
*_head=Sprite2SpriteQue(tempb->data);
|
||||
} else
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
break;
|
||||
case GED_TRANSFORM_SEL:
|
||||
if (!SpriteQueSelCnt(*_root))
|
||||
SpriteQueSelAll(*_root);
|
||||
if (!SpriteQueSelCnt(*_head))
|
||||
SpriteQueSelAll(*_head);
|
||||
if (PopUpTransform(r)) {
|
||||
SpriteTransform(r,*_root);
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteTransform(r,*_head);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
}
|
||||
if (!SpriteQueSelCnt(*_root,FALSE))
|
||||
SpriteQueSelAll(*_root,FALSE);
|
||||
if (!SpriteQueSelCnt(*_head,FALSE))
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case GED_SHIFT_SUB_ORIGIN:
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num);
|
||||
insert_pt=SpriteSetSettings(,*_head,*_cur_elem_num);
|
||||
tempg=CAlloc(SpriteElemQuedBaseSize(SPT_SHIFT));
|
||||
tempg->type=SPT_SHIFT;
|
||||
tempg->p.x1=0;
|
||||
@@ -1186,7 +1186,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
1<<MSG_IP_L_UP+1<<MSG_IP_MOVE);
|
||||
tempg->p.x1=a1-xx;
|
||||
tempg->p.y1=a2-yy;
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
*_cur_elem_num+=1;
|
||||
break;
|
||||
@@ -1197,36 +1197,36 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
"'Insert shift sub-origin' after picking the\n"
|
||||
"element to insert before. Or,\n"
|
||||
"use 'shift points'.\n");
|
||||
insert_pt=SpriteSetSettings(,*_root,*_cur_elem_num);
|
||||
insert_pt=SpriteSetSettings(,*_head,*_cur_elem_num);
|
||||
unlock=DocLock(sys_clipboard_doc);
|
||||
doc_e2=sys_clipboard_doc->root.next;
|
||||
doc_e2=sys_clipboard_doc->head.next;
|
||||
while (doc_e2!=sys_clipboard_doc) {
|
||||
if (doc_e2->type_u8==DOCT_SPRITE) {
|
||||
root2=Sprite2SpriteQue(doc_e2->bin_data->data);
|
||||
if (root2->next!=root2) {
|
||||
tempg=root2->next;
|
||||
while (tempg!=root2) {
|
||||
head2=Sprite2SpriteQue(doc_e2->bin_data->data);
|
||||
if (head2->next!=head2) {
|
||||
tempg=head2->next;
|
||||
while (tempg!=head2) {
|
||||
*_cur_elem_num+=1;
|
||||
tempg=tempg->next;
|
||||
}
|
||||
next=root2->next;
|
||||
last=root2->last;
|
||||
next=head2->next;
|
||||
last=head2->last;
|
||||
insert_pt->last->next=next;
|
||||
next->last=insert_pt->last;
|
||||
insert_pt->last=last;
|
||||
last->next=insert_pt;
|
||||
}
|
||||
Free(root2);
|
||||
Free(head2);
|
||||
}
|
||||
doc_e2=doc_e2->next;
|
||||
}
|
||||
if (unlock)
|
||||
DocUnlock(sys_clipboard_doc);
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
break;
|
||||
case GED_TEXT_ED:
|
||||
if (SpriteEdText(_root,_cur_elem_num))
|
||||
SpriteEdUpdate(doc,doc_ce,*_root);
|
||||
if (SpriteEdText(_head,_cur_elem_num))
|
||||
SpriteEdUpdate(doc,doc_ce,*_head);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
+68
-68
@@ -6,7 +6,7 @@
|
||||
#define SPT_ED_MENU -5
|
||||
#define SPT_EXIT -6
|
||||
|
||||
I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num,
|
||||
I64 PopUpSpriteMain(CSprite **_head,I64 *_cur_elem_num,
|
||||
CDoc *_doc,CDocEntry *_doc_e)
|
||||
{
|
||||
CTask *pu_task;
|
||||
@@ -60,12 +60,12 @@ I64 PopUpSpriteMain(CSprite **_root,I64 *_cur_elem_num,
|
||||
"$$MU-UL,\"Exit Sprite\",LE=SPT_EXIT$$\n"
|
||||
"$$MU-UL,\"Abort Sprite\",LE=DOCM_CANCEL$$\n"
|
||||
"\nRight-Click to get back to this menu.");
|
||||
st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_root,_cur_elem_num);
|
||||
st=MStrPrint("SpriteSideBarTask(0x%X,0x%X,0x%X);",Fs,_head,_cur_elem_num);
|
||||
PopUp(st,NULL,&pu_task);
|
||||
Free(st);
|
||||
i=PopUpMenu(doc);
|
||||
if (TaskValidate(pu_task)) {
|
||||
*_root=SpriteSideBar2SpriteQue(DocPut(pu_task),*_root,_cur_elem_num);
|
||||
*_head=SpriteSideBar2SpriteQue(DocPut(pu_task),*_head,_cur_elem_num);
|
||||
Kill(pu_task);
|
||||
}
|
||||
Free(_doc_e->tag);
|
||||
@@ -269,7 +269,7 @@ CSprite *SMScreenBitMap(I64 eletype,CDC *dc,CDC *dc2,I64 x,I64 y,I64 a1,I64 a2,
|
||||
WinMgrSync(2,TRUE);
|
||||
|
||||
dc3=DCScreenCapture;
|
||||
img=DCExtract(dc3,Fs->pix_left+Fs->scroll_x+xx1,Fs->pix_top+Fs->scroll_y+yy1,
|
||||
img=DCExt(dc3,Fs->pix_left+Fs->scroll_x+xx1,Fs->pix_top+Fs->scroll_y+yy1,
|
||||
Fs->pix_left+Fs->scroll_x+xx2-1,Fs->pix_top+Fs->scroll_y+yy2-1);
|
||||
if (eletype==SPT_INS_TRANSPARENT_SCREEN_BITMAP)
|
||||
DCColorChg(img,bm_bkcolor);
|
||||
@@ -405,9 +405,9 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2;
|
||||
I32 *ptr;
|
||||
CD3I32 *p;
|
||||
CSprite *res,*tempg,*tempg1,root2;
|
||||
CSprite *res,*tempg,*tempg1,head2;
|
||||
|
||||
QueInit(&root2);
|
||||
QueInit(&head2);
|
||||
do {
|
||||
do {
|
||||
dc->color=color&COLORROP_NO_ROP0_MASK;
|
||||
@@ -427,7 +427,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
res->type=SPT_PT;
|
||||
res->p.x1=x2-x;
|
||||
res->p.y1=y2-y;
|
||||
QueIns(res,root2.last);
|
||||
QueIns(res,head2.last);
|
||||
x1=x2;y1=y2;
|
||||
num++;
|
||||
}
|
||||
@@ -438,7 +438,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
if (num>1) {
|
||||
res=CAlloc(SpriteElemQuedBaseSize(SPT_POLYLINE)+num*sizeof(CD2I32));
|
||||
ptr=&res->nu.u;
|
||||
tempg1=root2.next;
|
||||
tempg1=head2.next;
|
||||
for (i=0;i<num;i++) {
|
||||
tempg=tempg1->next;
|
||||
ptr[i<<1]=tempg1->p.x1;
|
||||
@@ -449,7 +449,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
res->type=SPT_POLYLINE;
|
||||
res->nu.num=num;
|
||||
} else {
|
||||
tempg1=root2.next;
|
||||
tempg1=head2.next;
|
||||
for (i=0;i<num;i++) {
|
||||
tempg=tempg1->next;
|
||||
Free(tempg1);
|
||||
@@ -465,7 +465,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
if (num>2) {
|
||||
res=CAlloc(SpriteElemQuedBaseSize(eletype)+num*sizeof(CD3I32));
|
||||
p=&res->nu.u;
|
||||
tempg1=root2.next;
|
||||
tempg1=head2.next;
|
||||
for (i=0;i<num;i++) {
|
||||
tempg=tempg1->next;
|
||||
p[i].x=tempg1->p.x1;
|
||||
@@ -476,7 +476,7 @@ CSprite *SMPolyLineFamily(I64 eletype,CDC *dc,I64 x,I64 y,I64 a1,I64 a2,
|
||||
res->type=eletype;
|
||||
res->nu.num=num;
|
||||
} else {
|
||||
tempg1=root2.next;
|
||||
tempg1=head2.next;
|
||||
for (i=0;i<num;i++) {
|
||||
tempg=tempg1->next;
|
||||
Free(tempg1);
|
||||
@@ -493,23 +493,23 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color)
|
||||
{
|
||||
I64 i,num=0,msg_code,x1=a1,y1=a2,x2=a1,y2=a2,x3,y3;
|
||||
I32 *ptr;
|
||||
CSprite *res,*tempg,*tempg1,root2;
|
||||
CSprite *res,*tempg,*tempg1,head2;
|
||||
|
||||
QueInit(&root2);
|
||||
QueInit(&head2);
|
||||
x3=a1-x; y3=a2-y;
|
||||
dc->color=color&COLORROP_NO_ROP0_MASK;
|
||||
do {
|
||||
msg_code=GetMsg(&a1,&a2,1<<MSG_IP_L_UP+1<<MSG_IP_MOVE);
|
||||
x2=a1; y2=a2;
|
||||
GrLine3(dc,x1,y1,0,x2,y2,0);
|
||||
Line(&root2,x1-x,y1-y,0,x2-x,y2-y,0,&SpritePolyPtPlot);
|
||||
Line(&head2,x1-x,y1-y,0,x2-x,y2-y,0,&SpritePolyPtPlot);
|
||||
x1=x2;y1=y2;
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
|
||||
num=0;
|
||||
res=root2.next;
|
||||
res=head2.next;
|
||||
x1=x3; y1=y3;
|
||||
while (res!=&root2) {
|
||||
while (res!=&head2) {
|
||||
tempg=res->next;
|
||||
if (res->p.x1==x1 && res->p.y1==y1) {
|
||||
QueRem(res);
|
||||
@@ -528,8 +528,8 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color)
|
||||
ptr=&res->npu.u;
|
||||
x1=x3; y1=y3;
|
||||
i=0;
|
||||
tempg1=root2.next;
|
||||
while (tempg1!=&root2) {
|
||||
tempg1=head2.next;
|
||||
while (tempg1!=&head2) {
|
||||
tempg=tempg1->next;
|
||||
BFieldOrU32(ptr,i,polypt_map[SignI64(tempg1->p.x1-x1)+1+
|
||||
3*(SignI64(tempg1->p.y1-y1)+1)]);
|
||||
@@ -544,11 +544,11 @@ CSprite *SMPolyPoint(CDC *dc,I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color)
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,CDC *dc,
|
||||
U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,CDC *dc,
|
||||
I64 x,I64 y,I64 a1,I64 a2,CColorROPU32 color,I64 *_cur_elem_num,
|
||||
I64 old_de_flags)
|
||||
{
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num);
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num);
|
||||
I64 msg_code,x1,y1;
|
||||
U8 *st;
|
||||
doc_ce->de_flags|=DOCEF_DONT_DRAW;
|
||||
@@ -573,13 +573,13 @@ U0 SMTextFamily(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,CDC *dc,
|
||||
tempg->ps.y1=y1-y;
|
||||
StrCpy(tempg->ps.st,st);
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
*_cur_elem_num+=1;
|
||||
}
|
||||
Free(st);
|
||||
}
|
||||
|
||||
I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
CDC *dc,I64 xx,I64 yy,I64 a1,I64 a2,CColorROPU32 bm_bkcolor,
|
||||
Bool sel,I64 xx1=0,I64 yy1=0,I64 xx2=0,I64 yy2=0,I64 *_cur_elem_num)
|
||||
{
|
||||
@@ -587,7 +587,7 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
CSprite *tempg,*tempg1,*insert_pt;
|
||||
CDC *img;
|
||||
|
||||
insert_pt=SpriteSetSettings(,root,*_cur_elem_num,xx,yy,,,&x,&y);
|
||||
insert_pt=SpriteSetSettings(,head,*_cur_elem_num,xx,yy,,,&x,&y);
|
||||
x+=xx; y+=yy;
|
||||
|
||||
if (sel) {
|
||||
@@ -627,15 +627,15 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
img->color=bm_bkcolor;
|
||||
GrRect(img,0,0,tempg->pwhu.width,tempg->pwhu.height);
|
||||
tempg1=insert_pt;
|
||||
if (tempg1==root || tempg1->type!=SPT_BITMAP) {
|
||||
SpriteSetSettings(img,root,0,-(xx1-x),-(yy1-y));
|
||||
if (tempg1==head || tempg1->type!=SPT_BITMAP) {
|
||||
SpriteSetSettings(img,head,0,-(xx1-x),-(yy1-y));
|
||||
x=xx; y=yy;
|
||||
Sprite3(img,-(xx1-x),-(yy1-y),0,doc_ce->bin_data->data);
|
||||
QueDel(root);
|
||||
insert_pt=root->next=root->last=root;
|
||||
QueDel(head);
|
||||
insert_pt=head->next=head->last=head;
|
||||
*_cur_elem_num=1;
|
||||
} else {
|
||||
SpriteSetSettings(img,root,*_cur_elem_num,-(xx1-x),-(yy1-y));
|
||||
SpriteSetSettings(img,head,*_cur_elem_num,-(xx1-x),-(yy1-y));
|
||||
Sprite3(img,-(xx1-x),-(yy1-y),0,&tempg1->start,TRUE);
|
||||
insert_pt=tempg1->next;
|
||||
QueRem(tempg1);
|
||||
@@ -660,20 +660,20 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
}
|
||||
QueIns(tempg,insert_pt->last);
|
||||
DCDel(img);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
return i;
|
||||
}
|
||||
|
||||
U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num)
|
||||
U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num)
|
||||
{
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num),
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num),
|
||||
*tempg1=insert_pt;
|
||||
CD3I32 *p;
|
||||
I64 i,size,x1,y1,z1;
|
||||
I32 *mesh,*old_mesh;
|
||||
if (tempg1!=root && tempg1->type==SPT_MESH)
|
||||
if (tempg1!=head && tempg1->type==SPT_MESH)
|
||||
old_mesh=&tempg1->mu.vertex_cnt;
|
||||
else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
else if (tempg1!=head && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
x1=tempg1->pmu.x;
|
||||
y1=tempg1->pmu.y;
|
||||
z1=tempg1->pmu.z;
|
||||
@@ -692,12 +692,12 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num)
|
||||
MemCpy(&tempg->mu.vertex_cnt,mesh,size);
|
||||
Free(mesh);
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
if (old_mesh) {
|
||||
insert_pt=tempg;
|
||||
QueRem(tempg1);
|
||||
Free(tempg1);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
} else
|
||||
*_cur_elem_num+=1;
|
||||
} else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
@@ -713,15 +713,15 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,I64 *_cur_elem_num)
|
||||
}
|
||||
}
|
||||
|
||||
U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
I64 x,I64 y,I64 a1,I64 a2,I64 *_cur_elem_num)
|
||||
{
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,root,*_cur_elem_num),
|
||||
CSprite *tempg,*insert_pt=SpriteSetSettings(,head,*_cur_elem_num),
|
||||
*tempg1=insert_pt;
|
||||
CD3I32 *p;
|
||||
I64 i,size,z,x1,y1,z1;
|
||||
I32 *mesh,*old_mesh;
|
||||
if (tempg1!=root && tempg1->type==SPT_MESH) {
|
||||
if (tempg1!=head && tempg1->type==SPT_MESH) {
|
||||
z=0;
|
||||
x1=-(a1-x);
|
||||
y1=-(a2-y);
|
||||
@@ -733,7 +733,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
p->z+=z1;
|
||||
}
|
||||
old_mesh=&tempg1->mu.vertex_cnt;
|
||||
} else if (tempg1!=root && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
} else if (tempg1!=head && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
z=-tempg1->pmu.z;
|
||||
x1=tempg1->pmu.x-(a1-x);
|
||||
y1=tempg1->pmu.y-(a2-y);
|
||||
@@ -758,12 +758,12 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *root,
|
||||
tempg->pmu.y=a2-y;
|
||||
tempg->pmu.z=-z;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
if (old_mesh) {
|
||||
insert_pt=tempg;
|
||||
QueRem(tempg1);
|
||||
Free(tempg1);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
} else
|
||||
*_cur_elem_num+=1;
|
||||
} else if (old_mesh && tempg1->type==SPT_SHIFTABLE_MESH) {
|
||||
@@ -813,7 +813,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
cur_elem_num,old_border_src=Fs->border_src,old_title_src=Fs->title_src,
|
||||
old_de_flags=doc_ce->de_flags;
|
||||
CColorROPU32 bm_bkcolor,color;
|
||||
CSprite *root,*tempg,*insert_pt;
|
||||
CSprite *head,*tempg,*insert_pt;
|
||||
CDC *dc=DCAlias(,Fs),*dc2=DCAlias(,sys_winmgr_task),*dc3;
|
||||
U8 *old_task_title=StrNew(Fs->task_title);
|
||||
|
||||
@@ -821,13 +821,13 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
AutoComplete;
|
||||
WinMgrSync(2,TRUE);
|
||||
dc2->flags|=DCF_ON_TOP;
|
||||
root=Sprite2SpriteQue(doc_ce->bin_data->data);
|
||||
cur_elem_num=QueCnt(root);
|
||||
head=Sprite2SpriteQue(doc_ce->bin_data->data);
|
||||
cur_elem_num=QueCnt(head);
|
||||
xx=(doc_ce->x+doc_ce->max_col-doc->line_start_col)*FONT_WIDTH;
|
||||
yy=(doc_ce->y-doc->top_line_num)*FONT_HEIGHT;
|
||||
|
||||
while (TRUE) {
|
||||
insert_pt=SpriteSetSettings(dc,root,cur_elem_num,xx,yy,
|
||||
insert_pt=SpriteSetSettings(dc,head,cur_elem_num,xx,yy,
|
||||
&color,&width,&x,&y);
|
||||
x+=xx; y+=yy;
|
||||
DCFill;
|
||||
@@ -841,13 +841,13 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
Fs->title_src =old_title_src;
|
||||
|
||||
xx-=StrLen(doc_ce->tag)*FONT_WIDTH;
|
||||
eletype=PopUpSpriteMain(&root,&cur_elem_num,doc,doc_ce);
|
||||
eletype=PopUpSpriteMain(&head,&cur_elem_num,doc,doc_ce);
|
||||
xx+=StrLen(doc_ce->tag)*FONT_WIDTH;
|
||||
insert_pt=SpriteSetSettings(dc,root,cur_elem_num,x,y,
|
||||
insert_pt=SpriteSetSettings(dc,head,cur_elem_num,x,y,
|
||||
&color,&width,&x,&y);
|
||||
x+=xx; y+=yy;
|
||||
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
switch (eletype) {
|
||||
case SPT_FLOOD_FILL:
|
||||
case SPT_FLOOD_FILL_NOT:
|
||||
@@ -877,7 +877,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg->type=SPT_COLOR;
|
||||
tempg->c.color=color;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
}
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
@@ -892,14 +892,14 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg->type=SPT_DITHER_COLOR;
|
||||
tempg->d.dither_color=color.c0.color|color.c1.color<<8;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
}
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
eletype=SPT_MENU;
|
||||
break;
|
||||
case SPT_ED_MENU:
|
||||
switch (SpriteEd(doc,doc_ce,x,y,&root,&cur_elem_num)) {
|
||||
switch (SpriteEd(doc,doc_ce,x,y,&head,&cur_elem_num)) {
|
||||
case GE_ABORT: eletype=DOCM_CANCEL; break;
|
||||
case GE_EXIT: eletype=SPT_EXIT; break;
|
||||
case GE_CONT: eletype=SPT_MENU; break;
|
||||
@@ -907,7 +907,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
break;
|
||||
case SPT_MESH:
|
||||
doc_ce->de_flags|=DOCEF_DONT_DRAW;
|
||||
SMMesh(doc,doc_ce,root,&cur_elem_num);
|
||||
SMMesh(doc,doc_ce,head,&cur_elem_num);
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
eletype=SPT_MENU;
|
||||
break;
|
||||
@@ -928,7 +928,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
"shift the mesh origin point in the sprite edit menu.\n")) {
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
a1=x; a2=y;
|
||||
SMShiftableMesh(doc,doc_ce,root,x,y,a1,a2,&cur_elem_num);
|
||||
SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num);
|
||||
eletype=SPT_MENU;
|
||||
} else
|
||||
PopUpOk("Select Origin.\n");
|
||||
@@ -948,7 +948,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
eletype=SPT_MENU;
|
||||
else {
|
||||
bm_bkcolor=i;
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
SpriteExtents(doc_ce->bin_data->data,&xx1,&xx2,&yy1,&yy2);
|
||||
if (!(xx1<=xx2 && yy1<=yy2))
|
||||
xx1=xx2=yy1=yy2=0;
|
||||
@@ -956,7 +956,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
xx1+=xx; yy1+=yy;
|
||||
xx2+=xx; yy2+=yy;
|
||||
if (SMBitMap(eletype,doc,doc_ce,root,dc,xx,yy,a1,a2,bm_bkcolor,
|
||||
if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor,
|
||||
FALSE,xx1,yy1,xx2,yy2,&cur_elem_num)==GE_EXIT) {
|
||||
res=GE_EXIT;
|
||||
goto ei_done;
|
||||
@@ -988,7 +988,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg->type=SPT_WIDTH;
|
||||
tempg->w.width=width;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
}
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
@@ -1002,7 +1002,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
else
|
||||
tempg->type=SPT_TRANSFORM_OFF;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
eletype=SPT_MENU;
|
||||
break;
|
||||
@@ -1016,14 +1016,14 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
case SPT_TEXT:
|
||||
case SPT_TEXT_BOX:
|
||||
case SPT_TEXT_DIAMOND:
|
||||
SMTextFamily(eletype,doc,doc_ce,root,dc,xx,yy,a1,a2,
|
||||
SMTextFamily(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,
|
||||
color,&cur_elem_num,old_de_flags);
|
||||
eletype=SPT_MENU;
|
||||
break;
|
||||
}
|
||||
|
||||
if (eletype!=SPT_MENU) {
|
||||
insert_pt=SpriteSetSettings(dc,root,cur_elem_num,xx,yy,
|
||||
insert_pt=SpriteSetSettings(dc,head,cur_elem_num,xx,yy,
|
||||
&color,&width,&x,&y);
|
||||
x+=xx; y+=yy;
|
||||
SpriteScreenInit(dc,x,y);
|
||||
@@ -1051,7 +1051,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg->type=SPT_COLOR;
|
||||
tempg->c.color=color;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
break;
|
||||
case 't': //Set to transparent color
|
||||
@@ -1059,7 +1059,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg->type=SPT_COLOR;
|
||||
tempg->c.color=TRANSPARENT;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
break;
|
||||
}
|
||||
@@ -1069,7 +1069,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
tempg=CAlloc(SpriteElemQuedBaseSize(SPT_PLANAR_SYMMETRY));
|
||||
tempg->type=SPT_PLANAR_SYMMETRY;
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
eletype=SPT_MENU;
|
||||
} else
|
||||
@@ -1127,12 +1127,12 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
end:
|
||||
if (tempg) {
|
||||
QueIns(tempg,insert_pt->last);
|
||||
SpriteEdUpdate(doc,doc_ce,root);
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
cur_elem_num++;
|
||||
}
|
||||
break;
|
||||
case SPT_BITMAP:
|
||||
if (SMBitMap(eletype,doc,doc_ce,root,dc,xx,yy,a1,a2,bm_bkcolor,
|
||||
if (SMBitMap(eletype,doc,doc_ce,head,dc,xx,yy,a1,a2,bm_bkcolor,
|
||||
TRUE,,,,,&cur_elem_num)==GE_EXIT) {
|
||||
res=GE_EXIT;
|
||||
goto ei_done;
|
||||
@@ -1143,7 +1143,7 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
case SPT_SHIFTABLE_MESH:
|
||||
GetMsg(NULL,NULL,1<<MSG_IP_L_UP);
|
||||
doc_ce->de_flags|=DOCEF_DONT_DRAW;
|
||||
SMShiftableMesh(doc,doc_ce,root,x,y,a1,a2,&cur_elem_num);
|
||||
SMShiftableMesh(doc,doc_ce,head,x,y,a1,a2,&cur_elem_num);
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
eletype=SPT_MENU;
|
||||
break;
|
||||
@@ -1162,8 +1162,8 @@ ei_done:
|
||||
Free(old_task_title);
|
||||
Fs->border_src=old_border_src;
|
||||
Fs->title_src =old_title_src;
|
||||
QueDel(root);
|
||||
Free(root);
|
||||
QueDel(head);
|
||||
Free(head);
|
||||
return res;
|
||||
}
|
||||
|
||||
@@ -1182,7 +1182,7 @@ U0 EdSpriteIns(CDoc *doc)
|
||||
tempb->data=CAlloc(tempb->size,doc->mem_task);
|
||||
tempb->num=doc->cur_bin_num++;
|
||||
tempb->use_cnt=1;
|
||||
QueIns(tempb,doc->bin_root.last);
|
||||
QueIns(tempb,doc->bin_head.last);
|
||||
doc_e=DocPrint(doc,"%s",st);
|
||||
doc_e->bin_data=tempb;
|
||||
Free(st);
|
||||
|
||||
+113
-112
@@ -44,8 +44,8 @@ class CMeshFrame
|
||||
I32 *depth_buf;
|
||||
I64 *w2s,*s2w; //Screen-to-world and world-to-screen transform matrices.
|
||||
I64 vertex_cnt,tri_cnt; //Set by MeshSize
|
||||
CMeshEdVertex vertex_root,*cur_vertex,*chain_pred;
|
||||
CMeshEdTri tri_root,*cur_tri;
|
||||
CMeshEdVertex vertex_head,*cur_vertex,*chain_pred;
|
||||
CMeshEdTri tri_head,*cur_tri;
|
||||
I64 x1,y1,x2,y2,cur_snap;
|
||||
};
|
||||
|
||||
@@ -55,7 +55,7 @@ CMeshEdVertex *MeshVertexNew(CMeshFrame *e,I64 x,I64 y,I64 z)
|
||||
tempv->p.x=x;
|
||||
tempv->p.y=y;
|
||||
tempv->p.z=z;
|
||||
QueIns(tempv,e->vertex_root.last);
|
||||
QueIns(tempv,e->vertex_head.last);
|
||||
return tempv;
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@ CMeshEdTri *MeshTriNew(CMeshFrame *e,CColorROPU32 color,
|
||||
tempt->t[0]=v1;
|
||||
tempt->t[1]=v2;
|
||||
tempt->t[2]=v3;
|
||||
QueIns(tempt,e->tri_root.last);
|
||||
QueIns(tempt,e->tri_head.last);
|
||||
return tempt;
|
||||
}
|
||||
|
||||
CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y)
|
||||
{//Screen coordinates
|
||||
CMeshEdVertex *res=NULL,*tempv=e->vertex_root.next;
|
||||
CMeshEdVertex *res=NULL,*tempv=e->vertex_head.next;
|
||||
I64 dd,dz,best_dd=MAX_I64,best_dz=MAX_I64;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (!(tempv->flags&VF_IGNORE)) {
|
||||
dd=SqrI64(x-tempv->pt.x)+SqrI64(y-tempv->pt.y);
|
||||
dz=AbsI64(e->ip_z-tempv->p.z);
|
||||
@@ -94,8 +94,8 @@ CMeshEdVertex *MeshVertexFindScrPt(CMeshFrame *e,I64 x,I64 y)
|
||||
|
||||
CMeshEdVertex *MeshVertexFindNum(CMeshFrame *haystack_e,I64 needle_num)
|
||||
{
|
||||
CMeshEdVertex *tempv=haystack_e->vertex_root.next;
|
||||
while (tempv!=&haystack_e->vertex_root) {
|
||||
CMeshEdVertex *tempv=haystack_e->vertex_head.next;
|
||||
while (tempv!=&haystack_e->vertex_head) {
|
||||
if (tempv->num==needle_num)
|
||||
return tempv;
|
||||
tempv=tempv->next;
|
||||
@@ -118,8 +118,8 @@ U0 MeshVertexDel(CMeshFrame *e,CMeshEdVertex *tempv)
|
||||
I64 i;
|
||||
CMeshEdTri *tempt,*tempt1;
|
||||
if (tempv) {
|
||||
tempt=e->tri_root.next;
|
||||
while (tempt!=&e->tri_root) {
|
||||
tempt=e->tri_head.next;
|
||||
while (tempt!=&e->tri_head) {
|
||||
tempt1=tempt->next;
|
||||
for (i=0;i<3;i++)
|
||||
if (tempt->t[i]==tempv)
|
||||
@@ -140,7 +140,7 @@ U0 MeshVertexDel(CMeshFrame *e,CMeshEdVertex *tempv)
|
||||
U0 MeshFence(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *tempv,*tempv1,*tempv_last=NULL,*tempv1_last=NULL,
|
||||
*start=e->chain_pred->next,*end=e->vertex_root.last;
|
||||
*start=e->chain_pred->next,*end=e->vertex_head.last;
|
||||
tempv=start;
|
||||
while (TRUE) {
|
||||
tempv1=MeshVertexNew(e,tempv->p.x,tempv->p.y,tempv->p.z+e->thickness);
|
||||
@@ -179,16 +179,16 @@ U0 MeshPolygon(CMeshFrame *e,CMeshEdVertex *start,CMeshEdVertex *end,Bool rev)
|
||||
|
||||
U0 MeshPrism(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *start=e->chain_pred->next,*end=e->vertex_root.last;
|
||||
CMeshEdVertex *start=e->chain_pred->next,*end=e->vertex_head.last;
|
||||
MeshFence(e);
|
||||
MeshPolygon(e,start,end,FALSE);
|
||||
MeshPolygon(e,end->next,e->vertex_root.last,TRUE);
|
||||
MeshPolygon(e,end->next,e->vertex_head.last,TRUE);
|
||||
}
|
||||
|
||||
U0 MeshVertexSelAll(CMeshFrame *e,Bool val)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (val)
|
||||
tempv->flags|=VF_SEL;
|
||||
else
|
||||
@@ -199,8 +199,8 @@ U0 MeshVertexSelAll(CMeshFrame *e,Bool val)
|
||||
|
||||
U0 MeshTriSelAll(CMeshFrame *e,Bool val)
|
||||
{
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
while (tempt!=&e->tri_root) {
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (val)
|
||||
tempt->flags|=TF_SEL;
|
||||
else
|
||||
@@ -211,8 +211,8 @@ U0 MeshTriSelAll(CMeshFrame *e,Bool val)
|
||||
|
||||
U0 MeshVertexIgnoreSet(CMeshFrame *e,Bool val)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
tempv->flags&=~VF_IGNORE;
|
||||
if (tempv->flags&VF_SEL && val)
|
||||
tempv->flags|=VF_IGNORE;
|
||||
@@ -222,8 +222,8 @@ U0 MeshVertexIgnoreSet(CMeshFrame *e,Bool val)
|
||||
|
||||
U0 MeshP0Capture(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
MemCpy(&tempv->p0,&tempv->p,sizeof(CD3I32));
|
||||
tempv=tempv->next;
|
||||
}
|
||||
@@ -231,8 +231,8 @@ U0 MeshP0Capture(CMeshFrame *e)
|
||||
|
||||
U0 MeshP0Offset(CMeshFrame *e,I64 dx,I64 dy,I64 dz)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL) {
|
||||
tempv->p.x=tempv->p0.x+dx;
|
||||
tempv->p.y=tempv->p0.y+dy;
|
||||
@@ -248,10 +248,10 @@ U0 MeshP0Offset(CMeshFrame *e,I64 dx,I64 dy,I64 dz)
|
||||
|
||||
U0 MeshVertexSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
if (x1>x2) SwapI64(&x1,&x2);
|
||||
if (y1>y2) SwapI64(&y1,&y2);
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (x1<=tempv->pt.x<=x2 &&
|
||||
y1<=tempv->pt.y<=y2) {
|
||||
if (sel_mode==SEL_MESH_AND)
|
||||
@@ -266,10 +266,10 @@ U0 MeshVertexSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2)
|
||||
|
||||
U0 MeshTriSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2)
|
||||
{
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
if (x1>x2) SwapI64(&x1,&x2);
|
||||
if (y1>y2) SwapI64(&y1,&y2);
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (x1<=tempt->t[0]->pt.x<=x2 &&
|
||||
y1<=tempt->t[0]->pt.y<=y2 &&
|
||||
x1<=tempt->t[1]->pt.x<=x2 &&
|
||||
@@ -300,14 +300,14 @@ U0 MeshTriSelRect(CMeshFrame *e,I64 sel_mode,I64 x1,I64 x2,I64 y1,I64 y2)
|
||||
I64 MeshSelCnt(CMeshFrame *e)
|
||||
{
|
||||
I64 res=0;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL)
|
||||
res++;
|
||||
tempv=tempv->next;
|
||||
}
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (tempt->flags&TF_SEL)
|
||||
res++;
|
||||
tempt=tempt->next;
|
||||
@@ -318,13 +318,13 @@ I64 MeshSelCnt(CMeshFrame *e)
|
||||
U0 MeshSwapAxes(CMeshFrame *e,I64 o1,I64 o2)
|
||||
{
|
||||
Bool unsel;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
if (!MeshSelCnt(e)) {
|
||||
MeshVertexSelAll(e,TRUE);
|
||||
unsel=TRUE;
|
||||
} else
|
||||
unsel=FALSE;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL)
|
||||
SwapU32((&tempv->p)(U8 *)+o1,(&tempv->p)(U8 *)+o2);
|
||||
tempv=tempv->next;
|
||||
@@ -336,13 +336,13 @@ U0 MeshSwapAxes(CMeshFrame *e,I64 o1,I64 o2)
|
||||
U0 MeshInvertAxis(CMeshFrame *e,I64 o)
|
||||
{
|
||||
Bool unsel;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
if (!MeshSelCnt(e)) {
|
||||
MeshVertexSelAll(e,TRUE);
|
||||
unsel=TRUE;
|
||||
} else
|
||||
unsel=FALSE;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL)
|
||||
*((&tempv->p)(U8 *)+o)(I32 *)=-*((&tempv->p)(U8 *)+o)(I32 *);
|
||||
tempv=tempv->next;
|
||||
@@ -355,14 +355,14 @@ U0 MeshTransformSel(CMeshFrame *e)
|
||||
{
|
||||
Bool unsel;
|
||||
I64 r[16],x,y,z;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
if (PopUpTransform(r)) {
|
||||
if (!MeshSelCnt(e)) {
|
||||
MeshVertexSelAll(e,TRUE);
|
||||
unsel=TRUE;
|
||||
} else
|
||||
unsel=FALSE;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL) {
|
||||
x=tempv->p.x; y=tempv->p.y; z=tempv->p.z;
|
||||
Mat4x4MulXYZ(r,&x,&y,&z);
|
||||
@@ -378,13 +378,13 @@ U0 MeshTransformSel(CMeshFrame *e)
|
||||
U0 MeshColorTris(CMeshFrame *e)
|
||||
{
|
||||
Bool unsel;
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
if (!MeshSelCnt(e)) {
|
||||
MeshTriSelAll(e,TRUE);
|
||||
unsel=TRUE;
|
||||
} else
|
||||
unsel=FALSE;
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (tempt->flags & TF_SEL)
|
||||
tempt->mt.color=e->cur_color;
|
||||
tempt=tempt->next;
|
||||
@@ -396,13 +396,13 @@ U0 MeshColorTris(CMeshFrame *e)
|
||||
U0 MeshRevTris(CMeshFrame *e)
|
||||
{
|
||||
Bool unsel;
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
if (!MeshSelCnt(e)) {
|
||||
MeshTriSelAll(e,TRUE);
|
||||
unsel=TRUE;
|
||||
} else
|
||||
unsel=FALSE;
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (tempt->flags & TF_SEL)
|
||||
SwapI64(&tempt->t[1],&tempt->t[2]);
|
||||
tempt=tempt->next;
|
||||
@@ -451,7 +451,7 @@ U0 MPDrawIt(CMeshFrame *e)
|
||||
//Makes a copy of e->dc so we can change dc->color member and stuff.
|
||||
CDC *dc=DCAlias(e->dc,e->dc->win_task);
|
||||
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
I64 i,*old_r=dc->r;
|
||||
|
||||
//$LK,"DCAlias",A="MN:DCAlias"$() allocs a new identity rotation matrix.
|
||||
@@ -493,7 +493,7 @@ U0 MPDrawIt(CMeshFrame *e)
|
||||
GrLine3(dc,0,0,-500,0,0,0);
|
||||
}
|
||||
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (tempt->cpu_num==Gs->num) {
|
||||
if (tempt->flags & TF_SEL) {
|
||||
if (Blink)
|
||||
@@ -588,33 +588,33 @@ U0 MeshCursorW(CMeshFrame *e,CTask *task,I64 *_x,I64 *_y,I64 *_z)
|
||||
*_x=x; *_y=y; *_z=z;
|
||||
}
|
||||
|
||||
CMeshEdVertex sys_clipboard_vertex_root;
|
||||
CMeshEdTri sys_clipboard_tri_root;
|
||||
CMeshEdVertex sys_clipboard_vertex_head;
|
||||
CMeshEdTri sys_clipboard_tri_head;
|
||||
|
||||
U0 MeshClipboardInit()
|
||||
{
|
||||
QueInit(&sys_clipboard_vertex_root);
|
||||
QueInit(&sys_clipboard_tri_root);
|
||||
QueInit(&sys_clipboard_vertex_head);
|
||||
QueInit(&sys_clipboard_tri_head);
|
||||
}
|
||||
|
||||
U0 MeshClipboardRst()
|
||||
{
|
||||
QueDel(&sys_clipboard_vertex_root,TRUE);
|
||||
QueDel(&sys_clipboard_tri_root,TRUE);
|
||||
QueDel(&sys_clipboard_vertex_head,TRUE);
|
||||
QueDel(&sys_clipboard_tri_head,TRUE);
|
||||
MeshClipboardInit;
|
||||
}
|
||||
|
||||
U0 MeshClipboardCopy(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next,*tempv2;
|
||||
CMeshEdTri *tempt=e->tri_root.next,*tempt2;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next,*tempv2;
|
||||
CMeshEdTri *tempt=e->tri_head.next,*tempt2;
|
||||
|
||||
MeshClipboardRst;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
if (tempv->flags&VF_SEL) {
|
||||
tempv->copy=tempv2=ACAlloc(sizeof(CMeshEdVertex));
|
||||
MemCpy(&tempv2->p,&tempv->p,sizeof(CD3I32));
|
||||
QueIns(tempv2,sys_clipboard_vertex_root.last);
|
||||
QueIns(tempv2,sys_clipboard_vertex_head.last);
|
||||
tempv->flags|=VF_COPIED;
|
||||
tempv->flags&=~VF_SEL;
|
||||
} else {
|
||||
@@ -623,7 +623,7 @@ U0 MeshClipboardCopy(CMeshFrame *e)
|
||||
}
|
||||
tempv=tempv->next;
|
||||
}
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
if (tempt->flags&TF_SEL &&
|
||||
tempt->t[0]->copy && tempt->t[1]->copy && tempt->t[2]->copy) {
|
||||
tempt2=ACAlloc(sizeof(CMeshEdTri));
|
||||
@@ -631,7 +631,7 @@ U0 MeshClipboardCopy(CMeshFrame *e)
|
||||
tempt2->t[1]=tempt->t[1]->copy;
|
||||
tempt2->t[2]=tempt->t[2]->copy;
|
||||
tempt2->mt.color=tempt->mt.color;
|
||||
QueIns(tempt2,sys_clipboard_tri_root.last);
|
||||
QueIns(tempt2,sys_clipboard_tri_head.last);
|
||||
tempt->flags|=TF_COPIED;
|
||||
tempt->flags&=~TF_SEL;
|
||||
} else
|
||||
@@ -642,16 +642,16 @@ U0 MeshClipboardCopy(CMeshFrame *e)
|
||||
|
||||
U0 MeshClipboardCut(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *tempv=e->vertex_root.next,*tempv1;
|
||||
CMeshEdTri *tempt=e->tri_root.next,*tempt1;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next,*tempv1;
|
||||
CMeshEdTri *tempt=e->tri_head.next,*tempt1;
|
||||
MeshClipboardCopy(e);
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
tempt1=tempt->next;
|
||||
if (tempt->flags&TF_COPIED)
|
||||
MeshTriDel(e,tempt);
|
||||
tempt=tempt1;
|
||||
}
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
tempv1=tempv->next;
|
||||
if (tempv->flags&VF_COPIED)
|
||||
MeshVertexDel(e,tempv);
|
||||
@@ -661,15 +661,15 @@ U0 MeshClipboardCut(CMeshFrame *e)
|
||||
|
||||
U0 MeshClipboardDel(CMeshFrame *e)
|
||||
{//Technically not clipboard
|
||||
CMeshEdVertex *tempv=e->vertex_root.next,*tempv1;
|
||||
CMeshEdTri *tempt=e->tri_root.next,*tempt1;
|
||||
while (tempt!=&e->tri_root) {
|
||||
CMeshEdVertex *tempv=e->vertex_head.next,*tempv1;
|
||||
CMeshEdTri *tempt=e->tri_head.next,*tempt1;
|
||||
while (tempt!=&e->tri_head) {
|
||||
tempt1=tempt->next;
|
||||
if (tempt->flags&TF_SEL)
|
||||
MeshTriDel(e,tempt);
|
||||
tempt=tempt1;
|
||||
}
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
tempv1=tempv->next;
|
||||
if (tempv->flags&VF_SEL)
|
||||
MeshVertexDel(e,tempv);
|
||||
@@ -679,20 +679,20 @@ U0 MeshClipboardDel(CMeshFrame *e)
|
||||
|
||||
U0 MeshClipboardPaste(CMeshFrame *e)
|
||||
{
|
||||
CMeshEdVertex *tempv2=sys_clipboard_vertex_root.next,*tempv;
|
||||
CMeshEdTri *tempt2=sys_clipboard_tri_root.next,*tempt;
|
||||
CMeshEdVertex *tempv2=sys_clipboard_vertex_head.next,*tempv;
|
||||
CMeshEdTri *tempt2=sys_clipboard_tri_head.next,*tempt;
|
||||
|
||||
MeshVertexSelAll(e,FALSE);
|
||||
MeshTriSelAll(e,FALSE);
|
||||
while (tempv2!=&sys_clipboard_vertex_root) {
|
||||
while (tempv2!=&sys_clipboard_vertex_head) {
|
||||
tempv2->copy=tempv=CAlloc(sizeof(CMeshEdVertex));
|
||||
MemCpy(&tempv->p,&tempv2->p,sizeof(CD3I32));
|
||||
QueIns(tempv,e->vertex_root.last);
|
||||
QueIns(tempv,e->vertex_head.last);
|
||||
tempv->flags|=VF_SEL;
|
||||
tempv2=tempv2->next;
|
||||
}
|
||||
|
||||
while (tempt2!=&sys_clipboard_tri_root) {
|
||||
while (tempt2!=&sys_clipboard_tri_head) {
|
||||
tempt=MeshTriNew(e,tempt2->mt.color,tempt2->t[0]->copy,
|
||||
tempt2->t[1]->copy,tempt2->t[2]->copy);
|
||||
tempt->flags|=TF_SEL;
|
||||
@@ -741,8 +741,8 @@ U0 DrawIt(CTask *task,CDC *dc)
|
||||
|
||||
DCDepthBufAlloc(dc);
|
||||
|
||||
tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
x=tempv->p.x; y=tempv->p.y; z=tempv->p.z;
|
||||
(*dc->transform)(dc,&x,&y,&z);
|
||||
tempv->pt.x=x; tempv->pt.y=y; tempv->pt.z=z;
|
||||
@@ -755,8 +755,8 @@ U0 DrawIt(CTask *task,CDC *dc)
|
||||
for (i=0;i<mp_cnt;i++)
|
||||
JobQue(&MPDrawIt,e,i);
|
||||
|
||||
tempv=e->vertex_root.next;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
tempv=e->vertex_head.next;
|
||||
while (tempv!=&e->vertex_head) {
|
||||
x=tempv->pt.x; y=tempv->pt.y; z=tempv->pt.z;
|
||||
if (e->vertex_on) {
|
||||
if (Blink(10)) //This blinks at 10 Hz.
|
||||
@@ -823,8 +823,8 @@ U0 DrawIt(CTask *task,CDC *dc)
|
||||
U0 MeshInit(CMeshFrame *e,Bool flip_y)
|
||||
{
|
||||
MemSet(e,0,sizeof(CMeshFrame));
|
||||
e->vertex_root.next=e->vertex_root.last=&e->vertex_root;
|
||||
e->tri_root.next=e->tri_root.last=&e->tri_root;
|
||||
QueInit(&e->vertex_head);
|
||||
QueInit(&e->tri_head);
|
||||
e->ed_mode='v';
|
||||
e->grid_on=TRUE;
|
||||
e->vertex_on=TRUE;
|
||||
@@ -849,8 +849,8 @@ U0 MeshLoad(CMeshFrame *e,U8 *src)
|
||||
CColorROPU32 color;
|
||||
CMeshEdVertex *tempv,*va[3];
|
||||
|
||||
e->vertex_root.next=e->vertex_root.last=&e->vertex_root;
|
||||
e->tri_root.next=e->tri_root.last=&e->tri_root;
|
||||
QueInit(&e->vertex_head);
|
||||
QueInit(&e->tri_head);
|
||||
|
||||
e->vertex_cnt =*src(I32 *)++;
|
||||
e->tri_cnt=*src(I32 *)++;
|
||||
@@ -872,17 +872,17 @@ U0 MeshLoad(CMeshFrame *e,U8 *src)
|
||||
I64 MeshSize(CMeshFrame *e)
|
||||
{
|
||||
I64 i;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
|
||||
e->vertex_cnt=0;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
tempv->num=e->vertex_cnt++;
|
||||
tempv=tempv->next;
|
||||
}
|
||||
|
||||
e->tri_cnt=0;
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
e->tri_cnt++;
|
||||
for (i=0;i<3;i++)
|
||||
tempt->mt.nums[i]=tempt->t[i]->num;
|
||||
@@ -897,14 +897,14 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL)
|
||||
{
|
||||
I64 size=MeshSize(e);
|
||||
U8 *res=MAlloc(size),*dst=res;
|
||||
CMeshEdVertex *tempv=e->vertex_root.next;
|
||||
CMeshEdTri *tempt=e->tri_root.next;
|
||||
CMeshEdVertex *tempv=e->vertex_head.next;
|
||||
CMeshEdTri *tempt=e->tri_head.next;
|
||||
|
||||
*dst(I32 *)++=e->vertex_cnt;
|
||||
*dst(I32 *)++=e->tri_cnt;
|
||||
|
||||
e->vertex_cnt=0;
|
||||
while (tempv!=&e->vertex_root) {
|
||||
while (tempv!=&e->vertex_head) {
|
||||
MemCpy(dst,&tempv->start,offset(CMeshEdVertex.end)
|
||||
-offset(CMeshEdVertex.start));
|
||||
dst+=offset(CMeshEdVertex.end)-offset(CMeshEdVertex.start);
|
||||
@@ -912,7 +912,7 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL)
|
||||
}
|
||||
|
||||
e->tri_cnt=0;
|
||||
while (tempt!=&e->tri_root) {
|
||||
while (tempt!=&e->tri_head) {
|
||||
MemCpy(dst,&tempt->start,offset(CMeshEdTri.end)-offset(CMeshEdTri.start));
|
||||
dst+=offset(CMeshEdTri.end)-offset(CMeshEdTri.start);
|
||||
tempt=tempt->next;
|
||||
@@ -923,8 +923,8 @@ I32 *MeshSave(CMeshFrame *e,I64 *_size=NULL)
|
||||
|
||||
U0 MeshCleanUp(CMeshFrame *e)
|
||||
{
|
||||
QueDel(&e->vertex_root,TRUE);
|
||||
QueDel(&e->tri_root,TRUE);
|
||||
QueDel(&e->vertex_head,TRUE);
|
||||
QueDel(&e->tri_head,TRUE);
|
||||
Free(e->w2s);
|
||||
Free(e->s2w);
|
||||
}
|
||||
@@ -954,7 +954,7 @@ U0 MeshUpdateMenu(CMeshFrame *e)
|
||||
tempse->checked=ToBool(e->flip_y);
|
||||
}
|
||||
|
||||
I32 *SpriteMeshEd(I32 *root=NULL,I64 *_size=NULL,Bool flip_y=FALSE)
|
||||
I32 *SpriteMeshEd(I32 *head=NULL,I64 *_size=NULL,Bool flip_y=FALSE)
|
||||
{/*Fmt for mesh:
|
||||
{
|
||||
I32 vertex_cnt;
|
||||
@@ -963,7 +963,7 @@ CD3I32 vertices[];
|
||||
CMeshTri tris[];
|
||||
}
|
||||
|
||||
If root points to a mesh, it will load it.
|
||||
If head points to a mesh, it will load it.
|
||||
|
||||
Returns a newly malloced mesh or NULL.
|
||||
|
||||
@@ -1067,8 +1067,8 @@ $WW,0$*/
|
||||
Fs->horz_scroll.pos=0;
|
||||
Fs->vert_scroll.pos=0;
|
||||
MeshInit(&e,flip_y);
|
||||
if (root)
|
||||
MeshLoad(&e,root);
|
||||
if (head)
|
||||
MeshLoad(&e,head);
|
||||
FramePtrAdd("CMeshFrame",&e);
|
||||
Fs->draw_it=&DrawIt;
|
||||
MeshCurSnap(&e);
|
||||
@@ -1134,7 +1134,7 @@ me_restart:
|
||||
else
|
||||
e.closed=PopUpNoYes("Closed?\n");
|
||||
me_chain:
|
||||
e.chain_pred=e.vertex_root.last;
|
||||
e.chain_pred=e.vertex_head.last;
|
||||
case 't':
|
||||
MeshVertexSelAll(&e,FALSE);
|
||||
MeshTriSelAll(&e,FALSE);
|
||||
@@ -1416,8 +1416,9 @@ me_clipboard_cut:
|
||||
}
|
||||
break;
|
||||
case MSG_IP_R_DOWN:
|
||||
if (e.ed_mode!='M' && e.ed_mode!='n' && e.ed_mode!='f' &&
|
||||
e.ed_mode!='p' && !adjusting_z) {
|
||||
if (!adjusting_z && e.ed_mode!='M' &&
|
||||
(e.chain_pred==e.vertex_head.last ||
|
||||
e.ed_mode!='n' && e.ed_mode!='f' && e.ed_mode!='p')) {
|
||||
if (moving) {
|
||||
MeshCursorW(&e,Fs,&x,&y,&z);
|
||||
MeshP0Offset(&e,x-p0a.x,y-p0a.y,z-p0a.z);
|
||||
@@ -1434,22 +1435,7 @@ me_clipboard_cut:
|
||||
}
|
||||
break;
|
||||
case MSG_IP_R_UP:
|
||||
if (e.ed_mode=='n') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_root.last)
|
||||
MeshPolygon(&e,e.chain_pred->next,e.vertex_root.last,FALSE);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
} else if (e.ed_mode=='f') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_root.last)
|
||||
MeshFence(&e);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
} else if (e.ed_mode=='p') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_root.last)
|
||||
MeshPrism(&e);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
} else if (e.ed_mode!='M' && adjusting_z) {
|
||||
if (adjusting_z) {
|
||||
e.ip_z=RoundI64(Sign(p0b.y-ip.presnap.y)
|
||||
*Sqrt(Sqr(p0b.x-ip.presnap.x)+Sqr(p0b.y-ip.presnap.y))
|
||||
+p0b.z,e.cur_snap);
|
||||
@@ -1463,6 +1449,21 @@ me_clipboard_cut:
|
||||
p0a.z=z;
|
||||
MeshP0Capture(&e);
|
||||
}
|
||||
} else if (e.ed_mode=='n') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_head.last)
|
||||
MeshPolygon(&e,e.chain_pred->next,e.vertex_head.last,FALSE);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
} else if (e.ed_mode=='f') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_head.last)
|
||||
MeshFence(&e);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
} else if (e.ed_mode=='p') {
|
||||
if (e.chain_pred && e.chain_pred!=e.vertex_head.last)
|
||||
MeshPrism(&e);
|
||||
a1=e.ed_mode;
|
||||
goto me_chain;
|
||||
}
|
||||
break;
|
||||
case MSG_IP_MOVE:
|
||||
@@ -1492,9 +1493,9 @@ me_done:
|
||||
SettingsPop;
|
||||
MenuPop;
|
||||
if (save_and_exit)
|
||||
root=MeshSave(&e,_size);
|
||||
head=MeshSave(&e,_size);
|
||||
else
|
||||
root=NULL;
|
||||
head=NULL;
|
||||
MeshCleanUp(&e);
|
||||
FramePtrDel("CMeshFrame");
|
||||
if (old_s) {
|
||||
@@ -1502,5 +1503,5 @@ me_done:
|
||||
Free(old_s);
|
||||
} else
|
||||
ViewAnglesDel;
|
||||
return root;
|
||||
return head;
|
||||
}
|
||||
Reference in new issue
Block a user