3 * \file GuiWorkArea_Private.h
4 * This file is part of LyX, the document processor.
5 * Licence details can be found in the file COPYING.
7 * \author Abdelrazak Younes
9 * Full author contact details are available in file CREDITS.
12 #ifndef WORKAREA_PRIVATE_H
13 #define WORKAREA_PRIVATE_H
15 #include "FuncRequest.h"
17 #include "support/FileName.h"
18 #include "support/Timeout.h"
20 #include <QMouseEvent>
34 /// for emulating triple click
38 DoubleClick() : state(Qt::NoButton), active(false) {}
40 DoubleClick(QMouseEvent * e) : state(e->button()), active(true) {}
42 bool operator==(QMouseEvent const & e) { return state == e.button(); }
46 Qt::MouseButton state;
51 /** Qt only emits mouse events when the mouse is being moved, but
52 * we want to generate 'pseudo' mouse events when the mouse button is
53 * pressed and the mouse cursor is below the bottom, or above the top
54 * of the work area. In this way, we'll be able to continue scrolling
55 * (and selecting) the text.
57 * This class stores all the parameters needed to make this happen.
59 class SyntheticMouseEvent
62 SyntheticMouseEvent();
71 * Implementation of the work area (buffer view GUI)
75 struct GuiWorkArea::Private
78 Private(GuiWorkArea *);
84 void resizeBufferView();
87 void dispatch(FuncRequest const & cmd0);
88 /// recompute the shape and position of the caret
89 void updateCaretGeometry();
90 /// show the caret if it is not visible
92 /// hide the caret if it is visible
94 /// Set the range and value of the scrollbar and connect to its valueChanged
96 void updateScrollbar();
97 /// Change the cursor when the mouse hovers over a clickable inset
98 void updateCursorShape();
100 void paintPreeditText(GuiPainter & pain);
102 /// Prepare screen for next painting
104 /// Where painting takes place
105 QPaintDevice * screenDevice();
106 /// Put backingstore to screen if necessary
107 void updateScreen(QRectF const & rc);
112 BufferView * buffer_view_;
116 /// Do we need an intermediate image when painting (for now macOS and Wayland)
117 bool use_backingstore_;
122 CaretWidget * caret_;
123 /// is the caret currently displayed
126 QTimer caret_timeout_;
129 SyntheticMouseEvent synthetic_mouse_event_;
131 DoubleClick dc_event_;
136 /// the current preedit text of the input method
137 docstring preedit_string_;
138 /// Number of lines used by preedit text
140 /// the attributes of the preedit text
141 QList<QInputMethodEvent::Attribute> preedit_attr_;
143 /// Ratio between physical pixels and device-independent pixels
144 /// We save the last used value to detect changes of the
145 /// current pixel_ratio of the viewport.
146 double last_pixel_ratio_;
148 GuiCompleter * completer_;
150 /// Special mode in which Esc and Enter (with or without Shift)
153 /// store the name of the context menu when the mouse is
154 /// pressed. This is used to get the correct context menu
155 /// when the menu is actually shown (after releasing on Windows)
156 /// and after the DEPM has done its job.
157 std::string context_menu_name_;
159 /// stuff related to window title
161 support::FileName file_name_;
167 docstring vc_status_;
171 bool externally_modified_;
175 } // namespace frontend