Adds magnifier functionality to gnome-shell.
Adds the ability to create one or more zoom regions that show magnified or enhanced views of the desktop. The magnifier provides options for: * magnification factor, * four mouse tracking modes common to screen magnifiers, * positioning the magnified view in one of four screen location, or full screen, * crosshairs to accentuate the position of the mouse, * user preferences persistence via GConf (schemas in .../data/gnome-shell.schemas). * a DBus API to allow other processes to drive the magnifier as a service. https://bugzilla.gnome.org/show_bug.cgi?id=595507
This commit is contained in:
parent
865976cfe7
commit
7b7c34a399
@ -244,6 +244,200 @@
|
|||||||
</locale>
|
</locale>
|
||||||
</schema>
|
</schema>
|
||||||
|
|
||||||
|
<!-- Magnifier -->
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/show_magnifier</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/show_magnifier</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>bool</type>
|
||||||
|
<default>false</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Show or hide the magnifier</short>
|
||||||
|
<long>
|
||||||
|
Show or hide the magnifier and all of its zoom regions.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/mouse_tracking</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/mouse_tracking</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>int</type>
|
||||||
|
<default>1</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Mouse Tracking Mode</short>
|
||||||
|
<long>
|
||||||
|
Determines the position of the magnified mouse image within
|
||||||
|
the magnified view and how it reacts to system mouse movement.
|
||||||
|
The values are 0 - none: no mouse tracking; 1 - centered: the
|
||||||
|
mouse image is displayed at the center of the zoom region
|
||||||
|
(which also represents the point under the system mouse) and the
|
||||||
|
magnified contents are scrolled as the system mouse moves; 2 -
|
||||||
|
proportional: the position of the magnified mouse in the zoom
|
||||||
|
region is proportionally the same as the position of the system
|
||||||
|
mouse on screen; or 3 - push: when the magnified mouse
|
||||||
|
intersects a boundary of the zoom region, the contents are
|
||||||
|
scrolled into view.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/screen_position</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/screen_position</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>int</type>
|
||||||
|
<default>3</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Screen position</short>
|
||||||
|
<long>
|
||||||
|
The magnified view either fills the entire screen (1), or
|
||||||
|
occupies the top-half (2), bottom-half (3), left-half (4), or
|
||||||
|
right-half (5) of the screen.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/mag_factor</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/mag_factor</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>float</type>
|
||||||
|
<default>2.0</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Magnification factor</short>
|
||||||
|
<long>
|
||||||
|
The power of the magnification. A value of 1.0 means no
|
||||||
|
magnification. A value of 2.0 doubles the size.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/lens_mode</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/lens_mode</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>bool</type>
|
||||||
|
<default>false</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Enable lens mode</short>
|
||||||
|
<long>
|
||||||
|
Whether the magnified view should be centered over the location
|
||||||
|
of the system mouse and move with it.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/scroll_at_edges</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/scroll_at_edges</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>bool</type>
|
||||||
|
<default>false</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Scroll magnified contents beyond the edges of the desktop</short>
|
||||||
|
<long>
|
||||||
|
For centered mouse tracking, when the system pointer is at
|
||||||
|
or near the edge of the screen, the magnified contents continue
|
||||||
|
to scroll such that the screen edge moves into the magnified
|
||||||
|
view.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<!-- Magnifier: Crosshairs -->
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/show_cross_hairs</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/show_cross_hairs</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>bool</type>
|
||||||
|
<default>false</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Show or hide crosshairs</short>
|
||||||
|
<long>
|
||||||
|
Enables/disables display of crosshairs centered on the magnified mouse
|
||||||
|
sprite.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/cross_hairs_thickness</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/cross_hairs_thickness</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>int</type>
|
||||||
|
<default>8</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Thickness of the crosshairs</short>
|
||||||
|
<long>
|
||||||
|
Width of the vertical and horizontal lines that make up the
|
||||||
|
crosshairs.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/cross_hairs_color</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/cross_hairs_color</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>string</type>
|
||||||
|
<default>#ff0000</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Color of the crosshairs</short>
|
||||||
|
<long>
|
||||||
|
The color of the the vertical and horizontal lines that make up
|
||||||
|
the crosshairs.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/cross_hairs_opacity</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/cross_hairs_opacity</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>int</type>
|
||||||
|
<default>169</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Opacity of the crosshairs</short>
|
||||||
|
<long>
|
||||||
|
Determines the transparency of the crosshairs, from fully opaque
|
||||||
|
to fully transparent.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/cross_hairs_length</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/cross_hairs_length</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>int</type>
|
||||||
|
<default>4096</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Length of the crosshairs</short>
|
||||||
|
<long>
|
||||||
|
Determines the length of the vertical and horizontal lines that
|
||||||
|
make up the crosshairs.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
|
<schema>
|
||||||
|
<key>/schemas/desktop/gnome/accessibility/magnifier/cross_hairs_clip</key>
|
||||||
|
<applyto>/desktop/gnome/accessibility/magnifier/cross_hairs_clip</applyto>
|
||||||
|
<owner>gnome-shell</owner>
|
||||||
|
<type>bool</type>
|
||||||
|
<default>false</default>
|
||||||
|
<locale name="C">
|
||||||
|
<short>Clip the crosshairs at the center</short>
|
||||||
|
<long>
|
||||||
|
Determines whether the crosshairs intersect the magnified mouse
|
||||||
|
sprite, or are clipped such that the ends of the horizontal
|
||||||
|
and vertical lines surround the mouse image.
|
||||||
|
</long>
|
||||||
|
</locale>
|
||||||
|
</schema>
|
||||||
|
|
||||||
</schemalist>
|
</schemalist>
|
||||||
|
|
||||||
</gconfschemafile>
|
</gconfschemafile>
|
||||||
|
@ -1006,3 +1006,13 @@ StTooltip {
|
|||||||
.lightbox {
|
.lightbox {
|
||||||
background-color: rgba(0, 0, 0, 0.27);
|
background-color: rgba(0, 0, 0, 0.27);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Magnifier */
|
||||||
|
|
||||||
|
.magnifier-zoom-region {
|
||||||
|
border: 2px solid rgba(128, 0, 0, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
.magnifier-zoom-region.full-screen {
|
||||||
|
border-width: 0px;
|
||||||
|
}
|
||||||
|
@ -17,6 +17,8 @@ dist_jsui_DATA = \
|
|||||||
link.js \
|
link.js \
|
||||||
lookingGlass.js \
|
lookingGlass.js \
|
||||||
main.js \
|
main.js \
|
||||||
|
magnifier.js \
|
||||||
|
magnifierDBus.js \
|
||||||
messageTray.js \
|
messageTray.js \
|
||||||
notificationDaemon.js \
|
notificationDaemon.js \
|
||||||
overview.js \
|
overview.js \
|
||||||
|
@ -26,6 +26,7 @@ const WindowAttentionHandler = imports.ui.windowAttentionHandler;
|
|||||||
const ShellDBus = imports.ui.shellDBus;
|
const ShellDBus = imports.ui.shellDBus;
|
||||||
const TelepathyClient = imports.ui.telepathyClient;
|
const TelepathyClient = imports.ui.telepathyClient;
|
||||||
const WindowManager = imports.ui.windowManager;
|
const WindowManager = imports.ui.windowManager;
|
||||||
|
const Magnifier = imports.ui.magnifier;
|
||||||
|
|
||||||
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
|
const DEFAULT_BACKGROUND_COLOR = new Clutter.Color();
|
||||||
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
|
DEFAULT_BACKGROUND_COLOR.from_pixel(0x2266bbff);
|
||||||
@ -46,6 +47,7 @@ let shellDBusService = null;
|
|||||||
let modalCount = 0;
|
let modalCount = 0;
|
||||||
let modalActorFocusStack = [];
|
let modalActorFocusStack = [];
|
||||||
let uiGroup = null;
|
let uiGroup = null;
|
||||||
|
let magnifier = null;
|
||||||
let _errorLogStack = [];
|
let _errorLogStack = [];
|
||||||
let _startDate;
|
let _startDate;
|
||||||
|
|
||||||
@ -162,6 +164,9 @@ function start() {
|
|||||||
|
|
||||||
global.stage.connect('captured-event', _globalKeyPressHandler);
|
global.stage.connect('captured-event', _globalKeyPressHandler);
|
||||||
|
|
||||||
|
// Install magnifier.
|
||||||
|
magnifier = new Magnifier.Magnifier();
|
||||||
|
|
||||||
_log('info', 'loaded at ' + _startDate);
|
_log('info', 'loaded at ' + _startDate);
|
||||||
log('GNOME Shell started at ' + _startDate);
|
log('GNOME Shell started at ' + _startDate);
|
||||||
|
|
||||||
|
@ -76,7 +76,8 @@ shell_public_headers_h = \
|
|||||||
shell-tray-manager.h \
|
shell-tray-manager.h \
|
||||||
shell-uri-util.h \
|
shell-uri-util.h \
|
||||||
shell-window-tracker.h \
|
shell-window-tracker.h \
|
||||||
shell-wm.h
|
shell-wm.h \
|
||||||
|
shell-xfixes-cursor.h
|
||||||
|
|
||||||
libgnome_shell_la_SOURCES = \
|
libgnome_shell_la_SOURCES = \
|
||||||
$(shell_built_sources) \
|
$(shell_built_sources) \
|
||||||
@ -105,7 +106,9 @@ libgnome_shell_la_SOURCES = \
|
|||||||
shell-tray-manager.c \
|
shell-tray-manager.c \
|
||||||
shell-uri-util.c \
|
shell-uri-util.c \
|
||||||
shell-window-tracker.c \
|
shell-window-tracker.c \
|
||||||
shell-wm.c
|
shell-wm.c \
|
||||||
|
shell-xfixes-cursor.c
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
non_gir_sources = \
|
non_gir_sources = \
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
#define SHELL_DBUS_SERVICE "org.gnome.Shell"
|
||||||
|
#define MAGNIFIER_DBUS_SERVICE "org.gnome.Magnifier"
|
||||||
|
|
||||||
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
|
static void grab_notify (GtkWidget *widget, gboolean is_grab, gpointer user_data);
|
||||||
static void update_root_window_pixmap (ShellGlobal *global);
|
static void update_root_window_pixmap (ShellGlobal *global);
|
||||||
@ -853,10 +854,24 @@ shell_global_grab_dbus_service (ShellGlobal *global)
|
|||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ...and the org.gnome.Magnifier service.
|
||||||
|
*/
|
||||||
|
if (!dbus_g_proxy_call (bus, "RequestName", &error,
|
||||||
|
G_TYPE_STRING, MAGNIFIER_DBUS_SERVICE,
|
||||||
|
G_TYPE_UINT, 0,
|
||||||
|
G_TYPE_INVALID,
|
||||||
|
G_TYPE_UINT, &request_name_result,
|
||||||
|
G_TYPE_INVALID))
|
||||||
|
{
|
||||||
|
g_print ("failed to acquire %s: %s\n", MAGNIFIER_DBUS_SERVICE, error->message);
|
||||||
|
/* Failing to acquire the magnifer service is not fatal. Log the error,
|
||||||
|
* but keep going. */
|
||||||
|
}
|
||||||
g_object_unref (bus);
|
g_object_unref (bus);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
|
grab_notify (GtkWidget *widget, gboolean was_grabbed, gpointer user_data)
|
||||||
{
|
{
|
||||||
ShellGlobal *global = SHELL_GLOBAL (user_data);
|
ShellGlobal *global = SHELL_GLOBAL (user_data);
|
||||||
|
Loading…
Reference in New Issue
Block a user