graphics/gpaint: Added (GNU Paint: a small-scale GTK2 painting program)

Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
This commit is contained in:
Petar Petrov 2013-06-03 16:27:37 -05:00 committed by Robby Workman
parent bf4ab6962d
commit 9a1f447dfc
20 changed files with 1191 additions and 0 deletions

11
graphics/gpaint/README Normal file
View File

@ -0,0 +1,11 @@
This is gpaint (GNU Paint), a small-scale GTK2 painting program, based
on xpaint, along the lines of "Paintbrush".
Currently gpaint has the following features:
- Drawing tools such as ovals, freehand, polygon and text, with fill
or shadow for polygons and closed freehand shapes.
- Cut and paste by selecting irregular regions or polygons.
- Preliminary print support using gnome-print.
- Modern, ease-to-use user interface with tool and color palettes.
- Multiple-image editing in a single instance of the program.
- All the image processing features present in xpaint.

View File

@ -0,0 +1,3 @@
if [ -x /usr/bin/update-desktop-database ]; then
/usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1
fi

53
graphics/gpaint/gpaint.1 Normal file
View File

@ -0,0 +1,53 @@
.TH GPAINT 1 "June 7, 2001"
.SH NAME
gpaint \- a small easy to use paint program for GNOME
.SH SYNOPSIS
gpaint [filename]...
.SH DESCRIPTION
This manual page briefly documents gpaint (GNU Paint), a small-scale
painting program for GNOME, the GNU Desktop Environment. gpaint does
not attempt to compete with GIMP, it is just a simple drawing package
based on xpaint, along the lines of 'Paintbrush' from a popular
non-free operating system.
gpaint is still work in progress and many features are still being
developed. However, gpaint is usable and useful for simple image
editing tasks.
.SH FEATURES
Currently gpaint has the following features:
.TP
* Drawing tools such as ovals, freehand, polygon and text, with fill or shadow for polygons and closed freehand shapes.
.TP
* Cut and paste by selecting irregular regions or polygons.
.TP
* Preliminary print support using gnome-print.
.TP
* Modern, easy to use user interface with tool and color palettes.
.TP
* Multiple-image editing in a single instance of the program.
.TP
* All the image processing features present in xpaint.
.SH TODO
Future plans include the implementation of zooming in/out, image
scaling/rotation, and turning gpaint into a Bonobo component for
simple image editing tasks inside other programs.
.SH BUGS
For bugs or general comments you can send mail to the developers list <gpaint-develop@gnu.org>, or you can enter a bug into the Debian Bug Tracking
system. Details of how to use this system can be found on
http://bugs.debian.org/.
.SH SEE-ALSO
\fB X (1), gnome (1)\fP
.SH AUTHOR
This manual page was written by Stephen Stafford
<stephen@clothcat.demon.co.uk>, for the Debian GNU/Linux system, but
may be used by others. It is based on the README file included in
the source distribution of gpaint which was written by Andy Tai
<atai@atai.org>.

View File

@ -0,0 +1,124 @@
#!/bin/sh
# Slackware build script for gpaint
# Copyright 2013 Petar Petrov, ppetrov@paju.oulu.fi
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
PRGNAM=gpaint
VERSION=${VERSION:-0.3.3}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
case "$( uname -m )" in
i?86) ARCH=i486 ;;
arm*) ARCH=arm ;;
*) ARCH=$( uname -m ) ;;
esac
fi
CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
if [ "$ARCH" = "i486" ]; then
SLKCFLAGS="-O2 -march=i486 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "i686" ]; then
SLKCFLAGS="-O2 -march=i686 -mtune=i686"
LIBDIRSUFFIX=""
elif [ "$ARCH" = "x86_64" ]; then
SLKCFLAGS="-O2 -fPIC"
LIBDIRSUFFIX="64"
else
SLKCFLAGS="-O2"
LIBDIRSUFFIX=""
fi
set -e
rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-2-$VERSION
tar xvf $CWD/${PRGNAM}_${VERSION}.orig.tar.gz
cd $PRGNAM-2-$VERSION
chown -R root:root .
find . \
\( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
-exec chmod 755 {} \; -o \
\( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
-exec chmod 644 {} \;
# Thanks to Debian for the patches! And the man page and icon! And the
# whole source tarball, actually...
patch -p1 -i $CWD/patches/01_drawing.patch
patch -p1 -i $CWD/patches/02_remove_menu_h_reference.patch
patch -p1 -i $CWD/patches/09_fix_menu_entry.patch
patch -p1 -i $CWD/patches/10_fix_crash_on_font_select.patch
patch -p1 -i $CWD/patches/11_fix_image_rotation.patch
patch -p1 -i $CWD/patches/20_fix_line_width_combo.patch
patch -p1 -i $CWD/patches/21_fix_crash_on_fill_button_click.patch
patch -p1 -i $CWD/patches/22_fix_not_printable_string.patch
patch -p1 -i $CWD/patches/23_add_accelerator_keys.patch
patch -p1 -i $CWD/patches/24_fix_crash_on_failed_write.patch
patch -p1 -i $CWD/patches/25_fix_color_selection.patch
patch -p1 -i $CWD/patches/26_fix_toolbar.patch
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure \
--prefix=/usr \
--libdir=/usr/lib${LIBDIRSUFFIX} \
--sysconfdir=/etc \
--localstatedir=/var \
--mandir=/usr/man \
--build=$ARCH-slackware-linux
make
make install DESTDIR=$PKG
install -D -m644 $CWD/$PRGNAM.1 $PKG/usr/man/man1/$PRGNAM.1
find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \;
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
AUTHORS ChangeLog COPYING INSTALL NEWS README THANKS TODO \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
# Menu item and icon
mkdir -p $PKG/usr/share/{applications,pixmaps}
cp $CWD/$PRGNAM.desktop $PKG/usr/share/applications
cp $CWD/$PRGNAM.png $PKG/usr/share/pixmaps
mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh
cd $PKG
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}

View File

@ -0,0 +1,7 @@
[Desktop Entry]
Categories=Graphics;
Exec=gpaint-2
Icon=gpaint.png
Name=gPaint
StartupNotify=false
Type=Application

View File

@ -0,0 +1,10 @@
PRGNAM="gpaint"
VERSION="0.3.3"
HOMEPAGE="http://www.gnu.org/software/gpaint/"
DOWNLOAD="http://ftp.de.debian.org/debian/pool/main/g/gpaint/gpaint_0.3.3.orig.tar.gz"
MD5SUM="037cc283d2cdd806dbdc462839bb3b72"
DOWNLOAD_x86_64=""
MD5SUM_x86_64=""
REQUIRES=""
MAINTAINER="Petar Petrov"
EMAIL="ppetrov@paju.oulu.fi"

BIN
graphics/gpaint/gpaint.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@ -0,0 +1,21 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fixes compiling with recent versions of libgtk
Newer versions of Gtk+ don't define the GTK_RESPONSE_DISCARD symbol, so we
replace its ocurrence by GTK_RESPONSE_NO to make gpaint build without
errors.
Bug: https://savannah.gnu.org/bugs/index.php?21703
Forwarded: https://savannah.gnu.org/patch/?7047
Index: b/src/drawing.c
===================================================================
--- a/src/drawing.c 2009-12-19 17:11:48.000000000 -0200
+++ b/src/drawing.c 2009-12-19 17:12:10.000000000 -0200
@@ -427,7 +427,7 @@
_("Do you want to save the changes you made to \"%s\"?\nYour changes will be lost if you don't save them."),
drawing->filename->str);
#ifdef GTK_STOCK_DISCARD
- gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONSE_DISCARD);
+ gtk_dialog_add_button(GTK_DIALOG(dialog), GTK_STOCK_DISCARD,GTK_RESPONSE_NO);
#else
gtk_dialog_add_button(GTK_DIALOG(dialog), _("Close _without Saving"), GTK_RESPONSE_NO);
#endif /* !GTK_STOCK_DISCARD */

View File

@ -0,0 +1,16 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Removes reference to non-existent menu.h file
Forwarded: https://savannah.gnu.org/patch/?7050
Index: b/src/menu.c
===================================================================
--- a/src/menu.c 2009-12-19 17:11:48.000000000 -0200
+++ b/src/menu.c 2009-12-19 17:12:10.000000000 -0200
@@ -34,7 +34,6 @@
#include "image.h"
#include "image_processing.h"
#include "tool_palette.h"
-#include "menu.h"
#include "print.h"
#include "file.h"
#include "text.h"

View File

@ -0,0 +1,25 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fixes the gpaint.desktop file
Change executable and icon filenames according to changes applied in the
Debian packaging.
Index: b/gpaint.desktop
===================================================================
--- a/gpaint.desktop 2009-12-19 17:11:48.000000000 -0200
+++ b/gpaint.desktop 2009-12-19 17:12:10.000000000 -0200
@@ -3,11 +3,9 @@
Comment=A small-scale painting program for GNOME, the GNU Desktop
Comment[fr]=Un petit outil de dessin pour GNOME, le desktop GNU
Comment[pt_BR]=Um pequeno programa de desenho para o GNOME, o Desktop GNU
-TryExec=gpaint-2
-Exec=gpaint-2
-Icon=gnome-logo-icon-transparent.png
+TryExec=gpaint
+Exec=gpaint
+Icon=gpaint.svg
Terminal=0
Type=Application
-
-
-
+Categories=Graphics;2DGraphics;RasterGraphics;

View File

@ -0,0 +1,97 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Avoids crash on font selection
Makes the font selection button active only when the text tool is selected,
avoiding a crash that would occur if it is clicked without selectiong the
text tool.
Bug-Debian: http://bugs.debian.org/497201
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/gpaint/+bug/262889
Forwarded: https://savannah.gnu.org/patch/?6645
Index: b/gpaint.glade
===================================================================
--- a/gpaint.glade 2009-12-19 17:11:48.000000000 -0200
+++ b/gpaint.glade 2009-12-19 17:12:10.000000000 -0200
@@ -1137,6 +1137,7 @@
<child>
<widget class="GtkFontButton" id="fontpicker">
<property name="visible">True</property>
+ <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="show_style">True</property>
<property name="show_size">True</property>
Index: b/src/main.c
===================================================================
--- a/src/main.c 2009-12-19 17:11:48.000000000 -0200
+++ b/src/main.c 2009-12-19 17:12:10.000000000 -0200
@@ -73,6 +73,10 @@
tool_palette_set_active_button(main_window, "pen_button");
/* make the pen tool the default initial tool so the user can draw right away */
+ gpaint_tool *text_tool = tool_palette_get_tool(main_window, "text");
+ widget = lookup_widget(main_window, "fontpicker");
+ text_set_fontpicker(text_tool, widget);
+
#if (!defined(HAVE_GTK_PRINT) && !defined(HAVE_GNOME_PRINT))
/* disable print menus and buttons if no print support available*/
widget = lookup_widget(main_window, "print_button");
Index: b/src/text.c
===================================================================
--- a/src/text.c 2009-12-19 17:11:48.000000000 -0200
+++ b/src/text.c 2009-12-19 17:12:10.000000000 -0200
@@ -54,6 +54,7 @@
GString *textbuf;
int max_width;
int max_height;
+ GtkFontButton *fontpicker;
} gpaint_text;
@@ -94,6 +95,7 @@
GPAINT_TOOL(text)->commit_change = text_commit_change;
text->textbuf = g_string_new(0);
+ text->fontpicker = NULL;
return GPAINT_TOOL(text);
}
@@ -118,6 +120,7 @@
g_string_printf(text->textbuf, "");
text->timer = g_timeout_add(TEXT_CURSOR_BLINK_RATE,
(GtkFunction)(text_handle_timeout), text);
+ gtk_widget_set_sensitive(GTK_WIDGET(text->fontpicker), TRUE);
}
static void
@@ -145,7 +148,7 @@
text_draw_string(text);
}
text_clear(text);
-
+ gtk_widget_set_sensitive(GTK_WIDGET(text->fontpicker), FALSE);
}
static gboolean
@@ -474,6 +477,8 @@
}
-
-
-
+void text_set_fontpicker(gpaint_tool *tool, GtkFontButton *fontpicker)
+{
+ gpaint_text *text = GPAINT_TEXT(tool);
+ text->fontpicker = fontpicker;
+}
Index: b/src/text.h
===================================================================
--- a/src/text.h 2009-12-19 17:11:48.000000000 -0200
+++ b/src/text.h 2009-12-19 17:12:10.000000000 -0200
@@ -30,6 +30,6 @@
gpaint_tool* text_create(const char *name);
-
+void text_set_fontpicker(gpaint_tool *tool, GtkFontButton *fontpicker);
#endif

View File

@ -0,0 +1,110 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fixes rotation operations
Implement the rotation in multiples of 90 degrees using the
gdk_pixbuf_rotate_simple function instead of the custom (and broken)
rotation algorithm
Bug-Debian: http://bugs.debian.org/497487
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/262942
Forwarded: https://savannah.gnu.org/patch/?6643
Index: b/src/drawing.c
===================================================================
--- a/src/drawing.c 2009-12-19 17:12:10.000000000 -0200
+++ b/src/drawing.c 2009-12-19 17:12:11.000000000 -0200
@@ -462,12 +462,23 @@
}
void
-drawing_rotate(gpaint_drawing *drawing, double degrees)
+drawing_rotate(gpaint_drawing *drawing, int degrees)
{
gpaint_image *image = drawing_create_image(drawing);
if (image)
{
- image_rotate(image, degrees);
+ switch (degrees)
+ {
+ case 0:
+ case 90:
+ case 180:
+ case 270:
+ image_rotate_simple(image, degrees);
+ break;
+ default:
+ image_rotate(image, degrees);
+ break;
+ }
/* copy rotated image on the pixmap */
gdk_pixmap_unref(drawing->backing_pixmap);
Index: b/src/drawing.h
===================================================================
--- a/src/drawing.h 2009-12-19 17:11:48.000000000 -0200
+++ b/src/drawing.h 2009-12-19 17:12:11.000000000 -0200
@@ -58,6 +58,6 @@
void drawing_clear(gpaint_drawing *drawing);
void drawing_clear_selection(gpaint_drawing *drawing, gpaint_point_array *points);
gboolean drawing_prompt_to_save(gpaint_drawing *drawing);
-void drawing_rotate(gpaint_drawing *drawing, double degrees);
+void drawing_rotate(gpaint_drawing *drawing, int degrees);
#endif
Index: b/src/image.c
===================================================================
--- a/src/image.c 2009-12-19 17:11:48.000000000 -0200
+++ b/src/image.c 2009-12-19 17:12:11.000000000 -0200
@@ -628,6 +628,27 @@
return 0;
}
+int
+image_rotate_simple (gpaint_image *image, int degrees)
+{
+ GdkPixbuf *newpixbuf;
+
+ switch (degrees)
+ {
+ case GDK_PIXBUF_ROTATE_NONE:
+ case GDK_PIXBUF_ROTATE_COUNTERCLOCKWISE:
+ case GDK_PIXBUF_ROTATE_UPSIDEDOWN:
+ case GDK_PIXBUF_ROTATE_CLOCKWISE:
+ newpixbuf = gdk_pixbuf_rotate_simple (image->pixbuf, degrees);
+ gdk_pixbuf_unref (image->pixbuf);
+ image->pixbuf = newpixbuf;
+ return 0;
+ break;
+ default:
+ return 1;
+ }
+}
+
GdkPixbuf* image_pixbuf(gpaint_image* image) {
return image->pixbuf;
Index: b/src/image.h
===================================================================
--- a/src/image.h 2009-12-19 17:11:48.000000000 -0200
+++ b/src/image.h 2009-12-19 17:12:11.000000000 -0200
@@ -45,5 +45,6 @@
int image_flip_x(gpaint_image *image);
int image_flip_y(gpaint_image *image);
int image_rotate(gpaint_image *image, double radians);
+int image_rotate_simple(gpaint_image *image, int degrees);
GdkPixbuf* image_pixbuf(gpaint_image *image);
#endif
Index: b/src/menu.c
===================================================================
--- a/src/menu.c 2009-12-19 17:12:10.000000000 -0200
+++ b/src/menu.c 2009-12-19 17:12:11.000000000 -0200
@@ -486,9 +486,9 @@
sscanf(name, "rotate_%c%d_menu", &sign, &degrees);
debug2("sign = %c degrees = %d", sign, degrees);
- if (sign=='n')
+ if (sign=='p')
{
- degrees *= -1;
+ degrees = 360 - degrees;
}
canvas_focus_lost(canvas);
drawing_rotate(canvas->drawing, degrees);

View File

@ -0,0 +1,352 @@
Author: Thomas Viehmann <tv@beamnet.de>
Description: Fix line width combo box
Fixes the line width combo box by puting items in the drop down
menu in the gpaint.glade file.
Bug-Debian: http://bugs.debian.org/497484
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/209173
Forwarded: https://savannah.gnu.org/patch/?6644
Index: b/gpaint.glade
===================================================================
--- a/gpaint.glade 2009-12-19 17:12:10.000000000 -0200
+++ b/gpaint.glade 2009-12-19 17:12:11.000000000 -0200
@@ -1230,6 +1230,34 @@
<property name="column_spacing">0</property>
<child>
+ <widget class="GtkLabel" id="Line Width">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">line width</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_CENTER</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ <signal name="realize" handler="on_small_label_realize"/>
+ </widget>
+ <packing>
+ <property name="left_attach">0</property>
+ <property name="right_attach">1</property>
+ <property name="top_attach">0</property>
+ <property name="bottom_attach">1</property>
+ <property name="x_options"></property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
<widget class="GtkCombo" id="line_width_combo">
<property name="width_request">60</property>
<property name="height_request">25</property>
@@ -1239,27 +1267,264 @@
<property name="case_sensitive">False</property>
<property name="enable_arrow_keys">True</property>
<property name="enable_arrows_always">False</property>
- <signal name="check_resize" handler="on_line_width_combo_check_resize"/>
<signal name="add" handler="on_line_width_combo_add"/>
+ <signal name="check_resize" handler="on_line_width_combo_check_resize"/>
<child internal-child="entry">
- <widget class="GtkEntry" id="entry1">
+ <widget class="GtkEntry" id="line_width_combo_combo_entry">
<property name="visible">True</property>
+ <property name="tooltip" translatable="yes">line width</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
- <property name="invisible_char">•</property>
+ <property name="invisible_char">*</property>
<property name="activates_default">False</property>
+ <signal name="changed" handler="on_line_width_combo_combo_entry_changed"/>
</widget>
</child>
<child internal-child="list">
- <widget class="GtkList" id="list1">
+ <widget class="GtkList" id="convertwidget1">
<property name="visible">True</property>
<property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget2">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget3">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">1</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget4">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget5">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">2</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget6">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget7">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">3</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget8">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget9">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">4</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget10">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget11">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">5</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget12">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget13">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">6</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget14">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget15">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">7</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget16">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget17">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">8</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkListItem" id="convertwidget18">
+ <property name="visible">True</property>
+
+ <child>
+ <widget class="GtkLabel" id="convertwidget19">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes">9</property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">False</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
</child>
</widget>
@@ -1272,35 +1537,6 @@
<property name="y_options"></property>
</packing>
</child>
-
- <child>
- <widget class="GtkLabel" id="Line Width">
- <property name="visible">True</property>
- <property name="label" translatable="yes">line width</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_CENTER</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- <signal name="realize" handler="on_small_label_realize"/>
- </widget>
- <packing>
- <property name="left_attach">0</property>
- <property name="right_attach">1</property>
- <property name="top_attach">0</property>
- <property name="bottom_attach">1</property>
- <property name="x_options"></property>
- <property name="y_options"></property>
- </packing>
- </child>
</widget>
</child>
</widget>

View File

@ -0,0 +1,25 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: fix crash on fill button click
Avoid crashing when clicking on fill button by checking that
tool->canvas->drawing_area is not null before casting it to GtkWidget
Bug-Debian: http://bugs.debian.org/544162
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/227174
Bug: https://savannah.gnu.org/bugs/?25117
Forwarded: https://savannah.gnu.org/patch/?7045
Index: pkg-gpaint/src/text.c
===================================================================
--- pkg-gpaint.orig/src/text.c 2009-12-22 21:03:29.000000000 -0200
+++ pkg-gpaint/src/text.c 2009-12-23 13:01:33.000000000 -0200
@@ -156,7 +156,10 @@
{
debug_fn();
GtkStyle *style;
- GtkWidget *widget = GTK_WIDGET(tool->canvas->drawing_area);
+ GtkWidget *widget = NULL;
+
+ if ((tool->canvas == NULL) || (tool->canvas->drawing_area == NULL)) return FALSE;
+ widget = GTK_WIDGET(tool->canvas->drawing_area);
style = gtk_widget_get_style(widget);
g_assert(style);

View File

@ -0,0 +1,21 @@
Author: Ying-Chun Liu (PaulLiu) <grandpaul@gmail.com>
Description: Ignore non-printable characters on text input
Bug-Debian: http://bugs.debian.org/535217
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/262648
Bug: https://savannah.gnu.org/bugs/?26923
Forwarded: https://savannah.gnu.org/patch/?7051
Index: b/src/text.c
===================================================================
--- a/src/text.c 2009-12-19 17:12:11.000000000 -0200
+++ b/src/text.c 2009-12-19 17:12:11.000000000 -0200
@@ -238,7 +238,9 @@
}
else if (keyevent->string)
{
+ if (isprint(keyevent->string[0])) {
g_string_append(text->textbuf, keyevent->string);
+ }
}
else if ((keyevent->keyval >= GDK_space) && (keyevent->keyval < GDK_Shift_L))
{

View File

@ -0,0 +1,92 @@
Author: Matt Wheeler <m@funkyhat.org>
Description: Add accelerator keys to common functions
Add accelerator keys for common operations in gpaint
Bug-Debian: http://bugs.debian.org/550305
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/444750
Bug: https://savannah.gnu.org/bugs/?27618
Forwarded: https://savannah.gnu.org/patch/?7053
Index: b/gpaint.glade
===================================================================
--- a/gpaint.glade 2009-12-19 17:12:11.000000000 -0200
+++ b/gpaint.glade 2009-12-19 17:12:11.000000000 -0200
@@ -341,6 +341,7 @@
<property name="label" translatable="yes">_New</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_new_file_menu_activate"/>
+ <accelerator key="N" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image25">
@@ -362,6 +363,7 @@
<property name="label" translatable="yes">_Open</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_open_menu_activate"/>
+ <accelerator key="O" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image26">
@@ -383,6 +385,7 @@
<property name="label" translatable="yes">_Save</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_save_menu_activate"/>
+ <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image27">
@@ -453,6 +456,7 @@
<property name="label" translatable="yes">_Print</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_print_menu_activate"/>
+ <accelerator key="P" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image30">
@@ -480,6 +484,7 @@
<property name="label" translatable="yes">_Close</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_close_window_activate"/>
+ <accelerator key="W" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image31">
@@ -501,6 +506,7 @@
<property name="label" translatable="yes">_Quit</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_quit_menu_activate"/>
+ <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image32">
@@ -535,6 +541,7 @@
<property name="label" translatable="yes">Cu_t</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_cut_menu_activate"/>
+ <accelerator key="X" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image33">
@@ -556,6 +563,7 @@
<property name="label" translatable="yes">_Copy</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_copy_menu_activate"/>
+ <accelerator key="C" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image34">
@@ -577,6 +585,7 @@
<property name="label" translatable="yes">_Paste</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_paste_menu_activate"/>
+ <accelerator key="V" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image35">
@@ -625,6 +634,7 @@
<property name="label" translatable="yes">_Select All</property>
<property name="use_underline">True</property>
<signal name="activate" handler="on_select_all_activate"/>
+ <accelerator key="A" modifiers="GDK_CONTROL_MASK" signal="activate"/>
</widget>
</child>
</widget>

View File

@ -0,0 +1,105 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fix crash when saving in unsupported format
Check if the format chosen by the user is supported before trying to save.
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/386234
Bug: https://savannah.gnu.org/bugs/?25334
Forwarded: https://savannah.gnu.org/patch/?7052
Index: b/src/drawing.c
===================================================================
--- a/src/drawing.c 2009-12-19 17:12:11.000000000 -0200
+++ b/src/drawing.c 2009-12-19 17:12:12.000000000 -0200
@@ -262,7 +262,7 @@
(error && error->message) ? error->message : "");
gtk_dialog_run(GTK_DIALOG(dialog));
gtk_widget_destroy(GTK_WIDGET(dialog));
- g_free(error); /* allocated by gdk-pixbuf library */
+ g_error_free(error); /* allocated by gdk-pixbuf library */
}
return saved;
}
Index: b/src/image.c
===================================================================
--- a/src/image.c 2009-12-19 17:12:11.000000000 -0200
+++ b/src/image.c 2009-12-19 17:12:12.000000000 -0200
@@ -32,6 +32,7 @@
#include <gdk/gdkx.h> /* for gdk_root_parent */
#include <gdk-pixbuf/gdk-pixbuf.h>
+#define _(String) gettext (String)
static int cmp_int(const void *a, const void *b);
static void fill_polygon(
@@ -191,13 +192,48 @@
return image;
}
+
+gboolean
+is_writable (GSList *formats, gchar *type)
+{
+ gboolean writable = FALSE;
+
+ while (!writable && formats != NULL)
+ {
+ gchar** extensions = gdk_pixbuf_format_get_extensions((GdkPixbufFormat *)(formats->data));
+ gchar** e = NULL;
+ for (e = extensions; *e; ++e)
+ {
+ if (!strcmp(*e, type))
+ {
+ writable = TRUE;
+ break;
+ }
+ }
+ g_strfreev (extensions);
+ formats = g_slist_next (formats);
+ }
+ return writable;
+}
+
+void add_if_writable (GdkPixbufFormat *data, GSList **list)
+{
+ if (gdk_pixbuf_format_is_writable (data))
+ *list = g_slist_prepend (*list, data);
+}
+
int
image_write(gpaint_image* image, const gchar* filename, GError **perror)
{
gboolean saved = FALSE;
gchar *ext = NULL;
gchar *type = NULL;
-
+
+ GSList *formats = gdk_pixbuf_get_formats ();
+ GSList *writable_formats = NULL;
+ g_slist_foreach (formats, add_if_writable, &writable_formats);
+ g_slist_free (formats);
+
ext = g_strrstr(filename, ".");
if (!ext)
{
@@ -214,13 +250,20 @@
{
type = g_ascii_strdown(ext+1,-1);
debug1("type=[%s]",type);
- saved = gdk_pixbuf_save(image->pixbuf, filename, type, perror, NULL);
+ if (is_writable (writable_formats, type))
+ {
+ saved = gdk_pixbuf_save(image->pixbuf, filename, type, perror, NULL);
+ } else {
+ saved = FALSE;
+ *perror = g_error_new (GDK_PIXBUF_ERROR, GDK_PIXBUF_ERROR_BAD_OPTION, _("Saving in the '%s' format is not supported by gdk_pixbuf"), type);
+ }
g_free(type);
}
if (!saved && *perror)
{
g_warning("Could not save image %s: %s\n", filename, (*perror)->message);
- }
+ }
+ g_slist_free (writable_formats);
return saved;
}

View File

@ -0,0 +1,79 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fix foreground/background color selection
Fixes the foreground/background color selection by checking the GtkColorButton
color when the user chooses the color.
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/344237
Forwarded: https://savannah.gnu.org/patch/index.php?7028
diff --git a/src/callbacks.h b/src/callbacks.h
index 985dddf..5485329 100644
--- a/src/callbacks.h
+++ b/src/callbacks.h
@@ -359,18 +359,10 @@ on_fontpicker_font_set (GtkFontButton *gnomefontpicker,
void
on_foreground_color_picker_color_set (GtkColorButton *gnomecolorpicker,
- guint arg1,
- guint arg2,
- guint arg3,
- guint arg4,
gpointer user_data);
void
on_background_color_picker_color_set (GtkColorButton *gnomecolorpicker,
- guint arg1,
- guint arg2,
- guint arg3,
- guint arg4,
gpointer user_data);
void
diff --git a/src/color_palette.c b/src/color_palette.c
index 9502acc..8c259e7 100644
--- a/src/color_palette.c
+++ b/src/color_palette.c
@@ -338,7 +338,7 @@ change_color(gpaint_color_swatch *swatch, gpaint_color_mode mode)
g_assert(swatch);
canvas = canvas_lookup(swatch->widget);
gdk_gc_get_values(swatch->gc, &gcvalues);
-
+
if (mode==FOREGROUND)
{
change_foreground_color(canvas, &(gcvalues.foreground));
@@ -362,15 +362,12 @@ change_color(gpaint_color_swatch *swatch, gpaint_color_mode mode)
*/
void
on_foreground_color_picker_color_set (GtkColorButton *gnomecolorpicker,
- guint arg1,
- guint arg2,
- guint arg3,
- guint arg4,
gpointer user_data)
{
- GdkColor color = {0, arg1, arg2, arg3};
+ GdkColor color;
gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(gnomecolorpicker));
+ gtk_color_button_get_color(gnomecolorpicker, &color);
gdk_color_alloc(gdk_colormap_get_system(), &color);
change_foreground_color(canvas, &color);
}
@@ -380,15 +377,12 @@ on_foreground_color_picker_color_set (GtkColorButton *gnomecolorpicker,
*/
void
on_background_color_picker_color_set (GtkColorButton *gnomecolorpicker,
- guint arg1,
- guint arg2,
- guint arg3,
- guint arg4,
gpointer user_data)
{
- GdkColor color = {0, arg1, arg2, arg3};
+ GdkColor color;
gpaint_canvas *canvas = canvas_lookup(GTK_WIDGET(gnomecolorpicker));
+ gtk_color_button_get_color(gnomecolorpicker, &color);
gdk_color_alloc(gdk_colormap_get_system(), &color);
change_background_color(canvas, &color);
}

View File

@ -0,0 +1,21 @@
Author: Goedson Teixeira Paixao <goedson@debian.org>
Description: Fix toolbar behaviour
Do not set a fixed toolbar style so that gpaint follows the style set in
the user preferences
Bug-Debian: http://bugs.debian.org/497488
Bug-Ubuntu: https://bugs.edge.launchpad.net/ubuntu/+source/gpaint/+bug/127296
Bug: https://savannah.gnu.org/bugs/?21260
Forwarded: https://savannah.gnu.org/patch/index.php?7044
Index: pkg-gpaint/gpaint.glade
===================================================================
--- pkg-gpaint.orig/gpaint.glade 2009-12-22 20:56:13.000000000 -0200
+++ pkg-gpaint/gpaint.glade 2009-12-22 20:56:33.000000000 -0200
@@ -1004,7 +1004,6 @@
<property name="height_request">55</property>
<property name="visible">True</property>
<property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
- <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
<property name="tooltips">True</property>
<property name="show_arrow">True</property>

View File

@ -0,0 +1,19 @@
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.
# Line up the first '|' above the ':' following the base package name, and
# the '|' on the right side marks the last column you can put a character in.
# You must make exactly 11 lines for the formatting to be correct. It's also
# customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------|
gpaint: gpaint (GNU Paint: a small-scale GTK2 painting program)
gpaint:
gpaint: This is gpaint (GNU Paint), a small-scale GTK2 painting program,
gpaint: on xpaint, along the lines of "Paintbrush".
gpaint:
gpaint:
gpaint:
gpaint:
gpaint:
gpaint:
gpaint: