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 = \
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 \
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
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;
}
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;
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;