|
|
#include "lstxtmod.h"
#include "lsems.h"
#include "txtils.h"
void GetChanges(LSACT lsact, LSEMS* plsems, long durCur, BOOL fByIsPlus, BYTE* pside, long* pddurChange) { *pside = lsact.side; switch (lsact.kamnt) { case kamntNone: *pddurChange = 0; break; case kamntToHalfEm: *pddurChange = plsems->em2 - durCur; break; case kamntToQuarterEm: *pddurChange = plsems->em4 - durCur; break; case kamntToThirdEm: *pddurChange = plsems->em3 - durCur; break; case kamntTo15Sixteenth: *pddurChange = plsems->em16 - durCur; break; case kamntToUserDefinedExpan: *pddurChange = plsems->udExp - durCur; break; case kamntToUserDefinedComp: *pddurChange = plsems->udComp - durCur; break; case kamntByHalfEm: if (fByIsPlus) *pddurChange = plsems->em2; else *pddurChange = -plsems->em2; break; case kamntByQuarterEm: if (fByIsPlus) *pddurChange = plsems->em4; else *pddurChange = -plsems->em4; break; case kamntByEighthEm: if (fByIsPlus) *pddurChange = plsems->em8; else *pddurChange = -plsems->em8; break; case kamntByUserDefinedExpan: if (fByIsPlus) *pddurChange = plsems->udExp; else *pddurChange = -plsems->udExp; break; case kamntByUserDefinedComp: if (fByIsPlus) *pddurChange = plsems->udComp; else *pddurChange = -plsems->udComp; break; default: Assert(fFalse); }
if (*pddurChange < -durCur) *pddurChange = -durCur;
}
void TranslateChanges(BYTE sideRecom, long durAdjustRecom, long durCur, long durRight, long durLeft, BYTE* psideFinal, long* pdurChange) { long durLeftRecom = 0; long durRightRecom = 0;
Assert(sideRecom != sideNone);
switch (sideRecom) { case sideRight: durLeftRecom = 0; durRightRecom = durAdjustRecom - durRight; break; case sideLeft: durRightRecom = 0; durLeftRecom = durAdjustRecom - durLeft; break; case sideLeftRight: durRightRecom = durAdjustRecom >> 1; durLeftRecom = durAdjustRecom - durRightRecom; durRightRecom -= durRight; durLeftRecom -= durLeft; break; }
*psideFinal = sideNone; if (durRightRecom != 0 && durLeftRecom != 0) *psideFinal = sideLeftRight; else if (durRightRecom != 0) *psideFinal = sideRight; else if (durLeftRecom != 0) *psideFinal = sideLeft;
*pdurChange = durLeftRecom + durRightRecom;
if (*pdurChange < -durCur) *pdurChange = -durCur; }
void ApplyChanges(PILSOBJ pilsobj, long iwch, BYTE side, long ddurChange) { long ddurChangeLeft; long ddurChangeRight;
pilsobj->pdur[iwch] += ddurChange;
InterpretChanges(pilsobj, iwch, side, ddurChange, &ddurChangeLeft, &ddurChangeRight); Assert(ddurChange == ddurChangeLeft + ddurChangeRight);
pilsobj->pdurLeft[iwch] += ddurChangeLeft; pilsobj->pdurRight[iwch] += ddurChangeRight; }
void InterpretChanges(PILSOBJ pilsobj, long iwch, BYTE side, long ddurChange, long* pddurChangeLeft, long* pddurChangeRight) { long ddurChangeLeftRight;
switch (side) { case sideNone: Assert(ddurChange == 0); *pddurChangeLeft = 0; *pddurChangeRight = 0; break; case sideRight: Assert(pilsobj->pdurRight != NULL); *pddurChangeLeft = 0; *pddurChangeRight = ddurChange; break; case sideLeft: Assert(pilsobj->pdurLeft != NULL); *pddurChangeLeft = ddurChange; *pddurChangeRight = 0; break; case sideLeftRight: Assert(pilsobj->pdurRight != NULL); Assert(pilsobj->pdurLeft != NULL); ddurChangeLeftRight = ddurChange + pilsobj->pdurRight[iwch] + pilsobj->pdurLeft[iwch]; *pddurChangeRight = (ddurChangeLeftRight >> 1) - pilsobj->pdurRight[iwch]; *pddurChangeLeft = (ddurChange - *pddurChangeRight); break; } }
void UndoAppliedChanges(PILSOBJ pilsobj, long iwch, BYTE side, long* pddurChange) { Assert(side == sideRight || side == sideLeft);
switch (side) { case sideRight: Assert(pilsobj->pdurRight != NULL); *pddurChange = -pilsobj->pdurRight[iwch]; pilsobj->pdurRight[iwch] = 0; break; case sideLeft: Assert(pilsobj->pdurLeft != NULL); *pddurChange = -pilsobj->pdurLeft[iwch]; pilsobj->pdurLeft[iwch] = 0; break; }
pilsobj->pdur[iwch] += *pddurChange; }
void ApplyGlyphChanges(PILSOBJ pilsobj, long igind, long ddurChange) { /* while (pilsobj->pdurGind[igind] == 0 && !pislobj->ptxtginf[igind].fFirstInContext)
igind--; */ pilsobj->pdurGind[igind] += ddurChange;
Assert(pilsobj->pduGright != NULL); pilsobj->pduGright[igind] += ddurChange;
}
|