app: better tool defaults depending on the device source.

This code is the result of discussions with and propositions by Aryeom
who thinks (and I agree obviously) better defaults should be set for
beginners and first time users. This is only a first change, more
similar defaults updates will likely come in the next few months on
various parts of GIMP.

Existing code was only making a differenciation for eraser-type devices,
setting them to the eraser tool (which is fine of course).
So far, I only added 2 types of device source, which we should
definitely special-case as well: pen tools (tablet styluses) should
definitely map to the Paintbrush (pencil could be a reasonable defaults
too, though brush seems much more common); as for touchscreen, I chose
to map to the Smudge tool (though to be fair, if we had gesture
recognition, this should not map to any tool). I also set a generic
default now because it seems that right now, we don't specify anything
(it ends up defaulting to the Crop tool for first uses, at least in my
case). I set the rectangle select tool. I'm not sure it actually makes
particular sense, but at least it's probably better to default to
something not destructive for first time users.
This commit is contained in:
Jehan
2020-12-11 00:14:28 +01:00
parent 273972bc4d
commit 31e38fe869

View File

@ -845,22 +845,45 @@ gimp_device_info_set_device (GimpDeviceInfo *info,
void
gimp_device_info_set_default_tool (GimpDeviceInfo *info)
{
GimpContainer *tools;
GimpToolInfo *tool_info = NULL;
g_return_if_fail (GIMP_IS_DEVICE_INFO (info));
if (info->priv->device &&
gdk_device_get_source (info->priv->device) == GDK_SOURCE_ERASER)
tools = GIMP_TOOL_PRESET (info)->gimp->tool_info_list;
tool_info =
GIMP_TOOL_INFO (gimp_container_get_child_by_name (tools,
"gimp-rect-select-tool"));
if (info->priv->device)
{
GimpContainer *tools = GIMP_TOOL_PRESET (info)->gimp->tool_info_list;
GimpToolInfo *eraser;
switch (gdk_device_get_source (info->priv->device))
{
case GDK_SOURCE_ERASER:
tool_info =
GIMP_TOOL_INFO (gimp_container_get_child_by_name (tools,
"gimp-eraser-tool"));
break;
case GDK_SOURCE_PEN:
tool_info =
GIMP_TOOL_INFO (gimp_container_get_child_by_name (tools,
"gimp-paintbrush-tool"));
break;
case GDK_SOURCE_TOUCHSCREEN:
tool_info =
GIMP_TOOL_INFO (gimp_container_get_child_by_name (tools,
"gimp-smudge-tool"));
break;
default:
break;
}
}
eraser =
GIMP_TOOL_INFO (gimp_container_get_child_by_name (tools,
"gimp-eraser-tool"));
if (eraser)
g_object_set (info,
"tool-options", eraser->tool_options,
NULL);
if (tool_info)
{
g_object_set (info,
"tool-options", tool_info->tool_options,
NULL);
}
}