graphics/dia: Updated for version 0.97.3 + new maintainer.

Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
This commit is contained in:
Philip Lacroix 2015-09-19 19:44:25 +07:00 committed by Willy Sudiarto Raharjo
parent e52bc22392
commit a5ef237349
26 changed files with 42 additions and 87125 deletions

View File

@ -1,9 +1,6 @@
Dia (diagram creation program) Dia is an application for creating technical diagrams. Its interface and
features are loosely patterned after the Windows program Visio. Its features
Dia is inspired by the commercial Windows program 'Visio', though include multiple-page printing, export to many formats (EPS, SVG, CGM and
more geared towards informal diagrams for casual use. It can be used PNG) and the ability to use custom shapes created by the user as simple XML
to draw many different kinds of diagrams. It currently has special descriptions. Dia is useful for drawing UML diagrams, network maps and
objects to help draw entity relationship diagrams, UML diagrams, flowcharts.
flowcharts, network diagrams, and many other diagrams. It is also
possible to add support for new shapes by writing simple XML files,
using a subset of SVG to draw the shape.

View File

@ -1,13 +1,15 @@
#!/bin/sh #!/bin/sh
# Slackware build script for dia # Slackware build script for dia
# Written by Matt Hayes (dominian@slackadelic.com
# Updated for 64bit by Ash Wiren (ash@spooksoftware.com 19-08-2009 # Originally written by Matt Hayes <dominian at slackadelic dot com>
# Currently mantained by Dugan Chen (thedoogster@gmail.com))) # Updated for 64bit by Ash Wiren <ash at spooksoftware dot com> (19.08.2009)
# Maintained by Dugan Chen <thedoogster at gmail dot com> (<= 18.09.2015)
# Updated and currently maintained by Philip Lacroix <slackph at posteo dot de>
PRGNAM=dia PRGNAM=dia
VERSION=0.97.2 VERSION=${VERSION:-0.97.3}
BUILD=${BUILD:-3} BUILD=${BUILD:-1}
TAG=${TAG:-_SBo} TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then if [ -z "$ARCH" ]; then
@ -44,6 +46,7 @@ mkdir -p $TMP $PKG $OUTPUT
cd $TMP cd $TMP
rm -rf $PRGNAM-$VERSION rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.xz tar xvf $CWD/$PRGNAM-$VERSION.tar.xz
cd $PRGNAM-$VERSION cd $PRGNAM-$VERSION
chown -R root:root . chown -R root:root .
find -L . \ find -L . \
@ -52,11 +55,6 @@ find -L . \
\( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
-o -perm 440 -o -perm 400 \) -exec chmod 644 {} \; -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
# Fix the location of the French manpages.
sed -i 's/$(datadir)\/man/@mandir@/' doc/fr/Makefile.in
# apply patches from upstream
for i in $CWD/patches/* ; do patch -p1 < $i ; done
autoreconf -fi autoreconf -fi
CFLAGS="$SLKCFLAGS" \ CFLAGS="$SLKCFLAGS" \
@ -71,17 +69,22 @@ CXXFLAGS="$SLKCFLAGS" \
make make
make install DESTDIR=$PKG make install DESTDIR=$PKG
find $PKG | xargs file | grep -e "executable" -e "shared object" | grep ELF \ find $PKG -print0 | xargs -0 file | grep -e "executable" -e "shared object" \
| cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
find $PKG/usr/man -type f -exec gzip -9 {} \; PRGMAN=$PKG/usr/man
for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done PRGSHR=$PKG/usr/share
PRGDOC=$PKG/usr/doc/$PRGNAM-$VERSION
# docdir already exists :-) # Move French man page to correct location; compress both.
cp -a \ mv $PRGSHR/man/fr $PRGMAN/
AUTHORS COPYING ChangeLog ChangeLog.pre-git KNOWN_BUGS MAINTAINERS NEWS README RELEASE-PROCESS THANKS TODO \ gzip -9 $PRGMAN/{,fr/}man1/$PRGNAM.1
$PKG/usr/doc/$PRGNAM-$VERSION rmdir $PRGSHR/man
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
# Install documentation.
cp -a AUTHORS COPYING ChangeLog* KNOWN_BUGS MAINTAINERS NEWS README \
\RELEASE-PROCESS THANKS TODO $PRGDOC/
cat $CWD/$PRGNAM.SlackBuild > $PRGDOC/$PRGNAM.SlackBuild
mkdir -p $PKG/install mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc cat $CWD/slack-desc > $PKG/install/slack-desc

View File

@ -1,10 +1,10 @@
PRGNAM="dia" PRGNAM="dia"
VERSION="0.97.2" VERSION="0.97.3"
HOMEPAGE="https://wiki.gnome.org/Apps/Dia/" HOMEPAGE="https://wiki.gnome.org/Apps/Dia/"
DOWNLOAD="http://ftp.gnome.org/pub/gnome/sources/dia/0.97/dia-0.97.2.tar.xz" DOWNLOAD="http://ftp.gnome.org/pub/gnome/sources/dia/0.97/dia-0.97.3.tar.xz"
MD5SUM="1e1180a513fb567709b09bc19f12105e" MD5SUM="0e744a0f6a6c4cb6a089e4d955392c3c"
DOWNLOAD_x86_64="" DOWNLOAD_x86_64=""
MD5SUM_x86_64="" MD5SUM_x86_64=""
REQUIRES="" REQUIRES=""
MAINTAINER="Dugan Chen" MAINTAINER="Philip Lacroix"
EMAIL="thedoogster@gmail.com" EMAIL="slackph at posteo dot de"

View File

@ -1,39 +0,0 @@
From aa94ba030885f3105e6452929d04917a2ef94393 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Sun, 8 Apr 2012 14:42:41 +0200
Subject: [PATCH 01/24] Bug 668587 - Double free() for some SVG rendering
The fix for bug 665648 introduced a memory corruption.
Now the #if-0'ed code as well as the #else branch respect
DiaSvgRender::get_fill_style() having a const return.
(cherry picked from commit 47bb76af3ba20b5e83be79a874df02c405934899)
---
lib/diasvgrenderer.c | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/diasvgrenderer.c b/lib/diasvgrenderer.c
index 4dc0695..14aefc4 100644
--- a/lib/diasvgrenderer.c
+++ b/lib/diasvgrenderer.c
@@ -677,13 +677,15 @@ draw_text_line(DiaRenderer *self, TextLine *text_line,
saved_width = renderer->linewidth;
renderer->linewidth = 0.001;
- style = (char*)get_fill_style(renderer, colour);
/* return value must not be freed */
renderer->linewidth = saved_width;
#if 0 /* would need a unit: https://bugzilla.mozilla.org/show_bug.cgi?id=707071#c4 */
- tmp = g_strdup_printf("%s; font-size: %s", style,
+ style = g_strdup_printf("%s; font-size: %s", get_fill_style(renderer, colour),
dia_svg_dtostr(d_buf, text_line_get_height(text_line)));
- style = tmp;
+#else
+ /* get_fill_style: the return value of this function must not be saved
+ * anywhere. And of course it must not be free'd */
+ style = g_strdup (get_fill_style(renderer, colour));
#endif
/* This is going to break for non-LTR texts, as SVG thinks 'start' is
* 'right' for those. */
--
1.8.4.4

View File

@ -1,71 +0,0 @@
From ae61326cf5e7aaba6e72af757a5cd33efe8280a1 Mon Sep 17 00:00:00 2001
From: Dominique Leuenberger <dimstar@opensuse.org>
Date: Thu, 1 Dec 2011 22:08:12 +0100
Subject: [PATCH 02/24] Bug 665335: Only #include <glib.h>: the other headers
are implicit
---
objects/custom/shape_typeinfo.c | 2 +-
plug-ins/pgf/render_pgf.c | 2 +-
tests/test-boundingbox.c | 3 ---
tests/test-objects.c | 4 ----
4 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/objects/custom/shape_typeinfo.c b/objects/custom/shape_typeinfo.c
index c6133b1..3fb3d73 100644
--- a/objects/custom/shape_typeinfo.c
+++ b/objects/custom/shape_typeinfo.c
@@ -27,7 +27,7 @@
#include "custom_util.h"
#include <string.h>
#include <stdarg.h>
-#include <glib/gstrfuncs.h>
+#include <glib.h>
#include <glib/gstdio.h>
#include <libxml/parser.h>
diff --git a/plug-ins/pgf/render_pgf.c b/plug-ins/pgf/render_pgf.c
index 3fe5bbd..24b812e 100644
--- a/plug-ins/pgf/render_pgf.c
+++ b/plug-ins/pgf/render_pgf.c
@@ -61,7 +61,7 @@ TODO:
#endif
#include <errno.h>
-#include <glib/gprintf.h>
+#include <glib.h>
#include <glib/gstdio.h>
#include "intl.h"
diff --git a/tests/test-boundingbox.c b/tests/test-boundingbox.c
index 7adaab5..a13d018 100644
--- a/tests/test-boundingbox.c
+++ b/tests/test-boundingbox.c
@@ -28,9 +28,6 @@
#include <glib.h>
#include <glib-object.h>
-#if GLIB_CHECK_VERSION(2,16,0)
-#include <glib/gtestutils.h>
-#endif
#include "dialib.h"
/*
diff --git a/tests/test-objects.c b/tests/test-objects.c
index 57d5675..c5980a5 100644
--- a/tests/test-objects.c
+++ b/tests/test-objects.c
@@ -28,10 +28,6 @@
#include <glib.h>
#include <glib-object.h>
-#if GLIB_CHECK_VERSION(2,16,0)
-#include <glib/gtestutils.h>
-#endif
-
#include "object.h"
#include "plug-ins.h"
#include "dialib.h"
--
1.8.4.4

View File

@ -1,36 +0,0 @@
From 3a589dedfbf2b0ada111a3e2cb6b14837f2c8b5e Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Sat, 6 Jun 2009 20:01:38 +0200
Subject: [PATCH 03/24] Bug #585004 - implicit declaration of function 'finite'
(2nd iteration)
To get the definition either _BSD_SOURCE or _SVID_SOURCE needs to
be defined before inclusion of <math.h>.
Removed HAVE_CONFIG_H and chanegd inclusion order
(cherry picked from commit 8f363f6dd82f9fbf502fceaf1d73a258c17593db)
---
objects/standard/arc.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/objects/standard/arc.c b/objects/standard/arc.c
index 28302a6..3a50838 100644
--- a/objects/standard/arc.c
+++ b/objects/standard/arc.c
@@ -16,13 +16,11 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifdef HAVE_CONFIG_H
#include <config.h>
-#endif
-#include <assert.h>
#define _BSD_SOURCE 1 /* to get finite */
#include <math.h>
+#include <assert.h>
#include "intl.h"
#include "object.h"
--
1.8.4.4

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,26 +0,0 @@
From b9b279e8bd77e0fb27176d64baa75563054ac5e1 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Sat, 23 Jun 2012 15:21:58 +0200
Subject: [PATCH 06/24] Bug 676830 : Misc - Grid : don't crash on copy, resize
Row index was iterated with the columns range.
---
objects/Misc/grid_object.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/objects/Misc/grid_object.c b/objects/Misc/grid_object.c
index bf6537a..05d1b16 100644
--- a/objects/Misc/grid_object.c
+++ b/objects/Misc/grid_object.c
@@ -479,7 +479,7 @@ grid_object_reallocate_cells (Grid_Object* grid_object)
/* implicit: if (new_cols < old_cols) */
for (i = new_cols; i < old_cols; ++i)
- for (j = 0; j < old_cols && j < new_cols; ++j) /* don't double-delete */
+ for (j = 0; j < old_rows && j < new_rows; ++j) /* don't double-delete */
{
int cell = grid_cell(i, j, old_rows, old_cols);
object_remove_connections_to(&grid_object->cells[cell]);
--
1.8.4.4

View File

@ -1,46 +0,0 @@
From ae8bcaa703197d090c0c746c54289ddcc6bbbbb1 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Thu, 7 Oct 2010 13:21:16 +0200
Subject: [PATCH 07/24] grid-object: avoid crash on shrink
Fix some confusion about rows/columns using the wrong limits.
Resizing object::connections was too early.
(cherry picked from commit cddd958b71a4075751ab76ac3530ced3c33972ea)
---
objects/Misc/grid_object.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/objects/Misc/grid_object.c b/objects/Misc/grid_object.c
index 05d1b16..11dca8b 100644
--- a/objects/Misc/grid_object.c
+++ b/objects/Misc/grid_object.c
@@ -460,12 +460,6 @@ grid_object_reallocate_cells (Grid_Object* grid_object)
if (old_rows == new_rows && old_cols == new_cols)
return; /* no reallocation necessary */
- /* obj->connections doesn't own the pointers, so just realloc; values
- * will be updated later */
- obj->num_connections = GRID_OBJECT_BASE_CONNECTION_POINTS + new_rows*new_cols;
- obj->connections = (ConnectionPoint **) g_realloc(obj->connections,
- obj->num_connections * sizeof(ConnectionPoint *));
-
/* If either new dimension is smaller, some connpoints will have to
* be disconnected before reallocating */
@@ -485,6 +479,13 @@ grid_object_reallocate_cells (Grid_Object* grid_object)
object_remove_connections_to(&grid_object->cells[cell]);
}
+ /* must be done after disconnecting */
+ /* obj->connections doesn't own the pointers, so just realloc; values
+ * will be updated later */
+ obj->num_connections = GRID_OBJECT_BASE_CONNECTION_POINTS + new_rows*new_cols;
+ obj->connections = (ConnectionPoint **) g_realloc(obj->connections,
+ obj->num_connections * sizeof(ConnectionPoint *));
+
/* Can't use realloc; if grid has different dims, memory lays out
* differently. Must copy by hand. */
--
1.8.4.4

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,88 +0,0 @@
From 3651abfeed6a500dde7ce8ed389ff0c954faff99 Mon Sep 17 00:00:00 2001
From: Steffen Macke <sdteffen@sdteffen.de>
Date: Tue, 2 Jul 2013 12:35:44 +0200
Subject: [PATCH 12/24] Cleanup, check for X11, forward to XQuartz homepage, if
necessary.
---
installer/macosx/dia | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/installer/macosx/dia b/installer/macosx/dia
index 2b5be21..5b27386 100755
--- a/installer/macosx/dia
+++ b/installer/macosx/dia
@@ -23,6 +23,17 @@ TOP="`dirname \"$CWD\"`"
# LaTeX distribution for Mac OS X
#export PATH="/usr/texbin:/opt/local/bin:/sw/bin/:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/local/bin:$CWD:$PATH"
+# Check for X11
+if [[ "" == `which startx` ]]; then
+ if [[ ! -e /opt/X11/bin/startx ]]; then
+ osascript -e 'tell app "System Events" to display dialog "X11 (XQuartz) is not installed or not running. Would you like to visit xquartz.macosforge.org now in order to download and install XQuartz?" with icon 0'
+ if [[ $? -eq 0 ]]; then
+ open http://xquartz.macosforge.org
+ exit
+ fi
+ fi
+fi
+
# Setup PYTHONPATH to use python modules shipped with Dia
ARCH=`arch`
PYTHON_VERS=`python -V 2>&1 | cut -c 8-10`
@@ -37,7 +48,8 @@ export DIA_LIB_PATH="$TOP/dia"
export DIA_SHEET_PATH="$TOP/sheets"
export DIA_SHAPE_PATH="$TOP/shapes"
export DIA_XSLT_PATH="$TOP/xslt"
-export DIA_LOCALE_PATH="$TOP/locale"
+export DIA_SHAREDIR="$TOP"
+export DIA_LOCALE_PATH="$TOP/share/locale"
mkdir -p "${HOME}/.dia-etc"
@@ -54,6 +66,42 @@ export XDG_DATA_DIRS="$TOP/share"
# various configuration files.
ESCAPEDTOP=`echo "$TOP" | sed 's/#/\\\\\\\\#/' | sed 's/&/\\\\\\&/g' | sed 's/|/\\\\\\|/g'`
+# Set GTK theme (only if there is no .gtkrc-2.0 in the user's home)
+if [[ ! -e "$HOME/.gtkrc-2.0" ]]; then
+ # Appearance setting
+ aquaStyle=`defaults read "Apple Global Domain" AppleAquaColorVariant 2>/dev/null`
+ # 1 for aqua, 6 for graphite, inexistant if the default color was never changed
+ if [[ "$aquaStyle" == "" ]]; then
+ aquaStyle=1 # set aqua as default
+ fi
+
+ # Highlight Color setting
+ hiliColor=`defaults read "Apple Global Domain" AppleHighlightColor 2>/dev/null`
+ # a RGB value, with components between 0 and 1, also inexistant if it was not changed
+ if [[ "$hiliColor" == "" ]]; then
+ hiliColor="0.709800 0.835300 1.000000" # set blue as default
+ fi
+
+ # Menu items color
+ if [[ aquaStyle -eq 1 ]]; then
+ menuColor="#4a76cd" # blue
+ else
+ menuColor="#7c8da4" # graphite
+ fi
+ # Format highlight color as a GTK rgb value
+ hiliColorFormated=`echo $hiliColor | awk -F " " '{print "\\\{"$1","$2","$3"\\\}"}'`
+
+ # echo $menuColor
+ # echo $hiliColorFormated
+
+ # Modify the gtkrc
+ # - with the correct colors
+ # - to point to the correct scrollbars folder
+ sed 's/OSX_HILI_COLOR_PLACEHOLDER/'$hiliColorFormated'/g' "$DIA_SHAREDIR/themes/CL/gtk-2.0/pre_gtkrc" | sed 's/OSX_MENU_COLOR_PLACEHOLDER/\"'$menuColor'\"/g' | sed 's/AQUASTYLE_PLACEHOLDER/'$aquaStyle'/g' | sed 's|${THEMEDIR}|'"$ESCAPEDTOP/themes/CL/gtk-2.0|g" > "${HOME}/.dia-etc/gtkrc"
+
+ export GTK2_RC_FILES="$HOME/.dia-etc/gtkrc"
+fi
+
# If the AppleCollationOrder preference doesn't exist, we fall back to using
# the AppleLocale preference.
LANGSTR=`defaults read .GlobalPreferences AppleCollationOrder 2>/dev/null`
--
1.8.4.4

View File

@ -1,60 +0,0 @@
From 5f85d269123d99d88a261d5dd775a80ef71ef76d Mon Sep 17 00:00:00 2001
From: Steffen Macke <sdteffen@sdteffen.de>
Date: Wed, 3 Jul 2013 09:19:26 +0200
Subject: [PATCH 13/24] Made XQuartz interaction more robust.
---
installer/macosx/dia | 21 ++++++++++++++++++---
1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/installer/macosx/dia b/installer/macosx/dia
index 5b27386..61a676f 100755
--- a/installer/macosx/dia
+++ b/installer/macosx/dia
@@ -1,10 +1,10 @@
#!/bin/sh
#
# Author: Aaron Voisine <aaron@voisine.org>
-# Dia Modifications:
+# Modifications:
# Michael Wybrow <mjwybrow@users.sourceforge.net>
# Jean-Olivier Irisson <jo.irisson@gmail.com>
-#
+# Steffen Macke <sdteffen@sdteffen.de>
CWD="`(cd \"\`dirname \\\"$0\\\"\`\"; echo \"$PWD\")`"
# e.g. /Applications/Dia.app/Contents/Resources/bin
@@ -24,7 +24,11 @@ TOP="`dirname \"$CWD\"`"
#export PATH="/usr/texbin:/opt/local/bin:/sw/bin/:/Library/Frameworks/Python.framework/Versions/Current/bin:/usr/local/bin:$CWD:$PATH"
# Check for X11
-if [[ "" == `which startx` ]]; then
+if [[ "" == $DISPLAY ]]; then
+ export DISPLAY=:0
+fi
+startx=`which startx`
+if [[ "" == $startx ]]; then
if [[ ! -e /opt/X11/bin/startx ]]; then
osascript -e 'tell app "System Events" to display dialog "X11 (XQuartz) is not installed or not running. Would you like to visit xquartz.macosforge.org now in order to download and install XQuartz?" with icon 0'
if [[ $? -eq 0 ]]; then
@@ -33,6 +37,17 @@ if [[ "" == `which startx` ]]; then
fi
fi
fi
+osascript -e 'tell app "XQuartz" to launch'
+for i in `seq 1 30`; do
+ if [[ `ps aux | grep -v grep | grep startx | wc -l` -lt 1 ]]; then
+ sleep 1
+ fi
+done
+if [[ "$DISPLAY" =~ "/tmp" ]]; then
+ if [[ ! -e $DISPLAY ]]; then
+ export DISPLAY=:0
+ fi
+fi
# Setup PYTHONPATH to use python modules shipped with Dia
ARCH=`arch`
--
1.8.4.4

View File

@ -1,105 +0,0 @@
From 7ac3e9ffac09f99a1aa2fe97a4dc0a688c9746b0 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Sat, 16 Mar 2013 17:56:58 +0100
Subject: [PATCH 14/24] Bug 694025 - GLib drop support for adding interfaces
after class_init
Without this Dia crashes at startup with new GLib version and the
DiaGdkRenderer being default. Make a new DiaGdkInteractiveRenderer which
follows the pattern also used for DiaCairoInteraciveRenderer. This should
be functional equivalent to what was there before and should work for all
current GLib versions.
(cherry picked from commit 213bdfe956bf8fe57c86316f68a09408fef1647e)
---
app/render_gdk.c | 60 ++++++++++++++++++++++++++++++++++----------------------
1 file changed, 37 insertions(+), 23 deletions(-)
diff --git a/app/render_gdk.c b/app/render_gdk.c
index 60ccb7a..b1e7ba4 100644
--- a/app/render_gdk.c
+++ b/app/render_gdk.c
@@ -50,7 +50,21 @@ static void copy_to_window (DiaRenderer *renderer,
gpointer window,
int x, int y, int width, int height);
-static void dia_gdk_renderer_iface_init (DiaInteractiveRendererInterface* iface)
+typedef struct _DiaGdkInteractiveRenderer DiaGdkInteractiveRenderer;
+struct _DiaGdkInteractiveRenderer
+{
+ DiaGdkRenderer parent_instance; /*!< inheritance in object oriented C */
+};
+typedef struct _DiaGdkInteractiveRendererClass DiaGdkInteractiveRendererClass;
+struct _DiaGdkInteractiveRendererClass
+{
+ DiaGdkRendererClass parent_class; /*!< the base class */
+};
+#define DIA_TYPE_GDK_INTERACTIVE_RENDERER (dia_gdk_interactive_renderer_get_type ())
+#define DIA_GDK_INTERACTIVE_RENDERER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), DIA_TYPE_GDK_INTERACTIVE_RENDERER, DiaGdkInteractiveRenderer))
+
+static void
+dia_gdk_renderer_iface_init (DiaInteractiveRendererInterface* iface)
{
iface->clip_region_clear = clip_region_clear;
iface->clip_region_add_rect = clip_region_add_rect;
@@ -61,35 +75,35 @@ static void dia_gdk_renderer_iface_init (DiaInteractiveRendererInterface* iface)
iface->set_size = set_size;
}
+G_DEFINE_TYPE_WITH_CODE (DiaGdkInteractiveRenderer, dia_gdk_interactive_renderer, DIA_TYPE_GDK_RENDERER,
+ G_IMPLEMENT_INTERFACE (DIA_TYPE_INTERACTIVE_RENDERER_INTERFACE, dia_gdk_renderer_iface_init));
+
+static void
+dia_gdk_interactive_renderer_class_init(DiaGdkInteractiveRendererClass *klass)
+{
+}
+static void
+dia_gdk_interactive_renderer_init(DiaGdkInteractiveRenderer *object)
+{
+ DiaGdkInteractiveRenderer *ia_renderer = DIA_GDK_INTERACTIVE_RENDERER (object);
+ DiaGdkRenderer *renderer = DIA_GDK_RENDERER(object);
+ DiaRenderer *dia_renderer = DIA_RENDERER(object);
+
+ dia_renderer->is_interactive = 1;
+
+ renderer->gc = NULL;
+ renderer->pixmap = NULL;
+ renderer->clip_region = NULL;
+}
+
DiaRenderer *
new_gdk_renderer(DDisplay *ddisp)
{
DiaGdkRenderer *renderer;
GType renderer_type = 0;
- renderer = g_object_new (DIA_TYPE_GDK_RENDERER, NULL);
+ renderer = g_object_new (DIA_TYPE_GDK_INTERACTIVE_RENDERER, NULL);
renderer->transform = dia_transform_new (&ddisp->visible, &ddisp->zoom_factor);
- if (!DIA_GET_INTERACTIVE_RENDERER_INTERFACE (renderer))
- {
- static const GInterfaceInfo irenderer_iface_info =
- {
- (GInterfaceInitFunc) dia_gdk_renderer_iface_init,
- NULL, /* iface_finalize */
- NULL /* iface_data */
- };
-
- renderer_type = DIA_TYPE_GDK_RENDERER;
- /* register the interactive renderer interface */
- g_type_add_interface_static (renderer_type,
- DIA_TYPE_INTERACTIVE_RENDERER_INTERFACE,
- &irenderer_iface_info);
-
- }
- renderer->parent_instance.is_interactive = 1;
- renderer->gc = NULL;
-
- renderer->pixmap = NULL;
- renderer->clip_region = NULL;
return DIA_RENDERER(renderer);
}
--
1.8.4.4

View File

@ -1,28 +0,0 @@
From 8fd585ca493d7d52f2af866cd9ce6e064da6bf15 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Fri, 16 Aug 2013 13:33:42 +0200
Subject: [PATCH 15/24] Fix assumption that table->prop_dialog is always valid
Not sure how I made it crash, but this extra safety measure
should not hurt in any case.
---
objects/Database/table_dialog.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/objects/Database/table_dialog.c b/objects/Database/table_dialog.c
index 038f8de..a17cead 100644
--- a/objects/Database/table_dialog.c
+++ b/objects/Database/table_dialog.c
@@ -269,7 +269,8 @@ table_state_set (TableState * state, Table * table)
table_compute_width_height (table);
table_update_positions (table);
- gtk_list_clear_items (table->prop_dialog->attributes_list, 0, -1);
+ if (table->prop_dialog)
+ gtk_list_clear_items (table->prop_dialog->attributes_list, 0, -1);
}
static void
--
1.8.4.4

View File

@ -1,38 +0,0 @@
From 2661a641b53899e994c15195057a8fe3c16becf4 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Fri, 16 Aug 2013 14:01:26 +0200
Subject: [PATCH 16/24] Bug 672190 - Inputs Methods don't work in integrated
mode
Connect im-related signals also to the integrated UI canvas
---
app/interface.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/app/interface.c b/app/interface.c
index dc0bb63..36b9e15 100644
--- a/app/interface.c
+++ b/app/interface.c
@@ -561,6 +561,19 @@ use_integrated_ui_for_display_shell(DDisplay *ddisp, char *title)
GDK_POINTER_MOTION_HINT_MASK |
GDK_FOCUS_CHANGE_MASK);
+ g_signal_connect (GTK_OBJECT (ddisp->container), "focus_out_event",
+ G_CALLBACK (ddisplay_focus_out_event),
+ ddisp);
+ g_signal_connect (GTK_OBJECT (ddisp->container), "focus_in_event",
+ G_CALLBACK (ddisplay_focus_in_event),
+ ddisp);
+ g_signal_connect (GTK_OBJECT (ddisp->container), "realize",
+ G_CALLBACK (ddisplay_realize),
+ ddisp);
+ g_signal_connect (GTK_OBJECT (ddisp->container), "unrealize",
+ G_CALLBACK (ddisplay_unrealize),
+ ddisp);
+
notebook_page_index = gtk_notebook_append_page (GTK_NOTEBOOK(ui.diagram_notebook),
ddisp->container,
tab_label_container);
--
1.8.4.4

View File

@ -1,42 +0,0 @@
From eb4e80afe3f25b1d91f00bdd8dbf67e38adad1f8 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Fri, 16 Aug 2013 15:21:16 +0200
Subject: [PATCH 17/24] Bug 660574 - Avoid cairo going into an endless loop
with too small arcs
this should fix the issue with SADT flow arrow, although I could not reproduce it.
---
plug-ins/cairo/diacairo-renderer.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)
diff --git a/plug-ins/cairo/diacairo-renderer.c b/plug-ins/cairo/diacairo-renderer.c
index cd13247..137411e 100644
--- a/plug-ins/cairo/diacairo-renderer.c
+++ b/plug-ins/cairo/diacairo-renderer.c
@@ -499,6 +499,7 @@ draw_arc(DiaRenderer *self,
DiaCairoRenderer *renderer = DIA_CAIRO_RENDERER (self);
Point start;
double a1, a2;
+ real onedu = 0.0;
DIAG_NOTE(g_message("draw_arc %fx%f <%f,<%f",
width, height, angle1, angle2));
@@ -515,9 +516,12 @@ draw_arc(DiaRenderer *self,
a1 = - (angle1 / 180.0) * G_PI;
a2 = - (angle2 / 180.0) * G_PI;
/* FIXME: to handle width != height some cairo_scale/cairo_translate would be needed */
- cairo_arc_negative (renderer->cr, center->x, center->y,
- width > height ? height / 2.0 : width / 2.0, /* FIXME 2nd radius */
- a1, a2);
+ ensure_minimum_one_device_unit (renderer, &onedu);
+ /* FIXME2: with too small arcs cairo goes into an endless loop */
+ if (height/2.0 > onedu && width/2.0 > onedu)
+ cairo_arc_negative (renderer->cr, center->x, center->y,
+ width > height ? height / 2.0 : width / 2.0, /* FIXME 2nd radius */
+ a1, a2);
cairo_stroke (renderer->cr);
DIAG_STATE(renderer->cr)
}
--
1.8.4.4

View File

@ -1,130 +0,0 @@
From 61431fec37ed855db7284c6737cb3777577cc904 Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Fri, 16 Aug 2013 20:54:12 +0200
Subject: [PATCH 18/24] Bug 683700 - vdx full of errors
Ensure message_error strings are linefeed-terminated.
Plus fixes merged from master:
cairo: don't screw cairo's matrix by scaling with 0
Seen with the VDX attached to bug 683700 - maybe there is also something wrong with the import?
vdx: UTF-8 safe variant to remove last newline
With the VDX attached to bug 683700 scrambled text appeared. Now corrected with the UTF-8 safe variant to search and replace "\n".
---
plug-ins/cairo/diacairo-renderer.c | 23 ++++++-----------------
plug-ins/vdx/vdx-import.c | 21 +++++++++++++++++++--
plug-ins/vdx/vdx-xml.c | 2 +-
3 files changed, 26 insertions(+), 20 deletions(-)
diff --git a/plug-ins/cairo/diacairo-renderer.c b/plug-ins/cairo/diacairo-renderer.c
index 137411e..57f6184 100644
--- a/plug-ins/cairo/diacairo-renderer.c
+++ b/plug-ins/cairo/diacairo-renderer.c
@@ -572,9 +572,14 @@ _ellipse(DiaRenderer *self,
DIAG_NOTE(g_message("%s_ellipse %fx%f center @ %f,%f",
fill ? "fill" : "draw", width, height, center->x, center->y));
+ /* avoid screwing cairo context - I'd say restore should fix it again, but it doesn't
+ * (dia.exe:3152): DiaCairo-WARNING **: diacairo-renderer.c:254, invalid matrix (not invertible)
+ */
+ if (!(width > 0. && height > 0.))
+ return;
+
cairo_set_source_rgba (renderer->cr, color->red, color->green, color->blue, 1.0);
-#if 1
cairo_save (renderer->cr);
/* don't create a line from the current point to the beginning
* of the ellipse */
@@ -584,22 +589,6 @@ _ellipse(DiaRenderer *self,
cairo_scale (renderer->cr, width / 2., height / 2.);
cairo_arc (renderer->cr, 0., 0., 1., 0., 2 * G_PI);
cairo_restore (renderer->cr);
-#else
- /* FIXME: how to make a perfect ellipse from a bezier ? */
- co = sqrt(pow(width,2)/4 + pow(height,2)/4);
-
- cairo_new_path (renderer->cr);
- cairo_move_to (renderer->cr,
- center->x, center->y - height/2);
- cairo_curve_to (renderer->cr,
- center->x + co, center->y - height/2,
- center->x + co, center->y + height/2,
- center->x, center->y + height/2);
- cairo_curve_to (renderer->cr,
- center->x - co, center->y + height/2,
- center->x - co, center->y - height/2,
- center->x, center->y - height/2);
-#endif
if (fill)
cairo_fill (renderer->cr);
diff --git a/plug-ins/vdx/vdx-import.c b/plug-ins/vdx/vdx-import.c
index ffefa58..7da0c05 100644
--- a/plug-ins/vdx/vdx-import.c
+++ b/plug-ins/vdx/vdx-import.c
@@ -1737,7 +1737,7 @@ plot_nurbs(const struct vdx_Geom *Geom, const struct vdx_XForm *XForm,
}
if (n % 4 || ! n)
{
- message_error(_("Invalid NURBS formula"));
+ message_error(_("Invalid NURBS formula\n"));
g_debug("Invalid NURBS formula");
return 0;
}
@@ -2066,7 +2066,7 @@ plot_image(const struct vdx_Geom *Geom, const struct vdx_XForm *XForm,
}
else
{
- message_error(_("Couldn't handle foreign object type %s"),
+ message_error(_("Couldn't handle foreign object type %s\n"),
ForeignData->ForeignType ? ForeignData->ForeignType
: "Unknown");
return 0;
@@ -2398,12 +2398,29 @@ plot_text(const struct vdx_Text *Text, const struct vdx_XForm *XForm,
}
}
+#if 0 /* this is not utf-8 safe - see bug 683700 */
/* Remove trailing line breaks */
while (tprop->text_data[0] &&
isspace(tprop->text_data[strlen(tprop->text_data)-1]))
{
tprop->text_data[strlen(tprop->text_data)-1] = 0;
}
+#else
+ {
+ char *s = tprop->text_data;
+ char *srep = NULL;
+ while ( (s = g_utf8_strchr(s, -1, '\n')) != NULL ) {
+ srep = s;
+ s = g_utf8_next_char(s);
+ if (*s)
+ srep = NULL;
+ else
+ break;
+ }
+ if (srep)
+ *srep = '\0';
+ }
+#endif
/* Other standard text properties */
tprop->attr.alignment = alignment;
diff --git a/plug-ins/vdx/vdx-xml.c b/plug-ins/vdx/vdx-xml.c
index 1fdac65..1c9567d 100644
--- a/plug-ins/vdx/vdx-xml.c
+++ b/plug-ins/vdx/vdx-xml.c
@@ -3341,7 +3341,7 @@ vdx_read_object(xmlNodePtr cur, VDXDocument *theDoc, void *p)
return s;
}
- message_error(_("Can't decode object %s"), (char*)cur->name);
+ message_error(_("Can't decode object %s\n"), (char*)cur->name);
return 0;
}
--
1.8.4.4

View File

@ -1,75 +0,0 @@
From 665c12145d6d236992d213c73b78e2f1846f6def Mon Sep 17 00:00:00 2001
From: Steffen Macke <sdteffen@sdteffen.de>
Date: Fri, 16 Aug 2013 21:50:50 +0200
Subject: [PATCH 19/24] Bug #667500 - Avoid $\r syntax for NSIS line breaks to
avoid POEdit confusion
---
installer/win32/Makefile.am | 2 ++
installer/win32/gennsh.c | 24 ++++++++++++++++--------
2 files changed, 18 insertions(+), 8 deletions(-)
diff --git a/installer/win32/Makefile.am b/installer/win32/Makefile.am
index f715f7e..3335fb1 100644
--- a/installer/win32/Makefile.am
+++ b/installer/win32/Makefile.am
@@ -1,4 +1,6 @@
## Process this file with automake to produce Makefile.in
+## Manually build gennsh on Linux:
+## gcc `pkg-config --cflags glib-2.0` -o gennsh gennsh.c
SUBDIRS = locale
diff --git a/installer/win32/gennsh.c b/installer/win32/gennsh.c
index d6603b5..fa48d16 100755
--- a/installer/win32/gennsh.c
+++ b/installer/win32/gennsh.c
@@ -2,7 +2,7 @@
* Copyright (C) 1998 Alexander Larsson
*
* gennsh.c
- * Copyright (C) 2009,2011 Steffen Macke <sdteffen@sdteffen.de>
+ * Copyright (C) 2009,2011,2013 Steffen Macke <sdteffen@sdteffen.de>
*
* gennsh is a program that allows to generate locale file for the
* Dia for Windows installer
@@ -71,14 +71,22 @@ int main(int argc, char *argv[])
/* Installer message: Dia uninstaller entry in Control Panel */
printf("!define DIA_UNINSTALL_DESC \"%s\"\n", _("Dia (remove only)"));
- /* Installer message: confirmation question. Keep $\r */
- printf("!define DIA_PROMPT_WIPEOUT \"%s\"\n", g_strescape(_("Your old Dia directory is about to be deleted. Would you like to continue?$\r$\rNote: Any non-standard plugins that you may have installed will be deleted.$\rDia user settings will not be affected."), ""));
+ /* Installer message: directory delete confirmation line 1 */
+ printf("!define DIA_PROMPT_WIPEOUT \"%s$\\r$\\r%s$\\r%s\"\n", _("Your old Dia directory is about to be deleted. Would you like to continue?"),
+ /* Installer message: directory delete confirmation line 2 */
+ _("Note: Any non-standard plugins that you may have installed will be deleted."),
+ /* Installer message: directory delete confirmation line 3*/
+ _("Dia user settings will not be affected."));
- /* Installer message: confirmatin question. Keep $\r */
- printf("!define DIA_PROMPT_DIR_EXISTS \"%s\"\n", g_strescape(_("The installation directory you specified already exists. Any contents$\rwill be deleted. Would you like to continue?"), ""));
+ /* Installer message: DIA_PROMPT_DIR_EXISTS line 1 */
+ printf("!define DIA_PROMPT_DIR_EXISTS \"%s$\\r%s\"\n", _("The installation directory you specified already exists. Any contents"),
+ /* Installer message: DIA_PROMP_DIR_EXISTS line 2 */
+ _("will be deleted. Would you like to continue?"));
- /* Installer message: Uninstall Section Prompts. Keep $\r */
- printf("!define un.DIA_UNINSTALL_ERROR_1 \"%s\"\n", g_strescape(_("The uninstaller could not find registry entries for Dia.$\rIt is likely that another user installed this application."), ""));
+ /* Installer message: registry entries not found line 1 */
+ printf("!define un.DIA_UNINSTALL_ERROR_1 \"%s$\\r%s\"\n", _("The uninstaller could not find registry entries for Dia."),
+ /* Installer message: registry entries not found line 2 */
+ _("It is likely that another user installed this application."));
/* Installer message: Uninstall error message */
printf("!define un.DIA_UNINSTALL_ERROR_2 \"%s\"\n", _("You do not have permission to uninstall this application."));
@@ -87,6 +95,6 @@ int main(int argc, char *argv[])
printf("!define un.DIA_UNINSTALLATION_WARNING \"%s\"\n", _("This will completely delete $INSTDIR and all subdirectories. Continue?"));
/* Installer message: Uninstallation warning. Keep $\PROFILE\.dia */
- printf("!define un.DIA_DOTDIA_WARNING \"%s\"\n", _("This will completely delete $PROFILE\.dia and all subdirectories. Continue?"));
+ printf("!define un.DIA_DOTDIA_WARNING \"%s\"\n", _("This will completely delete $PROFILE\\.dia and all subdirectories. Continue?"));
return 0;
}
--
1.8.4.4

View File

@ -1,25 +0,0 @@
From 82c2287bfc61012ac2fbba0a7c8d359048f09b92 Mon Sep 17 00:00:00 2001
From: Steffen Macke <sdteffen@sdteffen.de>
Date: Sun, 18 Aug 2013 13:22:35 +0200
Subject: [PATCH 20/24] Fixed black light shape reference.
---
sheets/Lights.sheet.in | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sheets/Lights.sheet.in b/sheets/Lights.sheet.in
index a246043..4613fa1 100644
--- a/sheets/Lights.sheet.in
+++ b/sheets/Lights.sheet.in
@@ -28,7 +28,7 @@
<_description>Blinders</_description>
</object>
<br/>
- <object name="Lights - Black light">
+ <object name="Lights - Blacklight">
<_description>Black light</_description>
</object>
<object name="Lights - Stroboscope">
--
1.8.4.4

File diff suppressed because it is too large Load Diff

View File

@ -1,132 +0,0 @@
From 80f95dfaeb92c44e49e51b8a69e301ea879b846b Mon Sep 17 00:00:00 2001
From: Hans Breuer <hans@breuer.org>
Date: Thu, 3 Oct 2013 20:04:37 +0200
Subject: [PATCH 24/24] Bug 709017 [warningectomy] array subscript is above
array bounds
Get rid of the temporary array for font name, loose the limitation
of maximum font name length and spare a string copy.
---
lib/dia_svg.c | 82 ++++++++++++++++-------------------------------------------
1 file changed, 22 insertions(+), 60 deletions(-)
diff --git a/lib/dia_svg.c b/lib/dia_svg.c
index eea21b2..4eec0d0 100644
--- a/lib/dia_svg.c
+++ b/lib/dia_svg.c
@@ -127,11 +127,6 @@ _parse_color(gint32 *color, const char *str)
return TRUE;
}
-enum
-{
- FONT_NAME_LENGTH_MAX = 40
-};
-
/** This function not only parses the style attribute of the given node
* it also extracts some of the style properties directly.
* @param node An XML node to parse a style from.
@@ -144,9 +139,7 @@ void
dia_svg_parse_style(xmlNodePtr node, DiaSvgStyle *s, real user_scale)
{
xmlChar *str;
- gchar temp[FONT_NAME_LENGTH_MAX+1]; /* font-family names will be limited to 40 characters */
int i = 0;
- gboolean over = FALSE;
char *family = NULL, *style = NULL, *weight = NULL;
str = xmlGetProp(node, (const xmlChar *)"style");
@@ -161,68 +154,37 @@ dia_svg_parse_style(xmlNodePtr node, DiaSvgStyle *s, real user_scale)
if (!strncmp("font-family:", ptr, 12)) {
ptr += 12;
while ((ptr[0] != '\0') && g_ascii_isspace(ptr[0])) ptr++;
- i = 0; over = FALSE;
- while (ptr[0] != '\0' && ptr[0] != ';' && !over) {
- if (i < FONT_NAME_LENGTH_MAX) {
- temp[i] = ptr[0];
- } else over = TRUE;
- i++;
- ptr++;
- }
- temp[i] = '\0';
-
- if (!over) {
- if (strcmp (temp, "sanserif") == 0 || strcmp (temp, "sans-serif") == 0)
- family = g_strdup ("sans"); /* special name adaption */
- else
- family = g_strdup(temp);
- }
+ i = 0;
+ while (ptr[i] != '\0' && ptr[i] != ';') ++i;
+ /* with i==0 we fall back to 'sans' too */
+ if (strncmp (ptr, "sanserif", i) == 0 || strncmp (ptr, "sans-serif", i) == 0)
+ family = g_strdup ("sans"); /* special name adaption */
+ else
+ family = i > 0 ? g_strndup(ptr, i) : NULL;
+ ptr += i;
} else if (!strncmp("font-weight:", ptr, 12)) {
ptr += 12;
while ((ptr[0] != '\0') && g_ascii_isspace(ptr[0])) ptr++;
- i = 0; over = FALSE;
- while (ptr[0] != '\0' && ptr[0] != ';' && !over) {
- if (i < FONT_NAME_LENGTH_MAX) {
- temp[i] = ptr[0];
- } else over = TRUE;
- i++;
- ptr++;
- }
- temp[i] = '\0';
-
- if (!over) weight = g_strdup(temp);
+ i = 0;
+ while (ptr[i] != '\0' && ptr[i] != ';') ++i;
+ weight = i > 0 ? g_strndup (ptr, i) : NULL;
+ ptr += i;
} else if (!strncmp("font-style:", ptr, 11)) {
ptr += 11;
while ((ptr[0] != '\0') && g_ascii_isspace(ptr[0])) ptr++;
- i = 0; over = FALSE;
- while (ptr[0] != '\0' && ptr[0] != ';' && !over) {
- if (i < FONT_NAME_LENGTH_MAX) {
- temp[i] = ptr[0];
- } else over = TRUE;
- i++;
- ptr++;
- }
- temp[i] = '\0';
-
- if (!over) style = g_strdup(temp);
+ i = 0;
+ while (ptr[i] != '\0' && ptr[i] != ';') ++i;
+ style = i > 0 ? g_strndup(ptr, i) : NULL;
+ ptr += i;
} else if (!strncmp("font-size:", ptr, 10)) {
ptr += 10;
while ((ptr[0] != '\0') && g_ascii_isspace(ptr[0])) ptr++;
- i = 0; over = FALSE;
- while (ptr[0] != '\0' && ptr[0] != ';' && !over) {
- if (i < FONT_NAME_LENGTH_MAX) {
- temp[i] = ptr[0];
- } else over = TRUE;
- i++;
- ptr++;
- }
- temp[i] = '\0';
-
- if (!over) {
- s->font_height = g_ascii_strtod(temp, NULL);
- if (user_scale > 0)
- s->font_height /= user_scale;
- }
+ i = 0;
+ while (ptr[i] != '\0' && ptr[i] != ';') ++i;
+ s->font_height = g_ascii_strtod(ptr, NULL);
+ ptr += i;
+ if (user_scale > 0)
+ s->font_height /= user_scale;
} else if (!strncmp("text-anchor:", ptr, 12)) {
ptr += 12;
while ((ptr[0] != '\0') && g_ascii_isspace(ptr[0])) ptr++;
--
1.8.4.4

View File

@ -6,14 +6,14 @@
# customary to leave one space after the ':' except on otherwise blank lines. # customary to leave one space after the ':' except on otherwise blank lines.
|-----handy-ruler------------------------------------------------------| |-----handy-ruler------------------------------------------------------|
dia: Dia (diagram creation program) dia: dia (diagram creation program)
dia: dia:
dia: Dia is inspired by the commercial Windows program 'Visio', though dia: Dia is an application for creating technical diagrams. Its interface
dia: more geared towards informal diagrams for casual use. It can be used dia: and features are loosely patterned after the Windows program Visio.
dia: to draw many different kinds of diagrams. It currently has special dia: Its features include multiple-page printing, export to many formats
dia: objects to help draw entity relationship diagrams, UML diagrams, dia: and the ability to use custom shapes created by the user as simple
dia: flowcharts, network diagrams, and many other diagrams. It is also dia: XML descriptions. Dia is useful for drawing UML diagrams, network
dia: possible to add support for new shapes by writing simple XML files, dia: maps and flowcharts.
dia: using a subset of SVG to draw the shape.
dia: dia:
dia: Homepage: https://wiki.gnome.org/Apps/Dia/ dia: Homepage: https://wiki.gnome.org/Apps/Dia/
dia: