Skip to content

Commit

Permalink
Merge pull request #575 from techee/colourise
Browse files Browse the repository at this point in the history
Colourise only the visible area when highlighting typenames
  • Loading branch information
b4n committed Feb 17, 2016
2 parents 4316872 + b361b83 commit d0cd111
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 9 deletions.
12 changes: 8 additions & 4 deletions src/document.c
Expand Up @@ -510,8 +510,12 @@ static gint document_get_new_idx(void)
}


static void queue_colourise(GeanyDocument *doc)
static void queue_colourise(GeanyDocument *doc, gboolean full_colourise)
{
/* make sure we don't override previously set full_colourise=TRUE by FALSE */
if (!doc->priv->colourise_needed || !doc->priv->full_colourise)
doc->priv->full_colourise = full_colourise;

/* Colourise the editor before it is next drawn */
doc->priv->colourise_needed = TRUE;

Expand Down Expand Up @@ -1394,7 +1398,7 @@ GeanyDocument *document_open_file_full(GeanyDocument *doc, const gchar *filename
/* add the text to the ScintillaObject */
sci_set_readonly(doc->editor->sci, FALSE); /* to allow replacing text */
sci_set_text(doc->editor->sci, filedata.data); /* NULL terminated data */
queue_colourise(doc); /* Ensure the document gets colourised. */
queue_colourise(doc, TRUE); /* Ensure the document gets colourised. */

/* detect & set line endings */
editor_mode = utils_get_line_endings(filedata.data, filedata.len);
Expand Down Expand Up @@ -2750,7 +2754,7 @@ void document_highlight_tags(GeanyDocument *doc)
keywords = g_string_free(keywords_str, FALSE);
sci_set_keywords(doc->editor->sci, keyword_idx, keywords);
g_free(keywords);
queue_colourise(doc); /* force re-highlighting the entire document */
queue_colourise(doc, FALSE); /* re-highlight the visible area */
}
}

Expand Down Expand Up @@ -2811,7 +2815,7 @@ static void document_load_config(GeanyDocument *doc, GeanyFiletype *type,
highlighting_set_styles(doc->editor->sci, type);
editor_set_indentation_guides(doc->editor);
build_menu_update(doc);
queue_colourise(doc);
queue_colourise(doc, TRUE);
if (type->priv->symbol_list_sort_mode == SYMBOLS_SORT_USE_PREVIOUS)
doc->priv->symbol_list_sort_mode = interface_prefs.symbols_sort_mode;
else
Expand Down
1 change: 1 addition & 0 deletions src/documentprivate.h
Expand Up @@ -90,6 +90,7 @@ typedef struct GeanyDocumentPrivate
/* Used so Undo/Redo works for encoding changes. */
FileEncoding saved_encoding;
gboolean colourise_needed; /* use document.c:queue_colourise() instead */
gboolean full_colourise;
gint line_count; /* Number of lines in the document. */
gint symbol_list_sort_mode;
/* indicates whether a file is on a remote filesystem, works only with GIO/GVfs */
Expand Down
26 changes: 21 additions & 5 deletions src/editor.c
Expand Up @@ -4775,12 +4775,28 @@ static gboolean editor_check_colourise(GeanyEditor *editor)
return FALSE;

doc->priv->colourise_needed = FALSE;
sci_colourise(editor->sci, 0, -1);

/* now that the current document is colourised, fold points are now accurate,
* so force an update of the current function/tag. */
symbols_get_current_function(NULL, NULL);
ui_update_statusbar(NULL, -1);
if (doc->priv->full_colourise)
{
sci_colourise(editor->sci, 0, -1);

/* now that the current document is colourised, fold points are now accurate,
* so force an update of the current function/tag. */
symbols_get_current_function(NULL, NULL);
ui_update_statusbar(NULL, -1);
}
else
{
gint start_line, end_line, start, end;

start_line = SSM(doc->editor->sci, SCI_GETFIRSTVISIBLELINE, 0, 0);
end_line = start_line + SSM(editor->sci, SCI_LINESONSCREEN, 0, 0);
start_line = SSM(editor->sci, SCI_DOCLINEFROMVISIBLE, start_line, 0);
end_line = SSM(editor->sci, SCI_DOCLINEFROMVISIBLE, end_line, 0);
start = sci_get_position_from_line(editor->sci, start_line);
end = sci_get_line_end_position(editor->sci, end_line);
sci_colourise(editor->sci, start, end);
}

return TRUE;
}
Expand Down

0 comments on commit d0cd111

Please sign in to comment.