| 150 | |
| 151 | |
| 152 | void lvtextAddSourceLine( formatted_text_fragment_t * pbuffer, |
| 153 | lvfont_handle font, /* handle of font to draw string */ |
| 154 | const lChar16 * text, /* pointer to unicode text string */ |
| 155 | lUInt32 len, /* number of chars in text, 0 for auto(strlen) */ |
| 156 | lUInt32 color, /* color */ |
| 157 | lUInt32 bgcolor, /* bgcolor */ |
| 158 | lUInt32 flags, /* flags */ |
| 159 | lUInt8 interval, /* interline space, *16 (16=single, 32=double) */ |
| 160 | lUInt16 margin, /* first line margin */ |
| 161 | void * object, /* pointer to custom object */ |
| 162 | lUInt16 offset, |
| 163 | lInt8 letter_spacing |
| 164 | ) |
| 165 | { |
| 166 | lUInt32 srctextsize = (pbuffer->srctextlen + FRM_ALLOC_SIZE-1) / FRM_ALLOC_SIZE * FRM_ALLOC_SIZE; |
| 167 | if ( pbuffer->srctextlen >= srctextsize) |
| 168 | { |
| 169 | srctextsize += FRM_ALLOC_SIZE; |
| 170 | pbuffer->srctext = (src_text_fragment_t*)realloc( pbuffer->srctext, sizeof(src_text_fragment_t)*(srctextsize) ); |
| 171 | } |
| 172 | src_text_fragment_t * pline = &pbuffer->srctext[ pbuffer->srctextlen++ ]; |
| 173 | pline->t.font = font; |
| 174 | if (!len) for (len=0; text[len]; len++) ; |
| 175 | if (flags & LTEXT_FLAG_OWNTEXT) |
| 176 | { |
| 177 | /* make own copy of text */ |
| 178 | pline->t.text = (lChar16*)malloc( len * sizeof(lChar16) ); |
| 179 | memcpy((void*)pline->t.text, text, len * sizeof(lChar16)); |
| 180 | } |
| 181 | else |
| 182 | { |
| 183 | pline->t.text = text; |
| 184 | } |
| 185 | pline->index = (lUInt16)(pbuffer->srctextlen-1); |
| 186 | pline->object = object; |
| 187 | pline->t.len = (lUInt16)len; |
| 188 | pline->margin = margin; |
| 189 | pline->flags = flags; |
| 190 | pline->interval = interval; |
| 191 | pline->t.offset = offset; |
| 192 | pline->color = color; |
| 193 | pline->bgcolor = bgcolor; |
| 194 | pline->letter_spacing = letter_spacing; |
| 195 | } |
| 196 | |
| 197 | void lvtextAddSourceObject( |
| 198 | formatted_text_fragment_t * pbuffer, |