Rework gtk_xtext_selection_draw(), simplify calls to _selection_render()
Fixes #992.
This commit is contained in:
		
							parent
							
								
									af7463e2bc
								
							
						
					
					
						commit
						5706550cc1
					
				
					 1 changed files with 17 additions and 12 deletions
				
			
		| 
						 | 
					@ -1150,11 +1150,11 @@ gtk_xtext_selection_down (GtkXText *xtext, textentry *start, textentry *end,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
gtk_xtext_selection_render (GtkXText *xtext,
 | 
					gtk_xtext_selection_render (GtkXText *xtext, textentry *start_ent, textentry *end_ent)
 | 
				
			||||||
									 textentry *start_ent, int start_offset,
 | 
					 | 
				
			||||||
									 textentry *end_ent, int end_offset)
 | 
					 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	textentry *ent;
 | 
						textentry *ent;
 | 
				
			||||||
 | 
						int start_offset = start_ent->mark_start;
 | 
				
			||||||
 | 
						int end_offset = end_ent->mark_end;
 | 
				
			||||||
	int start, end;
 | 
						int start, end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	xtext->skip_border_fills = TRUE;
 | 
						xtext->skip_border_fills = TRUE;
 | 
				
			||||||
| 
						 | 
					@ -1307,11 +1307,14 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
 | 
				
			||||||
	int high_x;
 | 
						int high_x;
 | 
				
			||||||
	int high_y;
 | 
						int high_y;
 | 
				
			||||||
	int tmp;
 | 
						int tmp;
 | 
				
			||||||
 | 
						int oob;
 | 
				
			||||||
 | 
						int marking_up;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (xtext->select_start_y > xtext->select_end_y)
 | 
						if (xtext->select_start_y > xtext->select_end_y)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		low_x = xtext->select_end_x;
 | 
							low_x = xtext->select_end_x;
 | 
				
			||||||
		low_y = xtext->select_end_y;
 | 
							low_y = xtext->select_end_y;
 | 
				
			||||||
 | 
							marking_up = TRUE;
 | 
				
			||||||
		high_x = xtext->select_start_x;
 | 
							high_x = xtext->select_start_x;
 | 
				
			||||||
		high_y = xtext->select_start_y;
 | 
							high_y = xtext->select_start_y;
 | 
				
			||||||
	} else
 | 
						} else
 | 
				
			||||||
| 
						 | 
					@ -1320,20 +1323,22 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
 | 
				
			||||||
		low_y = xtext->select_start_y;
 | 
							low_y = xtext->select_start_y;
 | 
				
			||||||
		high_x = xtext->select_end_x;
 | 
							high_x = xtext->select_end_x;
 | 
				
			||||||
		high_y = xtext->select_end_y;
 | 
							high_y = xtext->select_end_y;
 | 
				
			||||||
 | 
							marking_up = FALSE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ent_start = gtk_xtext_find_char (xtext, low_x, low_y, &offset_start, &tmp);
 | 
						ent_start = gtk_xtext_find_char (xtext, low_x, low_y, &offset_start, &oob);
 | 
				
			||||||
	if (!ent_start)
 | 
						if (!ent_start)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if (xtext->adj->value != xtext->buffer->old_value)
 | 
							if (xtext->adj->value != xtext->buffer->old_value)
 | 
				
			||||||
			gtk_xtext_render_page (xtext);
 | 
								gtk_xtext_render_page (xtext);
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (tmp) {
 | 
						else if (oob)
 | 
				
			||||||
		offset_start = xtext->buffer->last_offset_start;
 | 
						{
 | 
				
			||||||
 | 
							offset_start = marking_up == TRUE? 0: xtext->buffer->last_offset_start;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ent_end = gtk_xtext_find_char (xtext, high_x, high_y, &offset_end, &tmp);
 | 
						ent_end = gtk_xtext_find_char (xtext, high_x, high_y, &offset_end, &oob);
 | 
				
			||||||
	if (!ent_end)
 | 
						if (!ent_end)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		ent_end = xtext->buffer->text_last;
 | 
							ent_end = xtext->buffer->text_last;
 | 
				
			||||||
| 
						 | 
					@ -1345,9 +1350,9 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		offset_end = ent_end->str_len;
 | 
							offset_end = ent_end->str_len;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	else if (tmp)
 | 
						else if (oob)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		offset_end = xtext->buffer->last_offset_end;
 | 
							offset_end = marking_up == FALSE? ent_end->str_len: xtext->buffer->last_offset_end;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* marking less than a complete line? */
 | 
						/* marking less than a complete line? */
 | 
				
			||||||
| 
						 | 
					@ -1390,7 +1395,7 @@ gtk_xtext_selection_draw (GtkXText * xtext, GdkEventMotion * event, gboolean ren
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (render)
 | 
						if (render)
 | 
				
			||||||
		gtk_xtext_selection_render (xtext, ent_start, offset_start, ent_end, offset_end);
 | 
							gtk_xtext_selection_render (xtext, ent_start, ent_end);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int
 | 
					static int
 | 
				
			||||||
| 
						 | 
					@ -1997,7 +2002,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
 | 
				
			||||||
			gtk_xtext_selection_clear (xtext->buffer);
 | 
								gtk_xtext_selection_clear (xtext->buffer);
 | 
				
			||||||
			ent->mark_start = offset;
 | 
								ent->mark_start = offset;
 | 
				
			||||||
			ent->mark_end = offset + len;
 | 
								ent->mark_end = offset + len;
 | 
				
			||||||
			gtk_xtext_selection_render (xtext, ent, offset, ent, offset + len);
 | 
								gtk_xtext_selection_render (xtext, ent, ent);
 | 
				
			||||||
			xtext->word_or_line_select = TRUE;
 | 
								xtext->word_or_line_select = TRUE;
 | 
				
			||||||
			if (prefs.hex_text_autocopy_text)
 | 
								if (prefs.hex_text_autocopy_text)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					@ -2016,7 +2021,7 @@ gtk_xtext_button_press (GtkWidget * widget, GdkEventButton * event)
 | 
				
			||||||
			gtk_xtext_selection_clear (xtext->buffer);
 | 
								gtk_xtext_selection_clear (xtext->buffer);
 | 
				
			||||||
			ent->mark_start = 0;
 | 
								ent->mark_start = 0;
 | 
				
			||||||
			ent->mark_end = ent->str_len;
 | 
								ent->mark_end = ent->str_len;
 | 
				
			||||||
			gtk_xtext_selection_render (xtext, ent, 0, ent, ent->str_len);
 | 
								gtk_xtext_selection_render (xtext, ent, ent);
 | 
				
			||||||
			xtext->word_or_line_select = TRUE;
 | 
								xtext->word_or_line_select = TRUE;
 | 
				
			||||||
			if (prefs.hex_text_autocopy_text)
 | 
								if (prefs.hex_text_autocopy_text)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue