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:
parent
dfffc4c851
commit
e409943a50
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue