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);
|
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)
|
struct attrlist *attrlistNew(void)
|
||||||
{
|
{
|
||||||
return uiNew(struct attrlist);
|
return uiNew(struct attrlist);
|
||||||
|
|
|
@ -294,3 +294,9 @@ size_t uiAttributedStringGraphemeToByteIndex(uiAttributedString *s, size_t pos)
|
||||||
pos = s->u16tou8[pos];
|
pos = s->u16tou8[pos];
|
||||||
return 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
|
// TODO
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef int (*uiAttributedStringForEachAttributeFunc)(uiAttributedString *, uiAttribute type, uintptr_t value, size_t start, size_t end, void *data);
|
||||||
|
|
||||||
// @role uiAttributedString constructor
|
// @role uiAttributedString constructor
|
||||||
// uiNewAttributedString() creates a new uiAttributedString from
|
// uiNewAttributedString() creates a new uiAttributedString from
|
||||||
// initialString. The string will be entirely unattributed.
|
// 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 uiAttributedStringNumGraphemes(uiAttributedString *s);
|
||||||
_UI_EXTERN size_t uiAttributedStringByteIndexToGrapheme(uiAttributedString *s, size_t pos);
|
_UI_EXTERN size_t uiAttributedStringByteIndexToGrapheme(uiAttributedString *s, size_t pos);
|
||||||
_UI_EXTERN size_t uiAttributedStringGraphemeToByteIndex(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 uiDrawTextLayout uiDrawTextLayout;
|
||||||
typedef struct uiDrawTextLayoutLineMetrics uiDrawTextLayoutLineMetrics;
|
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 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 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 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
|
// TODO move these to the top like everythng else
|
||||||
extern struct attrlist *attrlistNew(void);
|
extern struct attrlist *attrlistNew(void);
|
||||||
extern void attrlistFree(struct attrlist *alist);
|
extern void attrlistFree(struct attrlist *alist);
|
||||||
|
|
Loading…
Reference in New Issue