Revision: 15115
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=15115
Author:   quorn
Date:     2008-06-04 14:32:06 +0200 (Wed, 04 Jun 2008)

Log Message:
-----------
Overwrite mode added, toggled with INSERTKEY

Modified Paths:
--------------
    branches/soc-2008-quorn/source/blender/blenkernel/BKE_text.h
    branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
    branches/soc-2008-quorn/source/blender/makesdna/DNA_space_types.h
    branches/soc-2008-quorn/source/blender/src/drawtext.c
    branches/soc-2008-quorn/source/blender/src/space.c

Modified: branches/soc-2008-quorn/source/blender/blenkernel/BKE_text.h
===================================================================
--- branches/soc-2008-quorn/source/blender/blenkernel/BKE_text.h        
2008-06-04 12:27:32 UTC (rev 15114)
+++ branches/soc-2008-quorn/source/blender/blenkernel/BKE_text.h        
2008-06-04 12:32:06 UTC (rev 15115)
@@ -81,6 +81,7 @@
 void   txt_split_curline       (struct Text *text);
 void   txt_backspace_char      (struct Text *text);
 int            txt_add_char            (struct Text *text, char add);
+int            txt_replace_char        (struct Text *text, char add);
 void   txt_find_panel          (struct SpaceText *st, int again);
 void   run_python_script       (struct SpaceText *st);
 int    jumptoline_interactive  (struct SpaceText *st);

Modified: branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c
===================================================================
--- branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c     
2008-06-04 12:27:32 UTC (rev 15114)
+++ branches/soc-2008-quorn/source/blender/blenkernel/intern/text.c     
2008-06-04 12:32:06 UTC (rev 15115)
@@ -2140,6 +2140,34 @@
        return 1;
 }
 
+int txt_replace_char (Text *text, char add)
+{
+       char del;
+       
+       if (!text) return 0;
+       if (!text->curl) return 0;
+
+       /* If text is selected or we're at the end of the line just use 
txt_add_char */
+       if (text->curc==text->curl->len || text->sell!=text->curl || 
text->selc!=text->curc || add=='\n') {
+               return txt_add_char(text, add);
+       }
+       
+       del= text->curl->line[text->curc];
+       text->curl->line[text->curc]= (unsigned char) add;
+       text->curc++;
+       txt_pop_sel(text);
+       
+       txt_make_dirty(text);
+       txt_clean_text(text);
+
+       /* Should probably create a new op for this */
+       if(!undoing) {
+               txt_undo_add_charop(text, UNDO_DEL, del);
+               txt_undo_add_charop(text, UNDO_INSERT, add);
+       }
+       return 1;
+}
+
 void indent(Text *text)
 {
        int len, num;

Modified: branches/soc-2008-quorn/source/blender/makesdna/DNA_space_types.h
===================================================================
--- branches/soc-2008-quorn/source/blender/makesdna/DNA_space_types.h   
2008-06-04 12:27:32 UTC (rev 15114)
+++ branches/soc-2008-quorn/source/blender/makesdna/DNA_space_types.h   
2008-06-04 12:32:06 UTC (rev 15115)
@@ -281,7 +281,7 @@
        int tabnumber;
        int currtab_set; 
        int showsyntax;
-       int unused_padd;
+       int overwrite;
        
        float pix_per_line;
 

Modified: branches/soc-2008-quorn/source/blender/src/drawtext.c
===================================================================
--- branches/soc-2008-quorn/source/blender/src/drawtext.c       2008-06-04 
12:27:32 UTC (rev 15114)
+++ branches/soc-2008-quorn/source/blender/src/drawtext.c       2008-06-04 
12:32:06 UTC (rev 15115)
@@ -634,10 +634,11 @@
 }
 
 static void draw_cursor(SpaceText *st) {
-       int h, x, i;
+       int h, x, i, w;
        Text *text= st->text;
        TextLine *linef, *linel;
        int charf, charl;
+       char ch[2];
        
        if (text->curl==text->sell && text->curc==text->selc) {
                x= text_draw(st, text->curl->line, st->left, text->curc, 0, 0, 
0, NULL);
@@ -645,9 +646,19 @@
                if (x) {
                        h= txt_get_span(text->lines.first, text->curl) - 
st->top;
 
-                       BIF_ThemeColor(TH_HILITE);
-                       
-                       glRecti(x-1, curarea->winy-st->lheight*(h)-2, x+1, 
curarea->winy-st->lheight*(h+1)-2);
+                       if (st->overwrite) {
+                               ch[0]= (unsigned char) 
text->curl->line[text->curc];
+                               if (ch[0]=='\0') ch[0]=' ';
+                               ch[1]= '\0';
+                               w= BMF_GetStringWidth(spacetext_get_font(st), 
ch);
+                               BIF_ThemeColor(TH_SHADE2);
+                               glRecti(x, curarea->winy-st->lheight*(h)-2, 
x+w, curarea->winy-st->lheight*(h+1)-2);
+                               BIF_ThemeColor(TH_HILITE);
+                               glRecti(x, curarea->winy-st->lheight*(h+1)-3, 
x+w, curarea->winy-st->lheight*(h+1)-1);
+                       } else {
+                               BIF_ThemeColor(TH_HILITE);
+                               glRecti(x-1, curarea->winy-st->lheight*(h)-2, 
x+1, curarea->winy-st->lheight*(h+1)-2);
+                       }
                }
        } else {
                int span= txt_get_span(text->curl, text->sell);
@@ -1594,7 +1605,7 @@
                        }
                }
        } else if (ascii) {
-               if (txt_add_char(text, ascii)) {
+               if ((st->overwrite && txt_replace_char(text, ascii)) || 
txt_add_char(text, ascii)) {
                        if (st->showsyntax) get_format_string(st);
                        pop_space_text(st);
                        do_draw= 1;
@@ -1894,6 +1905,10 @@
                        pop_space_text(st);
                        st->currtab_set = setcurr_tab(text);
                        break;
+               case INSERTKEY:
+                       st->overwrite= !st->overwrite;
+                       do_draw= 1;
+                       break;
                case DOWNARROWKEY:
                        txt_move_down(text, G.qual & LR_SHIFTKEY);
                        set_tabs(text);

Modified: branches/soc-2008-quorn/source/blender/src/space.c
===================================================================
--- branches/soc-2008-quorn/source/blender/src/space.c  2008-06-04 12:27:32 UTC 
(rev 15114)
+++ branches/soc-2008-quorn/source/blender/src/space.c  2008-06-04 12:32:06 UTC 
(rev 15115)
@@ -6011,6 +6011,8 @@
        st->lheight= 12;
        st->showlinenrs= 0;
        st->tabnumber = 4;
+       st->showsyntax= 0;
+       st->overwrite= 0;
        st->currtab_set = 0;
        
        st->top= 0;


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to