TempleOSCDV4.13.ISO
This commit is contained in:
1 parent
b84bbff6db
commit
122df6338e
78 files changed
+3570
-2729
No files matched your search
+4
-1
@@ -114,6 +114,9 @@ public class CSpritePtMeshU8s : CSpriteBase
|
||||
U8 u[0];
|
||||
};
|
||||
|
||||
#define SPF_SEL 128
|
||||
#define SPf_SEL 7
|
||||
|
||||
#define SPT_END 0 //$LK,"CSpriteBase",A="MN:CSpriteBase"$
|
||||
#define SPT_COLOR 1 //$LK,"CSpriteColor",A="MN:CSpriteColor"$
|
||||
#define SPT_DITHER_COLOR 2 //$LK,"CSpriteDitherColor",A="MN:CSpriteDitherColor"$
|
||||
@@ -145,6 +148,7 @@ public class CSpritePtMeshU8s : CSpriteBase
|
||||
#define SPT_TEXT_BOX 28 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$
|
||||
#define SPT_TEXT_DIAMOND 29 //$LK,"CSpritePtStr",A="MN:CSpritePtStr"$
|
||||
#define SPT_NUM_TYPES 30
|
||||
#define SPG_TYPE_MASK 0x7F
|
||||
|
||||
#help_index "Graphics/Sprite;Sprites;Sprites/Binary"
|
||||
|
||||
@@ -153,7 +157,6 @@ public class CSpritePtMeshU8s : CSpriteBase
|
||||
public class CSprite
|
||||
{
|
||||
CSprite *next,*last;
|
||||
Bool sel;
|
||||
U0 start;
|
||||
union {
|
||||
U8 type;
|
||||
|
||||
+8
-24
@@ -10,10 +10,8 @@ public Bool GrPlot0(CDC *dc=gr.dc,I64 x,I64 y)
|
||||
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_RECORD_EXTENTS) {
|
||||
if (x<dc->min_x) dc->min_x=x;
|
||||
@@ -104,10 +102,8 @@ public I64 GrBlot(CDC *dc=gr.dc,I64 x,I64 y,CDC *img)
|
||||
}
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x+img->width>>1,y+img->height>>1,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_SCRN_BITMAP) {
|
||||
if (x+w1<0) w1=-x;
|
||||
@@ -671,10 +667,8 @@ public I64 GrPutChar(CDC *dc=gr.dc,I64 x,I64 y,U8 ch)
|
||||
}
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x+w2>>1,y+h2>>1,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_SCRN_BITMAP) {
|
||||
if (x+w1<0) w1=-x;
|
||||
@@ -963,10 +957,8 @@ public I64 GrRect(CDC *dc=gr.dc,I64 x,I64 y,I64 w,I64 h)
|
||||
dist=0;
|
||||
else
|
||||
dist=DistSqrI64(x+w>>1,y+h>>1,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_SCRN_BITMAP) {
|
||||
if (x+w1<0) w1=-x;
|
||||
@@ -1517,10 +1509,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL)
|
||||
!not_color && c==dc->color2) && plot) {
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_RECORD_EXTENTS) {
|
||||
if (x3<dc->min_x) dc->min_x=x3;
|
||||
@@ -1594,10 +1584,8 @@ I64 GrRayLen(CDC *dc,I64 *x1,I64 y,I64 z=0,I32 *db=NULL)
|
||||
!not_color && c==dc->color2) && plot) {
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x3,y3,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_RECORD_EXTENTS) {
|
||||
if (x3<dc->min_x) dc->min_x=x3;
|
||||
@@ -1723,10 +1711,8 @@ public I64 GrHLine(CDC *dc=gr.dc,I64 x1,I64 x2,I64 y,I64 z1=0,I64 z2=0)
|
||||
else
|
||||
dist=SqrI64(dc->cur_x-x2);
|
||||
dist+=SqrI64(y-dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_DONT_DRAW)
|
||||
goto gr_done;
|
||||
@@ -1894,10 +1880,8 @@ public I64 GrVLine(CDC *dc=gr.dc,I64 x,I64 y1,I64 y2,I64 z1=0,I64 z2=0)
|
||||
else
|
||||
dist=SqrI64(dc->cur_y-y2);
|
||||
dist+=SqrI64(x-dc->cur_x);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_DONT_DRAW)
|
||||
goto gr_done;
|
||||
|
||||
@@ -519,10 +519,8 @@ public Bool GrPlot3(CDC *dc=gr.dc,I64 x,I64 y,I64 z)
|
||||
}
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dist=DistSqrI64(x,y,dc->cur_x,dc->cur_y);
|
||||
if (dist<=dc->nearest_dist) {
|
||||
if (dist<=dc->nearest_dist)
|
||||
dc->nearest_dist=dist;
|
||||
dc->nearest_sprite_elem_num=dc->cur_sprite_elem_num;
|
||||
}
|
||||
}
|
||||
if (dc->flags & DCF_RECORD_EXTENTS) {
|
||||
if (x-w<dc->min_x) dc->min_x=x-w;
|
||||
|
||||
+7
-13
@@ -20,22 +20,17 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,
|
||||
{//Plot a sprite into a CDC.
|
||||
CSprite *tmpg=elems-offset(CSprite.start);
|
||||
I64 i,j,k,x1,y1,z1,x2,y2,
|
||||
cur_sprite_elem_num=0,*old_r,*r2,
|
||||
old_flags=dc->flags,
|
||||
old_pen_width=dc->pen_width;
|
||||
*old_r,*r2,old_flags=dc->flags,old_pen_width=dc->pen_width;
|
||||
I32 *ptr;
|
||||
CColorROPU32 old_color=dc->color;
|
||||
CDC *img;
|
||||
CD3I32 *p,*p2;
|
||||
CGrSym old_sym;
|
||||
MemCpy(&old_sym,&dc->sym,sizeof(CGrSym));
|
||||
if (dc->flags & DCF_LOCATE_NEAREST) {
|
||||
dc->nearest_sprite_elem_num=0;
|
||||
if (dc->flags & DCF_LOCATE_NEAREST)
|
||||
dc->nearest_dist=MAX_I64;
|
||||
}
|
||||
while (tmpg->type) {
|
||||
dc->cur_sprite_elem_num=cur_sprite_elem_num;
|
||||
switch (tmpg->type) {
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_COLOR:
|
||||
dc->color=dc->color&~(COLORROP_COLORS_MASK|ROPF_DITHER)|tmpg->c.color;
|
||||
break;
|
||||
@@ -237,7 +232,6 @@ public U0 Sprite3(CDC *dc=gr.dc,I64 x,I64 y,I64 z,U8 *elems,
|
||||
}
|
||||
break;
|
||||
}
|
||||
cur_sprite_elem_num++;
|
||||
if (just_one_elem) break;
|
||||
tmpg(U8 *)+=SpriteElemSize(tmpg);
|
||||
}
|
||||
@@ -346,10 +340,10 @@ public U8 *SpriteInterpolate(F64 t,U8 *elems0,U8 *elems1)
|
||||
MemCpy(res,elems1,i);
|
||||
}
|
||||
tmpgr=res-offset(CSprite.start);
|
||||
while (tmpg0->type) {
|
||||
if (tmpg0->type!=tmpg1->type)
|
||||
while (tmpg0->type&SPG_TYPE_MASK) {
|
||||
if (tmpg0->type&SPG_TYPE_MASK!=tmpg1->type&SPG_TYPE_MASK)
|
||||
throw('Graphics');
|
||||
switch (tmpg0->type) {
|
||||
switch (tmpg0->type&SPG_TYPE_MASK) {
|
||||
case SPT_ROTATED_RECT:
|
||||
tmpgr->ppa.angle=(tmpg0->ppa.angle*t0+tmpg1->ppa.angle*t1)/GR_SCALE;
|
||||
case SPT_RECT:
|
||||
|
||||
@@ -8,8 +8,8 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tmpg)
|
||||
CD3I32 *p;
|
||||
CMeshTri *tri;
|
||||
if (!doc) doc=DocPut;
|
||||
DocPrint(doc,"%Z",tmpg->type,"ST_SPRITE_ELEM_CODES");
|
||||
switch (tmpg->type) {
|
||||
DocPrint(doc,"%Z",tmpg->type&SPG_TYPE_MASK,"ST_SPRITE_ELEM_CODES");
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_COLOR:
|
||||
DocPrint(doc,"{%s}",
|
||||
Color2Str(buf1,tmpg->c.color));
|
||||
@@ -92,7 +92,8 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tmpg)
|
||||
if (i&3==3 && i+1<tmpg->nu.num)
|
||||
DocPrint(doc,"\n");
|
||||
}
|
||||
if (tmpg->type==SPT_BSPLINE2||tmpg->type==SPT_BSPLINE3)
|
||||
if (tmpg->type&SPG_TYPE_MASK==SPT_BSPLINE2||
|
||||
tmpg->type&SPG_TYPE_MASK==SPT_BSPLINE3)
|
||||
DocPrint(doc,",FALSE}");
|
||||
else
|
||||
DocPrint(doc,",TRUE}");
|
||||
@@ -186,13 +187,13 @@ U0 SpriteElem2Code(CDoc *doc,CSprite *tmpg)
|
||||
DocPrint(doc,"}");
|
||||
break;
|
||||
}
|
||||
DocPrint(doc,";\n");
|
||||
DocPrint(doc,";\n");
|
||||
}
|
||||
|
||||
public U0 Sprite2Code(CDoc *doc=NULL,U8 *elems)
|
||||
{//Sprite to text.
|
||||
CSprite *tmpg=elems-offset(CSprite.start);
|
||||
while (tmpg->type) {
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
SpriteElem2Code(doc,tmpg);
|
||||
tmpg(U8 *)+=SpriteElemSize(tmpg);
|
||||
}
|
||||
|
||||
+122
-96
@@ -9,7 +9,7 @@ CSprite *SpriteSetSettings(CDC *dc=NULL,CSprite *head,I64 elem_num,
|
||||
CColorROPU32 color=BLACK;
|
||||
if (dc) DCRst(dc);
|
||||
while (elem_num-->0 && res!=head) {
|
||||
switch (res->type) {
|
||||
switch (res->type&SPG_TYPE_MASK) {
|
||||
case SPT_COLOR:
|
||||
color=res->c.color;
|
||||
if (dc) dc->color=color;
|
||||
@@ -65,11 +65,10 @@ CSprite *Sprite2SpriteQue(U8 *elems)
|
||||
CSprite *res=CAlloc(sizeof(CSprite)),
|
||||
*tmpg=elems-offset(CSprite.start),*tmpg1;
|
||||
QueInit(res);
|
||||
while (tmpg->type) {
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
tmpg1=MAlloc(SpriteElemSize(tmpg)+offset(CSprite.start));
|
||||
s=SpriteElemSize(tmpg);
|
||||
MemCpy(&tmpg1->start,&tmpg->start,s);
|
||||
tmpg1->sel=FALSE;
|
||||
QueIns(tmpg1,res->last);
|
||||
tmpg(U8 *)+=s;
|
||||
}
|
||||
@@ -117,8 +116,8 @@ U0 SpriteSetOrigin(CSprite *head,I64 dx,I64 dy,I64 dz)
|
||||
CD3I32 *p;
|
||||
CSprite *tmpg=head->next;
|
||||
while (tmpg!=head) {
|
||||
if (tmpg->sel)
|
||||
switch (tmpg->type) {
|
||||
if (Bt(&tmpg->type,SPf_SEL))
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_ARROW:
|
||||
case SPT_LINE:
|
||||
case SPT_PLANAR_SYMMETRY:
|
||||
@@ -203,7 +202,7 @@ CSprite *SpriteTransformCircle(I64 *r,CSprite *tmpg)
|
||||
tmpg1->pwha.height=ToI64(m2)/0x10000;
|
||||
tmpg1->pwha.angle=-a1;
|
||||
|
||||
tmpg1->sel=tmpg->sel;
|
||||
tmpg1->type|=tmpg->type&SPF_SEL;
|
||||
return tmpg1;
|
||||
}
|
||||
|
||||
@@ -212,9 +211,9 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg)
|
||||
I64 x,y,z;
|
||||
F64 m1,a1,m2,a2,s,c,x_radius=tmpg->pwha.width<<16,
|
||||
y_radius=tmpg->pwha.height<<16;
|
||||
CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(tmpg->type));
|
||||
CSprite *tmpg1=CAlloc(SpriteElemQuedBaseSize(tmpg->type&SPG_TYPE_MASK));
|
||||
tmpg1->type=tmpg->type;
|
||||
if (tmpg->type==SPT_POLYGON)
|
||||
if (tmpg->type&SPG_TYPE_MASK==SPT_POLYGON)
|
||||
tmpg1->pwhas.sides=tmpg->pwhas.sides;
|
||||
|
||||
x=tmpg->pwha.x1; y=tmpg->pwha.y1; z=0;
|
||||
@@ -244,7 +243,7 @@ CSprite *SpriteTransformEllipse(I64 *r,CSprite *tmpg)
|
||||
if (tmpg1->pwha.height<1) tmpg1->pwha.height=1;
|
||||
tmpg1->pwha.angle=-a1;
|
||||
|
||||
tmpg1->sel=tmpg->sel;
|
||||
tmpg1->type|=tmpg->type&SPF_SEL;
|
||||
return tmpg1;
|
||||
}
|
||||
|
||||
@@ -286,7 +285,7 @@ CSprite *SpriteTransformRect(I64 *r,CSprite *tmpg,F64
|
||||
tmpg1->ppa.y2=tmpg1->ppa.y1+h;
|
||||
tmpg1->ppa.angle=-a1;
|
||||
|
||||
tmpg1->sel=tmpg->sel;
|
||||
tmpg1->type|=tmpg->type&SPF_SEL;
|
||||
return tmpg1;
|
||||
}
|
||||
|
||||
@@ -380,8 +379,8 @@ U0 SpriteTransform(I64 *r,CSprite *head)
|
||||
CD3I32 *p;
|
||||
CSprite *tmpg=head->next,head2,*tmpg1,*tmpg2,*tmpg3;
|
||||
while (tmpg!=head) {
|
||||
if (tmpg->sel)
|
||||
switch (tmpg->type) {
|
||||
if (Bt(&tmpg->type,SPf_SEL))
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_WIDTH:
|
||||
tmpg->w.width*=Sqrt(Mat4x4NormSqr65536(r))/65536;
|
||||
if (tmpg->w.width<0) tmpg->w.width=0;
|
||||
@@ -502,11 +501,10 @@ U0 SpriteTransform(I64 *r,CSprite *head)
|
||||
Free(tmpg1);
|
||||
tmpg1=tmpg2;
|
||||
}
|
||||
tmpg3->type=SPT_POLYPT;
|
||||
tmpg3->type=SPT_POLYPT|tmpg->type&SPF_SEL;
|
||||
tmpg3->npu.num=num;
|
||||
QueIns(tmpg3,tmpg);
|
||||
QueRem(tmpg);
|
||||
tmpg3->sel=tmpg->sel;
|
||||
Free(tmpg);
|
||||
tmpg=tmpg3;
|
||||
break;
|
||||
@@ -559,7 +557,7 @@ I64 SpriteQueSelCnt(CSprite *head,Bool val=TRUE)
|
||||
CSprite *tmpg=head->next;
|
||||
val=ToBool(val);
|
||||
while (tmpg!=head) {
|
||||
if (ToBool(tmpg->sel)==val)
|
||||
if (Bt(&tmpg->type,SPf_SEL)==val)
|
||||
res++;
|
||||
tmpg=tmpg->next;
|
||||
}
|
||||
@@ -571,7 +569,7 @@ I64 SpriteQueSelAll(CSprite *head,Bool val=TRUE)
|
||||
I64 res=0;
|
||||
CSprite *tmpg=head->next;
|
||||
while (tmpg!=head) {
|
||||
tmpg->sel=val;
|
||||
BEqu(&tmpg->type,SPf_SEL,val);
|
||||
res++;
|
||||
tmpg=tmpg->next;
|
||||
}
|
||||
@@ -590,7 +588,7 @@ CSprite *SpriteSideBar2SpriteQue(CDoc *doc,CSprite *head,I64 *_cur_elem_num)
|
||||
tmpg=SpriteSetSettings(,head,doc_e->left_exp);
|
||||
if (tmpg!=head) {
|
||||
tmpg=MAllocIdent(tmpg);
|
||||
tmpg->sel=Bt(&doc_e->type,DOCEt_SEL);
|
||||
BEqu(&tmpg->type,SPf_SEL,Bt(&doc_e->type,DOCEt_SEL));
|
||||
if (*_cur_elem_num==doc_e->left_exp) {
|
||||
*_cur_elem_num=num;
|
||||
found=TRUE;
|
||||
@@ -627,8 +625,8 @@ U0 SpriteSideBarPickNew(CDoc *doc,CSprite *head,I64 old_num)
|
||||
DocPrint(doc,"$$LTBLUE$$");
|
||||
doc_e=DocPrint(doc,"$$MU-UL,\"%$$Q\",LE=%d$$\n",st,cur_elem_num++);
|
||||
}
|
||||
BEqu(&doc_e->de_flags,DOCEf_SEL,tmpg->sel);
|
||||
BEqu(&doc_e->type,DOCEt_SEL,tmpg->sel);
|
||||
BEqu(&doc_e->de_flags,DOCEf_SEL,Bt(&tmpg->type,&SPf_SEL));
|
||||
BEqu(&doc_e->type,DOCEt_SEL,Bt(&tmpg->type,SPf_SEL));
|
||||
Free(st);
|
||||
tmpg=tmpg->next;
|
||||
}
|
||||
@@ -716,25 +714,27 @@ Bool SpriteEdText(CSprite **_head,I64 *_cur_elem_num)
|
||||
}
|
||||
|
||||
#define SPED_SEL_UNSEL_ALL 0
|
||||
#define SPED_SEL 1
|
||||
#define SPED_UNSEL 2
|
||||
#define SPED_SHIFT_PTS 3
|
||||
#define SPED_SHIFT_RECTS 4
|
||||
#define SPED_SHIFT_SEL 5
|
||||
#define SPED_TRANSFORM_SEL 6
|
||||
#define SPED_SET_ORIGIN 7
|
||||
#define SPED_SHIFT_SUB_ORIGIN 8
|
||||
#define SPED_TEXT_ED 9
|
||||
#define SPED_INS_CLIPBOARD 10
|
||||
#define SPED_MAIN_MENU 11
|
||||
#define SPED_EXIT 12
|
||||
#define SPED_SEL 2
|
||||
#define SPED_SEL_RECTS 3
|
||||
#define SPED_UNSEL 4
|
||||
#define SPED_UNSEL_RECTS 5
|
||||
#define SPED_SHIFT_PTS 6
|
||||
#define SPED_SHIFT_RECTS 7
|
||||
#define SPED_SHIFT_SEL 8
|
||||
#define SPED_TRANSFORM_SEL 9
|
||||
#define SPED_SET_ORIGIN 10
|
||||
#define SPED_SHIFT_SUB_ORIGIN 11
|
||||
#define SPED_TEXT_ED 12
|
||||
#define SPED_INS_CLIPBOARD 13
|
||||
#define SPED_MAIN_MENU 14
|
||||
#define SPED_EXIT 15
|
||||
|
||||
U0 GrInit3()
|
||||
{
|
||||
DefineLstLoad("ST_SPRITE_ED_MENU","Select/Unselect All\0"
|
||||
"Select\0Unselect\0Shift Points\0Shift Rects\0Shift Selected\0"
|
||||
"Transform Selected\0Set Origin\0Insert Shift SubOrigin\0"
|
||||
"Edit as Text\0Insert Clipboard\0Main Menu\0");
|
||||
DefineLstLoad("ST_SPRITE_ED_MENU","Select/Unselect All\0 \0Select\0"
|
||||
"Select Rects\0Unselect\0Unselect Rects\0Shift Points\0Shift Rects\0"
|
||||
"Shift Selected\0Transform Selected\0Set Origin\0"
|
||||
"Insert Shift SubOrigin\0Edit as Text\0Insert Clipboard\0Main Menu\0");
|
||||
}
|
||||
GrInit3;
|
||||
|
||||
@@ -748,7 +748,9 @@ I64 PopUpSpriteEd(CSprite **_head,I64 *_cur_elem_num)
|
||||
"$$LK+PU+CX,\"Click for Help\",A=\"FI:::/Doc/SpriteEd.DD.Z\"$$\n\n"
|
||||
"$$LTBLUE$$$$MU-UL,\"Select/Unselect All\",LE=SPED_SEL_UNSEL_ALL$$\n"
|
||||
"$$MU-UL,\"Select Elems\",LE=SPED_SEL$$\n"
|
||||
"$$MU-UL,\"Unsel Elems\",LE=SPED_UNSEL$$\n\n"
|
||||
"$$MU-UL,\"Select Elems with Rects\",LE=SPED_SEL_RECTS$$\n"
|
||||
"$$MU-UL,\"Unsel Elems\",LE=SPED_UNSEL$$\n"
|
||||
"$$MU-UL,\"Unsel Elems with Rects\",LE=SPED_UNSEL_RECTS$$\n\n"
|
||||
"$$MU-UL,\"Shift Points\",LE=SPED_SHIFT_PTS$$\n"
|
||||
"$$MU-UL,\"Shift Points with Rects\",LE=SPED_SHIFT_RECTS$$\n"
|
||||
"$$MU-UL,\"Shift Selected Elems\",LE=SPED_SHIFT_SEL$$\n"
|
||||
@@ -780,10 +782,21 @@ I64 PopUpSpriteEd(CSprite **_head,I64 *_cur_elem_num)
|
||||
class CEdSprite
|
||||
{
|
||||
CEdSprite *next,*last;
|
||||
CSprite *g;
|
||||
I32 type,num,flags,xx,yy,zz;
|
||||
I32 *x,*y,*z,*w,*h;
|
||||
};
|
||||
|
||||
CEdSprite *EdSpriteNew(I64 type,CSprite *tmpg)
|
||||
{
|
||||
CEdSprite *res=CAlloc(sizeof(CEdSprite));
|
||||
res->g=tmpg;
|
||||
if (tmpg->type&SPF_SEL)
|
||||
res->flags|=SPEDF_SEL;
|
||||
res->type=type;
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head)
|
||||
{
|
||||
I64 i,num=0;
|
||||
@@ -792,12 +805,11 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head)
|
||||
CEdSprite *tmpes;
|
||||
CSprite *tmpg=elems-offset(CSprite.start);
|
||||
QueInit(head);
|
||||
while (tmpg->type) {
|
||||
switch (tmpg->type) {
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_ELLIPSE:
|
||||
case SPT_POLYGON:
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_WIDTH_HEIGHT;
|
||||
tmpes=EdSpriteNew(SPEDT_WIDTH_HEIGHT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&tmpg->pwha.x1;
|
||||
@@ -812,8 +824,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head)
|
||||
case SPT_LINE:
|
||||
case SPT_ARROW:
|
||||
case SPT_PLANAR_SYMMETRY:
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&tmpg->pp.x2;
|
||||
@@ -829,8 +840,7 @@ U0 SpritePtQueNew(U8 *elems,I64 x,I64 y,CEdSprite *head)
|
||||
case SPT_FLOOD_FILL_NOT:
|
||||
case SPT_CIRCLE:
|
||||
pq_x1_y1:
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&tmpg->p.x1;
|
||||
@@ -845,8 +855,7 @@ pq_x1_y1:
|
||||
case SPT_POLYLINE:
|
||||
ptr=&tmpg->nu.u;
|
||||
for (i=0;i<tmpg->nu.num;i++) {
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&ptr[i<<1];
|
||||
@@ -856,8 +865,7 @@ pq_x1_y1:
|
||||
}
|
||||
break;
|
||||
case SPT_POLYPT:
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&tmpg->npu.x;
|
||||
@@ -871,8 +879,7 @@ pq_x1_y1:
|
||||
case SPT_BSPLINE3_CLOSED:
|
||||
p=&tmpg->nu.u;
|
||||
for (i=0;i<tmpg->nu.num;i++) {
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&p[i].x;
|
||||
@@ -885,8 +892,7 @@ pq_x1_y1:
|
||||
case SPT_MESH:
|
||||
break;
|
||||
case SPT_SHIFTABLE_MESH:
|
||||
tmpes=CAlloc(sizeof(CEdSprite));
|
||||
tmpes->type=SPEDT_SIMPLE_PT;
|
||||
tmpes=EdSpriteNew(SPEDT_SIMPLE_PT,tmpg);
|
||||
tmpes->xx=x;
|
||||
tmpes->yy=y;
|
||||
tmpes->x=&tmpg->pmu.x;
|
||||
@@ -952,7 +958,7 @@ U0 SpriteCtrlPtsMove(CEdSprite *head,I64 dx,I64 dy)
|
||||
}
|
||||
}
|
||||
|
||||
Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
Bool SpriteSelUnselShiftPts(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;
|
||||
@@ -968,6 +974,8 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
1<<MSG_IP_R_UP|1<<MSG_IP_L_DOWN|1<<MSG_KEY_DOWN)) {
|
||||
case MSG_IP_L_DOWN:
|
||||
switch (mode) {
|
||||
case SPED_SEL:
|
||||
case SPED_UNSEL:
|
||||
case SPED_SHIFT_PTS:
|
||||
xx=a1; yy=a2;
|
||||
best_dd=MAX_I64;
|
||||
@@ -990,9 +998,15 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
tmpes=tmpes->next;
|
||||
}
|
||||
cur_elem_num=best_es->num;
|
||||
best_es->flags|=SPEDF_SEL;
|
||||
if (mode!=SPED_UNSEL) {
|
||||
best_es->flags|=SPEDF_SEL;
|
||||
best_es->g->type|=SPF_SEL;
|
||||
} else {
|
||||
best_es->flags&=~SPEDF_SEL;
|
||||
best_es->g->type&=~SPF_SEL;
|
||||
}
|
||||
break;
|
||||
case SPED_SHIFT_RECTS:
|
||||
start:
|
||||
xx2=xx=a1; yy2=yy=a2;
|
||||
while (TRUE) {
|
||||
SpriteCtrlPtsDraw(dc,&head);
|
||||
@@ -1012,37 +1026,62 @@ Bool SpriteShiftPts(U8 *elems,I64 x,I64 y,I64 *_cur_elem_num,I64 mode)
|
||||
switch (tmpes->type) {
|
||||
case SPEDT_SIMPLE_PT:
|
||||
if (xx<=*tmpes->x+tmpes->xx<=xx2 &&
|
||||
yy<=*tmpes->y+tmpes->yy<=yy2)
|
||||
tmpes->flags|=SPEDF_SEL;
|
||||
yy<=*tmpes->y+tmpes->yy<=yy2) {
|
||||
if (mode!=SPED_UNSEL_RECTS) {
|
||||
tmpes->flags|=SPEDF_SEL;
|
||||
tmpes->g->type|=SPF_SEL;
|
||||
} else {
|
||||
tmpes->flags&=~SPEDF_SEL;
|
||||
tmpes->g->type&=~SPF_SEL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SPEDT_WIDTH_HEIGHT:
|
||||
if (xx<=*tmpes->x+*tmpes->w+tmpes->xx<=xx2 &&
|
||||
yy<=*tmpes->y+*tmpes->h+tmpes->yy<=yy2)
|
||||
tmpes->flags|=SPEDF_SEL;
|
||||
yy<=*tmpes->y+*tmpes->h+tmpes->yy<=yy2) {
|
||||
if (mode!=SPED_UNSEL_RECTS) {
|
||||
tmpes->flags|=SPEDF_SEL;
|
||||
tmpes->g->type|=SPF_SEL;
|
||||
} else {
|
||||
tmpes->flags&=~SPEDF_SEL;
|
||||
tmpes->g->type&=~SPF_SEL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
tmpes=tmpes->next;
|
||||
}
|
||||
case SPED_SEL_RECTS:
|
||||
case SPED_UNSEL_RECTS:
|
||||
break;
|
||||
case SPED_SHIFT_RECTS:
|
||||
do {
|
||||
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);
|
||||
xx=a1;yy=a2;
|
||||
break;
|
||||
end:
|
||||
}
|
||||
switch (mode) {
|
||||
case SPED_SHIFT_PTS:
|
||||
case SPED_SHIFT_RECTS:
|
||||
do {
|
||||
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);
|
||||
xx=a1;yy=a2;
|
||||
if (msg_code=ScanMsg(&a1,&a2,1<<MSG_IP_MOVE|1<<MSG_IP_L_UP)) {
|
||||
SpriteCtrlPtsMove(&head,a1-xx,a2-yy);
|
||||
xx=a1;yy=a2;
|
||||
}
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
tmpes=head.next;
|
||||
while (tmpes!=&head) {
|
||||
tmpes->flags&=~SPEDF_SEL;
|
||||
tmpes->g->type&=~SPF_SEL;
|
||||
tmpes=tmpes->next;
|
||||
}
|
||||
break;
|
||||
}
|
||||
do {
|
||||
SpriteCtrlPtsDraw(dc,&head);
|
||||
if (msg_code=ScanMsg(&a1,&a2,1<<MSG_IP_MOVE|1<<MSG_IP_L_UP)) {
|
||||
SpriteCtrlPtsMove(&head,a1-xx,a2-yy);
|
||||
xx=a1;yy=a2;
|
||||
}
|
||||
} while (msg_code!=MSG_IP_L_UP);
|
||||
tmpes=head.next;
|
||||
while (tmpes!=&head) {
|
||||
tmpes->flags&=~SPEDF_SEL;
|
||||
tmpes=tmpes->next;
|
||||
}
|
||||
break;
|
||||
case MSG_KEY_DOWN:
|
||||
gs_key:
|
||||
@@ -1054,11 +1093,11 @@ gs_key:
|
||||
goto gs_done;
|
||||
case 'p':
|
||||
case 'P':
|
||||
mode=SPED_SHIFT_PTS;
|
||||
mode&=~1;
|
||||
break;
|
||||
case 'r':
|
||||
case 'R':
|
||||
mode=SPED_SHIFT_RECTS;
|
||||
mode|=1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@@ -1084,7 +1123,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
Bool unlock;
|
||||
I64 i,r[16],msg_code,a1,a2,xx,yy,
|
||||
old_de_flags;
|
||||
CSprite *cur_elem,*head2,*next,*last,*tmpg,*insert_pt;
|
||||
CSprite *head2,*next,*last,*tmpg,*insert_pt;
|
||||
|
||||
old_de_flags=doc_ce->de_flags;
|
||||
tmpb=doc_ce->bin_data;
|
||||
@@ -1105,23 +1144,6 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
else
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case SPED_SEL:
|
||||
case SPED_UNSEL:
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
doc->cur_sprite=tmpb->data;
|
||||
do {
|
||||
doc->nearest_sprite_elem_num=0;
|
||||
msg_code=GetMsg(&a1,&a2,1<<MSG_IP_L_DOWN|1<<MSG_IP_R_UP);
|
||||
Refresh(2);
|
||||
if (msg_code==MSG_IP_L_DOWN) {
|
||||
*_cur_elem_num=doc->nearest_sprite_elem_num;
|
||||
cur_elem=SpriteSetSettings(,*_head,*_cur_elem_num);
|
||||
cur_elem->sel=ToBool(i==SPED_SEL);
|
||||
GetMsg(,,1<<MSG_IP_L_UP);
|
||||
}
|
||||
} while (msg_code!=MSG_IP_R_UP);
|
||||
doc->cur_sprite=NULL;
|
||||
break;
|
||||
case SPED_SET_ORIGIN:
|
||||
SpriteQueSelAll(*_head);
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
@@ -1146,6 +1168,10 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
if (!SpriteQueSelCnt(*_head,FALSE))
|
||||
SpriteQueSelAll(*_head,FALSE);
|
||||
break;
|
||||
case SPED_SEL:
|
||||
case SPED_SEL_RECTS:
|
||||
case SPED_UNSEL:
|
||||
case SPED_UNSEL_RECTS:
|
||||
case SPED_SHIFT_PTS:
|
||||
case SPED_SHIFT_RECTS:
|
||||
RegOneTimePopUp(ARf_CSPRITE_PTS_RECTANGLES,
|
||||
@@ -1154,7 +1180,7 @@ I64 SpriteEd(CDoc *doc,CDocEntry *doc_ce,I64 x,I64 y,
|
||||
"Press '$$GREEN$$r$$FG$$' after one rectangle\n"
|
||||
"to OR another rectangle.\n");
|
||||
doc_ce->de_flags=old_de_flags;
|
||||
if (SpriteShiftPts(tmpb->data,x,y,_cur_elem_num,i)) {
|
||||
if (SpriteSelUnselShiftPts(tmpb->data,x,y,_cur_elem_num,i)) {
|
||||
QueDel(*_head);
|
||||
Free(*_head);
|
||||
*_head=Sprite2SpriteQue(tmpb->data);
|
||||
|
||||
+15
-12
@@ -627,7 +627,7 @@ I64 SMBitMap(I64 eletype,CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
img->color=bm_bkcolor;
|
||||
GrRect(img,0,0,tmpg->pwhu.width,tmpg->pwhu.height);
|
||||
tmpg1=insert_pt;
|
||||
if (tmpg1==head || tmpg1->type!=SPT_BITMAP) {
|
||||
if (tmpg1==head || tmpg1->type&SPG_TYPE_MASK!=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);
|
||||
@@ -671,9 +671,9 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num)
|
||||
CD3I32 *p;
|
||||
I64 i,size,x1,y1,z1;
|
||||
I32 *mesh,*old_mesh;
|
||||
if (tmpg1!=head && tmpg1->type==SPT_MESH)
|
||||
if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_MESH)
|
||||
old_mesh=&tmpg1->mu.vertex_cnt;
|
||||
else if (tmpg1!=head && tmpg1->type==SPT_SHIFTABLE_MESH) {
|
||||
else if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) {
|
||||
x1=tmpg1->pmu.x;
|
||||
y1=tmpg1->pmu.y;
|
||||
z1=tmpg1->pmu.z;
|
||||
@@ -700,7 +700,7 @@ U0 SMMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,I64 *_cur_elem_num)
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
} else
|
||||
*_cur_elem_num+=1;
|
||||
} else if (old_mesh && tmpg1->type==SPT_SHIFTABLE_MESH) {
|
||||
} else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) {
|
||||
x1=tmpg1->pmu.x;
|
||||
y1=tmpg1->pmu.y;
|
||||
z1=tmpg1->pmu.z;
|
||||
@@ -721,7 +721,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
CD3I32 *p;
|
||||
I64 i,size,z,x1,y1,z1;
|
||||
I32 *mesh,*old_mesh;
|
||||
if (tmpg1!=head && tmpg1->type==SPT_MESH) {
|
||||
if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) {
|
||||
z=0;
|
||||
x1=-(a1-x);
|
||||
y1=-(a2-y);
|
||||
@@ -733,7 +733,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
p->z+=z1;
|
||||
}
|
||||
old_mesh=&tmpg1->mu.vertex_cnt;
|
||||
} else if (tmpg1!=head && tmpg1->type==SPT_SHIFTABLE_MESH) {
|
||||
} else if (tmpg1!=head && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) {
|
||||
z=-tmpg1->pmu.z;
|
||||
x1=tmpg1->pmu.x-(a1-x);
|
||||
y1=tmpg1->pmu.y-(a2-y);
|
||||
@@ -766,7 +766,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
SpriteEdUpdate(doc,doc_ce,head);
|
||||
} else
|
||||
*_cur_elem_num+=1;
|
||||
} else if (old_mesh && tmpg1->type==SPT_SHIFTABLE_MESH) {
|
||||
} else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_SHIFTABLE_MESH) {
|
||||
x1=tmpg1->pmu.x-(a1-x);
|
||||
y1=tmpg1->pmu.y-(a2-y);
|
||||
z1=tmpg1->pmu.z+z;
|
||||
@@ -776,7 +776,7 @@ U0 SMShiftableMesh(CDoc *doc,CDocEntry *doc_ce,CSprite *head,
|
||||
p->y-=y1;
|
||||
p->z-=z1;
|
||||
}
|
||||
} else if (old_mesh && tmpg1->type==SPT_MESH) {
|
||||
} else if (old_mesh && tmpg1->type&SPG_TYPE_MASK==SPT_MESH) {
|
||||
x1=-(a1-x);
|
||||
y1=-(a2-y);
|
||||
z1= z;
|
||||
@@ -901,8 +901,8 @@ I64 SpriteMainEd(CDoc *doc)
|
||||
case SPT_ED_MENU:
|
||||
switch (SpriteEd(doc,doc_ce,x,y,&head,&cur_elem_num)) {
|
||||
case SPE_ABORT: eletype=DOCM_CANCEL; break;
|
||||
case SPE_EXIT: eletype=SPT_EXIT; break;
|
||||
case SPE_CONT: eletype=SPT_MENU; break;
|
||||
case SPE_EXIT: eletype=SPT_EXIT; break;
|
||||
case SPE_CONT: eletype=SPT_MENU; break;
|
||||
}
|
||||
break;
|
||||
case SPT_MESH:
|
||||
@@ -1196,7 +1196,8 @@ U0 EdSpriteIns(CDoc *doc)
|
||||
if (SpriteMainEd(doc)==SPE_ABORT) {
|
||||
DocLock(doc);
|
||||
DocEntryDel(doc,doc_e);
|
||||
}
|
||||
} else
|
||||
SpriteSelAll(tmpb->data,FALSE);
|
||||
} else
|
||||
DocBinDel(doc,tmpb);
|
||||
if (unlock)
|
||||
@@ -1224,8 +1225,10 @@ U0 EdSpriteEd(CDoc *doc)
|
||||
Free(tmpb->data);
|
||||
tmpb->data=old_csprite;
|
||||
tmpb->size=old_size;
|
||||
} else
|
||||
} else {
|
||||
SpriteSelAll(tmpb->data,FALSE);
|
||||
Free(old_csprite);
|
||||
}
|
||||
if (unlock)
|
||||
DocUnlock(doc);
|
||||
}
|
||||
+18
-9
@@ -38,13 +38,13 @@ I64 sprite_elem_base_sizes[SPT_NUM_TYPES]={
|
||||
|
||||
I64 SpriteElemQuedBaseSize(I64 type)
|
||||
{
|
||||
return sprite_elem_base_sizes[type]+offset(CSprite.start);
|
||||
return sprite_elem_base_sizes[type&SPG_TYPE_MASK]+offset(CSprite.start);
|
||||
}
|
||||
|
||||
I64 SpriteElemSize(CSprite *tmpg)
|
||||
{
|
||||
I64 i=sprite_elem_base_sizes[tmpg->type];
|
||||
switch (tmpg->type) {
|
||||
I64 i=sprite_elem_base_sizes[tmpg->type&SPG_TYPE_MASK];
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_POLYLINE:
|
||||
i+=tmpg->nu.num*sizeof(CD2I32);
|
||||
break;
|
||||
@@ -80,7 +80,7 @@ I64 SpriteElemSize(CSprite *tmpg)
|
||||
public I64 SpriteSize(U8 *elems)
|
||||
{//Walk sprite elements and return size of sprite as binary data.
|
||||
CSprite *tmpg=elems-offset(CSprite.start),*tmpg1=tmpg;
|
||||
while (tmpg->type)
|
||||
while (tmpg->type&SPG_TYPE_MASK)
|
||||
tmpg(U8 *)+=SpriteElemSize(tmpg);
|
||||
return tmpg(U8 *)-tmpg1(U8 *)+sprite_elem_base_sizes[SPT_END];
|
||||
}
|
||||
@@ -89,15 +89,24 @@ I64 SpriteTypeMask(U8 *elems)
|
||||
{
|
||||
I64 res=0;
|
||||
CSprite *tmpg=elems-offset(CSprite.start);
|
||||
while (tmpg->type) {
|
||||
if (tmpg->type>=SPT_NUM_TYPES)
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
if (tmpg->type&SPG_TYPE_MASK>=SPT_NUM_TYPES)
|
||||
return 1<<SPT_NUM_TYPES;
|
||||
Bts(&res,tmpg->type);
|
||||
Bts(&res,tmpg->type&SPG_TYPE_MASK);
|
||||
tmpg(U8 *)+=SpriteElemSize(tmpg);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
U0 SpriteSelAll(U8 *elems,Bool val)
|
||||
{
|
||||
CSprite *tmpg=elems-offset(CSprite.start);
|
||||
while (tmpg->type&SPG_TYPE_MASK) {
|
||||
BEqu(&tmpg->type,SPf_SEL,val);
|
||||
tmpg(U8 *)+=SpriteElemSize(tmpg);
|
||||
}
|
||||
}
|
||||
|
||||
public U8 *DC2Sprite(CDC *tmpb)
|
||||
{//Convert device context to sprite.
|
||||
CSprite *tmpg;
|
||||
@@ -118,8 +127,8 @@ public U8 *SpriteElem2Summary(CSprite *tmpg)
|
||||
{//Study $LK,"::/Demo/Graphics/SpriteText.HC"$.
|
||||
U8 buf[STR_LEN],buf2[STR_LEN];
|
||||
I32 *ptr;
|
||||
StrPrint(buf,"%Z",tmpg->type,"ST_SPRITE_ELEM_TYPES");
|
||||
switch (tmpg->type) {
|
||||
StrPrint(buf,"%Z",tmpg->type&SPG_TYPE_MASK,"ST_SPRITE_ELEM_TYPES");
|
||||
switch (tmpg->type&SPG_TYPE_MASK) {
|
||||
case SPT_COLOR:
|
||||
CatPrint(buf," %s",Color2Str(buf2,tmpg->c.color));
|
||||
break;
|
||||
|
||||
Reference in new issue
Block a user