mirror of https://github.com/fltk/fltk
Wayland documentation: improve "Input Methods" and various details
also fix typo mentionned -> mentioned
This commit is contained in:
parent
549688598f
commit
9fa66ecc8a
|
@ -206,8 +206,8 @@ associated to a Wayland-defined object, usually right after creation of this obj
|
||||||
by a call to a specific Wayland function named following the form \c wl_XXX_add_listener().
|
by a call to a specific Wayland function named following the form \c wl_XXX_add_listener().
|
||||||
After defined events have occurred, the Wayland compositor sends appropriate commands
|
After defined events have occurred, the Wayland compositor sends appropriate commands
|
||||||
to the client through the socket; the event loop detects the availability of data in the
|
to the client through the socket; the event loop detects the availability of data in the
|
||||||
socket and calls function \c wayland_socket_callback() which itself calls the appropriate
|
socket and calls function \c wayland_socket_callback(); this function calls the appropriate
|
||||||
member of the listener, and transmits relevant information to the client app as parameters of this call.
|
member of the listener and transmits relevant information to the client app as parameters of this call.
|
||||||
For example, this code:
|
For example, this code:
|
||||||
\code
|
\code
|
||||||
static void surface_enter(……) { …… } // called when a surface enters a display
|
static void surface_enter(……) { …… } // called when a surface enters a display
|
||||||
|
@ -829,7 +829,7 @@ The effect of value \c n of variable \c wld_scale is
|
||||||
that 1 Wayland graphics unit represents a block of \c nxn pixels.
|
that 1 Wayland graphics unit represents a block of \c nxn pixels.
|
||||||
Another effect is that a drawing buffer for a surface of size WxH units
|
Another effect is that a drawing buffer for a surface of size WxH units
|
||||||
contains <tt>W * n * H * n * 4</tt> bytes.
|
contains <tt>W * n * H * n * 4</tt> bytes.
|
||||||
Member function \c output_scale() mentionned above sets this value for
|
Member function \c output_scale() mentioned above sets this value for
|
||||||
each system's display at startup time. Member function \c
|
each system's display at startup time. Member function \c
|
||||||
Fl_Wayland_Graphics_Driver::buffer_commit() informs the Wayland compositor
|
Fl_Wayland_Graphics_Driver::buffer_commit() informs the Wayland compositor
|
||||||
of the value of \c wld_scale calling \c wl_surface_set_buffer_scale()
|
of the value of \c wld_scale calling \c wl_surface_set_buffer_scale()
|
||||||
|
@ -870,13 +870,15 @@ is unmapped by function \c Fl_Wayland_Window_Driver::hide(), the surface's list
|
||||||
is emptied.
|
is emptied.
|
||||||
|
|
||||||
<h3>Fractional scaling</h3>
|
<h3>Fractional scaling</h3>
|
||||||
The KWin compositor, and gnome too if specially set, allow to use <em>fractional scaling</em>
|
The KWin and gnome compositors allow to use <em>fractional scaling</em>
|
||||||
that can take intermediate values between 100% and 200%. Wayland implements this rendering all
|
that can take values between 100% and 400% that are not a multiple of 100%.
|
||||||
<tt>wl_surface</tt>'s as if the scaling was at 200%, and downsizing them
|
Wayland implements this rendering all <tt>wl_surface</tt>'s as if the scaling had
|
||||||
|
the next value above that is a multiple of 100% (e.g., 175% --> 200%), and downsizing them
|
||||||
to the desired fractional scale value at the compositing stage.
|
to the desired fractional scale value at the compositing stage.
|
||||||
Seen from FLTK, everything runs as when <tt>wld_scale = 2</tt>.
|
Seen from FLTK, everything runs with <tt>wld_scale</tt> having an integer value (1, 2, 3 or 4).
|
||||||
|
|
||||||
These commands make gnome accept fractional scaling, and turn that off:
|
Some gnome versions may natively support fractional scaling. Others require to use these commands
|
||||||
|
to make them accept/refuse fractional scaling:
|
||||||
\code
|
\code
|
||||||
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
|
gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
|
||||||
gsettings reset org.gnome.mutter experimental-features
|
gsettings reset org.gnome.mutter experimental-features
|
||||||
|
@ -921,13 +923,13 @@ protocol calling \c registry_handle_global() with its \c interface argument equa
|
||||||
\c "gtk_shell1". FLTK initializes then a static global variable \c gtk_shell of type
|
\c "gtk_shell1". FLTK initializes then a static global variable \c gtk_shell of type
|
||||||
<tt>struct gtk_shell1*</tt>.
|
<tt>struct gtk_shell1*</tt>.
|
||||||
|
|
||||||
Member functions of \c pointer_listener mentionned above run for all mouse events
|
Member functions of \c pointer_listener mentioned above run for all mouse events
|
||||||
on all \c wl_surface objects. The table above describes what these functions do for
|
on all \c wl_surface objects. The table above describes what these functions do for
|
||||||
mouse events on FLTK-created \c wl_surface objects. But they also run for the
|
mouse events on FLTK-created \c wl_surface objects. But they also run for the
|
||||||
libdecor-created \c wl_surface objects corresponding to window titlebars.
|
libdecor-created \c wl_surface objects corresponding to window titlebars.
|
||||||
Thus, member function \c pointer_enter() runs when the mouse enters a titlebar.
|
Thus, member function \c pointer_enter() runs when the mouse enters a titlebar.
|
||||||
It calls \c Fl_Wayland_Screen_Driver::event_coords_from_surface() which calls
|
It calls \c Fl_Wayland_Screen_Driver::event_coords_from_surface() which calls
|
||||||
\c Fl_Wayland_Window_Driver::surface_to_window() which, as mentionned above, can
|
\c Fl_Wayland_Window_Driver::surface_to_window() which, as mentioned above, can
|
||||||
distinguish FLTK-created from non FLTK-created \c wl_surface objects.
|
distinguish FLTK-created from non FLTK-created \c wl_surface objects.
|
||||||
This allows \c pointer_enter() to identify the entered surface as a titlebar
|
This allows \c pointer_enter() to identify the entered surface as a titlebar
|
||||||
and to assign static global variable \c gtk_shell_surface
|
and to assign static global variable \c gtk_shell_surface
|
||||||
|
@ -1041,7 +1043,7 @@ gets associated to a standard cursor or to a new custom cursor.
|
||||||
|
|
||||||
\section wayland-text Keyboard support
|
\section wayland-text Keyboard support
|
||||||
|
|
||||||
The "Mouse handling" section above mentionned function \c seat_capabilities() that Wayland calls when
|
The "Mouse handling" section above mentioned function \c seat_capabilities() that Wayland calls when
|
||||||
the app discovers its "seat". Presence of flag \c WL_SEAT_CAPABILITY_KEYBOARD in argument
|
the app discovers its "seat". Presence of flag \c WL_SEAT_CAPABILITY_KEYBOARD in argument
|
||||||
\c capabilities of this function indicates that a keyboard is available. In that case, a call
|
\c capabilities of this function indicates that a keyboard is available. In that case, a call
|
||||||
to \c wl_seat_get_keyboard() returns a pointer stored in member \c wl_keyboard of the
|
to \c wl_seat_get_keyboard() returns a pointer stored in member \c wl_keyboard of the
|
||||||
|
@ -1049,16 +1051,16 @@ to \c wl_seat_get_keyboard() returns a pointer stored in member \c wl_keyboard o
|
||||||
and a call to \c wl_keyboard_add_listener() installs a 6-member listener of type
|
and a call to \c wl_keyboard_add_listener() installs a 6-member listener of type
|
||||||
<tt>struct wl_keyboard_listener</tt>. These 6 FLTK-defined, callback functions are used as follows.
|
<tt>struct wl_keyboard_listener</tt>. These 6 FLTK-defined, callback functions are used as follows.
|
||||||
|
|
||||||
Function \c wl_keyboard_keymap() runs when the app starts and also if the keyboard layout
|
1) Function \c wl_keyboard_keymap() runs when the app starts and also if the keyboard layout
|
||||||
is changed during run-time. It allows initialization of access to this keyboard.
|
is changed during run-time. It allows initialization of access to this keyboard.
|
||||||
Noticeably, member \c xkb_state of type <tt>struct xkb_state*</tt> of the current
|
Noticeably, member \c xkb_state of type <tt>struct xkb_state*</tt> of the current
|
||||||
\ref wayland-seat "Fl_Wayland_Screen_Driver::seat" record is adequately initialized.
|
\ref wayland-seat "Fl_Wayland_Screen_Driver::seat" record is adequately initialized.
|
||||||
|
|
||||||
Functions \c wl_keyboard_enter() and \c wl_keyboard_leave(), called when focus enters and
|
2-3) Functions \c wl_keyboard_enter() and \c wl_keyboard_leave(), called when focus enters and
|
||||||
leaves a surface, send \c FL_FOCUS and \c FL_UNFOCUS events to the \c Fl_Window object corresponding
|
leaves a surface, send \c FL_FOCUS and \c FL_UNFOCUS events to the \c Fl_Window object corresponding
|
||||||
to this surface.
|
to this surface.
|
||||||
|
|
||||||
Function \c wl_keyboard_key() runs each time a keyboard key is pressed or released. Its argument \c key,
|
4) Function \c wl_keyboard_key() runs each time a keyboard key is pressed or released. Its argument \c key,
|
||||||
to which 8 must be added, provides the keycode via function \c xkb_state_key_get_one_sym() and then the
|
to which 8 must be added, provides the keycode via function \c xkb_state_key_get_one_sym() and then the
|
||||||
corresponding text via function \c xkb_state_key_get_utf8() which is put in \c Fl::e_text.
|
corresponding text via function \c xkb_state_key_get_utf8() which is put in \c Fl::e_text.
|
||||||
Then, a few calls to functions whose name begin with \c xkb_compose_ are necessary to support
|
Then, a few calls to functions whose name begin with \c xkb_compose_ are necessary to support
|
||||||
|
@ -1067,11 +1069,11 @@ the appropriate \c Fl_Window. Also, function \c wl_keyboard_key() uses global va
|
||||||
<tt>Fl_Int_Vector key_vector</tt> to record all currently pressed keys. This is the base of the
|
<tt>Fl_Int_Vector key_vector</tt> to record all currently pressed keys. This is the base of the
|
||||||
implementation of \c Fl_Wayland_Screen_Driver::event_key(int).
|
implementation of \c Fl_Wayland_Screen_Driver::event_key(int).
|
||||||
|
|
||||||
Function \c wl_keyboard_modifiers() runs when a modifier key (e.g., shift, control) is pressed or
|
5) Function \c wl_keyboard_modifiers() runs when a modifier key (e.g., shift, control) is pressed or
|
||||||
released. Calls to functions \c xkb_state_update_mask() and \c xkb_state_mod_name_is_active() allow FLTK
|
released. Calls to functions \c xkb_state_update_mask() and \c xkb_state_mod_name_is_active() allow FLTK
|
||||||
to set \c Fl::e_state adequately.
|
to set \c Fl::e_state adequately.
|
||||||
|
|
||||||
Function \c wl_keyboard_repeat_info() does not run, for now, because this would require version 4 of
|
6) Function \c wl_keyboard_repeat_info() does not run, for now, because this would require version 4 of
|
||||||
the <tt>wl_keyboard</tt> object which is at version 2 in all tested Wayland compositors.
|
the <tt>wl_keyboard</tt> object which is at version 2 in all tested Wayland compositors.
|
||||||
|
|
||||||
|
|
||||||
|
@ -1091,22 +1093,25 @@ Next, a call to \c zwp_text_input_v3_add_listener() associates this \c text_inpu
|
||||||
listener of type <tt>struct zwp_text_input_v3_listener</tt>. These 6 FLTK-defined, callback functions
|
listener of type <tt>struct zwp_text_input_v3_listener</tt>. These 6 FLTK-defined, callback functions
|
||||||
are used as follows.
|
are used as follows.
|
||||||
|
|
||||||
Functions \c text_input_enter() and \c text_input_leave() are called when text input enters or leaves a
|
1-2) Functions \c text_input_enter() and \c text_input_leave() run when text input enters or leaves a
|
||||||
surface (which corresponds to an \c Fl_Window).
|
surface.
|
||||||
|
|
||||||
Functions \c text_input_preedit_string() and \c text_input_commit_string() are called when the text
|
3-4) Functions \c text_input_preedit_string() and \c text_input_commit_string() are called when the
|
||||||
input method asks the client app to insert 'marked' text or regular text, respectively.
|
text input method prepares the client app to later insert 'marked' text or regular text, respectively.
|
||||||
Complex text input often begins by inserting temporary text which is said to be 'marked' before
|
Complex text input often begins by inserting temporary text which is said to be 'marked' before
|
||||||
replacing it with the text that will stay in the document. FLTK underlines marked text
|
replacing it with the text that will stay in the document. FLTK underlines marked text
|
||||||
to distinguish it from regular text.
|
to distinguish it from regular text.
|
||||||
|
|
||||||
Functions \c text_input_delete_surrounding_text() and \c text_input_done() have
|
5) Function \c text_input_done() runs when it's time to send either regular or marked text
|
||||||
no effect at present, without this preventing input methods that have been tested
|
to the client app. This is done by function \c send_text_to_fltk() which uses static variables
|
||||||
with FLTK from working satisfactorily.
|
\c current_pre_edit, \c pending_pre_edit and \c pending_commit to determine the sent text.
|
||||||
|
|
||||||
It's necessary to inform text input methods of the current location of the insertion point in the
|
6) Function \c text_input_delete_surrounding_text() has no effect at present, without this preventing
|
||||||
active surface. This information allows them to map their auxiliary windows next to the insertion
|
input methods that have been tested with FLTK from working satisfactorily.
|
||||||
point, where they are expected to appear. The flow of information on this topic is as follows:
|
|
||||||
|
It's necessary to inform the running text input method of the current location of the insertion
|
||||||
|
point in the active surface. This information allows the input method to map its auxiliary window
|
||||||
|
close to the insertion point. The flow of information on this topic is as follows:
|
||||||
- The two FLTK widgets supporting text input, Fl_Input_ and Fl_Text_Display, transmit to FLTK the window
|
- The two FLTK widgets supporting text input, Fl_Input_ and Fl_Text_Display, transmit to FLTK the window
|
||||||
coordinates of the bottom of the current insertion point and the line height each time they change
|
coordinates of the bottom of the current insertion point and the line height each time they change
|
||||||
calling function \c fl_set_spot().
|
calling function \c fl_set_spot().
|
||||||
|
|
|
@ -735,7 +735,7 @@ void Fl_GDI_Graphics_Driver::draw_fixed(Fl_Pixmap *pxm, int X, int Y, int W, int
|
||||||
this color value in need_pixmap_bg_color. As a result, the transparent areas of the image
|
this color value in need_pixmap_bg_color. As a result, the transparent areas of the image
|
||||||
are correcty handled by the printing operation. Variable need_pixmap_bg_color is ultimately
|
are correcty handled by the printing operation. Variable need_pixmap_bg_color is ultimately
|
||||||
reset to 0.
|
reset to 0.
|
||||||
Fl_GDI_Graphics_Driver::make_unused_color_() which does the color computation mentionned
|
Fl_GDI_Graphics_Driver::make_unused_color_() which does the color computation mentioned
|
||||||
above is implemented in file src/fl_draw_pixmap.cxx
|
above is implemented in file src/fl_draw_pixmap.cxx
|
||||||
*/
|
*/
|
||||||
void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
|
void Fl_GDI_Printer_Graphics_Driver::draw_pixmap(Fl_Pixmap *pxm, int XP, int YP, int WP, int HP, int cx, int cy) {
|
||||||
|
|
Loading…
Reference in New Issue