#ifndef RALEIGH_W_ENTRY_H #define RALEIGH_W_ENTRY_H #include #include namespace raleigh { class entry : public widget { public: //default_text's data is copied, so it's okay if it changes or if the memory is freed entry(uint32_t rows, uint32_t cols, const char *default_text="", const char *font="fixed-10", _pixel_t bg=RGB(ff, ff, ff), _pixel_t fg=RGB(00, 00, 00), _pixel_t border_color=RGB(00, 00, 00)); void notify_window_change(); void paint(_pixel_t *pixbuf, uint32_t pitch); bool try_handle_click(coord window_coords, enum mouse_packet::mouse_button click_type, bool up); void notify_has_opaque_parent(widget *parent); private: uint32_t rows; uint32_t cols; _pixel_t bg; _pixel_t fg; _pixel_t border_color; struct font_info *fi; char *data; //line_indices[end_y + 1] == end_d uint32_t *line_indices; uint32_t cur_y; uint32_t cur_x; uint32_t cur_d; //the row of the last character uint32_t end_y; //the column after the last character uint32_t end_x; //the index of the null terminator uint32_t end_d; bool first_paint; bool text_changed_since_last_paint; uint32_t cur_y_last_paint; uint32_t cur_x_last_paint; uint32_t cur_d_last_paint; void paint_text(_pixel_t *pixbuf, uint32_t pitch); }; } #endif