ZynAddSubFX/FLTK: updated to SVN revision 6943
Updated FLTK to SVN revision 6943 of branch-1.3: - Adding Gerg's Fl_Table widget to FLTK 1.3 with kind permission. Documentation not yet added Support for both Visual Studio IDE's not yet added. - Removed accidentaly added binary file (Note to self: the use of wild cards is a dangerous one ;-) - Added doxygenified documentation for Fl_Table - Added doxygenified documentation for Fl_Table_Row - Added doxygenified documentation for Fl_Table_Row - Added Fl_Tree source code, demo files, and documentation. Thanks, Greg! - Removed unused members width_ and height_ from Fl_Scroll (STR #2289). - Removed obsolete <P> tags from doxygen docs (Fl_Scroll.H), fixed some typos. - Would not build on ubuntu 9.10 - bad file name (fl_ask.h) should be fl_ask.H fix 64 bit build - Added const'nes too Fl_Counter::step() - STR #2292: fixed issue typing a minus in Fl_Int_Input when all text is selected. - Added missing svn properties and $Id$ tags.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
CHANGES IN FLTK 1.3.0
|
||||
|
||||
- Added template to generate new projects with Xcode.
|
||||
- Managing all Widget flags in a single location now (STR #2161)
|
||||
- Fixed all color related call to Fl_Color type (STR #2208)
|
||||
- File chooser preview now recognizes utf8 encoded
|
||||
|
||||
@@ -98,7 +98,7 @@ public:
|
||||
/**
|
||||
Returns the increment for normal step buttons.
|
||||
*/
|
||||
double step() {return Fl_Valuator::step();}
|
||||
double step() const {return Fl_Valuator::step();}
|
||||
|
||||
/** Gets the text font */
|
||||
Fl_Font textfont() const {return textfont_;}
|
||||
|
||||
@@ -36,22 +36,24 @@
|
||||
|
||||
/**
|
||||
This container widget lets you maneuver around a set of widgets much
|
||||
larger than your window. If the child widgets are larger than the size
|
||||
larger than your window. If the child widgets are larger than the size
|
||||
of this object then scrollbars will appear so that you can scroll over
|
||||
to them:
|
||||
<P ALIGN=CENTER>\image html Fl_Scroll.gif </P>
|
||||
\image html Fl_Scroll.gif
|
||||
\image latex Fl_Scroll.eps "Fl_Scroll" width=4cm
|
||||
<P>If all of the child widgets are packed together into a solid
|
||||
|
||||
If all of the child widgets are packed together into a solid
|
||||
rectangle then you want to set box() to FL_NO_BOX or
|
||||
one of the _FRAME types. This will result in the best output.
|
||||
However, if the child widgets are a sparse arrangment you must set
|
||||
box() to a real _BOX type. This can result in some
|
||||
However, if the child widgets are a sparse arrangement you must
|
||||
set box() to a real _BOX type. This can result in some
|
||||
blinking during redrawing, but that can be solved by using a
|
||||
Fl_Double_Window. </P>
|
||||
Fl_Double_Window.
|
||||
|
||||
By default you can scroll in both directions, and the scrollbars
|
||||
disappear if the data will fit in the area of the scroll.
|
||||
<P>Use Fl_Scroll::type() to change this as follows :
|
||||
|
||||
Use Fl_Scroll::type() to change this as follows :
|
||||
<UL>
|
||||
<LI>0 - No scrollbars </LI>
|
||||
<LI>Fl_Scroll::HORIZONTAL - Only a horizontal scrollbar. </LI>
|
||||
@@ -62,38 +64,38 @@
|
||||
<LI>Fl_Scroll::BOTH_ALWAYS - Both always on. </LI>
|
||||
</UL>
|
||||
|
||||
<P> Use <B> scrollbar.align(int) ( see void Fl_Widget::align(Fl_Align) ) :</B>
|
||||
to change what side the scrollbars are drawn on.<BR>If the
|
||||
FL_ALIGN_LEFT bit is on, the vertical scrollbar is on the left.
|
||||
Use <B> scrollbar.align(int) ( see void Fl_Widget::align(Fl_Align) ) :</B>
|
||||
to change what side the scrollbars are drawn on.
|
||||
|
||||
If the FL_ALIGN_LEFT bit is on, the vertical scrollbar is on the left.
|
||||
If the FL_ALIGN_TOP bit is on, the horizontal scrollbar is on
|
||||
the top. Note that only the alignment flags in scrollbar are
|
||||
considered. The flags in hscrollbar however are ignored.
|
||||
|
||||
<P>This widget can also be used to pan around a single child widget
|
||||
"canvas". This child widget should be of your own class, with a
|
||||
draw() method that draws the contents. The scrolling is done by
|
||||
This widget can also be used to pan around a single child widget
|
||||
"canvas". This child widget should be of your own class, with a
|
||||
draw() method that draws the contents. The scrolling is done by
|
||||
changing the x() and y() of the widget, so this child
|
||||
must use the x() and y() to position it's drawing.
|
||||
must use the x() and y() to position its drawing.
|
||||
To speed up drawing it should test fl_push_clip().
|
||||
|
||||
<P>Another very useful child is a single
|
||||
Fl_Pack, which is itself a group that packs it's children
|
||||
together and changes size to surround them. Filling the Fl_Pack
|
||||
with Fl_Tabs groups (and then putting
|
||||
Another very useful child is a single Fl_Pack, which is itself a group
|
||||
that packs its children together and changes size to surround them.
|
||||
Filling the Fl_Pack with Fl_Tabs groups (and then putting
|
||||
normal widgets inside those) gives you a very powerful scrolling list
|
||||
of individually-openable panels. </P>
|
||||
of individually-openable panels.
|
||||
|
||||
<P>Fluid lets you create these, but you can only lay out objects that
|
||||
fit inside the Fl_Scroll without scrolling. Be sure to leave
|
||||
space for the scrollbars, as Fluid won't show these either. </P>
|
||||
<P><I>You cannot use Fl_Window as a child of this since the
|
||||
Fluid lets you create these, but you can only lay out objects that
|
||||
fit inside the Fl_Scroll without scrolling. Be sure to leave
|
||||
space for the scrollbars, as Fluid won't show these either.
|
||||
|
||||
<I>You cannot use Fl_Window as a child of this since the
|
||||
clipping is not conveyed to it when drawn, and it will draw over the
|
||||
scrollbars and neighboring objects.</I>
|
||||
*/
|
||||
class FL_EXPORT Fl_Scroll : public Fl_Group {
|
||||
|
||||
int xposition_, yposition_;
|
||||
int width_, height_;
|
||||
int oldx, oldy;
|
||||
int scrollbar_size_;
|
||||
static void hscrollbar_cb(Fl_Widget*, void*);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* "$Id: $"
|
||||
/* "$Id$"
|
||||
*
|
||||
* Author: Jean-Marc Lienher ( http://oksid.ch )
|
||||
* Copyright 2000-2003 by O'ksi'D.
|
||||
@@ -172,5 +172,5 @@ XUtf8Toupper(
|
||||
#endif
|
||||
|
||||
/*
|
||||
* End of "$Id: $".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* "$Id: fl_types.h 6299 2008-09-18 19:09:34Z fabien $"
|
||||
* "$Id$"
|
||||
*
|
||||
* Simple "C"-style types for the Fast Light Tool Kit (FLTK).
|
||||
*
|
||||
@@ -62,5 +62,5 @@ typedef unsigned int Fl_Char;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* End of "$Id: fl_types.h 6299 2008-09-18 19:09:34Z fabien $".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* "$Id: $"
|
||||
/* "$Id$"
|
||||
*
|
||||
* Author: Jean-Marc Lienher ( http://oksid.ch )
|
||||
* Copyright 2000-2009 by O'ksi'D.
|
||||
@@ -246,5 +246,5 @@ FL_EXPORT char fl_make_path( const char *path );
|
||||
#endif /* _HAVE_FL_UTF8_HDR_ */
|
||||
|
||||
/*
|
||||
* End of "$Id: $".
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -82,18 +82,18 @@ static const char *legal_fp_chars = ".eE+-";
|
||||
#endif
|
||||
|
||||
int Fl_Input::handle_key() {
|
||||
|
||||
|
||||
char ascii = Fl::event_text()[0];
|
||||
|
||||
|
||||
int repeat_num=1;
|
||||
|
||||
|
||||
int del;
|
||||
if (Fl::compose(del)) {
|
||||
|
||||
|
||||
// Insert characters into numeric fields after checking for legality:
|
||||
if (input_type() == FL_FLOAT_INPUT || input_type() == FL_INT_INPUT) {
|
||||
Fl::compose_reset(); // ignore any foreign letters...
|
||||
|
||||
|
||||
// initialize the list of legal characters inside a floating point number
|
||||
#ifdef HAVE_LOCALECONV
|
||||
if (!legal_fp_chars) {
|
||||
@@ -108,7 +108,7 @@ int Fl_Input::handle_key() {
|
||||
// the following line is not a true memory leak because the array is only
|
||||
// allocated once if required, and automatically freed when the program quits
|
||||
char *chars = (char*)malloc(len+1);
|
||||
legal_fp_chars = chars;
|
||||
legal_fp_chars = chars;
|
||||
strcpy(chars, standard_fp_chars);
|
||||
if (lc) {
|
||||
if (lc->decimal_point) strcat(chars, lc->decimal_point);
|
||||
@@ -118,361 +118,364 @@ int Fl_Input::handle_key() {
|
||||
}
|
||||
}
|
||||
#endif // HAVE_LOCALECONV
|
||||
|
||||
|
||||
// find the insert position
|
||||
int ip = position()<mark() ? position() : mark();
|
||||
// This is complex to allow "0xff12" hex to be typed:
|
||||
if (!position() && (ascii == '+' || ascii == '-') ||
|
||||
(ascii >= '0' && ascii <= '9') ||
|
||||
(position()==1 && index(0)=='0' && (ascii=='x' || ascii == 'X')) ||
|
||||
(position()>1 && index(0)=='0' && (index(1)=='x'||index(1)=='X')
|
||||
&& (ascii>='A'&& ascii<='F' || ascii>='a'&& ascii<='f')) ||
|
||||
input_type()==FL_FLOAT_INPUT && ascii && strchr(legal_fp_chars, ascii)) {
|
||||
if (readonly()) fl_beep();
|
||||
else replace(position(), mark(), &ascii, 1);
|
||||
if (!ip && (ascii == '+' || ascii == '-')
|
||||
|| (ascii >= '0' && ascii <= '9')
|
||||
|| (ip==1 && index(0)=='0' && (ascii=='x' || ascii == 'X'))
|
||||
|| (ip>1 && index(0)=='0' && (index(1)=='x'||index(1)=='X')
|
||||
&& (ascii>='A'&& ascii<='F' || ascii>='a'&& ascii<='f'))
|
||||
|| input_type()==FL_FLOAT_INPUT && ascii && strchr(legal_fp_chars, ascii))
|
||||
{
|
||||
if (readonly()) fl_beep();
|
||||
else replace(position(), mark(), &ascii, 1);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if (del || Fl::event_length()) {
|
||||
if (readonly()) fl_beep();
|
||||
else replace(position(), del ? position()-del : mark(),
|
||||
Fl::event_text(), Fl::event_length());
|
||||
Fl::event_text(), Fl::event_length());
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
unsigned int mods = Fl::event_state() & (FL_META|FL_CTRL|FL_ALT);
|
||||
switch (Fl::event_key()) {
|
||||
case FL_Insert:
|
||||
if (Fl::event_state() & FL_CTRL) ascii = ctrl('C');
|
||||
else if (Fl::event_state() & FL_SHIFT) ascii = ctrl('V');
|
||||
break;
|
||||
case FL_Delete:
|
||||
case FL_Insert:
|
||||
if (Fl::event_state() & FL_CTRL) ascii = ctrl('C');
|
||||
else if (Fl::event_state() & FL_SHIFT) ascii = ctrl('V');
|
||||
break;
|
||||
case FL_Delete:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0 || mods==FL_CTRL) { // delete next char
|
||||
ascii = ctrl('D');
|
||||
} else if (mods==FL_ALT) { // delete next word
|
||||
if (mark() != position()) return cut();
|
||||
cut(position(), word_end(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_META) { // delete to the end of the line
|
||||
if (mark() != position()) return cut();
|
||||
cut(position(), line_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0 || mods==FL_CTRL) { // delete next char
|
||||
ascii = ctrl('D');
|
||||
} else if (mods==FL_ALT) { // delete next word
|
||||
if (mark() != position()) return cut();
|
||||
cut(position(), word_end(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_META) { // delete to the end of the line
|
||||
if (mark() != position()) return cut();
|
||||
cut(position(), line_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) {
|
||||
ascii = ctrl('D');
|
||||
} else if (mods==FL_SHIFT) {
|
||||
ascii = ctrl('X');
|
||||
} else return 1;
|
||||
if (mods==0) {
|
||||
ascii = ctrl('D');
|
||||
} else if (mods==FL_SHIFT) {
|
||||
ascii = ctrl('X');
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_Left:
|
||||
break;
|
||||
case FL_Left:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // char left
|
||||
ascii = ctrl('B');
|
||||
} else if (mods==FL_ALT) { // word left
|
||||
shift_position(word_start(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_CTRL || mods==FL_META) { // start of line
|
||||
shift_position(line_start(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // char left
|
||||
ascii = ctrl('B');
|
||||
} else if (mods==FL_ALT) { // word left
|
||||
shift_position(word_start(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_CTRL || mods==FL_META) { // start of line
|
||||
shift_position(line_start(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) { // char left
|
||||
ascii = ctrl('B');
|
||||
} else if (mods==FL_CTRL) { // word left
|
||||
shift_position(word_start(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // char left
|
||||
ascii = ctrl('B');
|
||||
} else if (mods==FL_CTRL) { // word left
|
||||
shift_position(word_start(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_Right:
|
||||
break;
|
||||
case FL_Right:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // char right
|
||||
ascii = ctrl('F');
|
||||
} else if (mods==FL_ALT) { // word right
|
||||
shift_position(word_end(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_CTRL || mods==FL_META) { // end of line
|
||||
shift_position(line_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // char right
|
||||
ascii = ctrl('F');
|
||||
} else if (mods==FL_ALT) { // word right
|
||||
shift_position(word_end(position()));
|
||||
return 1;
|
||||
} else if (mods==FL_CTRL || mods==FL_META) { // end of line
|
||||
shift_position(line_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) { // char right
|
||||
ascii = ctrl('F');
|
||||
} else if (mods==FL_CTRL) { // word right
|
||||
shift_position(word_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // char right
|
||||
ascii = ctrl('F');
|
||||
} else if (mods==FL_CTRL) { // word right
|
||||
shift_position(word_end(position()));
|
||||
return 1;
|
||||
} else return 1;
|
||||
#endif // __APPLE__
|
||||
break;
|
||||
case FL_Page_Up:
|
||||
break;
|
||||
case FL_Page_Up:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // scroll text one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
if (mods==0) { // scroll text one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_ALT) { // move cursor one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else return 1;
|
||||
break;
|
||||
#else
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_ALT) { // move cursor one page
|
||||
// fall through
|
||||
#endif
|
||||
case FL_Up:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // line up
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_CTRL) { // scroll text down one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_ALT) { // line start and up
|
||||
if (line_start(position())==position() && position()>0)
|
||||
return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
|
||||
else
|
||||
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
|
||||
} else if (mods==FL_META) { // start of document
|
||||
shift_position(0);
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) { // line up
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_CTRL) { // scroll text down one line
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
ascii = ctrl('P');
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_Page_Down:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // scroll text one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_ALT) { // move cursor one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else return 1;
|
||||
break;
|
||||
#else
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else return 1;
|
||||
break;
|
||||
#else
|
||||
repeat_num = linesPerPage();
|
||||
// fall through
|
||||
// fall through
|
||||
#endif
|
||||
case FL_Up:
|
||||
case FL_Down:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // line up
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_CTRL) { // scroll text down one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_ALT) { // line start and up
|
||||
if (line_start(position())==position() && position()>0)
|
||||
return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
|
||||
else
|
||||
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
|
||||
} else if (mods==FL_META) { // start of document
|
||||
shift_position(0);
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // line down
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_CTRL) {
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_ALT) { // line end and down
|
||||
if (line_end(position())==position() && position()<size())
|
||||
return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
|
||||
else
|
||||
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
|
||||
} else if (mods==FL_META) { // end of document
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) { // line up
|
||||
ascii = ctrl('P');
|
||||
} else if (mods==FL_CTRL) { // scroll text down one line
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
ascii = ctrl('P');
|
||||
} else return 1;
|
||||
if (mods==0) { // line down
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_CTRL) { // scroll text up one line
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
ascii = ctrl('N');
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_Page_Down:
|
||||
break;
|
||||
case FL_Home:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // scroll text one page
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_ALT) { // move cursor one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else return 1;
|
||||
break;
|
||||
if (mods==0) { // scroll display to the top
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
shift_position(0);
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
repeat_num = linesPerPage();
|
||||
// fall through
|
||||
if (mods==0) {
|
||||
ascii = ctrl('A');
|
||||
} else if (mods==FL_CTRL) {
|
||||
shift_position(0);
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
case FL_Down:
|
||||
break;
|
||||
case FL_End:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // line down
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_CTRL) {
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
repeat_num = linesPerPage();
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_ALT) { // line end and down
|
||||
if (line_end(position())==position() && position()<size())
|
||||
return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
|
||||
else
|
||||
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
|
||||
} else if (mods==FL_META) { // end of document
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0) { // scroll display to the bottom
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) { // line down
|
||||
ascii = ctrl('N');
|
||||
} else if (mods==FL_CTRL) { // scroll text up one line
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
ascii = ctrl('N');
|
||||
} else return 1;
|
||||
if (mods==0) {
|
||||
ascii = ctrl('E');
|
||||
} else if (mods==FL_CTRL) {
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_Home:
|
||||
break;
|
||||
case FL_BackSpace:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // scroll display to the top
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
shift_position(0);
|
||||
return 1;
|
||||
} else return 1;
|
||||
if (mods==0 || mods==FL_CTRL) { // delete previous char
|
||||
ascii = ctrl('H');
|
||||
} else if (mods==FL_ALT) { // delete previous word
|
||||
if (mark() != position()) return cut();
|
||||
cut(word_start(position()), position());
|
||||
return 1;
|
||||
} else if (mods==FL_META) { // delete to the beginning of the line
|
||||
if (mark() != position()) return cut();
|
||||
cut(line_start(position()), position());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) {
|
||||
ascii = ctrl('A');
|
||||
} else if (mods==FL_CTRL) {
|
||||
shift_position(0);
|
||||
return 1;
|
||||
}
|
||||
ascii = ctrl('H');
|
||||
#endif
|
||||
break;
|
||||
case FL_End:
|
||||
break;
|
||||
case FL_Enter:
|
||||
case FL_KP_Enter:
|
||||
if (when() & FL_WHEN_ENTER_KEY) {
|
||||
position(size(), 0);
|
||||
maybe_do_callback();
|
||||
return 1;
|
||||
} else if (input_type() == FL_MULTILINE_INPUT && !readonly())
|
||||
return replace(position(), mark(), "\n", 1);
|
||||
else
|
||||
return 0; // reserved for shortcuts
|
||||
case FL_Tab:
|
||||
if (Fl::event_state(FL_CTRL|FL_SHIFT) || input_type()!=FL_MULTILINE_INPUT || readonly()) return 0;
|
||||
return replace(position(), mark(), &ascii, 1);
|
||||
#ifdef __APPLE__
|
||||
if (mods==0) { // scroll display to the bottom
|
||||
// OS X scrolls the view, but does not move the cursor
|
||||
// Fl_Input has no scroll control, so instead we move the cursor by one page
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
if (mods==0) {
|
||||
ascii = ctrl('E');
|
||||
} else if (mods==FL_CTRL) {
|
||||
shift_position(size());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#endif
|
||||
break;
|
||||
case FL_BackSpace:
|
||||
#ifdef __APPLE__
|
||||
if (mods==0 || mods==FL_CTRL) { // delete previous char
|
||||
ascii = ctrl('H');
|
||||
} else if (mods==FL_ALT) { // delete previous word
|
||||
if (mark() != position()) return cut();
|
||||
cut(word_start(position()), position());
|
||||
return 1;
|
||||
} else if (mods==FL_META) { // delete to the beginning of the line
|
||||
if (mark() != position()) return cut();
|
||||
cut(line_start(position()), position());
|
||||
return 1;
|
||||
} else return 1;
|
||||
#else
|
||||
ascii = ctrl('H');
|
||||
#endif
|
||||
break;
|
||||
case FL_Enter:
|
||||
case FL_KP_Enter:
|
||||
if (when() & FL_WHEN_ENTER_KEY) {
|
||||
position(size(), 0);
|
||||
maybe_do_callback();
|
||||
return 1;
|
||||
} else if (input_type() == FL_MULTILINE_INPUT && !readonly())
|
||||
return replace(position(), mark(), "\n", 1);
|
||||
else
|
||||
return 0; // reserved for shortcuts
|
||||
case FL_Tab:
|
||||
if (Fl::event_state(FL_CTRL|FL_SHIFT) || input_type()!=FL_MULTILINE_INPUT || readonly()) return 0;
|
||||
return replace(position(), mark(), &ascii, 1);
|
||||
#ifdef __APPLE__
|
||||
case 'c' :
|
||||
case 'v' :
|
||||
case 'x' :
|
||||
case 'z' :
|
||||
// printf("'%c' (0x%02x) pressed with%s%s%s%s\n", ascii, ascii,
|
||||
// Fl::event_state(FL_SHIFT) ? " FL_SHIFT" : "",
|
||||
// Fl::event_state(FL_CTRL) ? " FL_CTRL" : "",
|
||||
// Fl::event_state(FL_ALT) ? " FL_ALT" : "",
|
||||
// Fl::event_state(FL_META) ? " FL_META" : "");
|
||||
if (Fl::event_state(FL_META)) ascii -= 0x60;
|
||||
// printf("using '%c' (0x%02x)...\n", ascii, ascii);
|
||||
break;
|
||||
case 'c' :
|
||||
case 'v' :
|
||||
case 'x' :
|
||||
case 'z' :
|
||||
// printf("'%c' (0x%02x) pressed with%s%s%s%s\n", ascii, ascii,
|
||||
// Fl::event_state(FL_SHIFT) ? " FL_SHIFT" : "",
|
||||
// Fl::event_state(FL_CTRL) ? " FL_CTRL" : "",
|
||||
// Fl::event_state(FL_ALT) ? " FL_ALT" : "",
|
||||
// Fl::event_state(FL_META) ? " FL_META" : "");
|
||||
if (Fl::event_state(FL_META)) ascii -= 0x60;
|
||||
// printf("using '%c' (0x%02x)...\n", ascii, ascii);
|
||||
break;
|
||||
#endif // __APPLE__
|
||||
}
|
||||
|
||||
|
||||
int i;
|
||||
switch (ascii) {
|
||||
case ctrl('A'): // go to the beginning of the current line
|
||||
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('B'): // go one character backward
|
||||
return shift_position(position()-1) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('C'): // copy
|
||||
return copy(1);
|
||||
case ctrl('D'): // cut the next character
|
||||
case ctrl('?'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
case ctrl('A'): // go to the beginning of the current line
|
||||
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('B'): // go one character backward
|
||||
return shift_position(position()-1) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('C'): // copy
|
||||
return copy(1);
|
||||
case ctrl('D'): // cut the next character
|
||||
case ctrl('?'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
if (mark() != position()) return cut();
|
||||
else return cut(1);
|
||||
case ctrl('E'): // go to the end of the line
|
||||
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('F'): // go to the next character
|
||||
return shift_position(position()+1) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('H'): // cut the previous character
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
if (mark() != position()) cut();
|
||||
else cut(-1);
|
||||
return 1;
|
||||
}
|
||||
if (mark() != position()) return cut();
|
||||
else return cut(1);
|
||||
case ctrl('E'): // go to the end of the line
|
||||
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('F'): // go to the next character
|
||||
return shift_position(position()+1) + NORMAL_INPUT_MOVE;
|
||||
case ctrl('H'): // cut the previous character
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
case ctrl('K'): // cut to the end of the line
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
if (position()>=size()) return 0;
|
||||
i = line_end(position());
|
||||
if (i == position() && i < size()) i++;
|
||||
cut(position(), i);
|
||||
return copy_cuts();
|
||||
case ctrl('N'): // go down one line
|
||||
i = position();
|
||||
if (line_end(i) >= size()) return NORMAL_INPUT_MOVE;
|
||||
while (repeat_num--) {
|
||||
i = line_end(i);
|
||||
if (i >= size()) break;
|
||||
i++;
|
||||
}
|
||||
shift_up_down_position(i);
|
||||
return 1;
|
||||
}
|
||||
if (mark() != position()) cut();
|
||||
else cut(-1);
|
||||
return 1;
|
||||
case ctrl('K'): // cut to the end of the line
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
case ctrl('P'): // go up one line
|
||||
i = position();
|
||||
if (!line_start(i)) return NORMAL_INPUT_MOVE;
|
||||
while(repeat_num--) {
|
||||
i = line_start(i);
|
||||
if (!i) break;
|
||||
i--;
|
||||
}
|
||||
shift_up_down_position(line_start(i));
|
||||
return 1;
|
||||
}
|
||||
if (position()>=size()) return 0;
|
||||
i = line_end(position());
|
||||
if (i == position() && i < size()) i++;
|
||||
cut(position(), i);
|
||||
return copy_cuts();
|
||||
case ctrl('N'): // go down one line
|
||||
i = position();
|
||||
if (line_end(i) >= size()) return NORMAL_INPUT_MOVE;
|
||||
while (repeat_num--) {
|
||||
i = line_end(i);
|
||||
if (i >= size()) break;
|
||||
i++;
|
||||
}
|
||||
shift_up_down_position(i);
|
||||
return 1;
|
||||
case ctrl('P'): // go up one line
|
||||
i = position();
|
||||
if (!line_start(i)) return NORMAL_INPUT_MOVE;
|
||||
while(repeat_num--) {
|
||||
i = line_start(i);
|
||||
if (!i) break;
|
||||
i--;
|
||||
}
|
||||
shift_up_down_position(line_start(i));
|
||||
return 1;
|
||||
case ctrl('U'): // clear the whole document?
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
case ctrl('U'): // clear the whole document?
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
return cut(0, size());
|
||||
case ctrl('V'): // paste text
|
||||
case ctrl('Y'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
Fl::paste(*this, 1);
|
||||
return 1;
|
||||
}
|
||||
return cut(0, size());
|
||||
case ctrl('V'): // paste text
|
||||
case ctrl('Y'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
Fl::paste(*this, 1);
|
||||
return 1;
|
||||
case ctrl('X'): // cut the selected text
|
||||
case ctrl('W'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
copy(1);
|
||||
return cut();
|
||||
case ctrl('Z'): // undo
|
||||
case ctrl('_'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
return undo();
|
||||
case ctrl('I'): // insert literal
|
||||
case ctrl('J'):
|
||||
case ctrl('L'):
|
||||
case ctrl('M'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
// insert a few selected control characters literally:
|
||||
if (input_type() != FL_FLOAT_INPUT && input_type() != FL_INT_INPUT)
|
||||
return replace(position(), mark(), &ascii, 1);
|
||||
case ctrl('X'): // cut the selected text
|
||||
case ctrl('W'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
copy(1);
|
||||
return cut();
|
||||
case ctrl('Z'): // undo
|
||||
case ctrl('_'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
return undo();
|
||||
case ctrl('I'): // insert literal
|
||||
case ctrl('J'):
|
||||
case ctrl('L'):
|
||||
case ctrl('M'):
|
||||
if (readonly()) {
|
||||
fl_beep();
|
||||
return 1;
|
||||
}
|
||||
// insert a few selected control characters literally:
|
||||
if (input_type() != FL_FLOAT_INPUT && input_type() != FL_INT_INPUT)
|
||||
return replace(position(), mark(), &ascii, 1);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Standard dialog header file for the UTF-8 Fast Light Tool Kit (FLTK-UTF8).
|
||||
//
|
||||
// Copyright 2009 by Bill Spitzak and others.
|
||||
@@ -423,6 +426,6 @@ extern "C" __declspec(dllimport) long __stdcall CoCreateInstance(const GUID & rc
|
||||
|
||||
#endif
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
//
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
/* This is the utf.c file from fltk2 adapted for use in my fltk1.1 port */
|
||||
|
||||
/*
|
||||
* "$Id$"
|
||||
*
|
||||
* This is the utf.c file from fltk2 adapted for use in my fltk1.1 port
|
||||
*/
|
||||
/* Copyright 2006-2009 by Bill Spitzak and others.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
@@ -855,3 +858,7 @@ int fl_utf8test(const char* src, unsigned srclen) {
|
||||
}
|
||||
|
||||
/** @} */
|
||||
|
||||
/*
|
||||
* End of "$Id$".
|
||||
*/
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
// "$Id: $"
|
||||
//
|
||||
// "$Id$"
|
||||
//
|
||||
// Unicode to UTF-8 conversion functions.
|
||||
//
|
||||
@@ -822,6 +823,5 @@ void fl_make_path_for_file( const char *path )
|
||||
/** @} */
|
||||
|
||||
//
|
||||
// End of "$Id: $".
|
||||
// End of "$Id$".
|
||||
//
|
||||
|
||||
|
||||
Reference in New Issue
Block a user