From 0b8c46a8a8ac1c68f90240144552de65b537285c Mon Sep 17 00:00:00 2001 From: Nick Treleaven Date: Thu, 15 Oct 2009 16:54:15 +0000 Subject: [PATCH] Add highlighting_set_styles() to API, use for Split Window plugin so filetypes.common settings get set too. Make highlighting_set_styles() take GeanyFiletype pointer instead of filetype id. git-svn-id: https://geany.svn.sourceforge.net/svnroot/geany/trunk@4322 ea778897-0a13-0410-b9d1-a72fbfd435f5 --- ChangeLog | 7 +++++ plugins/geanyfunctions.h | 2 ++ plugins/splitwindow.c | 58 +--------------------------------------- src/document.c | 2 +- src/highlighting.c | 17 +++++++----- src/highlighting.h | 2 +- src/plugindata.h | 3 ++- src/plugins.c | 3 ++- 8 files changed, 26 insertions(+), 68 deletions(-) diff --git a/ChangeLog b/ChangeLog index db0b400e9..c1b98a34a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,13 @@ src/project.c, src/search.c, src/editor.c, src/ui_utils.c, plugins/classbuilder.c: Revert r4301 - utils_free_pointers() taking 4 arguments. + * src/highlighting.c, src/highlighting.h, src/plugindata.h, + src/document.c, src/plugins.c, plugins/geanyfunctions.h, + plugins/splitwindow.c: + Add highlighting_set_styles() to API, use for Split Window plugin so + filetypes.common settings get set too. + Make highlighting_set_styles() take GeanyFiletype pointer instead of + filetype id. 2009-10-14 Nick Treleaven diff --git a/plugins/geanyfunctions.h b/plugins/geanyfunctions.h index a3a02b718..144a36c40 100644 --- a/plugins/geanyfunctions.h +++ b/plugins/geanyfunctions.h @@ -294,6 +294,8 @@ geany_functions->p_search->show_find_in_files_dialog #define highlighting_get_style \ geany_functions->p_highlighting->get_style +#define highlighting_set_styles \ + geany_functions->p_highlighting->set_styles #define filetypes_detect_from_file \ geany_functions->p_filetypes->detect_from_file #define filetypes_lookup_by_name \ diff --git a/plugins/splitwindow.c b/plugins/splitwindow.c index 6a748b8d8..96cd1b9a6 100644 --- a/plugins/splitwindow.c +++ b/plugins/splitwindow.c @@ -86,54 +86,6 @@ static EditWindow edit_window = {NULL, NULL, NULL, NULL}; static void on_unsplit(GtkMenuItem *menuitem, gpointer user_data); -static gint sci_get_value(ScintillaObject *sci, gint message_id, gint param) -{ - return scintilla_send_message(sci, message_id, param, 0); -} - - -static void set_styles(ScintillaObject *oldsci, ScintillaObject *newsci) -{ - gint style_id; - gint val; - - for (style_id = 0; style_id <= 127; style_id++) - { - val = sci_get_value(oldsci, SCI_STYLEGETFORE, style_id); - scintilla_send_message(newsci, SCI_STYLESETFORE, style_id, val); - val = sci_get_value(oldsci, SCI_STYLEGETBACK, style_id); - scintilla_send_message(newsci, SCI_STYLESETBACK, style_id, val); - val = sci_get_value(oldsci, SCI_STYLEGETBOLD, style_id); - scintilla_send_message(newsci, SCI_STYLESETBOLD, style_id, val); - val = sci_get_value(oldsci, SCI_STYLEGETITALIC, style_id); - scintilla_send_message(newsci, SCI_STYLESETITALIC, style_id, val); - } - val = sci_get_value(oldsci, SCI_GETCARETFORE, 0); - scintilla_send_message(newsci, SCI_SETCARETFORE, val, 0); -} - - -static void update_font(ScintillaObject *current, ScintillaObject *sci) -{ - gint style_id; - gint size; - gchar font_name[1024]; /* should be big enough */ - - scintilla_send_message(current, SCI_STYLEGETFONT, 0, (sptr_t)font_name); - size = sci_get_value(current, SCI_STYLEGETSIZE, 0); - - for (style_id = 0; style_id <= 127; style_id++) - { - sci_set_font(sci, style_id, font_name, size); - } - - /* line number and braces */ - sci_set_font(sci, STYLE_LINENUMBER, font_name, size); - sci_set_font(sci, STYLE_BRACELIGHT, font_name, size); - sci_set_font(sci, STYLE_BRACEBAD, font_name, size); -} - - /* line numbers visibility */ static void set_line_numbers(ScintillaObject * sci, gboolean set, gint extra_width) { @@ -157,20 +109,12 @@ static void set_line_numbers(ScintillaObject * sci, gboolean set, gint extra_wid static void sync_to_current(ScintillaObject *sci, ScintillaObject *current) { gpointer sdoc; - gint lexer; - gint pos; /* set the new sci widget to view the existing Scintilla document */ sdoc = (gpointer) scintilla_send_message(current, SCI_GETDOCPOINTER, 0, 0); scintilla_send_message(sci, SCI_SETDOCPOINTER, 0, (sptr_t) sdoc); - update_font(current, sci); - lexer = scintilla_send_message(current, SCI_GETLEXER, 0, 0); - scintilla_send_message(sci, SCI_SETLEXER, lexer, 0); - set_styles(current, sci); - - pos = sci_get_current_position(current); - sci_set_current_position(sci, pos, TRUE); + highlighting_set_styles(sci, edit_window.editor->document->file_type); /* override some defaults */ set_line_numbers(sci, TRUE, 0); diff --git a/src/document.c b/src/document.c index a3de1d271..7d339ff74 100644 --- a/src/document.c +++ b/src/document.c @@ -2469,7 +2469,7 @@ static void document_load_config(GeanyDocument *doc, GeanyFiletype *type, tm_workspace_remove_object(doc->tm_file, TRUE, TRUE); doc->tm_file = NULL; } - highlighting_set_styles(doc->editor->sci, type->id); + highlighting_set_styles(doc->editor->sci, type); editor_set_indentation_guides(doc->editor); build_menu_update(doc); queue_colourise(doc); diff --git a/src/highlighting.c b/src/highlighting.c index 8cbeb549a..f265d300f 100644 --- a/src/highlighting.c +++ b/src/highlighting.c @@ -3233,18 +3233,21 @@ void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *con /* lang_name is the name used for the styleset_foo function, e.g. foo. */ #define styleset_case(ft_id, styleset_func) \ case (ft_id): \ - styleset_func (sci); \ + styleset_func(sci); \ break -void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx) +/** Setup highlighting and other visual settings. + * @param sci Scintilla widget. + * @param ft Filetype settings to use. */ +void highlighting_set_styles(ScintillaObject *sci, GeanyFiletype *ft) { - filetypes_load_config(filetype_idx, FALSE); /* load filetypes.ext */ + filetypes_load_config(ft->id, FALSE); /* load filetypes.ext */ /* load tags files (some lexers highlight global typenames) */ - if (filetype_idx != GEANY_FILETYPES_NONE) - symbols_global_tags_loaded(filetype_idx); + if (ft->id != GEANY_FILETYPES_NONE) + symbols_global_tags_loaded(ft->id); - switch (filetype_idx) + switch (ft->id) { styleset_case(GEANY_FILETYPES_ADA, styleset_ada); styleset_case(GEANY_FILETYPES_ASM, styleset_asm); @@ -3291,7 +3294,7 @@ void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx) styleset_case(GEANY_FILETYPES_YAML, styleset_yaml); case GEANY_FILETYPES_NONE: default: - styleset_default(sci, filetype_idx); + styleset_default(sci, ft->id); } } diff --git a/src/highlighting.h b/src/highlighting.h index 92b951529..27769c570 100644 --- a/src/highlighting.h +++ b/src/highlighting.h @@ -43,7 +43,7 @@ GeanyLexerStyle; void highlighting_init_styles(gint filetype_idx, GKeyFile *config, GKeyFile *configh); -void highlighting_set_styles(ScintillaObject *sci, gint filetype_idx); +void highlighting_set_styles(ScintillaObject *sci, GeanyFiletype *ft); const GeanyLexerStyle *highlighting_get_style(gint ft_id, gint style_id); diff --git a/src/plugindata.h b/src/plugindata.h index c00cf45bc..6243c80c7 100644 --- a/src/plugindata.h +++ b/src/plugindata.h @@ -50,7 +50,7 @@ enum { /** The Application Programming Interface (API) version, incremented * whenever any plugin data types are modified or appended to. */ - GEANY_API_VERSION = 161, + GEANY_API_VERSION = 162, /** The Application Binary Interface (ABI) version, incremented whenever * existing fields in the plugin data types have to be changed or reordered. */ @@ -493,6 +493,7 @@ KeybindingFuncs; typedef struct HighlightingFuncs { const struct GeanyLexerStyle* (*get_style) (gint ft_id, gint style_id); + void (*set_styles) (struct _ScintillaObject *sci, struct GeanyFiletype *ft); } HighlightingFuncs; diff --git a/src/plugins.c b/src/plugins.c index 20711a48a..7cb28ba57 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -272,7 +272,8 @@ static SearchFuncs search_funcs = { }; static HighlightingFuncs highlighting_funcs = { - &highlighting_get_style + &highlighting_get_style, + &highlighting_set_styles }; static FiletypeFuncs filetype_funcs = {