mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 06:37:36 +00:00
GTextEditor: Add a "span" mechanism for having custom-style text ranges
It's now possible to give GTextEditor a vector of Span objects. Spans currently tell the editor which color to use for each character in the span. This can be used to implement syntax highlighting :^)
This commit is contained in:
parent
307cbf83c3
commit
0d53d74d5f
2 changed files with 43 additions and 2 deletions
|
@ -167,6 +167,26 @@ public:
|
|||
void set_cursor(int line, int column);
|
||||
void set_cursor(const GTextPosition&);
|
||||
|
||||
struct Span {
|
||||
bool contains(const GTextPosition& position) const
|
||||
{
|
||||
if (!(position.line() > start.line() || (position.line() == start.line() && position.column() >= start.column())))
|
||||
return false;
|
||||
if (!(position.line() < end.line() || (position.line() == end.line() && position.column() <= end.column())))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
GTextPosition start;
|
||||
GTextPosition end;
|
||||
Color color;
|
||||
};
|
||||
|
||||
void set_spans(const Vector<Span>& spans)
|
||||
{
|
||||
m_spans = spans;
|
||||
}
|
||||
|
||||
protected:
|
||||
GTextEditor(Type, GWidget* parent);
|
||||
|
||||
|
@ -187,7 +207,6 @@ protected:
|
|||
virtual void resize_event(GResizeEvent&) override;
|
||||
|
||||
private:
|
||||
|
||||
void create_actions();
|
||||
void paint_ruler(Painter&);
|
||||
void update_content_size();
|
||||
|
@ -274,6 +293,8 @@ private:
|
|||
RefPtr<GAction> m_delete_action;
|
||||
CElapsedTimer m_triple_click_timer;
|
||||
NonnullRefPtrVector<GAction> m_custom_context_menu_actions;
|
||||
|
||||
Vector<Span> m_spans;
|
||||
};
|
||||
|
||||
inline const LogStream& operator<<(const LogStream& stream, const GTextPosition& value)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue