From d9c23d8d5d1cddfe48fbeecee0a23dacd2d60d59 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Tue, 30 Nov 2010 22:39:41 +0000 Subject: minor console changes. - remove report argument from console functions. - don't update the scroll area while drawing, do this within operators instead. - dont redraw while selecting text unless selection changes. --- .../blender/editors/space_console/console_draw.c | 19 +++---- .../blender/editors/space_console/console_intern.h | 8 +-- source/blender/editors/space_console/console_ops.c | 61 ++++++++++++++++------ .../blender/editors/space_console/space_console.c | 14 +---- 4 files changed, 62 insertions(+), 40 deletions(-) (limited to 'source') diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c index 8112008e9a1..f26bc63f01d 100644 --- a/source/blender/editors/space_console/console_draw.c +++ b/source/blender/editors/space_console/console_draw.c @@ -187,7 +187,7 @@ static int console_textview_line_color(struct TextViewContext *tvc, unsigned cha } -static int console_textview_main__internal(struct SpaceConsole *sc, struct ARegion *ar, ReportList *UNUSED(reports), int draw, int mval[2], void **mouse_pick, int *pos_pick) +static int console_textview_main__internal(struct SpaceConsole *sc, struct ARegion *ar, int draw, int mval[2], void **mouse_pick, int *pos_pick) { ConsoleLine cl_dummy= {0}; int ret= 0; @@ -195,6 +195,7 @@ static int console_textview_main__internal(struct SpaceConsole *sc, struct ARegi View2D *v2d= &ar->v2d; TextViewContext tvc= {0}; + tvc.begin= console_textview_begin; tvc.end= console_textview_end; @@ -221,19 +222,19 @@ static int console_textview_main__internal(struct SpaceConsole *sc, struct ARegi } -void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar) { int mval[2] = {INT_MAX, INT_MAX}; - console_textview_main__internal(sc, ar, reports, 1, mval, NULL, NULL); + console_textview_main__internal(sc, ar, 1, mval, NULL, NULL); } -int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports) +int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar) { int mval[2] = {INT_MAX, INT_MAX}; - return console_textview_main__internal(sc, ar, reports, 0, mval, NULL, NULL); + return console_textview_main__internal(sc, ar, 0, mval, NULL, NULL); } -void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y) +void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, int mouse_y) { void *mouse_pick= NULL; int mval[2]; @@ -241,11 +242,11 @@ void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList mval[0]= 0; mval[1]= mouse_y; - console_textview_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL); + console_textview_main__internal(sc, ar, 0, mval, &mouse_pick, NULL); return (void *)mouse_pick; } -int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mval[2]) +int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, int mval[2]) { int pos_pick= 0; void *mouse_pick= NULL; @@ -254,6 +255,6 @@ int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *r mval_clamp[0]= CLAMPIS(mval[0], CONSOLE_DRAW_MARGIN, ar->winx-(CONSOLE_DRAW_SCROLL + CONSOLE_DRAW_MARGIN)); mval_clamp[1]= CLAMPIS(mval[1], CONSOLE_DRAW_MARGIN, ar->winy-CONSOLE_DRAW_MARGIN); - console_textview_main__internal(sc, ar, reports, 0, mval_clamp, &mouse_pick, &pos_pick); + console_textview_main__internal(sc, ar, 0, mval_clamp, &mouse_pick, &pos_pick); return pos_pick; } diff --git a/source/blender/editors/space_console/console_intern.h b/source/blender/editors/space_console/console_intern.h index b8d53785d74..72eac14c2ca 100644 --- a/source/blender/editors/space_console/console_intern.h +++ b/source/blender/editors/space_console/console_intern.h @@ -32,10 +32,10 @@ struct ReportList; struct bContext; /* console_draw.c */ -void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); -int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports); /* needed to calculate the scrollbar */ -void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, struct ReportList *reports, int mouse_y); /* needed for selection */ -int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mval[2]); +void console_textview_main(struct SpaceConsole *sc, struct ARegion *ar); +int console_textview_height(struct SpaceConsole *sc, struct ARegion *ar); /* needed to calculate the scrollbar */ +void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, int mouse_y); /* needed for selection */ +int console_char_pick(struct SpaceConsole *sc, struct ARegion *ar, int mval[2]); void console_scrollback_prompt_begin(struct SpaceConsole *sc, ConsoleLine *cl_dummy); void console_scrollback_prompt_end(struct SpaceConsole *sc, ConsoleLine *cl_dummy); diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c index 6aef967b851..e8c7cc6c926 100644 --- a/source/blender/editors/space_console/console_ops.c +++ b/source/blender/editors/space_console/console_ops.c @@ -40,6 +40,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "UI_view2d.h" #include "ED_screen.h" #include "RNA_access.h" @@ -47,6 +48,13 @@ #include "console_intern.h" +static void console_textview_update_rect(SpaceConsole *sc, ARegion *ar) +{ + View2D *v2d= &ar->v2d; + + UI_view2d_totRect_set(v2d, ar->winx-1, console_textview_height(sc, ar)); +} + static void console_select_offset(SpaceConsole *sc, const int offset) { sc->sel_start += offset; @@ -349,6 +357,8 @@ void CONSOLE_OT_move(wmOperatorType *ot) #define TAB_LENGTH 4 static int insert_exec(bContext *C, wmOperator *op) { + SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); ConsoleLine *ci= console_history_verify(C); char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); int len; @@ -373,7 +383,8 @@ static int insert_exec(bContext *C, wmOperator *op) SpaceConsole *sc= CTX_wm_space_console(C); console_select_offset(sc, len); } - + + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -424,13 +435,12 @@ static EnumPropertyItem delete_type_items[]= { static int delete_exec(bContext *C, wmOperator *op) { - + SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); ConsoleLine *ci= console_history_verify(C); - - - int done = 0; - int type= RNA_enum_get(op->ptr, "type"); + const short type= RNA_enum_get(op->ptr, "type"); + int done = 0; if(ci->len==0) { return OPERATOR_CANCELLED; @@ -461,7 +471,8 @@ static int delete_exec(bContext *C, wmOperator *op) SpaceConsole *sc= CTX_wm_space_console(C); console_select_offset(sc, -1); } - + + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -488,6 +499,7 @@ void CONSOLE_OT_delete(wmOperatorType *ot) static int clear_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); short scrollback= RNA_boolean_get(op->ptr, "scrollback"); short history= RNA_boolean_get(op->ptr, "history"); @@ -503,9 +515,10 @@ static int clear_exec(bContext *C, wmOperator *op) while(sc->history.first) console_history_free(sc, sc->history.first); } - + + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); - + return OPERATOR_FINISHED; } @@ -531,6 +544,8 @@ void CONSOLE_OT_clear(wmOperatorType *ot) static int history_cycle_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); + ConsoleLine *ci= console_history_verify(C); /* TODO - stupid, just prevernts crashes when no command line */ short reverse= RNA_boolean_get(op->ptr, "reverse"); /* assumes down, reverse is up */ int prev_len= ci->len; @@ -566,6 +581,8 @@ static int history_cycle_exec(bContext *C, wmOperator *op) ci= sc->history.last; console_select_offset(sc, ci->len - prev_len); + /* could be wrapped so update scroll rect */ + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -591,6 +608,7 @@ void CONSOLE_OT_history_cycle(wmOperatorType *ot) static int history_append_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); + ScrArea *sa= CTX_wm_area(C); ConsoleLine *ci= console_history_verify(C); char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); /* own this text in the new line, dont free */ int cursor= RNA_int_get(op->ptr, "current_character"); @@ -613,9 +631,9 @@ static int history_append_exec(bContext *C, wmOperator *op) ci= console_history_add_str(sc, str, 1); /* own the string */ console_select_offset(sc, ci->len - prev_len); console_line_cursor_set(ci, cursor); - - ED_area_tag_redraw(CTX_wm_area(C)); - + + ED_area_tag_redraw(sa); + return OPERATOR_FINISHED; } @@ -641,6 +659,8 @@ void CONSOLE_OT_history_append(wmOperatorType *ot) static int scrollback_append_exec(bContext *C, wmOperator *op) { SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); + ConsoleLine *ci= console_history_verify(C); char *str= RNA_string_get_alloc(op->ptr, "text", NULL, 0); /* own this text in the new line, dont free */ @@ -650,7 +670,8 @@ static int scrollback_append_exec(bContext *C, wmOperator *op) ci->type= type; console_scrollback_limit(sc); - + + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -765,6 +786,7 @@ void CONSOLE_OT_copy(wmOperatorType *ot) static int paste_exec(bContext *C, wmOperator *UNUSED(op)) { SpaceConsole *sc= CTX_wm_space_console(C); + ARegion *ar= CTX_wm_region(C); ConsoleLine *ci= console_history_verify(C); char *buf_str= WM_clipboard_text_get(0); @@ -793,6 +815,7 @@ static int paste_exec(bContext *C, wmOperator *UNUSED(op)) MEM_freeN(buf_str); + console_textview_update_rect(sc, ar); ED_area_tag_redraw(CTX_wm_area(C)); return OPERATOR_FINISHED; @@ -821,7 +844,7 @@ typedef struct SetConsoleCursor { static void set_cursor_to_pos(SpaceConsole *sc, ARegion *ar, SetConsoleCursor *scu, int mval[2], int UNUSED(sel)) { int pos; - pos= console_char_pick(sc, ar, NULL, mval); + pos= console_char_pick(sc, ar, mval); if(scu->sel_init == INT_MAX) { scu->sel_init= pos; @@ -848,12 +871,20 @@ static void console_modal_select_apply(bContext *C, wmOperator *op, wmEvent *eve ARegion *ar= CTX_wm_region(C); SetConsoleCursor *scu= op->customdata; int mval[2]; + int sel_prev[2]; mval[0]= event->mval[0]; mval[1]= event->mval[1]; + sel_prev[0]= sc->sel_start; + sel_prev[1]= sc->sel_end; + set_cursor_to_pos(sc, ar, scu, mval, TRUE); - ED_area_tag_redraw(CTX_wm_area(C)); + + /* only redraw if the selection changed */ + if(sel_prev[0] != sc->sel_start || sel_prev[1] != sc->sel_end) { + ED_area_tag_redraw(CTX_wm_area(C)); + } } static void set_cursor_exit(bContext *UNUSED(C), wmOperator *op) diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c index 55fb6a50bb4..4fbe96c0e54 100644 --- a/source/blender/editors/space_console/space_console.c +++ b/source/blender/editors/space_console/space_console.c @@ -53,14 +53,6 @@ #include "console_intern.h" // own include -static void console_textview_update_rect(const bContext *C, ARegion *ar) -{ - SpaceConsole *sc= CTX_wm_space_console(C); - View2D *v2d= &ar->v2d; - - UI_view2d_totRect_set(v2d, ar->winx-1, console_textview_height(sc, ar, CTX_wm_reports(C))); -} - /* ******************** default callbacks for console space ***************** */ static SpaceLink *console_new(const bContext *UNUSED(C)) @@ -208,7 +200,7 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) SpaceConsole *sc= CTX_wm_space_console(C); View2D *v2d= &ar->v2d; View2DScrollers *scrollers; - + if(sc->scrollback.first==NULL) WM_operator_name_call((bContext *)C, "CONSOLE_OT_banner", WM_OP_EXEC_DEFAULT, NULL); @@ -216,15 +208,13 @@ static void console_main_area_draw(const bContext *C, ARegion *ar) UI_ThemeClearColor(TH_BACK); glClear(GL_COLOR_BUFFER_BIT); - console_textview_update_rect(C, ar); - /* worlks best with no view2d matrix set */ UI_view2d_view_ortho(v2d); /* data... */ console_history_verify(C); /* make sure we have some command line */ - console_textview_main(sc, ar, CTX_wm_reports(C)); + console_textview_main(sc, ar); /* reset view matrix */ UI_view2d_view_restore(C); -- cgit v1.2.3