Fix position() methods that shadow Fl_Widget::position()

* `FL_DEPRECATED` macro to mark `position()` method that shadow `Fl_Widget::position()` #69 (#666)
This commit is contained in:
Matthias Melcher 2023-02-02 20:54:19 +01:00 committed by GitHub
parent 59d3b2e9fd
commit 1aa6c4fed8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 286 additions and 187 deletions

View File

@ -138,8 +138,10 @@ function (CREATE_EXAMPLE NAME SOURCES LIBRARIES)
"${CMAKE_CURRENT_SOURCE_DIR}/mac-resources/${PLIST}")
endif()
string(REPLACE "_" "-" FLTK_BUNDLE_ID "org.fltk.${TARGET_NAME}")
set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${TARGET_NAME}")
set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "org.fltk.${TARGET_NAME}")
set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "${FLTK_BUNDLE_ID}")
set_target_properties (${TARGET_NAME} PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "${FLTK_BUNDLE_ID}")
if (ICON_NAME)
set_target_properties (${TARGET_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})

View File

@ -243,8 +243,15 @@ public:
the list are scrolled off the top edge of the screen.
\see position(), hposition()
*/
int position() const { return position_; }
void position(int pos); // scroll to here
int vposition() const { return position_; }
FL_DEPRECATED("Please use vposition() instead.",
int position() const) { return vposition(); }
void vposition(int pos); // scroll to here
FL_DEPRECATED("Please use vposition(pos) instead.",
void position(int pos)) { return vposition(pos); }
void position(int x, int y) { Fl_Group::position(x, y); }
/**
Gets the horizontal scroll position of the list as a pixel position \p pos.
The position returned is how many pixels of the list are scrolled off the left edge

View File

@ -282,31 +282,37 @@ public:
/** Gets the position of the text cursor.
\return the cursor position as an index in the range 0..size()
\see position(int, int)
\see insert_position(int, int)
*/
int position() const {return position_;}
int insert_position() const { return position_; }
FL_DEPRECATED("Please use insert_position() instead.",
int position() const ) { return insert_position(); }
/** Gets the current selection mark.
\return index into the text */
int mark() const {return mark_;}
/* Sets the index for the cursor and mark. */
int position(int p, int m);
int insert_position(int p, int m);
FL_DEPRECATED("Please use insert_position(p, m) or Fl_Widget::position(x, y) instead.",
int position(int p, int m)) { return insert_position(p, m); }
/** Sets the cursor position and mark.
position(n) is the same as <tt>position(n, n)</tt>.
\param p new index for cursor and mark
\return 0 if no positions changed
\see position(int, int), position(), mark(int)
\see insert_position(int, int), insert_position(), mark(int)
*/
int position(int p) {return position(p, p);}
int insert_position(int p) { return insert_position(p, p); }
FL_DEPRECATED("Please use insert_position(p) instead.",
int position(int p)) { return insert_position(p); }
/** Sets the current selection mark.
mark(n) is the same as <tt>position(position(),n)</tt>.
mark(n) is the same as <tt>insert_position(insert_position(),n)</tt>.
\param m new index of the mark
\return 0 if the mark did not change
\see position(), position(int, int) */
int mark(int m) {return position(position(), m);}
\see insert_position(), insert_position(int, int) */
int mark(int m) {return insert_position(insert_position(), m);}
/* Deletes text from \p b to \p e and inserts the new string \p text. */
int replace(int b, int e, const char *text, int ilen=0);
@ -321,7 +327,7 @@ public:
\return 0 if no data was copied
*/
int cut() {return replace(position(), mark(), 0);}
int cut() {return replace(insert_position(), mark(), 0);}
/**
Deletes the next \p n bytes rounded to characters before or after the cursor.
@ -335,7 +341,7 @@ public:
A negative number will cut characters to the left of the cursor.
\return 0 if no data was copied
*/
int cut(int n) {return replace(position(), position()+n, 0);}
int cut(int n) {return replace(insert_position(), insert_position()+n, 0);}
/**
Deletes all characters between index \p a and \p b.

View File

@ -164,7 +164,9 @@ public:
int includes(int pos) const;
// Returns true if selected() and the positions of this selection.
int position(int *startpos, int *endpos) const;
int selected(int *startpos, int *endpos) const;
FL_DEPRECATED("Please use selected(startpos, endpos) instead.",
int position(int *startpos, int *endpos) const) { return selected(startpos, endpos); }
protected:

View File

@ -29,7 +29,10 @@ public:
int handle(int event) FL_OVERRIDE;
Fl_Tile(int X, int Y, int W, int H, const char *L=0);
void resize(int X, int Y, int W, int H) FL_OVERRIDE;
void position(int oldx, int oldy, int newx, int newy);
void move_intersection(int oldx, int oldy, int newx, int newy);
FL_DEPRECATED("Please use move_intersection(p) instead.",
void position(int oldx, int oldy, int newx, int newy)) { return move_intersection(oldx, oldy, newx, newy); }
void position(int x, int y) { Fl_Group::position(x, y); }
};
#endif

View File

@ -22,13 +22,14 @@
#ifndef _FL_fl_attr_h_
#define _FL_fl_attr_h_
#ifdef FL_DOXYGEN
/**
This macro makes it safe to use the C++11 keyword \c override with
older compilers.
*/
#define FL_OVERRIDE override
This section lists macros for Doxygen documentation only. The next section
will define the actual macros based on the compile used and based on the
capabilities of the version of that compiler.
*/
#ifdef FL_DOXYGEN
/** To be used in prototypes with a variable list of arguments.
This macro helps detection of mismatches between format string and
@ -38,67 +39,143 @@
*/
#define __fl_attr(x)
/**
This macro makes it safe to use the C++11 keyword \c override with
older compilers.
*/
#define FL_OVERRIDE override
/**
Enclosing a function or method in FL_DEPRECATED marks it as no longer
recommended. This macro syntax can not be used if the return type contains
a comma, which is not the case in FLTK.
\code
FL_DEPRECATED("Outdated, don't use", int position()) { return position_; }
\endcode
*/
#define FL_DEPRECATED(msg, func) [[deprecated(msg)]] func
#else
/*
The GNUC-specific attribute appearing below in prototypes with a variable
list of arguments helps detection of mismatches between format string and
argument list at compilation time.
Declare macros specific to Visual Studio.
Examples: see fl_ask.H
*/
Visual Studio defines __cplusplus = '199711L' in all its versions which is
not helpful for us here. For VS version number encoding see:
https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
*/
#ifdef __GNUC__
# define __fl_attr(x) __attribute__ (x)
#else
# define __fl_attr(x)
#endif
#ifdef __cplusplus
// Visual Studio defines __cplusplus = '199711L' which is not helpful.
// We assume that Visual Studio 2015 (1900) and later support the
// 'override' keyword. For VS version number encoding see:
// https://learn.microsoft.com/en-us/cpp/preprocessor/predefined-macros
#if defined(_MSC_VER) && (_MSC_VER >= 1900)
#if defined(_MSC_VER)
#if (_MSC_VER >= 1900) // Visual Studio 2015 (14.0)
#ifndef FL_OVERRIDE
#define FL_OVERRIDE override
#else // not Visual Studio or an older version
#if (__cplusplus >= 202002L)
// put here definitions applying to C++20 and above
#endif
#endif // Visual Studio 2015 (14.0)
#if (__cplusplus >= 201703L)
// put here definitions applying to C++17 and above
#if (_MSC_VER >= 1400) // Visual Studio 2005 (8.0)
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) __declspec(deprecated(msg)) func
#endif
#endif // Visual Studio 2005 (8.0)
#if (__cplusplus >= 201402L)
// put here definitions applying to C++14 and above
#if (_MSC_VER >= 1310) // Visual Studio .NET 2003 (7.1)
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) __declspec(deprecated) func
#endif
#endif // Visual Studio .NET 2003 (7.1)
#if (__cplusplus >= 201103L)
// put here definitions applying to C++11 and above
#endif // Visual Studio
/*
Declare macros specific to the C++ standard used.
Macros may have been declared already in previous sections.
*/
#if (__cplusplus >= 202002L) // C++20
#endif // C++20
#if (__cplusplus >= 201703L) // C++17
#endif // C++17
#if (__cplusplus >= 201402L) // C++14
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) [[deprecated(msg)]] func
#endif
#endif // C++14
#if (__cplusplus >= 201103L) // C++11
#ifndef FL_OVERRIDE
#define FL_OVERRIDE override
#else
// replace non-existing `override` with no-op
#endif
#endif // C+11
#if (__cplusplus >= 199711L) // C++89
#endif // C++89
/*
Declare macros specific to clang
Macros may have been declared already in previous sections.
*/
#if defined(__clang__)
#define FL_CLANG_VERSION (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__)
// -- nothing yet --
#endif // __clang__
/*
Declare macros specific to gcc.
Macros may have been declared already in previous sections.
*/
#if defined(__GNUC__)
#define FL_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
#ifndef __fl_attr
#define __fl_attr(x) __attribute__ (x)
#endif
#if FL_GCC_VERSION > 40500 // gcc 4.5.0
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) func __attribute__((deprecated(msg)))
#endif
#endif // gcc 4.5.0
#if FL_GCC_VERSION > 30100 // gcc 3.1.0
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) func __attribute__((deprecated))
#endif
#endif // gcc 3.1.0
#endif // __GNUC__
/*
If a macro was not defined in any of the sections above, set it to no-op here.
*/
#ifndef __fl_attr
#define __fl_attr(x)
#endif
#ifndef FL_OVERRIDE
#define FL_OVERRIDE
#endif
#if (__cplusplus >= 199711L)
// put here definitions applying to C++98 and above
#ifndef FL_DEPRECATED
#define FL_DEPRECATED(msg, func) func
#endif
#endif /* not Visual Studio */
#else
/* C, not C++ */
#endif /* __cplusplus */
#endif /* FL_DOXYGEN */

View File

@ -682,7 +682,7 @@ inline void fl_set_input_color(Fl_Widget* o, Fl_Color a, Fl_Color b) {
}
// inline void fl_set_input_scroll(Fl_Widget*, int);
inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
((Fl_Input*)o)->position(x);}
((Fl_Input*)o)->insert_position(x);}
// inline void fl_set_input_selected(Fl_Widget*, int);
// inline void fl_set_input_selected_range(Fl_Widget*, int, int);
// inline void fl_set_input_maxchars(Fl_Widget*, int);
@ -695,7 +695,7 @@ inline void fl_set_input_cursorpos(Fl_Widget* o, int x, int /*y*/) {
// inline int fl_get_input_topline(Fl_Widget*);
// inline int fl_get_input_screenlines(Fl_Widget*);
inline int fl_get_input_cursorpos(Fl_Widget* o, int*x, int*y) {
*x = ((Fl_Input*)o)->position(); *y = 0; return *x;}
*x = ((Fl_Input*)o)->insert_position(); *y = 0; return *x;}
// inline int fl_get_input_numberoflines(Fl_Widget*);
// inline void fl_get_input_format(Fl_Widget*, int*, int*);
inline const char* fl_get_input(Fl_Widget* o) {return ((Fl_Input*)o)->value();}
@ -721,7 +721,7 @@ inline void fl_delete_menu_item(Fl_Widget* o, int i) {
inline void fl_set_menu_item_shortcut(Fl_Widget* o, int i, const char* s) {
((Fl_Menu_Button*)o)->shortcut(i-1,fl_old_shortcut(s));}
inline void fl_set_menu_item_mode(Fl_Widget* o, int i, long x) {
((Fl_Menu_Button*)o)->mode(i-1,x);}
((Fl_Menu_Button*)o)->mode(i-1,(int)x);}
inline void fl_show_menu_symbol(Fl_Widget*, int ) {
/* ((Fl_Menu_Button*)o)->show_menu_symbol(i); */}
// inline void fl_set_menu_popup(Fl_Widget*, int);

View File

@ -96,6 +96,7 @@ if (APPLE AND (NOT OPTION_APPLE_X11))
# create bundle
set_target_properties (fltk-options PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/fltk-options.plist")
set_target_properties (fltk-options PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
set_target_properties (fltk-options PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.fltk.fltk-options")
# The line below would wrongly install /Applications/fltk-options.icns
# ## set_target_properties (fltk-options PROPERTIES RESOURCE ${ICON_PATH})

View File

@ -158,6 +158,7 @@ if (APPLE AND (NOT OPTION_APPLE_X11))
# create bundle
set_target_properties (fluid PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/fluid.plist")
set_target_properties (fluid PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_NAME})
set_target_properties (fluid PROPERTIES XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.fltk.fluid")
# The line below would wrongly install /Applications/fluid.icns
# ## set_target_properties (fluid PROPERTIES RESOURCE ${ICON_PATH})

View File

@ -192,7 +192,7 @@ void delete_all(int selected_only) {
shell_prefs_get();
shell_settings_write();
widget_browser->hposition(0);
widget_browser->position(0);
widget_browser->vposition(0);
}
selection_changed(0);
widget_browser->redraw();

View File

@ -512,7 +512,7 @@ int Widget_Browser::handle(int e) {
*/
void Widget_Browser::save_scroll_position() {
saved_h_scroll_ = hposition();
saved_v_scroll_ = position();
saved_v_scroll_ = vposition();
}
/**
@ -520,7 +520,7 @@ void Widget_Browser::save_scroll_position() {
*/
void Widget_Browser::restore_scroll_position() {
hposition(saved_h_scroll_);
position(saved_v_scroll_);
vposition(saved_v_scroll_);
}
/**
@ -546,7 +546,7 @@ void Widget_Browser::display(Fl_Type *inNode) {
return;
}
// remeber our current scroll position
int currentV = position(), newV = currentV;
int currentV = vposition(), newV = currentV;
int nodeV = 0;
// find the inNode in the tree and check, if it is already visible
Fl_Type *p=Fl_Type::first;
@ -571,6 +571,6 @@ void Widget_Browser::display(Fl_Type *inNode) {
newV = 0;
}
if (newV!=currentV)
position(newV);
vposition(newV);
}

View File

@ -634,7 +634,7 @@ void Fl_Browser::lineposition(int line, Fl_Line_Position pos) {
}
if (final > (full_height() - H)) final = full_height() -H;
position(final);
vposition(final);
}
/**

View File

@ -49,7 +49,7 @@
*/
static void scrollbar_callback(Fl_Widget* s, void*) {
((Fl_Browser_*)(s->parent()))->position(int(((Fl_Scrollbar*)s)->value()));
((Fl_Browser_*)(s->parent()))->vposition(int(((Fl_Scrollbar*)s)->value()));
}
static void hscrollbar_callback(Fl_Widget* s, void*) {
@ -181,7 +181,7 @@ void Fl_Browser_::update_top() {
}
}
// Change position(), top() will update when update_top() is called
// Change vposition(), top() will update when update_top() is called
// (probably by draw() or handle()):
/**
Sets the vertical scroll position of the list to pixel position \p pos.
@ -189,9 +189,9 @@ void Fl_Browser_::update_top() {
of the screen. Example: A position of '3' scrolls the top three pixels of
the list off the top edge of the screen.
\param[in] pos The vertical position (in pixels) to scroll the browser to.
\see position(), hposition()
\see vposition(), hposition()
*/
void Fl_Browser_::position(int pos) {
void Fl_Browser_::vposition(int pos) {
if (pos < 0) pos = 0;
if (pos == position_) return;
position_ = pos;
@ -204,7 +204,7 @@ void Fl_Browser_::position(int pos) {
of the screen. Example: A position of '18' scrolls the left 18 pixels of the list
off the left edge of the screen.
\param[in] pos The horizontal position (in pixels) to scroll the browser to.
\see position(), hposition()
\see vposition(), hposition()
*/
void Fl_Browser_::hposition(int pos) {
if (pos < 0) pos = 0;
@ -244,7 +244,7 @@ void Fl_Browser_::display(void* item) {
// First special case - want to display first item in the list?
update_top();
if (item == item_first()) {position(0); return;}
if (item == item_first()) { vposition(0); return; }
int X, Y, W, H, Yp; bbox(X, Y, W, H);
void* l = top_;
@ -252,11 +252,11 @@ void Fl_Browser_::display(void* item) {
int h1;
// 2nd special case - want to display item already displayed at top of browser?
if (l == item) {position(real_position_+Y); return;} // scroll up a bit
if (l == item) { vposition(real_position_+Y); return; } // scroll up a bit
// 3rd special case - want to display item just above top of browser?
void* lp = item_prev(l);
if (lp == item) {position(real_position_+Y-item_quick_height(lp)); return;}
if (lp == item) { vposition(real_position_+Y-item_quick_height(lp)); return; }
#ifdef DISPLAY_SEARCH_BOTH_WAYS_AT_ONCE
// search for item. We search both up and down the list at the same time,
@ -268,9 +268,9 @@ void Fl_Browser_::display(void* item) {
if (l == item) {
if (Y <= H) { // it is visible or right at bottom
Y = Y+h1-H; // find where bottom edge is
if (Y > 0) position(real_position_+Y); // scroll down a bit
if (Y > 0) vposition(real_position_+Y); // scroll down a bit
} else {
position(real_position_+Y-(H-h1)/2); // center it
vposition(real_position_+Y-(H-h1)/2); // center it
}
return;
}
@ -281,8 +281,8 @@ void Fl_Browser_::display(void* item) {
h1 = item_quick_height(lp);
Yp -= h1;
if (lp == item) {
if ((Yp + h1) >= 0) position(real_position_+Yp);
else position(real_position_+Yp-(H-h1)/2);
if ((Yp + h1) >= 0) vposition(real_position_+Yp);
else vposition(real_position_+Yp-(H-h1)/2);
return;
}
lp = item_prev(lp);
@ -871,12 +871,12 @@ J1:
if (my < Y && my < py) {
int p = real_position_+my-Y;
if (p<0) p = 0;
position(p);
vposition(p);
} else if (my > (Y+H) && my > py) {
int p = real_position_+my-(Y+H);
int hh = full_height()-H; if (p > hh) p = hh;
if (p<0) p = 0;
position(p);
vposition(p);
}
if (type() == FL_NORMAL_BROWSER || !top_)
;

View File

@ -801,7 +801,7 @@ Fl_File_Chooser::fileNameCB()
if (dirIsRelative) {
fl_filename_absolute(pathname, sizeof(pathname), filename);
value(pathname);
fileName->mark(fileName->position()); // no selection after expansion
fileName->mark(fileName->insert_position()); // no selection after expansion
} else if (filename != pathname) {
// Finally, make sure that we have a writable copy...
strlcpy(pathname, filename, sizeof(pathname));
@ -848,7 +848,7 @@ Fl_File_Chooser::fileNameCB()
int condition = Fl::system_driver()->case_insensitive_filenames() ?
strcasecmp(pathname, directory_) : strcmp(pathname, directory_);
if (condition && (pathname[0] || strcmp("/", directory_))) {
int p = fileName->position();
int p = fileName->insert_position();
int m = fileName->mark();
directory(pathname);
@ -861,7 +861,7 @@ Fl_File_Chooser::fileNameCB()
strlcpy(pathname, tempname, sizeof(pathname));
}
fileName->position(p, m);
fileName->insert_position(p, m);
}
// Other key pressed - do filename completion as possible...
@ -922,7 +922,7 @@ Fl_File_Chooser::fileNameCB()
// Highlight it with the cursor at the end of the selection so
// s/he can press the right arrow to accept the selection
// (Tab and End also do this for both cases.)
fileName->position(
fileName->insert_position(
(int) (filename - pathname + max_match),
(int) (filename - pathname + min_match));
} else if (max_match == 0) {
@ -1527,7 +1527,7 @@ Fl_File_Chooser::value(const char *filename)
if (slash > pathname) slash[-1] = '/';
fileName->value(pathname);
fileName->position(0, (int) strlen(pathname));
fileName->insert_position(0, (int) strlen(pathname));
okButton->activate();
// Then find the file in the file list and select it...

View File

@ -54,7 +54,7 @@ void Fl_Input::draw() {
// kludge so shift causes selection to extend:
int Fl_Input::shift_position(int p) {
return position(p, Fl::event_state(FL_SHIFT) ? mark() : p);
return insert_position(p, Fl::event_state(FL_SHIFT) ? mark() : p);
}
int Fl_Input::shift_up_down_position(int p) {
@ -93,7 +93,7 @@ static const char *legal_fp_chars = ".eE+-";
// If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
//
int Fl_Input::kf_lines_up(int repeat_num) {
int i = position();
int i = insert_position();
if (!line_start(i)) {
//UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
return NORMAL_INPUT_MOVE;
@ -111,7 +111,7 @@ int Fl_Input::kf_lines_up(int repeat_num) {
// If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
//
int Fl_Input::kf_lines_down(int repeat_num) {
int i = position();
int i = insert_position();
if (line_end(i) >= size()) {
//UNNEEDED if (input_type()==FL_MULTILINE_INPUT && !Fl::option(Fl::OPTION_ARROW_FOCUS)) return 1;
return NORMAL_INPUT_MOVE;
@ -144,66 +144,66 @@ int Fl_Input::kf_insert_toggle() {
// Delete word right
int Fl_Input::kf_delete_word_right() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) return cut();
cut(position(), word_end(position()));
if (mark() != insert_position()) return cut();
cut(insert_position(), word_end(insert_position()));
return 1;
}
// Delete word left
int Fl_Input::kf_delete_word_left() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) return cut();
cut(word_start(position()), position());
if (mark() != insert_position()) return cut();
cut(word_start(insert_position()), insert_position());
return 1;
}
// Delete to start of line
int Fl_Input::kf_delete_sol() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) return cut();
cut(line_start(position()), position());
if (mark() != insert_position()) return cut();
cut(line_start(insert_position()), insert_position());
return 1;
}
// Delete to end of line
int Fl_Input::kf_delete_eol() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) return cut();
cut(position(), line_end(position()));
if (mark() != insert_position()) return cut();
cut(insert_position(), line_end(insert_position()));
return 1;
}
int Fl_Input::kf_delete_char_right() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) cut();
if (mark() != insert_position()) cut();
else cut(1);
return 1;
}
int Fl_Input::kf_delete_char_left() {
if (readonly()) { fl_beep(); return 1; }
if (mark() != position()) cut();
if (mark() != insert_position()) cut();
else cut(-1);
return 1;
}
// Move cursor to start of line
int Fl_Input::kf_move_sol() {
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
return shift_position(line_start(insert_position())) + NORMAL_INPUT_MOVE;
}
// Move cursor to end of line
int Fl_Input::kf_move_eol() {
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
return shift_position(line_end(insert_position())) + NORMAL_INPUT_MOVE;
}
// Clear to end of line
int Fl_Input::kf_clear_eol() {
if (readonly()) { fl_beep(); return 1; }
if (position()>=size()) return 0;
int i = line_end(position());
if (i == position() && i < size()) i++;
cut(position(), i);
if (insert_position()>=size()) return 0;
int i = line_end(insert_position());
if (i == insert_position() && i < size()) i++;
cut(insert_position(), i);
return copy_cuts();
}
@ -211,7 +211,7 @@ int Fl_Input::kf_clear_eol() {
// If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
//
int Fl_Input::kf_move_char_left() {
int i = shift_position(position()-1) + NORMAL_INPUT_MOVE;
int i = shift_position(insert_position()-1) + NORMAL_INPUT_MOVE;
return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
}
@ -219,36 +219,36 @@ int Fl_Input::kf_move_char_left() {
// If OPTION_ARROW_FOCUS is disabled, return 1 to prevent focus navigation.
//
int Fl_Input::kf_move_char_right() {
int i = shift_position(position()+1) + NORMAL_INPUT_MOVE;
int i = shift_position(insert_position()+1) + NORMAL_INPUT_MOVE;
return Fl::option(Fl::OPTION_ARROW_FOCUS) ? i : 1;
}
// Move cursor word-left
int Fl_Input::kf_move_word_left() {
shift_position(word_start(position()));
shift_position(word_start(insert_position()));
return 1;
}
// Move cursor word-right
int Fl_Input::kf_move_word_right() {
shift_position(word_end(position()));
shift_position(word_end(insert_position()));
return 1;
}
// Move cursor up one line and to the start of line (paragraph up)
int Fl_Input::kf_move_up_and_sol() {
if (line_start(position())==position() && position()>0)
return shift_position(line_start(position()-1)) + NORMAL_INPUT_MOVE;
if (line_start(insert_position())==insert_position() && insert_position()>0)
return shift_position(line_start(insert_position()-1)) + NORMAL_INPUT_MOVE;
else
return shift_position(line_start(position())) + NORMAL_INPUT_MOVE;
return shift_position(line_start(insert_position())) + NORMAL_INPUT_MOVE;
}
// Move cursor down one line and to the end of line (paragraph down)
int Fl_Input::kf_move_down_and_eol() {
if (line_end(position())==position() && position()<size())
return shift_position(line_end(position()+1)) + NORMAL_INPUT_MOVE;
if (line_end(insert_position())==insert_position() && insert_position()<size())
return shift_position(line_end(insert_position()+1)) + NORMAL_INPUT_MOVE;
else
return shift_position(line_end(position())) + NORMAL_INPUT_MOVE;
return shift_position(line_end(insert_position())) + NORMAL_INPUT_MOVE;
}
// Move to top of document
@ -265,7 +265,7 @@ int Fl_Input::kf_bottom() {
// Select all text in the widget
int Fl_Input::kf_select_all() {
position(0,size());
insert_position(0,size());
return 1;
}
@ -348,7 +348,7 @@ int Fl_Input::handle_key() {
#endif // HAVE_LOCALECONV
// find the insert position
int ip = position()<mark() ? position() : mark();
int ip = insert_position()<mark() ? insert_position() : mark();
// This is complex to allow "0xff12" hex to be typed:
if ( (!ip && (ascii == '+' || ascii == '-'))
|| (ascii >= '0' && ascii <= '9')
@ -358,18 +358,18 @@ int Fl_Input::handle_key() {
|| (input_type()==FL_FLOAT_INPUT && ascii && strchr(legal_fp_chars, ascii)))
{
if (readonly()) fl_beep();
else replace(position(), mark(), &ascii, 1);
else replace(insert_position(), mark(), &ascii, 1);
}
return 1;
}
if (del || Fl::event_length()) {
if (readonly()) fl_beep();
else replace(position(), del ? position()-del : mark(),
else replace(insert_position(), del ? insert_position()-del : mark(),
Fl::event_text(), Fl::event_length());
}
if (Fl::screen_driver()->has_marked_text() && Fl::compose_state) {
this->mark( this->position() - Fl::compose_state );
this->mark( this->insert_position() - Fl::compose_state );
}
return 1;
}
@ -408,11 +408,11 @@ int Fl_Input::handle_key() {
case FL_Enter:
case FL_KP_Enter:
if (when() & FL_WHEN_ENTER_KEY) {
position(size(), 0);
insert_position(size(), 0);
maybe_do_callback();
return 1;
} else if (multiline && !readonly()) {
return replace(position(), mark(), "\n", 1);
return replace(insert_position(), mark(), "\n", 1);
} return 0; // reserved for shortcuts
case FL_Tab:
@ -455,7 +455,7 @@ int Fl_Input::handle_key() {
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 replace(insert_position(), mark(), &ascii, 1);
break;
}
@ -468,17 +468,17 @@ int Fl_Input::handle(int event) {
switch (event) {
case FL_UNFOCUS:
if (Fl::screen_driver()->has_marked_text() && Fl::compose_state) {
this->mark( this->position() );
this->mark( this->insert_position() );
fl_reset_spot();
}
break;
case FL_FOCUS:
switch (Fl::event_key()) {
case FL_Right:
position(0);
insert_position(0);
break;
case FL_Left:
position(size());
insert_position(size());
break;
case FL_Down:
up_down_position(0);
@ -487,10 +487,10 @@ int Fl_Input::handle(int event) {
up_down_position(line_start(size()));
break;
case FL_Tab:
position(size(),0);
insert_position(size(),0);
break;
default:
position(position(),mark());// turns off the saved up/down arrow position
insert_position(insert_position(),mark());// turns off the saved up/down arrow position
break;
}
break;
@ -505,12 +505,12 @@ int Fl_Input::handle(int event) {
&& !tab_nav() // with tab navigation disabled?
&& input_type() == FL_MULTILINE_INPUT // with a multiline input?
&& size() > 0 // non-empty field?
&& ((mark()==0 && position()==size()) || (position()==0 && mark()==size()))) {// while entire field selected?
&& ((mark()==0 && insert_position()==size()) || (insert_position()==0 && mark()==size()))) {// while entire field selected?
// Set cursor to the end of the selection...
if (mark() > position())
position(mark());
if (mark() > insert_position())
insert_position(mark());
else
position(position());
insert_position(insert_position());
return (1);
} else {
if (active_r() && window() && this == Fl::belowmouse())
@ -521,15 +521,15 @@ int Fl_Input::handle(int event) {
case FL_PUSH:
if (Fl::dnd_text_ops()) {
int oldpos = position(), oldmark = mark();
int oldpos = insert_position(), oldmark = mark();
Fl_Boxtype b = box();
Fl_Input_::handle_mouse(x()+Fl::box_dx(b), y()+Fl::box_dy(b),
w()-Fl::box_dw(b), h()-Fl::box_dh(b), 0);
newpos = position();
position( oldpos, oldmark );
newpos = insert_position();
insert_position( oldpos, oldmark );
if (Fl::focus()==this && !Fl::event_state(FL_SHIFT) && input_type()!=FL_SECRET_INPUT &&
( (newpos >= mark() && newpos < position()) ||
(newpos >= position() && newpos < mark()) ) ) {
( (newpos >= mark() && newpos < insert_position()) ||
(newpos >= insert_position() && newpos < mark()) ) ) {
// user clicked in the selection, may be trying to drag
drag_start = newpos;
return 1;
@ -548,7 +548,7 @@ int Fl_Input::handle(int event) {
if (drag_start >= 0) {
if (Fl::event_is_click()) return 1; // debounce the mouse
// save the position because sometimes we don't get DND_ENTER:
dnd_save_position = position();
dnd_save_position = insert_position();
dnd_save_mark = mark();
dnd_save_focus = this;
// drag the data:
@ -568,7 +568,7 @@ int Fl_Input::handle(int event) {
copy(0);
} else if (Fl::event_is_click() && drag_start >= 0) {
// user clicked in the field and wants to reset the cursor position...
position(drag_start, drag_start);
insert_position(drag_start, drag_start);
drag_start = -1;
} else if (Fl::event_clicks()) {
// user double or triple clicked to select word or whole text
@ -584,7 +584,7 @@ int Fl_Input::handle(int event) {
case FL_DND_ENTER:
Fl::belowmouse(this); // send the leave events first
if (dnd_save_focus != this) {
dnd_save_position = position();
dnd_save_position = insert_position();
dnd_save_mark = mark();
dnd_save_focus = Fl::focus();
Fl::focus(this);
@ -608,7 +608,7 @@ int Fl_Input::handle(int event) {
return 1;
case FL_DND_LEAVE:
position(dnd_save_position, dnd_save_mark);
insert_position(dnd_save_position, dnd_save_mark);
#ifdef DND_OUT_XXXX
if (!focused())
#endif
@ -624,7 +624,7 @@ int Fl_Input::handle(int event) {
if (dnd_save_focus == this) { // if the dragged text comes from the same widget
if (!readonly()) {
// remove the selected text
int old_position = position();
int old_position = insert_position();
if (dnd_save_mark > dnd_save_position) {
int tmp = dnd_save_mark;
dnd_save_mark = dnd_save_position;
@ -632,9 +632,9 @@ int Fl_Input::handle(int event) {
}
replace(dnd_save_mark, dnd_save_position, NULL, 0);
if (old_position > dnd_save_position)
position(old_position - (dnd_save_position - dnd_save_mark));
insert_position(old_position - (dnd_save_position - dnd_save_mark));
else
position(old_position);
insert_position(old_position);
} // !readonly()
} // from the same widget
else if (dnd_save_focus) {
@ -715,7 +715,7 @@ Fl_Secret_Input::Fl_Secret_Input(int X,int Y,int W,int H,const char *l)
int Fl_Secret_Input::handle(int event) {
int retval = Fl_Input::handle(event);
if (event == FL_KEYBOARD && Fl::screen_driver()->has_marked_text() && Fl::compose_state) {
this->mark( this->position() ); // don't underline marked text
this->mark( this->insert_position() ); // don't underline marked text
}
return retval;
}

View File

@ -261,10 +261,10 @@ void Fl_Input_::drawtext(int X, int Y, int W, int H) {
int selstart, selend;
if (Fl::focus()!=this && /*Fl::selection_owner()!=this &&*/ Fl::pushed()!=this)
selstart = selend = 0;
else if (position() <= mark()) {
selstart = position(); selend = mark();
else if (insert_position() <= mark()) {
selstart = insert_position(); selend = mark();
} else {
selend = position(); selstart = mark();
selend = insert_position(); selstart = mark();
}
setfont();
@ -279,8 +279,8 @@ void Fl_Input_::drawtext(int X, int Y, int W, int H) {
int curx, cury;
for (p=value(), curx=cury=lines=0; ;) {
e = expand(p, buf);
if (position() >= p-value() && position() <= e-value()) {
curx = int(expandpos(p, value()+position(), buf, 0)+.5);
if (insert_position() >= p-value() && insert_position() <= e-value()) {
curx = int(expandpos(p, value()+insert_position(), buf, 0)+.5);
if (Fl::focus()==this && !was_up_down) up_down_pos = curx;
cury = lines*height;
int newscroll = xscroll_;
@ -405,10 +405,10 @@ void Fl_Input_::drawtext(int X, int Y, int W, int H) {
if (Fl::focus() == this && (
(Fl::screen_driver()->has_marked_text() && Fl::compose_state) ||
selstart == selend) &&
position() >= p-value() && position() <= e-value()) {
insert_position() >= p-value() && insert_position() <= e-value()) {
fl_color(cursor_color());
// cursor position may need to be recomputed (see STR #2486)
curx = int(expandpos(p, value()+position(), buf, 0)+.5);
curx = int(expandpos(p, value()+insert_position(), buf, 0)+.5);
if (readonly()) {
// Draw '^' caret cursor
fl_line((int)(xpos+curx-2.5f), Y+ypos+height-1,
@ -629,14 +629,14 @@ void Fl_Input_::handle_mouse(int X, int Y, int /*W*/, int /*H*/, int drag) {
}
// if the multiple click does not increase the selection, revert
// to single-click behavior:
if (!drag && (mark() > position() ?
(newmark >= position() && newpos <= mark()) :
(newmark >= mark() && newpos <= position()))) {
if (!drag && (mark() > insert_position() ?
(newmark >= insert_position() && newpos <= mark()) :
(newmark >= mark() && newpos <= insert_position()))) {
Fl::event_clicks(0);
newmark = newpos = (int) (l-value());
}
}
position(newpos, newmark);
insert_position(newpos, newmark);
}
/**
@ -656,7 +656,7 @@ void Fl_Input_::handle_mouse(int X, int Y, int /*W*/, int /*H*/, int drag) {
\return 0 if no positions changed
\see position(int), position(), mark(int)
*/
int Fl_Input_::position(int p, int m) {
int Fl_Input_::insert_position(int p, int m) {
int is_same = 0;
was_up_down = 0;
if (p<0) p = 0;
@ -730,7 +730,7 @@ int Fl_Input_::up_down_position(int i, int keepmark) {
if (f <= up_down_pos) l = t; else r = t-1;
}
int j = (int) (l-value());
j = position(j, keepmark ? mark_ : j);
j = insert_position(j, keepmark ? mark_ : j);
was_up_down = 1;
return j;
}
@ -749,10 +749,10 @@ int Fl_Input_::up_down_position(int i, int keepmark) {
\see Fl::copy(const char *, int, int)
*/
int Fl_Input_::copy(int clipboard) {
int b = position();
int b = insert_position();
int e = mark();
if (b != e) {
if (b > e) {b = mark(); e = position();}
if (b > e) {b = mark(); e = insert_position();}
if (input_type() == FL_SECRET_INPUT) e = b;
Fl::copy(value()+b, e-b, clipboard);
return 1;
@ -780,7 +780,7 @@ int Fl_Input_::append(const char* t, int l, char keep_selection)
int om = mark_, op = position_;
int ret = replace(end, end, t, l);
if (keep_selection) {
position(op, om);
insert_position(op, om);
}
return ret;
}
@ -1125,7 +1125,7 @@ int Fl_Input_::handletext(int event, int X, int Y, int W, int H) {
return 1;
} else return replace(0, size(), t, (int) (e-t));
}
return replace(position(), mark(), t, (int) (e-t));}
return replace(insert_position(), mark(), t, (int) (e-t));}
case FL_SHORTCUT:
if (!(shortcut() ? Fl::test_shortcut(shortcut()) : test_shortcut()))
@ -1259,7 +1259,7 @@ int Fl_Input_::static_value(const char* str, int len) {
xscroll_ = yscroll_ = 0;
minimal_update(0);
}
position(readonly() ? 0 : size());
insert_position(readonly() ? 0 : size());
return 1;
}

View File

@ -281,7 +281,7 @@ int Fl_Screen_Driver::input_widget_handle_key(int key, unsigned mods, unsigned s
{
switch (key) {
case FL_Delete: {
int selected = (input->position() != input->mark()) ? 1 : 0;
int selected = (input->insert_position() != input->mark()) ? 1 : 0;
if (mods==0 && shift && selected)
return input->kf_copy_cut(); // Shift-Delete with selection (WP,NP,WOW,GE,KE,OF)
if (mods==0 && shift && !selected)

View File

@ -581,7 +581,7 @@ void Fl_Text_Buffer::unselect()
*/
int Fl_Text_Buffer::selection_position(int *start, int *end)
{
return mPrimary.position(start, end);
return mPrimary.selected(start, end);
}
@ -642,7 +642,7 @@ void Fl_Text_Buffer::secondary_unselect()
*/
int Fl_Text_Buffer::secondary_selection_position(int *start, int *end)
{
return mSecondary.position(start, end);
return mSecondary.selected(start, end);
}
@ -703,7 +703,7 @@ void Fl_Text_Buffer::unhighlight()
*/
int Fl_Text_Buffer::highlight_position(int *start, int *end)
{
return mHighlight.position(start, end);
return mHighlight.selected(start, end);
}
@ -1325,7 +1325,7 @@ void Fl_Text_Selection::set(int startpos, int endpos)
\see selected(), start(), end()
*/
int Fl_Text_Selection::position(int *startpos, int *endpos) const {
int Fl_Text_Selection::selected(int *startpos, int *endpos) const {
if (!mSelected) {
*startpos = 0;
*endpos = 0;
@ -1355,7 +1355,7 @@ char *Fl_Text_Buffer::selection_text_(Fl_Text_Selection * sel) const {
int start, end;
/* If there's no selection, return an allocated empty string */
if (!sel->position(&start, &end))
if (!sel->selected(&start, &end))
{
char *s = (char *) malloc(1);
*s = '\0';
@ -1375,7 +1375,7 @@ void Fl_Text_Buffer::remove_selection_(Fl_Text_Selection * sel)
{
int start, end;
if (!sel->position(&start, &end))
if (!sel->selected(&start, &end))
return;
remove(start, end);
//undoyankcut = undocut;
@ -1393,7 +1393,7 @@ void Fl_Text_Buffer::replace_selection_(Fl_Text_Selection * sel,
/* If there's no selection, return */
int start, end;
if (!sel->position(&start, &end))
if (!sel->selected(&start, &end))
return;
/* Do the appropriate type of replace */

View File

@ -93,7 +93,7 @@
Pass zero as \p oldx or \p oldy to disable drag in that direction.
*/
void Fl_Tile::position(int oldx, int oldy, int newx, int newy) {
void Fl_Tile::move_intersection(int oldx, int oldy, int newx, int newy) {
Fl_Widget*const* a = array();
Fl_Rect *p = bounds();
p += 2; // skip group & resizable's saved size
@ -268,7 +268,7 @@ int Fl_Tile::handle(int event) {
else if (newy > r->y()+r->h()) newy = r->y()+r->h();
} else
newy = sy;
position(sx,sy,newx,newy);
move_intersection(sx, sy, newx, newy);
if (event == FL_DRAG) {
set_changed();
do_callback(FL_REASON_DRAGGED);

View File

@ -54,7 +54,7 @@ void Fl_Value_Input::value_damage() {
char buf[128];
format(buf);
input.value(buf);
input.mark(input.position()); // turn off selection highlight
input.mark(input.insert_position()); // turn off selection highlight
}
int Fl_Value_Input::handle(int event) {

View File

@ -174,7 +174,7 @@ int main(int argc, char **argv) {
browser->add("@bBold text");
browser->add("@iItalic text");
}
browser->position(0);
browser->vposition(0);
field = new Fl_Int_Input(55, 350, window.w()-55, 25, "Line #:");
field->callback(show_cb);

View File

@ -1130,7 +1130,7 @@ Reshape(int width, int height)
W = width;
H = height;
glViewport(0, 0, W, H);
glViewport(0, 0, (GLsizei)W, (GLsizei)H);
glGetIntegerv(GL_VIEWPORT, viewport);
}
@ -1453,7 +1453,7 @@ main(int argc, char **argv)
}
}
glutInitWindowSize(W, H);
glutInitWindowSize((int)W, (int)H);
if (doubleBuffer) {
glutInitDisplayMode(GLUT_DEPTH | GLUT_RGB | GLUT_DOUBLE | GLUT_MULTISAMPLE);
} else {

View File

@ -49,7 +49,7 @@ void test(Fl_Input *i) {
if (i->changed()) {
i->clear_changed(); G_tty->printf("%s '%s'\n",i->label(),i->value());
char utf8buf[10];
int last = fl_utf8encode(i->index(i->position()), utf8buf);
int last = fl_utf8encode(i->index(i->insert_position()), utf8buf);
utf8buf[last] = 0;
G_tty->printf("Symbol at cursor position: %s\n", utf8buf);
}

View File

@ -97,14 +97,14 @@ int main(int argc, char** argv) {
for (int c = 0; c < window->children(); c++) {
Fl_Widget* b = window->child(c);
if (b->callback() == (Fl_Callback*)key_cb) {
int i = b->argument();
int i = (int)b->argument();
if (!i) i = b->label()[0];
Fl_Button *btn = ((Fl_Button*)b);
int state = Fl::event_key(i);
if (btn->value()!=state)
btn->value(state);
} else if (b->callback() == (Fl_Callback*)shift_cb) {
int i = b->argument();
int i = (int)b->argument();
Fl_Button *btn = ((Fl_Button*)b);
int state = Fl::event_state(i);
if (btn->value()!=state)

View File

@ -47,10 +47,10 @@ void test_box::draw() {
dashes[3] = char(sliders[8]->value());
dashes[4] = 0;
fl_line_style(
choice[0]->mvalue()->argument() +
(int)(choice[0]->mvalue()->argument() +
choice[1]->mvalue()->argument() +
choice[2]->mvalue()->argument(),
long(sliders[3]->value()), // width
choice[2]->mvalue()->argument()),
(int)(sliders[3]->value()), // width
dashes);
// draw the defined fl_rect and fl_vertex first and then

View File

@ -71,7 +71,7 @@ class Ut_Unicode_Box_Test : public Fl_Group {
int fontsize = (int)fontsize_slider->value();
textdisplay->textsize(fontsize);
multilineinput->textsize(fontsize);
multilineinput->position(0); // keep scrolled to top
multilineinput->insert_position(0); // keep scrolled to top
parent()->redraw();
}
static void font_size_slider_cb(Fl_Widget*, void *userdata) {