OSDN Git Service

* WorkBackup: 2015/06/11(Thr) AM 06:21
authorKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Wed, 10 Jun 2015 21:22:05 +0000 (06:22 +0900)
committerKoine Yuusuke(koinec) <koinec@users.sourceforge.jp>
Wed, 10 Jun 2015 21:22:05 +0000 (06:22 +0900)
libedittext/Makefile
libedittext/drd64_libedittext.h
libedittext/drd64_libedittext_cursorctrl.c
libedittext/drd64_libedittext_cursorctrl.h

index 626c6b2..3e6b4ae 100644 (file)
@@ -58,6 +58,7 @@ OBJS = \
                drd64_libedittext_lineedit.o \
                drd64_libedittext_section.o \
                drd64_libedittext_cursorinfo.o \
+               drd64_libedittext_cursorctrl.o \
                drd64_libedittext_cursorapi.o \
                drd64_libedittext_system.o
 HEADER = \
@@ -69,6 +70,7 @@ HEADER = \
                drd64_libedittext_lineedit.h \
                drd64_libedittext_section.h \
                drd64_libedittext_cursorinfo.h \
+               drd64_libedittext_cursorctrl.h \
                drd64_libedittext_system.h \
                drd64_libedittext_types.h \
                drd64_libedittext_config.h \
@@ -113,6 +115,9 @@ drd64_libedittext_section.o: drd64_libedittext_section.c $(HEADER)
 drd64_libedittext_cursorinfo.o: drd64_libedittext_cursorinfo.c $(HEADER)
        $(CC) -c -o drd64_libedittext_cursorinfo.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
                                drd64_libedittext_cursorinfo.c
+drd64_libedittext_cursorctrl.o: drd64_libedittext_cursorctrl.c $(HEADER)
+       $(CC) -c -o drd64_libedittext_cursorctrl.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
+                               drd64_libedittext_cursorctrl.c
 drd64_libedittext_cursorapi.o: drd64_libedittext_cursorapi.c $(HEADER)
        $(CC) -c -o drd64_libedittext_cursorapi.o $(FLAGS_DEBUG) $(FLAGS_COMPILE) \
                                drd64_libedittext_cursorapi.c
index 0bd2ecd..8a6a1a0 100644 (file)
@@ -64,6 +64,7 @@ Comment:
 #include"drd64_libedittext_lineedit.h"
 #include"drd64_libedittext_section.h"
 #include"drd64_libedittext_cursorinfo.h"
+#include"drd64_libedittext_cursorctrl.h"
 #include"drd64_libedittext_debug.h"
 
 #include"../include/libedittext.h"
index bbebac8..86ad00b 100644 (file)
@@ -47,26 +47,48 @@ Comment:
 int
        LibEditText_CursorCtrl_CheckAdujstCursorRange(
                        LibEditText_TextInfo    *p_tinfo,
-                       LibEditText_Cursor              *p_cursor,
-                       DWord   dw_curlrow )
+                       LibEditText_Cursor              *p_cursor )
 {
        DWord   dw_start;
        DWord   dw_end;
        DWord   dw_center;
        DWord   dw_remain;
-       DWord   dw_now;
+       DWord   dw_curlrow;
        LibEditText_LineInfo    *p_lnow;
 
        assert( NULL != p_tinfo );
        assert( NULL != p_cursor );
 
        // Calc. Cursor Range Start&End Line --- 
+       dw_curlrow      = p_cursor->dw_line;
        dw_center       = (p_cursor->dw_rangelines - 1) / 2;
        dw_start        = ((dw_curlrow > dw_center) ? (dw_curlrow - dw_center) : 0);
        dw_remain       = ((dw_center > dw_curlrow) ? (dw_center - dw_curlrow) : 0);
        dw_end          = (p_cursor->dw_rangelines - dw_center - 1) + dw_curlrow + dw_remain;
        dw_end          = ((p_tinfo->dw_maxline > dw_end) ? dw_end: (p_tinfo->dw_maxline - 1));
 
+       // Adjust Cursor-Start line ---
+       p_lnow  = LINFO(p_tinfo, p_cursor->dw_start_lineid);
+       if( p_cursor->dw_start_line < dw_start )        {
+               p_cursor->dw_start_lineid       = p_lnow->dw_next;
+               p_cursor->dw_start_line++;
+       }
+       else if( p_cursor->dw_start_line > dw_start )   {
+               p_cursor->dw_start_lineid       = p_lnow->dw_before;
+               p_cursor->dw_start_line--;
+       }
+
+       // Adjust Cursor-End line ---
+       p_lnow  = LINFO(p_tinfo, p_cursor->dw_end_lineid);
+       if( p_cursor->dw_end_line < dw_end )    {
+               p_cursor->dw_end_lineid = p_lnow->dw_next;
+               p_cursor->dw_end_line++;
+       }
+       else if( p_cursor->dw_end_line > dw_end )       {
+               p_cursor->dw_end_lineid = p_lnow->dw_before;
+               p_cursor->dw_end_line--;
+       }
+
        return 0x00;
 }
 
@@ -93,16 +115,20 @@ int
                assert( INVALID_LINE != p_cursor->dw_start_lineid );
                assert( INVALID_LINE != p_cursor->dw_end_lineid );
 
-               if( dw_line <= p_cursor->dw_line )
+               if(( dw_line <= p_cursor->dw_line )
+                                       && ( p_cursor->dw_line + 1 < p_tinfo->dw_maxline))
                        { p_cursor->dw_line++; }
 
-               if( dw_line <= p_cursor->dw_start_line )
+               if(( dw_line <= p_cursor->dw_start_line )
+                                       && ( p_cursor->dw_start_line + 1 < p_tinfo->dw_maxline))
                        { p_cursor->dw_start_line++; }
 
-               if( dw_line <= p_cursor->dw_end_line )
+               if(( dw_line <= p_cursor->dw_end_line )
+                                       && ( p_cursor->dw_end_line + 1 < p_tinfo->dw_maxline))
                        { p_cursor->dw_end_line++; }
 
                // Adjust CursorRange
+               LibEditText_CursorCtrl_CheckAdujstCursorRange( p_tinfo, p_cursor );
        }
        
        return 0x00;
@@ -131,16 +157,17 @@ int
                assert( INVALID_LINE != p_cursor->dw_start_lineid );
                assert( INVALID_LINE != p_cursor->dw_end_lineid );
 
-               if( dw_line < p_cursor->dw_line )
+               if(( dw_line < p_cursor->dw_line ) && ( 0 < p_cursor->dw_line ))
                        { p_cursor->dw_line--; }
 
-               if( dw_line < p_cursor->dw_start_line )
+               if(( dw_line < p_cursor->dw_start_line ) && ( 0 < p_cursor->dw_start_line ))
                        { p_cursor->dw_start_line--; }
 
-               if( dw_line < p_cursor->dw_end_line )
+               if(( dw_line < p_cursor->dw_end_line ) && ( 0 < p_cursor->dw_end_line ))
                        { p_cursor->dw_end_line--; }
 
                // Adjust CursorRange
+               LibEditText_CursorCtrl_CheckAdujstCursorRange( p_tinfo, p_cursor );
        }
        
        return 0x00;
index 4dc95d4..d8749f0 100644 (file)
@@ -49,10 +49,14 @@ Comment:
        #define LIBEDITTEXT_CURSORCTRL_INTERNALFUNC
 #endif
 
-
-
+LIBEDITTEXT_CURSORCTRL_EXTERN
+       int LibEditText_CursorCtrl_InsertLine( LibEditText_TextInfo *p_tinfo, DWord dw_line );
+LIBEDITTEXT_CURSORCTRL_EXTERN
+       int LibEditText_CursorCtrl_DeleteLine( LibEditText_TextInfo *p_tinfo, DWord dw_line );
 
 #ifdef LIBEDITTEXT_CURSORCTRL_INTERNALFUNC
+int LibEditText_CursorCtrl_CheckAdujstCursorRange(
+                       LibEditText_TextInfo *p_tinfo, LibEditText_Cursor *p_cursor );
 #endif
 
 #endif /* DRD64_HEADER_XXX */