One more support method before I can actually implement uiDrawTextLayout. Still need to figure out how I'm going to deal with fonts...

This commit is contained in:
Pietro Gagliardi 2016-12-23 14:01:09 -05:00
parent dfffc4c851
commit e409943a50
4 changed files with 22 additions and 1 deletions

View File

@ -578,6 +578,17 @@ void attrlistRemoveCharacters(struct attrlist *alist, size_t start, size_t end)
a = attrDeleteRange(alist, a, start, end);
}
void attrlistForEach(struct attr *alist, uiAttributedString *s, uiAttributedStringForEachAttributeFunc f, void *data)
{
struct attr *a;
for (a = alist->first; a != NULL; a = a->next)
// TODO document this
// TODO should this be return 0 to break?
if ((*f)(s, a->type, a->val, a->start, a->end, data))
break;
}
struct attrlist *attrlistNew(void)
{
return uiNew(struct attrlist);

View File

@ -294,3 +294,9 @@ size_t uiAttributedStringGraphemeToByteIndex(uiAttributedString *s, size_t pos)
pos = s->u16tou8[pos];
return pos;
}
// TODO introduce an iterator?
void uiAttributedStringForEachAttribute(uiAttributedString *s, uiAttributedStringForEachAttributeFunc f, void *data)
{
attrlistForEach(s->attrs, s, f, data);
}

View File

@ -4,6 +4,8 @@ _UI_ENUM(uiAttribute) {
// TODO
};
typedef int (*uiAttributedStringForEachAttributeFunc)(uiAttributedString *, uiAttribute type, uintptr_t value, size_t start, size_t end, void *data);
// @role uiAttributedString constructor
// uiNewAttributedString() creates a new uiAttributedString from
// initialString. The string will be entirely unattributed.
@ -28,6 +30,7 @@ _UI_EXTERN void uiAttributedStringDelete(uiAttributedString *s, size_t start, si
_UI_EXTERN size_t uiAttributedStringNumGraphemes(uiAttributedString *s);
_UI_EXTERN size_t uiAttributedStringByteIndexToGrapheme(uiAttributedString *s, size_t pos);
_UI_EXTERN size_t uiAttributedStringGraphemeToByteIndex(uiAttributedString *s, size_t pos);
_UI_EXTERN void uiAttributedStringForEachAttribute(uiAttributedString *s, uiAttributedStringForEachAttributeFunc f, void *data);
typedef struct uiDrawTextLayout uiDrawTextLayout;
typedef struct uiDrawTextLayoutLineMetrics uiDrawTextLayoutLineMetrics;

View File

@ -71,7 +71,8 @@ extern void attrlistInsertCharactersUnattributed(struct attrlist *alist, size_t
extern void attrlistInsertCharactersExtendingAttributes(struct attrlist *alist, size_t start, size_t count);
extern void attrlistRemoveAttribute(struct attrlist *alist, uiAttribute type, size_t start, size_t end);
extern void attrlistRemoveAttributes(struct attrlist *alist, size_t start, size_t end);
extern; void attrlistRemoveCharacters(struct attrlist *alist, size_t start, size_t end)
extern; void attrlistRemoveCharacters(struct attrlist *alist, size_t start, size_t end);
extern void attrlistForEach(struct attr *alist, uiAttributedString *s, uiAttributedStringForEachAttributeFunc f, void *data);
// TODO move these to the top like everythng else
extern struct attrlist *attrlistNew(void);
extern void attrlistFree(struct attrlist *alist);