Function namespacing.
svn path=/trunk/netsurf/; revision=12590
This commit is contained in:
parent
50f52cfc51
commit
12d826a050
|
@ -49,8 +49,9 @@
|
||||||
#undef TEXTINPUT_DEBUG
|
#undef TEXTINPUT_DEBUG
|
||||||
|
|
||||||
|
|
||||||
static bool textbox_delete(struct browser_window *bw, struct box *text_box,
|
static bool textinput_textbox_delete(struct browser_window *bw,
|
||||||
unsigned char_offset, unsigned utf8_len);
|
struct box *text_box, unsigned char_offset,
|
||||||
|
unsigned utf8_len);
|
||||||
|
|
||||||
/* Textarea callbacks */
|
/* Textarea callbacks */
|
||||||
static bool textinput_textarea_callback(struct browser_window *bw,
|
static bool textinput_textarea_callback(struct browser_window *bw,
|
||||||
|
@ -88,8 +89,8 @@ static bool textinput_input_paste_text(struct browser_window *bw,
|
||||||
* \return pointer to TEXT box
|
* \return pointer to TEXT box
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *textarea_get_position(struct box *textarea, int x, int y,
|
static struct box *textinput_textarea_get_position(struct box *textarea,
|
||||||
int *pchar_offset, int *ppixel_offset)
|
int x, int y, int *pchar_offset, int *ppixel_offset)
|
||||||
{
|
{
|
||||||
/* A textarea is an INLINE_BLOCK containing a single
|
/* A textarea is an INLINE_BLOCK containing a single
|
||||||
* INLINE_CONTAINER, which contains the text as runs of TEXT
|
* INLINE_CONTAINER, which contains the text as runs of TEXT
|
||||||
|
@ -181,7 +182,7 @@ static struct box *textarea_get_position(struct box *textarea, int x, int y,
|
||||||
* \return true iff successful
|
* \return true iff successful
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool delete_handler(struct browser_window *bw, struct box *b,
|
static bool textinput_delete_handler(struct browser_window *bw, struct box *b,
|
||||||
int offset, size_t length)
|
int offset, size_t length)
|
||||||
{
|
{
|
||||||
size_t text_length = b->length + SPACE_LEN(b);
|
size_t text_length = b->length + SPACE_LEN(b);
|
||||||
|
@ -193,7 +194,7 @@ static bool delete_handler(struct browser_window *bw, struct box *b,
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} else
|
} else
|
||||||
return textbox_delete(bw, b, offset,
|
return textinput_textbox_delete(bw, b, offset,
|
||||||
min(length, text_length - offset));
|
min(length, text_length - offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -204,7 +205,7 @@ static bool delete_handler(struct browser_window *bw, struct box *b,
|
||||||
* \param s The selection to be removed
|
* \param s The selection to be removed
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void delete_selection(struct selection *s)
|
static void textinput_delete_selection(struct selection *s)
|
||||||
{
|
{
|
||||||
size_t start_offset, end_offset;
|
size_t start_offset, end_offset;
|
||||||
struct box *text_box;
|
struct box *text_box;
|
||||||
|
@ -223,7 +224,7 @@ static void delete_selection(struct selection *s)
|
||||||
selection_clear(s, true);
|
selection_clear(s, true);
|
||||||
|
|
||||||
/* handle first box */
|
/* handle first box */
|
||||||
delete_handler(s->bw, text_box, start_offset, sel_len);
|
textinput_delete_handler(s->bw, text_box, start_offset, sel_len);
|
||||||
if (text_box == end_box)
|
if (text_box == end_box)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -232,7 +233,7 @@ static void delete_selection(struct selection *s)
|
||||||
box_unlink_and_free(text_box);
|
box_unlink_and_free(text_box);
|
||||||
}
|
}
|
||||||
|
|
||||||
delete_handler(s->bw, end_box, beginning, end_offset);
|
textinput_delete_handler(s->bw, end_box, beginning, end_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,8 +248,9 @@ static void delete_selection(struct selection *s)
|
||||||
* \return true iff successful
|
* \return true iff successful
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool textbox_insert(struct browser_window *bw, struct box *text_box,
|
static bool textinput_textbox_insert(struct browser_window *bw,
|
||||||
unsigned char_offset, const char *utf8, unsigned utf8_len)
|
struct box *text_box, unsigned char_offset, const char *utf8,
|
||||||
|
unsigned utf8_len)
|
||||||
{
|
{
|
||||||
char *text;
|
char *text;
|
||||||
struct box *input = text_box->parent->parent;
|
struct box *input = text_box->parent->parent;
|
||||||
|
@ -263,7 +265,7 @@ static bool textbox_insert(struct browser_window *bw, struct box *text_box,
|
||||||
current_content = hlcache_handle_get_content(bw->current_content);
|
current_content = hlcache_handle_get_content(bw->current_content);
|
||||||
|
|
||||||
if (bw->sel->defined)
|
if (bw->sel->defined)
|
||||||
delete_selection(bw->sel);
|
textinput_delete_selection(bw->sel);
|
||||||
|
|
||||||
/* insert into form gadget (text and password inputs only) */
|
/* insert into form gadget (text and password inputs only) */
|
||||||
if (input->gadget && (input->gadget->type == GADGET_TEXTBOX ||
|
if (input->gadget && (input->gadget->type == GADGET_TEXTBOX ||
|
||||||
|
@ -349,7 +351,7 @@ static bool textbox_insert(struct browser_window *bw, struct box *text_box,
|
||||||
* \return the translated form_offset
|
* \return the translated form_offset
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static size_t get_form_offset(struct box* input, struct box* text_box,
|
static size_t textinput_get_form_offset(struct box* input, struct box* text_box,
|
||||||
size_t char_offset)
|
size_t char_offset)
|
||||||
{
|
{
|
||||||
int uchars;
|
int uchars;
|
||||||
|
@ -399,14 +401,14 @@ static size_t get_form_offset(struct box* input, struct box* text_box,
|
||||||
* If there is a selection, the entire selected area is deleted.
|
* If there is a selection, the entire selected area is deleted.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
bool textbox_delete(struct browser_window *bw, struct box *text_box,
|
bool textinput_textbox_delete(struct browser_window *bw, struct box *text_box,
|
||||||
unsigned char_offset, unsigned utf8_len)
|
unsigned char_offset, unsigned utf8_len)
|
||||||
{
|
{
|
||||||
unsigned next_offset = char_offset + utf8_len;
|
unsigned next_offset = char_offset + utf8_len;
|
||||||
struct box *form = text_box->parent->parent;
|
struct box *form = text_box->parent->parent;
|
||||||
|
|
||||||
if (bw->sel->defined) {
|
if (bw->sel->defined) {
|
||||||
delete_selection(bw->sel);
|
textinput_delete_selection(bw->sel);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,9 +416,9 @@ bool textbox_delete(struct browser_window *bw, struct box *text_box,
|
||||||
if (form->gadget && (form->gadget->type == GADGET_TEXTBOX ||
|
if (form->gadget && (form->gadget->type == GADGET_TEXTBOX ||
|
||||||
form->gadget->type == GADGET_PASSWORD) &&
|
form->gadget->type == GADGET_PASSWORD) &&
|
||||||
form->gadget->value) {
|
form->gadget->value) {
|
||||||
size_t form_offset = get_form_offset(form, text_box,
|
size_t form_offset = textinput_get_form_offset(form, text_box,
|
||||||
char_offset);
|
char_offset);
|
||||||
size_t next_offset = get_form_offset(form, text_box,
|
size_t next_offset = textinput_get_form_offset(form, text_box,
|
||||||
char_offset + utf8_len);
|
char_offset + utf8_len);
|
||||||
|
|
||||||
memmove(form->gadget->value + form_offset,
|
memmove(form->gadget->value + form_offset,
|
||||||
|
@ -467,7 +469,7 @@ bool textbox_delete(struct browser_window *bw, struct box *text_box,
|
||||||
* \param text_box text box from which to start searching
|
* \param text_box text box from which to start searching
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *line_start(struct box *text_box)
|
static struct box *textinput_line_start(struct box *text_box)
|
||||||
{
|
{
|
||||||
while (text_box->prev && text_box->prev->type == BOX_TEXT)
|
while (text_box->prev && text_box->prev->type == BOX_TEXT)
|
||||||
text_box = text_box->prev;
|
text_box = text_box->prev;
|
||||||
|
@ -481,7 +483,7 @@ static struct box *line_start(struct box *text_box)
|
||||||
* \param text_box text box from which to start searching
|
* \param text_box text box from which to start searching
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *line_end(struct box *text_box)
|
static struct box *textinput_line_end(struct box *text_box)
|
||||||
{
|
{
|
||||||
while (text_box->next && text_box->next->type == BOX_TEXT)
|
while (text_box->next && text_box->next->type == BOX_TEXT)
|
||||||
text_box = text_box->next;
|
text_box = text_box->next;
|
||||||
|
@ -493,17 +495,17 @@ static struct box *line_end(struct box *text_box)
|
||||||
* Backtrack to the start of the previous line, if there is one.
|
* Backtrack to the start of the previous line, if there is one.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *line_above(struct box *text_box)
|
static struct box *textinput_line_above(struct box *text_box)
|
||||||
{
|
{
|
||||||
struct box *prev;
|
struct box *prev;
|
||||||
|
|
||||||
text_box = line_start(text_box);
|
text_box = textinput_line_start(text_box);
|
||||||
|
|
||||||
prev = text_box->prev;
|
prev = text_box->prev;
|
||||||
while (prev && prev->type == BOX_BR)
|
while (prev && prev->type == BOX_BR)
|
||||||
prev = prev->prev;
|
prev = prev->prev;
|
||||||
|
|
||||||
return prev ? line_start(prev) : text_box;
|
return prev ? textinput_line_start(prev) : text_box;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -511,11 +513,11 @@ static struct box *line_above(struct box *text_box)
|
||||||
* Advance to the start of the next line, if there is one.
|
* Advance to the start of the next line, if there is one.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *line_below(struct box *text_box)
|
static struct box *textinput_line_below(struct box *text_box)
|
||||||
{
|
{
|
||||||
struct box *next;
|
struct box *next;
|
||||||
|
|
||||||
text_box = line_end(text_box);
|
text_box = textinput_line_end(text_box);
|
||||||
|
|
||||||
next = text_box->next;
|
next = text_box->next;
|
||||||
while (next && next->type == BOX_BR)
|
while (next && next->type == BOX_BR)
|
||||||
|
@ -538,7 +540,7 @@ static struct box *line_below(struct box *text_box)
|
||||||
* \return true iff successful
|
* \return true iff successful
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool textarea_cut(struct browser_window *bw,
|
static bool textinput_textarea_cut(struct browser_window *bw,
|
||||||
struct box *start_box, unsigned start_idx,
|
struct box *start_box, unsigned start_idx,
|
||||||
struct box *end_box, unsigned end_idx,
|
struct box *end_box, unsigned end_idx,
|
||||||
bool clipboard)
|
bool clipboard)
|
||||||
|
@ -572,14 +574,15 @@ static bool textarea_cut(struct browser_window *bw,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (del) {
|
if (del) {
|
||||||
if (!delete_handler(bw, box, start_idx,
|
if (!textinput_delete_handler(bw, box,
|
||||||
|
start_idx,
|
||||||
(box->length + SPACE_LEN(box)) -
|
(box->length + SPACE_LEN(box)) -
|
||||||
start_idx) && clipboard) {
|
start_idx) && clipboard) {
|
||||||
gui_commit_clipboard();
|
gui_commit_clipboard();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
textbox_delete(bw, box, start_idx,
|
textinput_textbox_delete(bw, box, start_idx,
|
||||||
(box->length + SPACE_LEN(box)) -
|
(box->length + SPACE_LEN(box)) -
|
||||||
start_idx);
|
start_idx);
|
||||||
}
|
}
|
||||||
|
@ -597,11 +600,11 @@ static bool textarea_cut(struct browser_window *bw,
|
||||||
success = false;
|
success = false;
|
||||||
} else {
|
} else {
|
||||||
if (del) {
|
if (del) {
|
||||||
if (!delete_handler(bw, box, start_idx,
|
if (!textinput_delete_handler(bw, box,
|
||||||
end_idx - start_idx))
|
start_idx, end_idx - start_idx))
|
||||||
success = false;
|
success = false;
|
||||||
} else {
|
} else {
|
||||||
textbox_delete(bw, box, start_idx,
|
textinput_textbox_delete(bw, box, start_idx,
|
||||||
end_idx - start_idx);
|
end_idx - start_idx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -622,7 +625,7 @@ static bool textarea_cut(struct browser_window *bw,
|
||||||
* \param char_offset offset (in bytes) at which text box is to be split
|
* \param char_offset offset (in bytes) at which text box is to be split
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct box *textarea_insert_break(struct browser_window *bw,
|
static struct box *textinput_textarea_insert_break(struct browser_window *bw,
|
||||||
struct box *text_box, size_t char_offset)
|
struct box *text_box, size_t char_offset)
|
||||||
{
|
{
|
||||||
struct box *new_br, *new_text;
|
struct box *new_br, *new_text;
|
||||||
|
@ -674,8 +677,8 @@ static struct box *textarea_insert_break(struct browser_window *bw,
|
||||||
* \param inline_container container holding text box
|
* \param inline_container container holding text box
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void textarea_reflow(struct browser_window *bw, struct box *textarea,
|
static void textinput_textarea_reflow(struct browser_window *bw,
|
||||||
struct box *inline_container)
|
struct box *textarea, struct box *inline_container)
|
||||||
{
|
{
|
||||||
struct content *c = hlcache_handle_get_content(bw->current_content);
|
struct content *c = hlcache_handle_get_content(bw->current_content);
|
||||||
int width = textarea->width;
|
int width = textarea->width;
|
||||||
|
@ -784,7 +787,8 @@ static bool textinput_word_right(const char *text, size_t len,
|
||||||
* \return true if a change in scroll offsets has occurred
|
* \return true if a change in scroll offsets has occurred
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static bool ensure_caret_visible(struct content *c, struct box *textarea)
|
static bool textinput_ensure_caret_visible(struct content *c,
|
||||||
|
struct box *textarea)
|
||||||
{
|
{
|
||||||
html_content *html = (html_content *)c;
|
html_content *html = (html_content *)c;
|
||||||
int cx, cy;
|
int cx, cy;
|
||||||
|
@ -879,14 +883,16 @@ bool textinput_textarea_paste_text(struct browser_window *bw,
|
||||||
}
|
}
|
||||||
|
|
||||||
utf8_len = p - utf8;
|
utf8_len = p - utf8;
|
||||||
if (!textbox_insert(bw, text_box, char_offset, utf8, utf8_len))
|
if (!textinput_textbox_insert(bw, text_box, char_offset,
|
||||||
|
utf8, utf8_len))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
char_offset += utf8_len;
|
char_offset += utf8_len;
|
||||||
if (p == ep)
|
if (p == ep)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
new_text = textarea_insert_break(bw, text_box, char_offset);
|
new_text = textinput_textarea_insert_break(bw, text_box,
|
||||||
|
char_offset);
|
||||||
if (!new_text) {
|
if (!new_text) {
|
||||||
/* we still need to update the screen */
|
/* we still need to update the screen */
|
||||||
update = true;
|
update = true;
|
||||||
|
@ -914,7 +920,7 @@ bool textinput_textarea_paste_text(struct browser_window *bw,
|
||||||
plot_font_style_t fstyle;
|
plot_font_style_t fstyle;
|
||||||
|
|
||||||
/* reflow textarea preserving width and height */
|
/* reflow textarea preserving width and height */
|
||||||
textarea_reflow(bw, textarea, inline_container);
|
textinput_textarea_reflow(bw, textarea, inline_container);
|
||||||
/* reflowing may have broken our caret offset
|
/* reflowing may have broken our caret offset
|
||||||
* this bit should hopefully continue to work if
|
* this bit should hopefully continue to work if
|
||||||
* textarea_reflow is fixed to update the caret itself */
|
* textarea_reflow is fixed to update the caret itself */
|
||||||
|
@ -957,7 +963,7 @@ bool textinput_textarea_paste_text(struct browser_window *bw,
|
||||||
box_coords(textarea, &box_x, &box_y);
|
box_coords(textarea, &box_x, &box_y);
|
||||||
box_x += scrollbar_get_offset(textarea->scroll_x);
|
box_x += scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y += scrollbar_get_offset(textarea->scroll_y);
|
box_y += scrollbar_get_offset(textarea->scroll_y);
|
||||||
ensure_caret_visible(c, textarea);
|
textinput_ensure_caret_visible(c, textarea);
|
||||||
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
||||||
|
|
||||||
|
@ -1031,7 +1037,7 @@ void textinput_textarea_move_caret(struct browser_window *bw,
|
||||||
* \param redraw force redraw even if field hasn't scrolled
|
* \param redraw force redraw even if field hasn't scrolled
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void input_update_display(struct content *c, struct box *input,
|
static void textinput_input_update_display(struct content *c, struct box *input,
|
||||||
unsigned box_offset, bool to_textarea, bool redraw)
|
unsigned box_offset, bool to_textarea, bool redraw)
|
||||||
{
|
{
|
||||||
struct box *text_box = input->children->children;
|
struct box *text_box = input->children->children;
|
||||||
|
@ -1136,7 +1142,8 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
/* normal character insertion */
|
/* normal character insertion */
|
||||||
utf8_len = utf8_from_ucs4(key, utf8);
|
utf8_len = utf8_from_ucs4(key, utf8);
|
||||||
|
|
||||||
if (!textbox_insert(bw, text_box, char_offset, utf8, utf8_len))
|
if (!textinput_textbox_insert(bw, text_box, char_offset,
|
||||||
|
utf8, utf8_len))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
char_offset += utf8_len;
|
char_offset += utf8_len;
|
||||||
|
@ -1146,7 +1153,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
case KEY_DELETE_LEFT:
|
case KEY_DELETE_LEFT:
|
||||||
if (selection_exists) {
|
if (selection_exists) {
|
||||||
/* Have a selection; delete it */
|
/* Have a selection; delete it */
|
||||||
textbox_delete(bw, text_box, 0, 0);
|
textinput_textbox_delete(bw, text_box, 0, 0);
|
||||||
} else if (char_offset == 0) {
|
} else if (char_offset == 0) {
|
||||||
/* at the start of a text box */
|
/* at the start of a text box */
|
||||||
struct box *prev;
|
struct box *prev;
|
||||||
|
@ -1169,7 +1176,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
char_offset = prev->length; /* caret at join */
|
char_offset = prev->length; /* caret at join */
|
||||||
|
|
||||||
if (!textbox_insert(bw, prev, prev->length,
|
if (!textinput_textbox_insert(bw, prev, prev->length,
|
||||||
text_box->text, text_box->length))
|
text_box->text, text_box->length))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1184,7 +1191,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
size_t new_offset =
|
size_t new_offset =
|
||||||
utf8_prev(text_box->text, char_offset);
|
utf8_prev(text_box->text, char_offset);
|
||||||
|
|
||||||
if (textbox_delete(bw, text_box, new_offset,
|
if (textinput_textbox_delete(bw, text_box, new_offset,
|
||||||
prev_offset - new_offset))
|
prev_offset - new_offset))
|
||||||
char_offset = new_offset;
|
char_offset = new_offset;
|
||||||
}
|
}
|
||||||
|
@ -1193,13 +1200,14 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
case KEY_DELETE_LINE_START:
|
case KEY_DELETE_LINE_START:
|
||||||
{
|
{
|
||||||
struct box *start_box = line_start(text_box);
|
struct box *start_box = textinput_line_start(text_box);
|
||||||
|
|
||||||
/* Clear the selection, if one exists */
|
/* Clear the selection, if one exists */
|
||||||
if (selection_exists)
|
if (selection_exists)
|
||||||
selection_clear(bw->sel, false);
|
selection_clear(bw->sel, false);
|
||||||
|
|
||||||
textarea_cut(bw, start_box, 0, text_box, char_offset, false);
|
textinput_textarea_cut(bw, start_box, 0, text_box,
|
||||||
|
char_offset, false);
|
||||||
text_box = start_box;
|
text_box = start_box;
|
||||||
char_offset = 0;
|
char_offset = 0;
|
||||||
reflow = true;
|
reflow = true;
|
||||||
|
@ -1208,7 +1216,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
case KEY_DELETE_LINE_END:
|
case KEY_DELETE_LINE_END:
|
||||||
{
|
{
|
||||||
struct box *end_box = line_end(text_box);
|
struct box *end_box = textinput_line_end(text_box);
|
||||||
|
|
||||||
/* Clear the selection, if one exists */
|
/* Clear the selection, if one exists */
|
||||||
if (selection_exists)
|
if (selection_exists)
|
||||||
|
@ -1217,7 +1225,8 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
if (end_box != text_box ||
|
if (end_box != text_box ||
|
||||||
char_offset < text_box->length + SPACE_LEN(text_box)) {
|
char_offset < text_box->length + SPACE_LEN(text_box)) {
|
||||||
/* there's something at the end of the line to delete */
|
/* there's something at the end of the line to delete */
|
||||||
textarea_cut(bw, text_box, char_offset, end_box,
|
textinput_textarea_cut(bw, text_box,
|
||||||
|
char_offset, end_box,
|
||||||
end_box->length + SPACE_LEN(end_box),
|
end_box->length + SPACE_LEN(end_box),
|
||||||
false);
|
false);
|
||||||
reflow = true;
|
reflow = true;
|
||||||
|
@ -1228,7 +1237,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
case KEY_DELETE_RIGHT: /* delete to right */
|
case KEY_DELETE_RIGHT: /* delete to right */
|
||||||
if (selection_exists) {
|
if (selection_exists) {
|
||||||
/* Delete selection */
|
/* Delete selection */
|
||||||
textbox_delete(bw, text_box, 0, 0);
|
textinput_textbox_delete(bw, text_box, 0, 0);
|
||||||
} else if (char_offset >= text_box->length) {
|
} else if (char_offset >= text_box->length) {
|
||||||
/* at the end of a text box */
|
/* at the end of a text box */
|
||||||
struct box *next;
|
struct box *next;
|
||||||
|
@ -1250,7 +1259,8 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
assert(next->type == BOX_TEXT);
|
assert(next->type == BOX_TEXT);
|
||||||
assert(next->text);
|
assert(next->text);
|
||||||
|
|
||||||
if (!textbox_insert(bw, text_box, text_box->length,
|
if (!textinput_textbox_insert(bw, text_box,
|
||||||
|
text_box->length,
|
||||||
next->text, next->length))
|
next->text, next->length))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1262,7 +1272,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
size_t next_offset = utf8_next(text_box->text,
|
size_t next_offset = utf8_next(text_box->text,
|
||||||
text_box->length, char_offset);
|
text_box->length, char_offset);
|
||||||
|
|
||||||
textbox_delete(bw, text_box, char_offset,
|
textinput_textbox_delete(bw, text_box, char_offset,
|
||||||
next_offset - char_offset);
|
next_offset - char_offset);
|
||||||
}
|
}
|
||||||
reflow = true;
|
reflow = true;
|
||||||
|
@ -1273,10 +1283,11 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
if (selection_exists) {
|
if (selection_exists) {
|
||||||
/* If we have a selection, then delete it,
|
/* If we have a selection, then delete it,
|
||||||
* so it's replaced by the break */
|
* so it's replaced by the break */
|
||||||
textbox_delete(bw, text_box, 0, 0);
|
textinput_textbox_delete(bw, text_box, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_text = textarea_insert_break(bw, text_box, char_offset);
|
new_text = textinput_textarea_insert_break(bw, text_box,
|
||||||
|
char_offset);
|
||||||
if (!new_text)
|
if (!new_text)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
@ -1289,14 +1300,15 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
case KEY_CUT_LINE:
|
case KEY_CUT_LINE:
|
||||||
{
|
{
|
||||||
struct box *start_box = line_start(text_box);
|
struct box *start_box = textinput_line_start(text_box);
|
||||||
struct box *end_box = line_end(text_box);
|
struct box *end_box = textinput_line_end(text_box);
|
||||||
|
|
||||||
/* Clear the selection, if one exists */
|
/* Clear the selection, if one exists */
|
||||||
if (selection_exists)
|
if (selection_exists)
|
||||||
selection_clear(bw->sel, false);
|
selection_clear(bw->sel, false);
|
||||||
|
|
||||||
textarea_cut(bw, start_box, 0, end_box, end_box->length, false);
|
textinput_textarea_cut(bw, start_box, 0, end_box,
|
||||||
|
end_box->length, false);
|
||||||
|
|
||||||
text_box = start_box;
|
text_box = start_box;
|
||||||
char_offset = 0;
|
char_offset = 0;
|
||||||
|
@ -1322,7 +1334,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
if (start_box && end_box) {
|
if (start_box && end_box) {
|
||||||
selection_clear(bw->sel, false);
|
selection_clear(bw->sel, false);
|
||||||
textarea_cut(bw, start_box, start_idx,
|
textinput_textarea_cut(bw, start_box, start_idx,
|
||||||
end_box, end_idx, true);
|
end_box, end_idx, true);
|
||||||
text_box = start_box;
|
text_box = start_box;
|
||||||
char_offset = start_idx;
|
char_offset = start_idx;
|
||||||
|
@ -1392,12 +1404,12 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case KEY_LINE_START:
|
case KEY_LINE_START:
|
||||||
text_box = line_start(text_box);
|
text_box = textinput_line_start(text_box);
|
||||||
char_offset = 0;
|
char_offset = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_LINE_END:
|
case KEY_LINE_END:
|
||||||
text_box = line_end(text_box);
|
text_box = textinput_line_end(text_box);
|
||||||
char_offset = text_box->length;
|
char_offset = text_box->length;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1498,7 +1510,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
int nlines = (textarea->height / text_box->height) - 1;
|
int nlines = (textarea->height / text_box->height) - 1;
|
||||||
|
|
||||||
while (nlines-- > 0)
|
while (nlines-- > 0)
|
||||||
text_box = line_above(text_box);
|
text_box = textinput_line_above(text_box);
|
||||||
|
|
||||||
if (char_offset > text_box->length)
|
if (char_offset > text_box->length)
|
||||||
char_offset = text_box->length;
|
char_offset = text_box->length;
|
||||||
|
@ -1510,7 +1522,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
int nlines = (textarea->height / text_box->height) - 1;
|
int nlines = (textarea->height / text_box->height) - 1;
|
||||||
|
|
||||||
while (nlines-- > 0)
|
while (nlines-- > 0)
|
||||||
text_box = line_below(text_box);
|
text_box = textinput_line_below(text_box);
|
||||||
|
|
||||||
/* vague attempt to keep the caret at the same horizontal
|
/* vague attempt to keep the caret at the same horizontal
|
||||||
* position, given that the code currently cannot support it
|
* position, given that the code currently cannot support it
|
||||||
|
@ -1543,7 +1555,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
} */
|
} */
|
||||||
|
|
||||||
if (reflow)
|
if (reflow)
|
||||||
textarea_reflow(bw, textarea, inline_container);
|
textinput_textarea_reflow(bw, textarea, inline_container);
|
||||||
|
|
||||||
if (text_box->length + SPACE_LEN(text_box) <= char_offset) {
|
if (text_box->length + SPACE_LEN(text_box) <= char_offset) {
|
||||||
if (text_box->next && text_box->next->type == BOX_TEXT) {
|
if (text_box->next && text_box->next->type == BOX_TEXT) {
|
||||||
|
@ -1581,7 +1593,7 @@ bool textinput_textarea_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
box_x += scrollbar_get_offset(textarea->scroll_x);
|
box_x += scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y += scrollbar_get_offset(textarea->scroll_y);
|
box_y += scrollbar_get_offset(textarea->scroll_y);
|
||||||
scrolled = ensure_caret_visible(c, textarea);
|
scrolled = textinput_ensure_caret_visible(c, textarea);
|
||||||
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
||||||
|
|
||||||
|
@ -1629,7 +1641,7 @@ void textinput_textarea_click(struct content *c, browser_mouse_state mouse,
|
||||||
bool scrolled;
|
bool scrolled;
|
||||||
html_content *html = (html_content *)c;
|
html_content *html = (html_content *)c;
|
||||||
|
|
||||||
text_box = textarea_get_position(textarea, x, y,
|
text_box = textinput_textarea_get_position(textarea, x, y,
|
||||||
&char_offset, &pixel_offset);
|
&char_offset, &pixel_offset);
|
||||||
|
|
||||||
textarea->gadget->caret_inline_container = inline_container;
|
textarea->gadget->caret_inline_container = inline_container;
|
||||||
|
@ -1639,7 +1651,7 @@ void textinput_textarea_click(struct content *c, browser_mouse_state mouse,
|
||||||
|
|
||||||
box_x += scrollbar_get_offset(textarea->scroll_x);
|
box_x += scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y += scrollbar_get_offset(textarea->scroll_y);
|
box_y += scrollbar_get_offset(textarea->scroll_y);
|
||||||
scrolled = ensure_caret_visible(c, textarea);
|
scrolled = textinput_ensure_caret_visible(c, textarea);
|
||||||
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
box_x -= scrollbar_get_offset(textarea->scroll_x);
|
||||||
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
box_y -= scrollbar_get_offset(textarea->scroll_y);
|
||||||
|
|
||||||
|
@ -1708,7 +1720,8 @@ bool textinput_input_paste_text(struct browser_window *bw,
|
||||||
nchars++;
|
nchars++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!textbox_insert(bw, text_box, box_offset, buf, nbytes)) {
|
if (!textinput_textbox_insert(bw, text_box, box_offset,
|
||||||
|
buf, nbytes)) {
|
||||||
/* we still need to update the screen */
|
/* we still need to update the screen */
|
||||||
update = true;
|
update = true;
|
||||||
success = false;
|
success = false;
|
||||||
|
@ -1731,7 +1744,8 @@ bool textinput_input_paste_text(struct browser_window *bw,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (update)
|
if (update)
|
||||||
input_update_display(c, input, box_offset, false, true);
|
textinput_input_update_display(c, input, box_offset,
|
||||||
|
false, true);
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -1804,11 +1818,11 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
bool selection_exists = bw->sel->defined;
|
bool selection_exists = bw->sel->defined;
|
||||||
|
|
||||||
input->gadget->caret_form_offset =
|
input->gadget->caret_form_offset =
|
||||||
get_form_offset(input, text_box, box_offset);
|
textinput_get_form_offset(input, text_box, box_offset);
|
||||||
|
|
||||||
/* update the form offset */
|
/* update the form offset */
|
||||||
input->gadget->caret_form_offset =
|
input->gadget->caret_form_offset =
|
||||||
get_form_offset(input, text_box, box_offset);
|
textinput_get_form_offset(input, text_box, box_offset);
|
||||||
|
|
||||||
selection_get_end(bw->sel, &end_offset);
|
selection_get_end(bw->sel, &end_offset);
|
||||||
|
|
||||||
|
@ -1823,7 +1837,8 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
utf8_len = utf8_from_ucs4(key, utf8);
|
utf8_len = utf8_from_ucs4(key, utf8);
|
||||||
|
|
||||||
if (!textbox_insert(bw, text_box, box_offset, utf8, utf8_len))
|
if (!textinput_textbox_insert(bw, text_box, box_offset,
|
||||||
|
utf8, utf8_len))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
box_offset += utf8_len;
|
box_offset += utf8_len;
|
||||||
|
@ -1836,7 +1851,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
int prev_offset, new_offset;
|
int prev_offset, new_offset;
|
||||||
|
|
||||||
if (selection_exists) {
|
if (selection_exists) {
|
||||||
textbox_delete(bw, text_box, 0, 0);
|
textinput_textbox_delete(bw, text_box, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
/* Can't delete left from text box start */
|
/* Can't delete left from text box start */
|
||||||
if (box_offset == 0)
|
if (box_offset == 0)
|
||||||
|
@ -1845,7 +1860,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
prev_offset = box_offset;
|
prev_offset = box_offset;
|
||||||
new_offset = utf8_prev(text_box->text, box_offset);
|
new_offset = utf8_prev(text_box->text, box_offset);
|
||||||
|
|
||||||
if (textbox_delete(bw, text_box, new_offset,
|
if (textinput_textbox_delete(bw, text_box, new_offset,
|
||||||
prev_offset - new_offset))
|
prev_offset - new_offset))
|
||||||
box_offset = new_offset;
|
box_offset = new_offset;
|
||||||
}
|
}
|
||||||
|
@ -1859,7 +1874,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
unsigned next_offset;
|
unsigned next_offset;
|
||||||
|
|
||||||
if (selection_exists) {
|
if (selection_exists) {
|
||||||
textbox_delete(bw, text_box, 0, 0);
|
textinput_textbox_delete(bw, text_box, 0, 0);
|
||||||
} else {
|
} else {
|
||||||
/* Can't delete right from text box end */
|
/* Can't delete right from text box end */
|
||||||
if (box_offset >= text_box->length)
|
if (box_offset >= text_box->length)
|
||||||
|
@ -1869,7 +1884,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
next_offset = utf8_next(text_box->text,
|
next_offset = utf8_next(text_box->text,
|
||||||
text_box->length, box_offset);
|
text_box->length, box_offset);
|
||||||
|
|
||||||
textbox_delete(bw, text_box, box_offset,
|
textinput_textbox_delete(bw, text_box, box_offset,
|
||||||
next_offset - box_offset);
|
next_offset - box_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1934,8 +1949,8 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
if (selection_exists)
|
if (selection_exists)
|
||||||
selection_clear(bw->sel, false);
|
selection_clear(bw->sel, false);
|
||||||
|
|
||||||
textarea_cut(bw, text_box, 0, text_box, text_box->length,
|
textinput_textarea_cut(bw, text_box, 0, text_box,
|
||||||
false);
|
text_box->length, false);
|
||||||
box_offset = 0;
|
box_offset = 0;
|
||||||
|
|
||||||
changed = true;
|
changed = true;
|
||||||
|
@ -1958,7 +1973,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
|
|
||||||
if (start_box && end_box) {
|
if (start_box && end_box) {
|
||||||
selection_clear(bw->sel, false);
|
selection_clear(bw->sel, false);
|
||||||
textarea_cut(bw, start_box, start_idx,
|
textinput_textarea_cut(bw, start_box, start_idx,
|
||||||
end_box, end_idx, true);
|
end_box, end_idx, true);
|
||||||
|
|
||||||
box_offset = start_idx;
|
box_offset = start_idx;
|
||||||
|
@ -2027,7 +2042,8 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
if (box_offset == 0)
|
if (box_offset == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
textarea_cut(bw, text_box, 0, text_box, box_offset, false);
|
textinput_textarea_cut(bw, text_box, 0, text_box,
|
||||||
|
box_offset, false);
|
||||||
box_offset = 0;
|
box_offset = 0;
|
||||||
|
|
||||||
changed = true;
|
changed = true;
|
||||||
|
@ -2040,7 +2056,7 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
if (box_offset >= text_box->length)
|
if (box_offset >= text_box->length)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
textarea_cut(bw, text_box, box_offset,
|
textinput_textarea_cut(bw, text_box, box_offset,
|
||||||
text_box, text_box->length, false);
|
text_box, text_box->length, false);
|
||||||
|
|
||||||
changed = true;
|
changed = true;
|
||||||
|
@ -2051,7 +2067,8 @@ bool textinput_input_callback(struct browser_window *bw, uint32_t key,
|
||||||
}
|
}
|
||||||
|
|
||||||
selection_clear(bw->sel, true);
|
selection_clear(bw->sel, true);
|
||||||
input_update_display(c, input, box_offset, to_textarea, changed);
|
textinput_input_update_display(c, input, box_offset,
|
||||||
|
to_textarea, changed);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -2099,7 +2116,7 @@ void textinput_input_click(struct content *c, struct box *input,
|
||||||
}
|
}
|
||||||
input->gadget->caret_box_offset = char_offset;
|
input->gadget->caret_box_offset = char_offset;
|
||||||
input->gadget->caret_form_offset =
|
input->gadget->caret_form_offset =
|
||||||
get_form_offset(input, text_box, char_offset);
|
textinput_get_form_offset(input, text_box, char_offset);
|
||||||
input->gadget->caret_pixel_offset = pixel_offset;
|
input->gadget->caret_pixel_offset = pixel_offset;
|
||||||
|
|
||||||
browser_window_place_caret(html->bw,
|
browser_window_place_caret(html->bw,
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
struct browser_window;
|
struct browser_window;
|
||||||
struct box;
|
struct box;
|
||||||
|
struct content;
|
||||||
|
|
||||||
|
|
||||||
struct caret
|
struct caret
|
||||||
|
|
Loading…
Reference in New Issue