mirror of https://github.com/GNOME/gimp.git
data/tips/gimp-tips.dtd data/tips/gimp-tips.xml.in reverted some of the
2008-03-28 Sven Neumann <sven@gimp.org> * data/tips/gimp-tips.dtd * data/tips/gimp-tips.xml.in * app/dialogs/tips-parser.[ch]: reverted some of the changes from yesterday. The simplification went too far and we inadvertently lost an important feature. svn path=/trunk/; revision=25269
This commit is contained in:
parent
cdb1dd1709
commit
848a3e197f
|
@ -1,7 +1,7 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
/* GIMP - The GNU Image Manipulation Program
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||||
*
|
*
|
||||||
* tips-parser.c -- Parse the gimp-tips.xml file.
|
* tips-parser.c - Parse the gimp-tips.xml file.
|
||||||
* Copyright (C) 2002, 2008 Sven Neumann <sven@gimp.org>
|
* Copyright (C) 2002, 2008 Sven Neumann <sven@gimp.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -38,50 +38,58 @@ typedef enum
|
||||||
TIPS_START,
|
TIPS_START,
|
||||||
TIPS_IN_TIPS,
|
TIPS_IN_TIPS,
|
||||||
TIPS_IN_TIP,
|
TIPS_IN_TIP,
|
||||||
|
TIPS_IN_THETIP,
|
||||||
TIPS_IN_UNKNOWN
|
TIPS_IN_UNKNOWN
|
||||||
} TipsParserState;
|
} TipsParserState;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
TIPS_LOCALE_NONE,
|
||||||
|
TIPS_LOCALE_MATCH,
|
||||||
|
TIPS_LOCALE_MISMATCH
|
||||||
|
} TipsParserLocaleState;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
TipsParserState state;
|
TipsParserState state;
|
||||||
TipsParserState last_known_state;
|
TipsParserState last_known_state;
|
||||||
const gchar *locale;
|
const gchar *locale;
|
||||||
gboolean locale_match;
|
TipsParserLocaleState locale_state;
|
||||||
gint markup_depth;
|
gint markup_depth;
|
||||||
gint unknown_depth;
|
gint unknown_depth;
|
||||||
GString *value;
|
GString *value;
|
||||||
GimpTip *current_tip;
|
GimpTip *current_tip;
|
||||||
GList *tips;
|
GList *tips;
|
||||||
} TipsParser;
|
} TipsParser;
|
||||||
|
|
||||||
|
|
||||||
static void tips_parser_start_element (GMarkupParseContext *context,
|
static void tips_parser_start_element (GMarkupParseContext *context,
|
||||||
const gchar *element_name,
|
const gchar *element_name,
|
||||||
const gchar **attribute_names,
|
const gchar **attribute_names,
|
||||||
const gchar **attribute_values,
|
const gchar **attribute_values,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GError **error);
|
GError **error);
|
||||||
static void tips_parser_end_element (GMarkupParseContext *context,
|
static void tips_parser_end_element (GMarkupParseContext *context,
|
||||||
const gchar *element_name,
|
const gchar *element_name,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GError **error);
|
GError **error);
|
||||||
static void tips_parser_characters (GMarkupParseContext *context,
|
static void tips_parser_characters (GMarkupParseContext *context,
|
||||||
const gchar *text,
|
const gchar *text,
|
||||||
gsize text_len,
|
gsize text_len,
|
||||||
gpointer user_data,
|
gpointer user_data,
|
||||||
GError **error);
|
GError **error);
|
||||||
|
|
||||||
static void tips_parser_start_markup (TipsParser *parser,
|
static void tips_parser_start_markup (TipsParser *parser,
|
||||||
const gchar *markup_name);
|
const gchar *markup_name);
|
||||||
static void tips_parser_end_markup (TipsParser *parser,
|
static void tips_parser_end_markup (TipsParser *parser,
|
||||||
const gchar *markup_name);
|
const gchar *markup_name);
|
||||||
static void tips_parser_start_unknown (TipsParser *parser);
|
static void tips_parser_start_unknown (TipsParser *parser);
|
||||||
static void tips_parser_end_unknown (TipsParser *parser);
|
static void tips_parser_end_unknown (TipsParser *parser);
|
||||||
static void tips_parser_parse_locale (TipsParser *parser,
|
static void tips_parser_parse_locale (TipsParser *parser,
|
||||||
const gchar **names,
|
const gchar **names,
|
||||||
const gchar **values);
|
const gchar **values);
|
||||||
static gboolean tips_parser_set_by_locale (TipsParser *parser,
|
static void tips_parser_set_by_locale (TipsParser *parser,
|
||||||
gchar **dest);
|
gchar **dest);
|
||||||
|
|
||||||
|
|
||||||
static const GMarkupParser markup_parser =
|
static const GMarkupParser markup_parser =
|
||||||
|
@ -208,13 +216,9 @@ tips_parser_start_element (GMarkupParseContext *context,
|
||||||
{
|
{
|
||||||
case TIPS_START:
|
case TIPS_START:
|
||||||
if (strcmp (element_name, "gimp-tips") == 0)
|
if (strcmp (element_name, "gimp-tips") == 0)
|
||||||
{
|
parser->state = TIPS_IN_TIPS;
|
||||||
parser->state = TIPS_IN_TIPS;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
tips_parser_start_unknown (parser);
|
||||||
tips_parser_start_unknown (parser);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIPS_IN_TIPS:
|
case TIPS_IN_TIPS:
|
||||||
|
@ -222,26 +226,29 @@ tips_parser_start_element (GMarkupParseContext *context,
|
||||||
{
|
{
|
||||||
parser->state = TIPS_IN_TIP;
|
parser->state = TIPS_IN_TIP;
|
||||||
parser->current_tip = g_slice_new0 (GimpTip);
|
parser->current_tip = g_slice_new0 (GimpTip);
|
||||||
|
|
||||||
tips_parser_parse_locale (parser, attribute_names, attribute_values);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
tips_parser_start_unknown (parser);
|
||||||
tips_parser_start_unknown (parser);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIPS_IN_TIP:
|
case TIPS_IN_TIP:
|
||||||
|
if (strcmp (element_name, "thetip") == 0)
|
||||||
|
{
|
||||||
|
parser->state = TIPS_IN_THETIP;
|
||||||
|
tips_parser_parse_locale (parser, attribute_names, attribute_values);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
tips_parser_start_unknown (parser);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIPS_IN_THETIP:
|
||||||
if (strcmp (element_name, "b" ) == 0 ||
|
if (strcmp (element_name, "b" ) == 0 ||
|
||||||
strcmp (element_name, "big") == 0 ||
|
strcmp (element_name, "big") == 0 ||
|
||||||
strcmp (element_name, "tt" ) == 0)
|
strcmp (element_name, "tt" ) == 0)
|
||||||
{
|
tips_parser_start_markup (parser, element_name);
|
||||||
tips_parser_start_markup (parser, element_name);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
tips_parser_start_unknown (parser);
|
||||||
tips_parser_start_unknown (parser);
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
case TIPS_IN_UNKNOWN:
|
case TIPS_IN_UNKNOWN:
|
||||||
tips_parser_start_unknown (parser);
|
tips_parser_start_unknown (parser);
|
||||||
|
@ -268,21 +275,20 @@ tips_parser_end_element (GMarkupParseContext *context,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIPS_IN_TIP:
|
case TIPS_IN_TIP:
|
||||||
|
parser->tips = g_list_prepend (parser->tips, parser->current_tip);
|
||||||
|
parser->current_tip = NULL;
|
||||||
|
parser->state = TIPS_IN_TIPS;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIPS_IN_THETIP:
|
||||||
if (parser->markup_depth == 0)
|
if (parser->markup_depth == 0)
|
||||||
{
|
{
|
||||||
if (tips_parser_set_by_locale (parser, &parser->current_tip->thetip))
|
tips_parser_set_by_locale (parser, &parser->current_tip->thetip);
|
||||||
{
|
|
||||||
parser->tips = g_list_prepend (parser->tips, parser->current_tip);
|
|
||||||
parser->current_tip = NULL;
|
|
||||||
}
|
|
||||||
g_string_truncate (parser->value, 0);
|
g_string_truncate (parser->value, 0);
|
||||||
|
parser->state = TIPS_IN_TIP;
|
||||||
parser->state = TIPS_IN_TIPS;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
tips_parser_end_markup (parser, element_name);
|
||||||
tips_parser_end_markup (parser, element_name);
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TIPS_IN_UNKNOWN:
|
case TIPS_IN_UNKNOWN:
|
||||||
|
@ -302,8 +308,8 @@ tips_parser_characters (GMarkupParseContext *context,
|
||||||
|
|
||||||
switch (parser->state)
|
switch (parser->state)
|
||||||
{
|
{
|
||||||
case TIPS_IN_TIP:
|
case TIPS_IN_THETIP:
|
||||||
if (parser->locale_match)
|
if (parser->locale_state != TIPS_LOCALE_MISMATCH)
|
||||||
{
|
{
|
||||||
gint i;
|
gint i;
|
||||||
|
|
||||||
|
@ -323,7 +329,6 @@ tips_parser_characters (GMarkupParseContext *context,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -373,16 +378,15 @@ tips_parser_parse_locale (TipsParser *parser,
|
||||||
const gchar **names,
|
const gchar **names,
|
||||||
const gchar **values)
|
const gchar **values)
|
||||||
{
|
{
|
||||||
parser->locale_match = (parser->locale == NULL);
|
parser->locale_state = TIPS_LOCALE_NONE;
|
||||||
|
|
||||||
while (*names && *values)
|
while (*names && *values)
|
||||||
{
|
{
|
||||||
if (strcmp (*names, "xml:lang") == 0 && **values)
|
if (strcmp (*names, "xml:lang") == 0 && **values)
|
||||||
{
|
{
|
||||||
if (parser->locale)
|
parser->locale_state = (parser->locale &&
|
||||||
parser->locale_match = (strcmp (*values, parser->locale) == 0);
|
strcmp (*values, parser->locale) == 0 ?
|
||||||
else
|
TIPS_LOCALE_MATCH : TIPS_LOCALE_MISMATCH);
|
||||||
parser->locale_match = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
names++;
|
names++;
|
||||||
|
@ -390,16 +394,30 @@ tips_parser_parse_locale (TipsParser *parser,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
tips_parser_set_by_locale (TipsParser *parser,
|
tips_parser_set_by_locale (TipsParser *parser,
|
||||||
gchar **dest)
|
gchar **dest)
|
||||||
{
|
{
|
||||||
if (parser->locale_match)
|
switch (parser->locale_state)
|
||||||
{
|
{
|
||||||
|
case TIPS_LOCALE_NONE:
|
||||||
|
if (!parser->locale)
|
||||||
|
{
|
||||||
|
g_free (*dest);
|
||||||
|
*dest = g_strdup (parser->value->str);
|
||||||
|
}
|
||||||
|
else if (*dest == NULL)
|
||||||
|
{
|
||||||
|
*dest = g_strdup (parser->value->str);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TIPS_LOCALE_MATCH:
|
||||||
g_free (*dest);
|
g_free (*dest);
|
||||||
*dest = g_strdup (parser->value->str);
|
*dest = g_strdup (parser->value->str);
|
||||||
return TRUE;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
case TIPS_LOCALE_MISMATCH:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/* GIMP - The GNU Image Manipulation Program
|
/* GIMP - The GNU Image Manipulation Program
|
||||||
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||||||
*
|
*
|
||||||
* tips-parser.h -- Parse the gimp-tips.xml file.
|
* tips-parser.h - Parse the gimp-tips.xml file.
|
||||||
* Copyright (C) 2002, 2008 Sven Neumann <sven@gimp.org>
|
* Copyright (C) 2002, 2008 Sven Neumann <sven@gimp.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
@ -33,9 +33,6 @@ struct _GimpTip
|
||||||
|
|
||||||
GimpTip * gimp_tip_new (const gchar *format,
|
GimpTip * gimp_tip_new (const gchar *format,
|
||||||
...) G_GNUC_PRINTF(1, 2);
|
...) G_GNUC_PRINTF(1, 2);
|
||||||
void gimp_tip_set (GimpTip *tip,
|
|
||||||
const gchar *format,
|
|
||||||
...) G_GNUC_PRINTF(2, 3);
|
|
||||||
void gimp_tip_free (GimpTip *tip);
|
void gimp_tip_free (GimpTip *tip);
|
||||||
|
|
||||||
GList * gimp_tips_from_file (const gchar *filename,
|
GList * gimp_tips_from_file (const gchar *filename,
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
<!-- Simple DTD for GIMP tips -->
|
<!-- Simple DTD for GIMP tips -->
|
||||||
|
|
||||||
<!ENTITY % markup "(#PCDATA|b|big|tt)*" >
|
<!ELEMENT gimp-tips (tip+)>
|
||||||
|
|
||||||
<!ELEMENT gimp-tips (tip+) >
|
<!ELEMENT tip (thetip+)>
|
||||||
|
<!ATTLIST tip level (start|beginner|intermediate|advanced) #REQUIRED>
|
||||||
|
|
||||||
<!ELEMENT tip %markup; >
|
<!ENTITY % markup "(#PCDATA|b|big|tt)*">
|
||||||
<!ATTLIST tip level (start|beginner|intermediate|advanced) #REQUIRED
|
|
||||||
xml:lang CDATA #IMPLIED >
|
|
||||||
|
|
||||||
<!ELEMENT b %markup; >
|
<!ELEMENT b %markup;>
|
||||||
<!ELEMENT big %markup; >
|
<!ELEMENT big %markup;>
|
||||||
<!ELEMENT tt %markup; >
|
<!ELEMENT tt %markup;>
|
||||||
|
|
||||||
|
<!ELEMENT thetip %markup;>
|
||||||
|
<!ATTLIST thetip xml:lang CDATA #IMPLIED>
|
||||||
|
|
|
@ -1,191 +1,244 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE gimp-tips SYSTEM "gimp-tips.dtd">
|
<!DOCTYPE gimp-tips SYSTEM "gimp-tips.dtd">
|
||||||
|
|
||||||
<gimp-tips>
|
|
||||||
|
|
||||||
<!-- This is a list of tips for GIMP. -->
|
<!-- This is a list of tips for GIMP. -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- The tips parser supports a very basic markup language. You may use -->
|
<!-- The tips parser supports a very basic markup language. You may use -->
|
||||||
<!-- the tag b to specify bold text, big to increase the font size and -->
|
<!-- the tag b to specify bold text, big to increase the font size and -->
|
||||||
<!-- tt to switch to a monospace font. -->
|
<!-- tt to switch to a monospace font. -->
|
||||||
|
|
||||||
|
<gimp-tips>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- Tips for beginners start here -->
|
<!-- Tips for beginners start here -->
|
||||||
<!-- (for people who are not familiar yet with layers and image formats) -->
|
<!-- (for people who are not familiar yet with layers and image formats) -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
<_tip level="beginner">
|
<tip level="beginner">
|
||||||
You can get context-sensitive help for most of GIMP's features by
|
<_thetip>
|
||||||
pressing the F1 key at any time. This also works inside the menus.
|
You can get context-sensitive help for most of GIMP's features by
|
||||||
</_tip>
|
pressing the F1 key at any time. This also works inside the menus.
|
||||||
<_tip level="beginner">
|
</_thetip>
|
||||||
GIMP uses layers to let you organize your image. Think of them
|
</tip>
|
||||||
as a stack of slides or filters, such that looking through them you
|
<tip level="beginner">
|
||||||
see a composite of their contents.
|
<_thetip>
|
||||||
</_tip>
|
GIMP uses layers to let you organize your image. Think of them
|
||||||
<_tip level="beginner">
|
as a stack of slides or filters, such that looking through them you
|
||||||
You can perform many layer operations by right-clicking on the text
|
see a composite of their contents.
|
||||||
label of a layer in the Layers dialog.
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
<_tip level="beginner">
|
<tip level="beginner">
|
||||||
When you save an image to work on it again later, try using XCF,
|
<_thetip>
|
||||||
GIMP's native file format (use the file extension <tt>.xcf</tt>).
|
You can perform many layer operations by right-clicking on the text
|
||||||
This preserves the layers and every aspect of your work-in-progress.
|
label of a layer in the Layers dialog.
|
||||||
Once a project is completed, you can save it as JPEG, PNG, GIF, ...
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
<_tip level="beginner">
|
<tip level="beginner">
|
||||||
Most plug-ins work on the current layer of the current image. In
|
<_thetip>
|
||||||
some cases, you will have to merge all layers (Image→Flatten Image)
|
When you save an image to work on it again later, try using XCF,
|
||||||
if you want the plug-in to work on the whole image.
|
GIMP's native file format (use the file extension <tt>.xcf</tt>).
|
||||||
</_tip>
|
This preserves the layers and every aspect of your work-in-progress.
|
||||||
<_tip level="beginner">
|
Once a project is completed, you can save it as JPEG, PNG, GIF, ...
|
||||||
If a layer's name in the Layers dialog is displayed in <b>bold</b>,
|
</_thetip>
|
||||||
this layer doesn't have an alpha-channel. You can add an alpha-channel
|
</tip>
|
||||||
using Layer→Transparency→Add Alpha Channel.
|
<tip level="beginner">
|
||||||
</_tip>
|
<_thetip>
|
||||||
<_tip level="beginner">
|
Most plug-ins work on the current layer of the current image. In
|
||||||
Not all effects can be applied to all kinds of images. This is
|
some cases, you will have to merge all layers (Image→Flatten Image)
|
||||||
indicated by a grayed-out menu-entry. You may need to change
|
if you want the plug-in to work on the whole image.
|
||||||
the image mode to RGB (Image→Mode→RGB), add an alpha-channel
|
</_thetip>
|
||||||
(Layer→Transparency→Add Alpha Channel) or flatten it
|
</tip>
|
||||||
(Image→Flatten Image).
|
<tip level="beginner">
|
||||||
</_tip>
|
<_thetip>
|
||||||
<_tip level="beginner">
|
If a layer's name in the Layers dialog is displayed in <b>bold</b>,
|
||||||
You can adjust or move a selection by using <tt>Alt</tt>-drag.
|
this layer doesn't have an alpha-channel. You can add an alpha-channel
|
||||||
If this makes the window move, your window manager uses the
|
using Layer→Transparency→Add Alpha Channel.
|
||||||
<tt>Alt</tt> key already. Most window managers can be
|
</_thetip>
|
||||||
configured to ignore the <tt>Alt</tt> key or to use
|
</tip>
|
||||||
the <tt>Super</tt> key (or "Windows logo") instead.
|
<tip level="beginner">
|
||||||
</_tip>
|
<_thetip>
|
||||||
|
Not all effects can be applied to all kinds of images. This is
|
||||||
|
indicated by a grayed-out menu-entry. You may need to change
|
||||||
|
the image mode to RGB (Image→Mode→RGB), add an alpha-channel
|
||||||
|
(Layer→Transparency→Add Alpha Channel) or flatten it
|
||||||
|
(Image→Flatten Image).
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
<tip level="beginner">
|
||||||
|
<_thetip>
|
||||||
|
You can adjust or move a selection by using <tt>Alt</tt>-drag.
|
||||||
|
If this makes the window move, your window manager uses the
|
||||||
|
<tt>Alt</tt> key already. Most window managers can be
|
||||||
|
configured to ignore the <tt>Alt</tt> key or to use
|
||||||
|
the <tt>Super</tt> key (or "Windows logo") instead.
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- Tips for intermediate users start here -->
|
<!-- Tips for intermediate users start here -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
<_tip level="intermediate">
|
<tip level="intermediate">
|
||||||
You can drag and drop many things in GIMP. For example, dragging
|
<_thetip>
|
||||||
a color from the toolbox or from a color palette and dropping it into
|
You can drag and drop many things in GIMP. For example, dragging
|
||||||
an image will fill the current selection with that color.
|
a color from the toolbox or from a color palette and dropping it into
|
||||||
</_tip>
|
an image will fill the current selection with that color.
|
||||||
<_tip level="intermediate">
|
</_thetip>
|
||||||
You can use the middle mouse button to pan around the image
|
</tip>
|
||||||
(or optionally hold <tt>Spacebar</tt> while you move the mouse).
|
<tip level="intermediate">
|
||||||
</_tip>
|
<_thetip>
|
||||||
<_tip level="intermediate">
|
You can use the middle mouse button to pan around the image
|
||||||
Click and drag on a ruler to place a guide on an image. All
|
(or optionally hold <tt>Spacebar</tt> while you move the mouse).
|
||||||
dragged selections will snap to the guides. You can remove
|
</_thetip>
|
||||||
guides by dragging them off the image with the Move tool.
|
</tip>
|
||||||
</_tip>
|
<tip level="intermediate">
|
||||||
<_tip level="intermediate">
|
<_thetip>
|
||||||
You can drag a layer from the Layers dialog and drop it onto the
|
Click and drag on a ruler to place a guide on an image. All
|
||||||
toolbox. This will create a new image containing only that layer.
|
dragged selections will snap to the guides. You can remove
|
||||||
</_tip>
|
guides by dragging them off the image with the Move tool.
|
||||||
<_tip level="intermediate">
|
</_thetip>
|
||||||
A floating selection must be anchored to a new layer or to the last
|
</tip>
|
||||||
active layer before doing other operations on the image. Click on the
|
<tip level="intermediate">
|
||||||
"New Layer" or the "Anchor Layer" button in the
|
<_thetip>
|
||||||
Layers dialog, or use the menus to do the same.
|
You can drag a layer from the Layers dialog and drop it onto the
|
||||||
</_tip>
|
toolbox. This will create a new image containing only that layer.
|
||||||
<_tip level="intermediate">
|
</_thetip>
|
||||||
GIMP supports gzip compression on the fly. Just add <tt>.gz</tt>
|
</tip>
|
||||||
(or <tt>.bz2</tt>, if you have bzip2 installed) to the filename and
|
<tip level="intermediate">
|
||||||
your image will be saved compressed. Of course loading compressed
|
<_thetip>
|
||||||
images works too.
|
A floating selection must be anchored to a new layer or to the last
|
||||||
</_tip>
|
active layer before doing other operations on the image. Click on the
|
||||||
<_tip level="intermediate">
|
"New Layer" or the "Anchor Layer" button in the
|
||||||
Pressing and holding the <tt>Shift</tt> key before making a selection
|
Layers dialog, or use the menus to do the same.
|
||||||
allows you to add to the current selection instead of replacing it.
|
</_thetip>
|
||||||
Using <tt>Ctrl</tt> before making a selection subtracts from the
|
</tip>
|
||||||
current one.
|
<tip level="intermediate">
|
||||||
</_tip>
|
<_thetip>
|
||||||
<_tip level="intermediate">
|
GIMP supports gzip compression on the fly. Just add <tt>.gz</tt>
|
||||||
You can draw simple squares or circles using Edit→Stroke Selection.
|
(or <tt>.bz2</tt>, if you have bzip2 installed) to the filename and
|
||||||
It strokes the edge of your current selection. More complex shapes
|
your image will be saved compressed. Of course loading compressed
|
||||||
can be drawn using the Path tool or with Filters→Render→Gfig.
|
images works too.
|
||||||
</_tip>
|
</_thetip>
|
||||||
<_tip level="intermediate">
|
</tip>
|
||||||
If you stroke a path (Edit→Stroke Path), the paint tools can
|
<tip level="intermediate">
|
||||||
be used with their current settings. You can use the Paintbrush in
|
<_thetip>
|
||||||
gradient mode or even the Eraser or the Smudge tool.
|
Pressing and holding the <tt>Shift</tt> key before making a selection
|
||||||
</_tip>
|
allows you to add to the current selection instead of replacing it.
|
||||||
<_tip level="intermediate">
|
Using <tt>Ctrl</tt> before making a selection subtracts from the
|
||||||
You can create and edit complex selections using the Path tool.
|
current one.
|
||||||
The Paths dialog allows you to work on multiple paths and to convert
|
</_thetip>
|
||||||
them to selections.
|
</tip>
|
||||||
</_tip>
|
<tip level="intermediate">
|
||||||
<_tip level="intermediate">
|
<_thetip>
|
||||||
You can use the paint tools to change the selection. Click on the
|
You can draw simple squares or circles using Edit→Stroke Selection.
|
||||||
"Quick Mask" button at the bottom left of an image window.
|
It strokes the edge of your current selection. More complex shapes
|
||||||
Change your selection by painting in the image and click on the button
|
can be drawn using the Path tool or with Filters→Render→Gfig.
|
||||||
again to convert it back to a normal selection.
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
<_tip level="intermediate">
|
<tip level="intermediate">
|
||||||
You can save a selection to a channel (Select→Save to Channel) and
|
<_thetip>
|
||||||
then modify this channel with any paint tools. Using the buttons in
|
If you stroke a path (Edit→Stroke Path), the paint tools can
|
||||||
the Channels dialog, you can toggle the visibility of this new channel
|
be used with their current settings. You can use the Paintbrush in
|
||||||
or convert it to a selection.
|
gradient mode or even the Eraser or the Smudge tool.
|
||||||
</_tip>
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
<tip level="intermediate">
|
||||||
|
<_thetip>
|
||||||
|
You can create and edit complex selections using the Path tool.
|
||||||
|
The Paths dialog allows you to work on multiple paths and to convert
|
||||||
|
them to selections.
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
<tip level="intermediate">
|
||||||
|
<_thetip>
|
||||||
|
You can use the paint tools to change the selection. Click on the
|
||||||
|
"Quick Mask" button at the bottom left of an image window.
|
||||||
|
Change your selection by painting in the image and click on the button
|
||||||
|
again to convert it back to a normal selection.
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
<tip level="intermediate">
|
||||||
|
<_thetip>
|
||||||
|
You can save a selection to a channel (Select→Save to Channel) and
|
||||||
|
then modify this channel with any paint tools. Using the buttons in
|
||||||
|
the Channels dialog, you can toggle the visibility of this new channel
|
||||||
|
or convert it to a selection.
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- Tips for advanced users start here -->
|
<!-- Tips for advanced users start here -->
|
||||||
<!-- (this is mostly for learning shortcut keys) -->
|
<!-- (this is mostly for learning shortcut keys) -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
<_tip level="advanced">
|
<tip level="advanced">
|
||||||
After you enabled "Dynamic Keyboard Shortcuts" in the
|
<_thetip>
|
||||||
Preferences dialog, you can reassign shortcut keys. Do so by bringing
|
After you enabled "Dynamic Keyboard Shortcuts" in the
|
||||||
up the menu, selecting a menu item, and pressing the desired key
|
Preferences dialog, you can reassign shortcut keys. Do so by bringing
|
||||||
combination. If "Save Keyboard Shortcuts" is enabled, the
|
up the menu, selecting a menu item, and pressing the desired key
|
||||||
key bindings are saved when you exit GIMP.
|
combination. If "Save Keyboard Shortcuts" is enabled, the
|
||||||
You should probably disable "Dynamic Keyboard Shortcuts"
|
key bindings are saved when you exit GIMP.
|
||||||
afterwards, to prevent accidentally assigning/reassigning shortcuts.
|
You should probably disable "Dynamic Keyboard Shortcuts"
|
||||||
</_tip>
|
afterwards, to prevent accidentally assigning/reassigning shortcuts.
|
||||||
<_tip level="advanced">
|
</_thetip>
|
||||||
If your screen is too cluttered, you can press <tt>Tab</tt>
|
</tip>
|
||||||
in an image window to toggle the visibility of the toolbox
|
<tip level="advanced">
|
||||||
and other dialogs.
|
<_thetip>
|
||||||
</_tip>
|
If your screen is too cluttered, you can press <tt>Tab</tt>
|
||||||
<_tip level="advanced">
|
in an image window to toggle the visibility of the toolbox
|
||||||
<tt>Shift</tt>-click on the eye icon in the Layers dialog to hide all
|
and other dialogs.
|
||||||
layers but that one. <tt>Shift</tt>-click again to show all layers.
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
<_tip level="advanced">
|
<tip level="advanced">
|
||||||
<tt>Ctrl</tt>-clicking on the layer mask's preview in the Layers dialog
|
<_thetip>
|
||||||
toggles the effect of the layer mask. <tt>Alt</tt>-clicking on the layer
|
<tt>Shift</tt>-click on the eye icon in the Layers dialog to hide all
|
||||||
mask's preview in the Layers dialog toggles viewing the mask directly.
|
layers but that one. <tt>Shift</tt>-click again to show all layers.
|
||||||
</_tip>
|
</_thetip>
|
||||||
<_tip level="advanced">
|
</tip>
|
||||||
You can use <tt>Ctrl</tt>-<tt>Tab</tt> to cycle through all layers in
|
<tip level="advanced">
|
||||||
an image (if your window manager doesn't trap those keys...).
|
<_thetip>
|
||||||
</_tip>
|
<tt>Ctrl</tt>-clicking on the layer mask's preview in the Layers dialog
|
||||||
<_tip level="advanced">
|
toggles the effect of the layer mask. <tt>Alt</tt>-clicking on the layer
|
||||||
<tt>Ctrl</tt>-click with the Bucket Fill tool to have it use
|
mask's preview in the Layers dialog toggles viewing the mask directly.
|
||||||
the background color instead of the foreground color.
|
</_thetip>
|
||||||
Similarly, <tt>Ctrl</tt>-clicking with the eyedropper tool
|
</tip>
|
||||||
sets the background color instead of the foreground color.
|
<tip level="advanced">
|
||||||
</_tip>
|
<_thetip>
|
||||||
<_tip level="advanced">
|
You can use <tt>Ctrl</tt>-<tt>Tab</tt> to cycle through all layers in
|
||||||
<tt>Ctrl</tt>-drag with the Rotate tool will constrain the
|
an image (if your window manager doesn't trap those keys...).
|
||||||
rotation to 15 degree angles.
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
<_tip level="advanced">
|
<tip level="advanced">
|
||||||
To create a circle-shaped selection, hold <tt>Shift</tt> while
|
<_thetip>
|
||||||
doing an ellipse select. To place a circle precisely, drag
|
<tt>Ctrl</tt>-click with the Bucket Fill tool to have it use
|
||||||
horizontal and vertical guides tangent to the circle you want to
|
the background color instead of the foreground color.
|
||||||
select, place your cursor at the intersection of the guides, and
|
Similarly, <tt>Ctrl</tt>-clicking with the eyedropper tool
|
||||||
the resulting selection will just touch the guides.
|
sets the background color instead of the foreground color.
|
||||||
</_tip>
|
</_thetip>
|
||||||
<_tip level="advanced">
|
</tip>
|
||||||
If some of your scanned photos do not look colorful enough, you
|
<tip level="advanced">
|
||||||
can easily improve their tonal range with the "Auto"
|
<_thetip>
|
||||||
button in the Levels tool (Colors→Levels). If there are any
|
<tt>Ctrl</tt>-drag with the Rotate tool will constrain the
|
||||||
color casts, you can correct them with the Curves tool
|
rotation to 15 degree angles.
|
||||||
(Colors→Curves).
|
</_thetip>
|
||||||
</_tip>
|
</tip>
|
||||||
|
<tip level="advanced">
|
||||||
<!-- -->
|
<_thetip>
|
||||||
<!-- (end of tips) -->
|
To create a circle-shaped selection, hold <tt>Shift</tt> while
|
||||||
<!-- -->
|
doing an ellipse select. To place a circle precisely, drag
|
||||||
|
horizontal and vertical guides tangent to the circle you want to
|
||||||
|
select, place your cursor at the intersection of the guides, and
|
||||||
|
the resulting selection will just touch the guides.
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
<tip level="advanced">
|
||||||
|
<_thetip>
|
||||||
|
If some of your scanned photos do not look colorful enough, you
|
||||||
|
can easily improve their tonal range with the "Auto"
|
||||||
|
button in the Levels tool (Colors→Levels). If there are any
|
||||||
|
color casts, you can correct them with the Curves tool
|
||||||
|
(Colors→Curves).
|
||||||
|
</_thetip>
|
||||||
|
</tip>
|
||||||
|
|
||||||
</gimp-tips>
|
</gimp-tips>
|
||||||
|
|
Loading…
Reference in New Issue