home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #31 / NN_1992_31.iso / spool / comp / sys / mac / programm / 20332 < prev    next >
Encoding:
Internet Message Format  |  1992-12-26  |  2.1 KB

  1. Path: sparky!uunet!pipex!bnr.co.uk!uknet!mcsun!news.funet.fi!ajk.tele.fi!funic!nntp.hut.fi!cs.hut.fi!aleskine
  2. From: aleskine@cs.hut.fi (Arto Leskinen)
  3. Newsgroups: comp.sys.mac.programmer
  4. Subject: StyledLineBreak
  5. Message-ID: <ALESKINE.92Dec26203719@cardhu.cs.hut.fi>
  6. Date: 26 Dec 92 18:37:22 GMT
  7. Sender: usenet@nntp.hut.fi (Usenet pseudouser id)
  8. Distribution: comp.sys.mac.programmer
  9. Organization: Helsinki University of Technology, Finland
  10. Lines: 45
  11. Nntp-Posting-Host: cardhu.cs.hut.fi
  12.  
  13. I got StyledLineBreak to work somehow, but not perfectly. So I have table
  14. of style structs and style start offsets. I have tried to look that all values
  15. for StyledLineBreak are correct, but sometimes it draws olmost 2 chars too
  16. far. Even if I have only one style on a line. Can anyone give some advice?
  17.  
  18. long lineLength(mTextSHand mTRecH, long chars, long line,
  19.                 mLineStyleRec *lineStyles, short styleCount)
  20. {
  21.       unsigned char *cPtr, **cHand;
  22.       short i;
  23.       long width = 0, start, offset = 1;
  24.       FormatOrder order[kMaxLineStyles];
  25.       StyledLineBreakCode sLBCode = smBreakOverflow;
  26.  
  27.       for ( i=0; order[i][0] = i++; );
  28.       start = (*(*mTRecH)->lineStarts)[line];
  29.       cHand = capCpyStr((**mTRecH).currText, start, chars);
  30.       width = (**mTRecH).destRect.right - (**mTRecH).destRect.left;
  31.       width = (width<<16) & 0xFFFF0000;
  32.       if ( cHand && **cHand)
  33.       {
  34.          HLock(cHand);
  35.          cPtr = *cHand;
  36.          styleCount = setLineStyles(mTRecH, start, start+chars-1,
  37.            lineStyles);
  38.          GetFormatOrder(order, 0, styleCount, (Boolean)GetSysJust(),
  39.          mTRLDirProc, (Ptr) lineStyles);
  40.      for (i = 0; lineStyles[order[i][0]].tStyleH &&
  41.         (sLBCode == smBreakOverflow); i++)
  42.      {
  43.        setTextStyle(lineStyles[order[i][0]].tStyleH);
  44.        sLBCode = StyledLineBreak(cPtr, chars, lineStyles[order[i][0]].start,
  45.        lineStyles[order[i][0]+1].start-1, 0L, &width, &offset);
  46.      }
  47.      HUnlock(cHand);
  48.      if (sLBCode == smBreakWord)
  49.        return offset;
  50.   }
  51. }
  52.  
  53. Thank You!
  54.  
  55. Arto Leskinen
  56. aleskine@cs.hut.fi
  57. (I had some problems sening this so I hope it is all right.)
  58.