[Scummvm-cvs-logs] SF.net SVN: scummvm:[53387] scummvm/trunk/engines/sword25/tools/swfdisplay

sev at users.sourceforge.net sev at users.sourceforge.net
Wed Oct 13 02:06:12 CEST 2010


Revision: 53387
          http://scummvm.svn.sourceforge.net/scummvm/?rev=53387&view=rev
Author:   sev
Date:     2010-10-13 00:06:12 +0000 (Wed, 13 Oct 2010)

Log Message:
-----------
SWORD25: Remove standalone SWF rendering tool

Removed Paths:
-------------
    scummvm/trunk/engines/sword25/tools/swfdisplay/Makefile
    scummvm/trunk/engines/sword25/tools/swfdisplay/algorithm.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/array.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art-non-display1.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath_stroke.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath_stroke.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/art_vpath_bpath.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/bezierrender.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/func.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/rect.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/swfrender.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/vectorimage.cpp
    scummvm/trunk/engines/sword25/tools/swfdisplay/vectorimage.h
    scummvm/trunk/engines/sword25/tools/swfdisplay/vectorimagerenderer.cpp

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/Makefile
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/Makefile	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/Makefile	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,33 +0,0 @@
-CC = g++
-DEBFLAGS = -g -Wall -O0
-LDFLAGS = -lgdk_pixbuf-2.0 -lpng
-CXXFLAGS = -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include/ -I/usr/include/gdk-pixbuf-2.0/
-BCFLAGS = -I/usr/include/libart-2.0 -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include/ -I/usr/include/gdk-pixbuf-2.0/
-BIN_TARGET = swfrender
-OBJ_TARGETS = \
-	swfrender.o \
-	art.o \
-	art_svp_intersect.o \
-	art_svp_render_aa.o \
-	art_svp_vpath.o \
-	art_svp_vpath_stroke.o \
-	art_vpath_bpath.o \
-	vectorimage.o \
-	vectorimagerenderer.o
-
-all: ${BIN_TARGET}
-
-${BIN_TARGET}: ${OBJ_TARGETS}
-	${CC}  ${DEBFLAGS} $^ -o $@ ${LDFLAGS}
-
-%.o: %.cpp Makefile
-	${CC} ${CXXFLAGS} ${DEBFLAGS} -c $< -o $@
-
-bezierrender: bezierrender.o
-	${CC}  ${DEBFLAGS} $^ -o $@ ${LDFLAGS} -lart_lgpl_2
-
-bezierrender.o: bezierrender.cpp
-	${CC} ${BCFLAGS} ${DEBFLAGS} -c $< -o $@
-
-clean:  ${BIN_TARGET} Makefile
-	rm -f *~ *.o ${BIN_TARGET} 2>/dev/null

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/algorithm.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/algorithm.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/algorithm.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,255 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/common/algorithm.h $
- * $Id: algorithm.h 51524 2010-07-30 23:42:50Z lordhoto $
- */
-
-#ifndef COMMON_ALGORITHM_H
-#define COMMON_ALGORITHM_H
-
-#include "func.h"
-
-namespace Common {
-
-/**
- * Copies data from the range [first, last) to [dst, dst + (last - first)).
- * It requires the range [dst, dst + (last - first)) to be valid.
- * It also requires dst not to be in the range [first, last).
- */
-template<class In, class Out>
-Out copy(In first, In last, Out dst) {
-	while (first != last)
-		*dst++ = *first++;
-	return dst;
-}
-
-/**
- * Copies data from the range [first, last) to [dst - (last - first), dst).
- * It requires the range [dst - (last - first), dst) to be valid.
- * It also requires dst not to be in the range [first, last).
- *
- * Unlike copy copy_backward copies the data from the end to the beginning.
- */
-template<class In, class Out>
-Out copy_backward(In first, In last, Out dst) {
-	while (first != last)
-		*--dst = *--last;
-	return dst;
-}
-
-/**
- * Copies data from the range [first, last) to [dst, dst + (last - first)).
- * It requires the range [dst, dst + (last - first)) to be valid.
- * It also requires dst not to be in the range [first, last).
- *
- * Unlike copy or copy_backward it does not copy all data. It only copies
- * a data element when operator() of the op parameter returns true for the
- * passed data element.
- */
-template<class In, class Out, class Op>
-Out copy_if(In first, In last, Out dst, Op op) {
-	while (first != last) {
-		if (op(*first))
-			*dst++ = *first;
-		++first;
-	}
-	return dst;
-}
-
-// Our 'specialized' 'set_to' template for char, signed char and unsigned char arrays.
-// Since C++ doesn't support partial specialized template functions (currently) we
-// are going this way...
-// With this we assure the usage of memset for those, which should be
-// faster than a simple loop like for the generic 'set_to'.
-template<class Value>
-signed char *set_to(signed char *first, signed char *last, Value val) {
-	memset(first, (val & 0xFF), last - first);
-	return last;
-}
-
-template<class Value>
-unsigned char *set_to(unsigned char *first, unsigned char *last, Value val) {
-	memset(first, (val & 0xFF), last - first);
-	return last;
-}
-
-template<class Value>
-char *set_to(char *first, char *last, Value val) {
-	memset(first, (val & 0xFF), last - first);
-	return last;
-}
-
-/**
- * Sets all elements in the range [first, last) to val.
- */
-template<class In, class Value>
-In set_to(In first, In last, Value val) {
-	while (first != last)
-		*first++ = val;
-	return first;
-}
-
-/**
- * Finds the first data value in the range [first, last) matching v.
- * For data comperance it uses operator == of the data elements.
- */
-template<class In, class T>
-In find(In first, In last, const T &v) {
-	while (first != last) {
-		if (*first == v)
-			return first;
-		++first;
-	}
-	return last;
-}
-
-/**
- * Finds the first data value in the range [first, last) for which
- * the specified predicate p returns true.
- */
-template<class In, class Pred>
-In find_if(In first, In last, Pred p) {
-	while (first != last) {
-		if (p(*first))
-			return first;
-		++first;
-	}
-	return last;
-}
-
-/**
- * Applies the function f on all elements of the range [first, last).
- * The processing order is from beginning to end.
- */
-template<class In, class Op>
-Op for_each(In first, In last, Op f) {
-	while (first != last) f(*first++);
-	return f;
-}
-
-template<typename T>
-unsigned int distance(T *first, T *last) {
-	return last - first;
-}
-
-template<typename T>
-unsigned int distance(T first, T last) {
-	unsigned int n = 0;
-	while (first != last) {
-		++n;
-		++first;
-	}
-	return n;
-}
-
-template<typename T>
-T *sortChoosePivot(T *first, T *last) {
-	return first + distance(first, last) / 2;
-}
-
-template<typename T>
-T sortChoosePivot(T first, T last) {
-	unsigned int n = distance(first, last);
-	n /= 2;
-	while (n--)
-		++first;
-	return first;
-}
-
-template<typename T, class StrictWeakOrdering>
-T sortPartition(T first, T last, T pivot, StrictWeakOrdering &comp) {
-	--last;
-	SWAP(*pivot, *last);
-
-	T sorted;
-	for (sorted = first; first != last; ++first) {
-		if (!comp(*last, *first)) {
-			if (first != sorted)
-				SWAP(*first, *sorted);
-			++sorted;
-		}
-	}
-
-	SWAP(*last, *sorted);
-	return sorted;
-}
-
-/**
- * Simple sort function, modeled after std::sort.
- * It compares data with the given comparator object comp.
- *
- * Like std::sort this is not guaranteed to be stable.
- *
- * Two small quotes from wikipedia about stability:
- *
- * Stable sorting algorithms maintain the relative order of records with
- * equal keys.
- *
- * Unstable sorting algorithms may change the relative order of records with
- * equal keys, but stable sorting algorithms never do so.
- *
- * For more information on that topic check out:
- * http://en.wikipedia.org/wiki/Sorting_algorithm#Stability
- *
- * NOTE: Actually as the time of writing our implementation is unstable.
- */
-template<typename T, class StrictWeakOrdering>
-void sort(T first, T last, StrictWeakOrdering comp) {
-	if (first == last)
-		return;
-
-	T pivot = sortChoosePivot(first, last);
-	pivot = sortPartition(first, last, pivot, comp);
-	sort<T, StrictWeakOrdering>(first, pivot, comp);
-	sort<T, StrictWeakOrdering>(++pivot, last, comp);
-}
-
-/**
- * Simple sort function, modeled after std::sort.
- */
-template<typename T>
-void sort(T *first, T *last) {
-	sort(first, last, Common::Less<T>());
-}
-
-template<class T>
-void sort(T first, T last) {
-	sort(first, last, Common::Less<typename T::ValueType>());
-}
-
-/**
- * Euclid's algorithm to compute the greatest common divisor.
- */
-template<class T>
-T gcd(T a, T b) {
-	if (a <= 0) a = -a;
-	if (b <= 0) b = -b;
-	while (a > 0) {
-		T tmp = a;
-		a = b % a;
-		b = tmp;
-	}
-	return b;
-}
-
-} // End of namespace Common
-#endif
-

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/array.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/array.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/array.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,318 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/common/array.h $
- * $Id: array.h 45247 2009-10-19 17:46:50Z fingolfin $
- */
-
-#ifndef COMMON_ARRAY_H
-#define COMMON_ARRAY_H
-
-#include "algorithm.h"
-
-namespace Common {
-
-/**
- * This class implements a dynamically sized container, which
- * can be accessed similar to a regular C++ array. Accessing
- * elements is performed in constant time (like with plain arrays).
- * In addition, one can append, insert and remove entries (this
- * is the 'dynamic' part). Doing that in general takes time
- * proportional to the number of elements in the array.
- *
- * The container class closest to this in the C++ standard library is
- * std::vector. However, there are some differences. The most important one is
- * that std::vector has a far more sophisticated (and complicated) memory
- * management scheme. There, only elements that 'live' are actually constructed
- * (i.e., have their constructor called), and objects that are removed are
- * immediately destructed (have their destructor called).
- * With Common::Array, this is not the case; instead, it simply uses new[] and
- * delete[] to allocate whole blocks of objects, possibly more than are
- * currently 'alive'. This simplifies memory management, but may have
- * undesirable side effects when one wants to use an Array of complex
- * data types.
- *
- * @todo Improve the storage management of this class.
- * In particular, don't use new[] and delete[], but rather
- * construct/destruct objects manually. This way, we can
- * ensure that storage which is not currently used does not
- * correspond to a live active object.
- * (This is only of interest for array of non-POD objects).
- */
-template<class T>
-class Array {
-protected:
-	uint _capacity;
-	uint _size;
-	T *_storage;
-
-public:
-	typedef T *iterator;
-	typedef const T *const_iterator;
-
-	typedef T value_type;
-
-public:
-	Array() : _capacity(0), _size(0), _storage(0) {}
-
-	Array(const Array<T> &array) : _capacity(array._size), _size(array._size), _storage(0) {
-		if (array._storage) {
-			_storage = new T[_capacity];
-			assert(_storage);
-			copy(array._storage, array._storage + _size, _storage);
-		}
-	}
-
-	/**
-	 * Construct an array by copying data from a regular array.
-	 */
-	template<class T2>
-	Array(const T2 *data, int n) {
-		_capacity = _size = n;
-		_storage = new T[_capacity];
-		assert(_storage);
-		copy(data, data + _size, _storage);
-	}
-
-	~Array() {
-		delete[] _storage;
-		_storage = 0;
-		_capacity = _size = 0;
-	}
-
-	/** Appends element to the end of the array. */
-	void push_back(const T &element) {
-		if (_size + 1 <= _capacity)
-			_storage[_size++] = element;
-		else
-			insert_aux(end(), &element, &element + 1);
-	}
-
-	void push_back(const Array<T> &array) {
-		if (_size + array.size() <= _capacity) {
-			copy(array.begin(), array.end(), end());
-			_size += array.size();
-		} else
-			insert_aux(end(), array.begin(), array.end());
-	}
-
-	/** Removes the last element of the array. */
-	void pop_back() {
-		assert(_size > 0);
-		_size--;
-	}
-
-	/** Returns a reference to the first element of the array. */
-	T &front() {
-		assert(_size > 0);
-		return _storage[0];
-	}
-
-	/** Returns a reference to the first element of the array. */
-	const T &front() const {
-		assert(_size > 0);
-		return _storage[0];
-	}
-
-	/** Returns a reference to the last element of the array. */
-	T &back() {
-		assert(_size > 0);
-		return _storage[_size-1];
-	}
-
-	/** Returns a reference to the last element of the array. */
-	const T &back() const {
-		assert(_size > 0);
-		return _storage[_size-1];
-	}
-
-
-	void insert_at(int idx, const T &element) {
-		assert(idx >= 0 && (uint)idx <= _size);
-		insert_aux(_storage + idx, &element, &element + 1);
-	}
-
-	T remove_at(int idx) {
-		assert(idx >= 0 && (uint)idx < _size);
-		T tmp = _storage[idx];
-		copy(_storage + idx + 1, _storage + _size, _storage + idx);
-		_size--;
-		return tmp;
-	}
-
-	// TODO: insert, remove, ...
-
-	T& operator[](int idx) {
-		assert(idx >= 0 && (uint)idx < _size);
-		return _storage[idx];
-	}
-
-	const T& operator[](int idx) const {
-		assert(idx >= 0 && (uint)idx < _size);
-		return _storage[idx];
-	}
-
-	Array<T>& operator=(const Array<T> &array) {
-		if (this == &array)
-			return *this;
-
-		delete[] _storage;
-		_size = array._size;
-		_capacity = _size + 32;
-		_storage = new T[_capacity];
-		assert(_storage);
-		copy(array._storage, array._storage + _size, _storage);
-
-		return *this;
-	}
-
-	uint size() const {
-		return _size;
-	}
-
-	void clear() {
-		delete[] _storage;
-		_storage = 0;
-		_size = 0;
-		_capacity = 0;
-	}
-
-	bool empty() const {
-		return (_size == 0);
-	}
-
-	bool operator==(const Array<T> &other) const {
-		if (this == &other)
-			return true;
-		if (_size != other._size)
-			return false;
-		for (uint i = 0; i < _size; ++i) {
-			if (_storage[i] != other._storage[i])
-				return false;
-		}
-		return true;
-	}
-	bool operator!=(const Array<T> &other) const {
-		return !(*this == other);
-	}
-
-
-	iterator		begin() {
-		return _storage;
-	}
-
-	iterator		end() {
-		return _storage + _size;
-	}
-
-	const_iterator	begin() const {
-		return _storage;
-	}
-
-	const_iterator	end() const {
-		return _storage + _size;
-	}
-
-	void reserve(uint newCapacity) {
-		if (newCapacity <= _capacity)
-			return;
-
-		T *old_storage = _storage;
-		_capacity = newCapacity;
-		_storage = new T[newCapacity];
-		assert(_storage);
-
-		if (old_storage) {
-			// Copy old data
-			copy(old_storage, old_storage + _size, _storage);
-			delete[] old_storage;
-		}
-	}
-
-	void resize(uint newSize) {
-		reserve(newSize);
-		for (uint i = _size; i < newSize; ++i)
-			_storage[i] = T();
-		_size = newSize;
-	}
-
-protected:
-	static uint roundUpCapacity(uint capacity) {
-		// Round up capacity to the next power of 2;
-		// we use a minimal capacity of 8.
-		uint capa = 8;
-		while (capa < capacity)
-			capa <<= 1;
-		return capa;
-	}
-
-	/**
-	 * Insert a range of elements coming from this or another array.
-	 * Unlike std::vector::insert, this method does not accept
-	 * arbitrary iterators, mainly because our iterator system is
-	 * seriously limited and does not distinguish between input iterators,
-	 * output iterators, forward iterators or random access iterators.
-	 *
-	 * So, we simply restrict to Array iterators. Extending this to arbitrary
-	 * random access iterators would be trivial.
-	 *
-	 * Moreover, this method does not handle all cases of inserting a subrange
-	 * of an array into itself; this is why it is private for now.
-	 */
-	iterator insert_aux(iterator pos, const_iterator first, const_iterator last) {
-		assert(_storage <= pos && pos <= _storage + _size);
-		assert(first <= last);
-		const uint n = last - first;
-		if (n) {
-			const uint idx = pos - _storage;
-			T *newStorage = _storage;
-			if (_size + n > _capacity) {
-				// If there is not enough space, allocate more and
-				// copy old elements over.
-				uint newCapacity = roundUpCapacity(_size + n);
-				newStorage = new T[newCapacity];
-				assert(newStorage);
-				copy(_storage, _storage + idx, newStorage);
-				pos = newStorage + idx;
-			}
-
-			// Make room for the new elements by shifting back
-			// existing ones.
-			copy_backward(_storage + idx, _storage + _size, newStorage + _size + n);
-
-			// Insert the new elements.
-			copy(first, last, pos);
-
-			// Finally, update the internal state
-			if (newStorage != _storage) {
-				delete[] _storage;
-				_capacity = roundUpCapacity(_size + n);
-				_storage = newStorage;
-			}
-			_size += n;
-		}
-		return pos;
-	}
-
-};
-
-} // End of namespace Common
-
-#endif

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art-non-display1.cpp
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art-non-display1.cpp	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art-non-display1.cpp	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,488 +0,0 @@
-#include <libart_lgpl/art_vpath_bpath.h>
-#include <libart_lgpl/art_svp_vpath.h>
-#include <libart_lgpl/art_svp_vpath_stroke.h>
-#include <libart_lgpl/art_svp_render_aa.h>
-#include <libart_lgpl/art_rgb_svp.h>
-#include <libart_lgpl/art_rgb.h>
-
-#define SAVING 1
-
-#define WIDTH 3000
-#define HEIGHT 3000
-#define BYTES_PER_PIXEL 3 /* 24 packed rgb bits */
-#define ROWSTRIDE (WIDTH*BYTES_PER_PIXEL)
-
-
-static unsigned char *render_path(void);
-
-#if SAVING
-static void save_buffer(unsigned char *buffer, const char *filename);
-
-#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <png.h>
-#include <stdio.h>
-
-static gboolean
-pixbuf_save_to_file(const GdkPixbuf *pixbuf, const char *file_name) {
-	FILE *handle;
-	unsigned char *buffer;
-	gboolean has_alpha;
-	int width, height, depth, rowstride;
-	guchar *pixels;
-	png_structp png_ptr;
-	png_infop info_ptr;
-	png_text text[2];
-	int i;
-
-	g_return_val_if_fail(pixbuf != NULL, FALSE);
-	g_return_val_if_fail(file_name != NULL, FALSE);
-	g_return_val_if_fail(file_name[0] != '\0', FALSE);
-
-	handle = fopen(file_name, "wb");
-	if (handle == NULL) {
-		return FALSE;
-	}
-
-	png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
-	if (png_ptr == NULL) {
-		fclose(handle);
-		return FALSE;
-	}
-
-	info_ptr = png_create_info_struct(png_ptr);
-	if (info_ptr == NULL) {
-		png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
-		fclose(handle);
-		return FALSE;
-	}
-
-	if (setjmp(png_ptr->jmpbuf)) {
-		png_destroy_write_struct(&png_ptr, &info_ptr);
-		fclose(handle);
-		return FALSE;
-	}
-
-	png_init_io(png_ptr, handle);
-
-	has_alpha = gdk_pixbuf_get_has_alpha(pixbuf);
-	width = gdk_pixbuf_get_width(pixbuf);
-	height = gdk_pixbuf_get_height(pixbuf);
-	depth = gdk_pixbuf_get_bits_per_sample(pixbuf);
-	pixels = gdk_pixbuf_get_pixels(pixbuf);
-	rowstride = gdk_pixbuf_get_rowstride(pixbuf);
-
-	png_set_IHDR(png_ptr, info_ptr, width, height,
-	             depth, PNG_COLOR_TYPE_RGB_ALPHA,
-	             PNG_INTERLACE_NONE,
-	             PNG_COMPRESSION_TYPE_DEFAULT,
-	             PNG_FILTER_TYPE_DEFAULT);
-
-	/* Some text to go with the png image */
-	text[0].key = "Title";
-	text[0].text = (char *) file_name;
-	text[0].compression = PNG_TEXT_COMPRESSION_NONE;
-	text[1].key = "Software";
-	text[1].text = "Nautilus Thumbnail";
-	text[1].compression = PNG_TEXT_COMPRESSION_NONE;
-	png_set_text(png_ptr, info_ptr, text, 2);
-
-	/* Write header data */
-	png_write_info(png_ptr, info_ptr);
-
-	/* if there is no alpha in the data, allocate buffer to expand into */
-	if (has_alpha) {
-		buffer = NULL;
-	} else {
-		buffer = g_malloc(4 * width);
-	}
-
-	/* pump the raster data into libpng, one scan line at a time */
-	for (i = 0; i < height; i++) {
-		if (has_alpha) {
-			png_bytep row_pointer = pixels;
-			png_write_row(png_ptr, row_pointer);
-		} else {
-			/* expand RGB to RGBA using an opaque alpha value */
-			int x;
-			unsigned char *buffer_ptr = buffer;
-			unsigned char *source_ptr = pixels;
-			for (x = 0; x < width; x++) {
-				*buffer_ptr++ = *source_ptr++;
-				*buffer_ptr++ = *source_ptr++;
-				*buffer_ptr++ = *source_ptr++;
-				*buffer_ptr++ = 255;
-			}
-			png_write_row(png_ptr, (png_bytep) buffer);
-		}
-		pixels += rowstride;
-	}
-
-	png_write_end(png_ptr, info_ptr);
-	png_destroy_write_struct(&png_ptr, &info_ptr);
-
-	g_free(buffer);
-
-	fclose(handle);
-	return TRUE;
-}
-
-static void
-save_buffer(unsigned char *buffer, const char *filename) {
-	GdkPixbuf *pixbuf;
-
-	g_type_init();
-
-	pixbuf = gdk_pixbuf_new_from_data(buffer,
-	                                  GDK_COLORSPACE_RGB,
-#if BYTES_PER_PIXEL == 4
-	                                  TRUE,
-#else
-	                                  FALSE,
-#endif
-									  8,
-	                                  WIDTH, HEIGHT,
-	                                  ROWSTRIDE,
-	                                  NULL, NULL);
-
-	pixbuf_save_to_file(pixbuf, filename);
-
-	gdk_pixbuf_unref(pixbuf);
-}
-
-#endif
-
-void
-art_rgb_fill_run1(art_u8 *buf, art_u8 r, art_u8 g, art_u8 b, gint n) {
-	int i;
-
-	if (r == g && g == b && r == 255) {
-		memset(buf, g, n + n + n + n);
-	} else {
-		art_u32 *alt = (art_u32 *)buf;
-		//art_u32 color = (r << 24) | (g << 16) | (b << 8) | 0xff;
-		art_u32 color = (r << 0) | (g << 8) | (b << 16) | (0xff << 24);
-		for (i = 0; i < n; i++)
-			*alt++ = color;
-	}
-}
-
-void
-art_rgb_run_alpha1(art_u8 *buf, art_u8 r, art_u8 g, art_u8 b, int alpha, int n) {
-	int i;
-	int v;
-
-	for (i = 0; i < n; i++) {
-		v = *buf;
-		*buf++ = v + (((r - v) * alpha + 0x80) >> 8);
-		v = *buf;
-		*buf++ = v + (((g - v) * alpha + 0x80) >> 8);
-		v = *buf;
-		*buf++ = v + (((b - v) * alpha + 0x80) >> 8);
-		v = *buf;
-		*buf++ = v + (((alpha - v) * alpha + 0x80) >> 8);
-	}
-}
-
-typedef struct _ArtRgbSVPAlphaData ArtRgbSVPAlphaData;
-
-struct _ArtRgbSVPAlphaData {
-	int alphatab[256];
-	art_u8 r, g, b, alpha;
-	art_u8 *buf;
-	int rowstride;
-	int x0, x1;
-};
-
-static void
-art_rgb_svp_alpha_callback1(void *callback_data, int y,
-                            int start, ArtSVPRenderAAStep *steps, int n_steps) {
-	ArtRgbSVPAlphaData *data = (ArtRgbSVPAlphaData *)callback_data;
-	art_u8 *linebuf;
-	int run_x0, run_x1;
-	art_u32 running_sum = start;
-	int x0, x1;
-	int k;
-	art_u8 r, g, b;
-	int *alphatab;
-	int alpha;
-
-	linebuf = data->buf;
-	x0 = data->x0;
-	x1 = data->x1;
-
-	r = data->r;
-	g = data->g;
-	b = data->b;
-	alphatab = data->alphatab;
-
-	if (n_steps > 0) {
-		run_x1 = steps[0].x;
-		if (run_x1 > x0) {
-			alpha = (running_sum >> 16) & 0xff;
-			if (alpha)
-				art_rgb_run_alpha1(linebuf, r, g, b, alphatab[alpha], run_x1 - x0);
-		}
-
-		for (k = 0; k < n_steps - 1; k++) {
-			running_sum += steps[k].delta;
-			run_x0 = run_x1;
-			run_x1 = steps[k + 1].x;
-			if (run_x1 > run_x0) {
-				alpha = (running_sum >> 16) & 0xff;
-				if (alpha)
-					art_rgb_run_alpha1(linebuf + (run_x0 - x0) * 4, r, g, b, alphatab[alpha], run_x1 - run_x0);
-			}
-		}
-		running_sum += steps[k].delta;
-		if (x1 > run_x1) {
-			alpha = (running_sum >> 16) & 0xff;
-			if (alpha)
-				art_rgb_run_alpha1(linebuf + (run_x1 - x0) * 4, r, g, b, alphatab[alpha], x1 - run_x1);
-		}
-	} else {
-		alpha = (running_sum >> 16) & 0xff;
-		if (alpha)
-			art_rgb_run_alpha1(linebuf, r, g, b, alphatab[alpha], x1 - x0);
-	}
-
-	data->buf += data->rowstride;
-}
-
-static void
-art_rgb_svp_alpha_opaque_callback1(void *callback_data, int y,
-                                   int start,
-                                   ArtSVPRenderAAStep *steps, int n_steps) {
-	ArtRgbSVPAlphaData *data = (ArtRgbSVPAlphaData *)callback_data;
-	art_u8 *linebuf;
-	int run_x0, run_x1;
-	art_u32 running_sum = start;
-	int x0, x1;
-	int k;
-	art_u8 r, g, b;
-	int *alphatab;
-	int alpha;
-
-	linebuf = data->buf;
-	x0 = data->x0;
-	x1 = data->x1;
-
-	r = data->r;
-	g = data->g;
-	b = data->b;
-	alphatab = data->alphatab;
-
-	if (n_steps > 0) {
-		run_x1 = steps[0].x;
-		if (run_x1 > x0) {
-			alpha = running_sum >> 16;
-			if (alpha) {
-				if (alpha >= 255)
-					art_rgb_fill_run1(linebuf, r, g, b, run_x1 - x0);
-				else
-					art_rgb_run_alpha1(linebuf, r, g, b, alphatab[alpha], run_x1 - x0);
-			}
-		}
-
-		for (k = 0; k < n_steps - 1; k++) {
-			running_sum += steps[k].delta;
-			run_x0 = run_x1;
-			run_x1 = steps[k + 1].x;
-			if (run_x1 > run_x0) {
-				alpha = running_sum >> 16;
-				if (alpha) {
-					if (alpha >= 255)
-						art_rgb_fill_run1(linebuf + (run_x0 - x0) * 4, r, g, b, run_x1 - run_x0);
-					else
-						art_rgb_run_alpha1(linebuf + (run_x0 - x0) * 4, r, g, b, alphatab[alpha], run_x1 - run_x0);
-				}
-			}
-		}
-		running_sum += steps[k].delta;
-		if (x1 > run_x1) {
-			alpha = running_sum >> 16;
-			if (alpha) {
-				if (alpha >= 255)
-					art_rgb_fill_run1(linebuf + (run_x1 - x0) * 4, r, g, b, x1 - run_x1);
-				else
-					art_rgb_run_alpha1(linebuf + (run_x1 - x0) * 4, r, g, b, alphatab[alpha], x1 - run_x1);
-			}
-		}
-	} else {
-		alpha = running_sum >> 16;
-		if (alpha) {
-			if (alpha >= 255)
-				art_rgb_fill_run1(linebuf, r, g, b, x1 - x0);
-			else
-				art_rgb_run_alpha1(linebuf, r, g, b, alphatab[alpha], x1 - x0);
-		}
-	}
-
-	data->buf += data->rowstride;
-}
-
-void
-art_rgb_svp_alpha1(const ArtSVP *svp,
-                   int x0, int y0, int x1, int y1,
-                   art_u32 rgba,
-                   art_u8 *buf, int rowstride,
-                   ArtAlphaGamma *alphagamma) {
-	ArtRgbSVPAlphaData data;
-	int r, g, b, alpha;
-	int i;
-	int a, da;
-
-	alpha = rgba >> 24;
-	r = (rgba >> 16) & 0xff;
-	g = (rgba >> 8) & 0xff;
-	b = rgba & 0xff;
-
-	data.r = r;
-	data.g = g;
-	data.b = b;
-	data.alpha = alpha;
-
-	a = 0x8000;
-	da = (alpha * 66051 + 0x80) >> 8; /* 66051 equals 2 ^ 32 / (255 * 255) */
-
-	for (i = 0; i < 256; i++) {
-		data.alphatab[i] = a >> 16;
-		a += da;
-	}
-
-	data.buf = buf;
-	data.rowstride = rowstride;
-	data.x0 = x0;
-	data.x1 = x1;
-	if (alpha == 255)
-		art_svp_render_aa(svp, x0, y0, x1, y1, art_rgb_svp_alpha_opaque_callback1, &data);
-	else
-		art_svp_render_aa(svp, x0, y0, x1, y1, art_rgb_svp_alpha_callback1, &data);
-}
-
-static int art_vpath_len (ArtVpath * a) {
-  int i;
-
-  for (i = 0; a[i].code != ART_END; i++);
-  return i;
-}
-
-ArtVpath *art_vpath_reverse(ArtVpath * a) {
-  ArtVpath *dest;
-  ArtVpath it;
-  int len;
-  int state = 0;
-  int i;
-
-  len = art_vpath_len(a);
-  dest = g_malloc((len + 1) * sizeof(ArtVpath));
-
-  for (i = 0; i < len; i++) {
-    it = a[len - i - 1];
-    if (state) {
-      it.code = ART_LINETO;
-    } else {
-      it.code = ART_MOVETO_OPEN;
-      state = 1;
-    }
-    if (a[len - i - 1].code == ART_MOVETO ||
-        a[len - i - 1].code == ART_MOVETO_OPEN) {
-      state = 0;
-    }
-    dest[i] = it;
-  }
-  dest[len] = a[len];
-
-  return dest;
-}
-
-ArtVpath *art_vpath_reverse_free(ArtVpath *a) {
-  ArtVpath *dest;
-
-  dest = art_vpath_reverse(a);
-  art_free(a);
-
-  return dest;
-}
-
-void art_svp_make_convex (ArtSVP *svp) {
-  int i;
-
-  if (svp->n_segs > 0 && svp->segs[0].dir == 0) {
-    for (i = 0; i < svp->n_segs; i++) {
-      svp->segs[i].dir = !svp->segs[i].dir;
-    }
-  }
-}
-
-
-void drawBez(ArtBpath *bez, art_u8 *buffer, double scaleX, double scaleY, double penWidth, unsigned int color) {
-	ArtVpath *vec = NULL;
-	ArtSVP *svp = NULL;
-
-	vec = art_bez_path_to_vec(bez, 0.5);
-
-	if (scaleX != 1.0 || scaleY != 1.0) {
-		ArtVpath *vec1;
-		double matrix[6];
-
-		matrix[0] = scaleX;
-		matrix[1] = 0;
-		matrix[2] = 0;
-		matrix[3] = scaleY;
-		matrix[4] = matrix[5] = 0;
-
-		vec1 = art_vpath_affine_transform(vec, matrix);
-		art_free(vec);
-
-		vec = vec1;
-	}
-
-	if (penWidth != -1) {
-		svp = art_svp_vpath_stroke(vec, ART_PATH_STROKE_JOIN_ROUND, ART_PATH_STROKE_CAP_ROUND, penWidth, 1.0, 0.5);
-	} else {
-		svp = art_svp_from_vpath(vec);
-	}
-
-#if BYTES_PER_PIXEL == 4
-	art_rgb_svp_alpha1(svp, 0, 0, WIDTH, HEIGHT, color, buffer, ROWSTRIDE, NULL);
-#else
-	color <<= 8;
-	color |= 0xff;
-	art_rgb_svp_alpha(svp, 0, 0, WIDTH, HEIGHT, color, buffer, ROWSTRIDE, NULL);
-#endif
-	art_free(svp);
-
-	art_free(vec);
-}
-
-static unsigned char *render_path() {
-	art_u8 *buffer = NULL;
-
-	ArtBpath *bez = NULL;
-
-	buffer = art_new(art_u8, WIDTH * HEIGHT * BYTES_PER_PIXEL);
-#if BYTES_PER_PIXEL == 4
-	memset(buffer, 0, WIDTH*HEIGHT*BYTES_PER_PIXEL);
-#else
-	memset(buffer, 0xff, WIDTH*HEIGHT*BYTES_PER_PIXEL);
-#endif
-	bez = art_new(ArtBpath, 100);
-
-#include "image.c"
-
-	art_free(bez);
-
-	return (unsigned char *) buffer;
-}
-
-int main(int argc, char *argv[]) {
-	unsigned char *buffer;
-
-	buffer = render_path();
-
-#if SAVING
-	save_buffer(buffer, "foo.png");
-#endif
-
-	return 0;
-}

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art.cpp
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art.cpp	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art.cpp	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,134 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* Various utility functions RLL finds useful. */
-
-#include "art.h"
-
-#ifdef HAVE_UINSTD_H
-#include <unistd.h>
-#endif
-#include <stdio.h>
-#include <stdarg.h>
-
-/**
- * art_die: Print the error message to stderr and exit with a return code of 1.
- * @fmt: The printf-style format for the error message.
- *
- * Used for dealing with severe errors.
- **/
-void
-art_die(const char *fmt, ...) {
-	va_list ap;
-
-	va_start(ap, fmt);
-	vfprintf(stderr, fmt, ap);
-	va_end(ap);
-	exit(1);
-}
-
-/**
- * art_warn: Print the warning message to stderr.
- * @fmt: The printf-style format for the warning message.
- *
- * Used for generating warnings.
- **/
-void
-art_warn(const char *fmt, ...) {
-	va_list ap;
-
-	va_start(ap, fmt);
-	vfprintf(stderr, fmt, ap);
-	va_end(ap);
-}
-
-/**
- * art_svp_free: Free an #ArtSVP structure.
- * @svp: #ArtSVP to free.
- *
- * Frees an #ArtSVP structure and all the segments in it.
- **/
-void
-art_svp_free(ArtSVP *svp) {
-	int n_segs = svp->n_segs;
-	int i;
-
-	for (i = 0; i < n_segs; i++)
-		free(svp->segs[i].points);
-	free(svp);
-}
-
-#ifdef ART_USE_NEW_INTERSECTOR
-#define EPSILON 0
-#else
-#define EPSILON 1e-6
-#endif
-
-/**
- * art_svp_seg_compare: Compare two segments of an svp.
- * @seg1: First segment to compare.
- * @seg2: Second segment to compare.
- *
- * Compares two segments of an svp. Return 1 if @seg2 is below or to the
- * right of @seg1, -1 otherwise.
- **/
-int
-art_svp_seg_compare(const void *s1, const void *s2) {
-	const ArtSVPSeg *seg1 = (const ArtSVPSeg *)s1;
-	const ArtSVPSeg *seg2 = (const ArtSVPSeg *)s2;
-
-	if (seg1->points[0].y - EPSILON > seg2->points[0].y) return 1;
-	else if (seg1->points[0].y + EPSILON < seg2->points[0].y) return -1;
-	else if (seg1->points[0].x - EPSILON > seg2->points[0].x) return 1;
-	else if (seg1->points[0].x + EPSILON < seg2->points[0].x) return -1;
-	else if ((seg1->points[1].x - seg1->points[0].x) *
-	         (seg2->points[1].y - seg2->points[0].y) -
-	         (seg1->points[1].y - seg1->points[0].y) *
-	         (seg2->points[1].x - seg2->points[0].x) > 0) return 1;
-	else return -1;
-}
-
-/**
- * art_vpath_add_point: Add point to vpath.
- * @p_vpath: Where the pointer to the #ArtVpath structure is stored.
- * @pn_points: Pointer to the number of points in *@p_vpath.
- * @pn_points_max: Pointer to the number of points allocated.
- * @code: The pathcode for the new point.
- * @x: The X coordinate of the new point.
- * @y: The Y coordinate of the new point.
- *
- * Adds a new point to *@p_vpath, reallocating and updating *@p_vpath
- * and *@pn_points_max as necessary. *@pn_points is incremented.
- *
- * This routine always adds the point after all points already in the
- * vpath. Thus, it should be called in the order the points are
- * desired.
- **/
-void
-art_vpath_add_point(ArtVpath **p_vpath, int *pn_points, int *pn_points_max,
-                    ArtPathcode code, double x, double y) {
-	int i;
-
-	i = (*pn_points)++;
-	if (i == *pn_points_max)
-		art_expand(*p_vpath, ArtVpath, *pn_points_max);
-	(*p_vpath)[i].code = code;
-	(*p_vpath)[i].x = x;
-	(*p_vpath)[i].y = y;
-}

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,182 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* Simple macros to set up storage allocation and basic types for libart
-   functions. */
-
-#ifndef __ART_MISC_H__
-#define __ART_MISC_H__
-
-#define DEBUG 1
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <string.h>
-#include <math.h>
-
-typedef unsigned char byte;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-typedef unsigned int uint;
-typedef short int16;
-typedef int int32;
-
-typedef byte art_u8;
-typedef uint16 art_u16;
-typedef uint32 art_u32;
-
-#define FLIP_NONE 0
-
-#define BS_ASSERT(x) assert(x)
-#define error(x) assert(0)
-#define BS_LOG_ERRORLN(x) assert(0)
-
-#define BS_ARGB(A,R,G,B)    (((A) << 24) | ((R) << 16) | ((G) << 8) | (B))
-
-/* These aren't, strictly speaking, configuration macros, but they're
-   damn handy to have around, and may be worth playing with for
-   debugging. */
-#define art_new(type, n) ((type *)malloc ((n) * sizeof(type)))
-
-#define art_renew(p, type, n) ((type *)realloc (p, (n) * sizeof(type)))
-
-/* This one must be used carefully - in particular, p and max should
-   be variables. They can also be pstruct->el lvalues. */
-#define art_expand(p, type, max) do { if(max) { p = art_renew (p, type, max <<= 1); } else { max = 1; p = art_new(type, 1); } } while (0)
-
-typedef int art_boolean;
-#define ART_FALSE 0
-#define ART_TRUE 1
-
-/* define pi */
-#ifndef M_PI
-#define M_PI 3.14159265358979323846
-#endif  /*  M_PI  */
-
-#ifndef M_SQRT2
-#define M_SQRT2         1.41421356237309504880  /* sqrt(2) */
-#endif  /* M_SQRT2 */
-
-/* Provide macros to feature the GCC function attribute.
- */
-#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ > 4))
-#define ART_GNUC_PRINTF( format_idx, arg_idx )    \
-	__attribute__((__format__ (__printf__, format_idx, arg_idx)))
-#define ART_GNUC_NORETURN                         \
-	__attribute__((__noreturn__))
-#else   /* !__GNUC__ */
-#define ART_GNUC_PRINTF( format_idx, arg_idx )
-#define ART_GNUC_NORETURN
-#endif  /* !__GNUC__ */
-
-void ART_GNUC_NORETURN
-art_die(const char *fmt, ...) ART_GNUC_PRINTF(1, 2);
-
-void
-art_warn(const char *fmt, ...) ART_GNUC_PRINTF(1, 2);
-
-#define ART_USE_NEW_INTERSECTOR
-
-typedef struct _ArtDRect ArtDRect;
-typedef struct _ArtIRect ArtIRect;
-
-struct _ArtDRect {
-	/*< public >*/
-	double x0, y0, x1, y1;
-};
-
-struct _ArtIRect {
-	/*< public >*/
-	int x0, y0, x1, y1;
-};
-
-typedef struct _ArtPoint ArtPoint;
-
-struct _ArtPoint {
-	/*< public >*/
-	double x, y;
-};
-
-/* Basic data structures and constructors for sorted vector paths */
-
-typedef struct _ArtSVP ArtSVP;
-typedef struct _ArtSVPSeg ArtSVPSeg;
-
-struct _ArtSVPSeg {
-	int n_points;
-	int dir; /* == 0 for "up", 1 for "down" */
-	ArtDRect bbox;
-	ArtPoint *points;
-};
-
-struct _ArtSVP {
-	int n_segs;
-	ArtSVPSeg segs[1];
-};
-
-void
-art_svp_free(ArtSVP *svp);
-
-int
-art_svp_seg_compare(const void *s1, const void *s2);
-
-/* Basic data structures and constructors for bezier paths */
-
-typedef enum {
-	ART_MOVETO,
-	ART_MOVETO_OPEN,
-	ART_CURVETO,
-	ART_LINETO,
-	ART_END
-} ArtPathcode;
-
-typedef struct _ArtBpath ArtBpath;
-
-struct _ArtBpath {
-	/*< public >*/
-	ArtPathcode code;
-	double x1;
-	double y1;
-	double x2;
-	double y2;
-	double x3;
-	double y3;
-};
-
-/* Basic data structures and constructors for simple vector paths */
-
-typedef struct _ArtVpath ArtVpath;
-
-/* CURVETO is not allowed! */
-struct _ArtVpath {
-	ArtPathcode code;
-	double x;
-	double y;
-};
-
-/* Some of the functions need to go into their own modules */
-
-void
-art_vpath_add_point(ArtVpath **p_vpath, int *pn_points, int *pn_points_max,
-                    ArtPathcode code, double x, double y);
-
-ArtVpath *art_bez_path_to_vec(const ArtBpath *bez, double flatness);
-
-#endif /* __ART_MISC_H__ */

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.cpp
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.cpp	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.cpp	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,1329 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 2001 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* This file contains a testbed implementation of the new intersection
-   code.
-*/
-
-#include "art.h"
-#include "art_svp_intersect.h"
-
-#include <math.h> /* for sqrt */
-
-/* This can be used in production, to prevent hangs. Eventually, it
-   should not be necessary. */
-#define CHEAP_SANITYCHECK
-
-/* A priority queue - perhaps move to a separate file if it becomes
-   needed somewhere else */
-
-#define ART_PRIQ_USE_HEAP
-
-typedef struct _ArtPriQ ArtPriQ;
-typedef struct _ArtPriPoint ArtPriPoint;
-
-struct _ArtPriQ {
-	int n_items;
-	int n_items_max;
-	ArtPriPoint **items;
-};
-
-struct _ArtPriPoint {
-	double x;
-	double y;
-	void *user_data;
-};
-
-static ArtPriQ *
-art_pri_new(void) {
-	ArtPriQ *result = art_new(ArtPriQ, 1);
-
-	result->n_items = 0;
-	result->n_items_max = 16;
-	result->items = art_new(ArtPriPoint *, result->n_items_max);
-	return result;
-}
-
-static void
-art_pri_free(ArtPriQ *pq) {
-	free(pq->items);
-	free(pq);
-}
-
-static art_boolean
-art_pri_empty(ArtPriQ *pq) {
-	return pq->n_items == 0;
-}
-
-#ifdef ART_PRIQ_USE_HEAP
-
-/* This heap implementation is based on Vasek Chvatal's course notes:
-   http://www.cs.rutgers.edu/~chvatal/notes/pq.html#heap */
-
-static void
-art_pri_bubble_up(ArtPriQ *pq, int vacant, ArtPriPoint *missing) {
-	ArtPriPoint **items = pq->items;
-	int parent;
-
-	parent = (vacant - 1) >> 1;
-	while (vacant > 0 && (missing->y < items[parent]->y ||
-	                      (missing->y == items[parent]->y &&
-	                       missing->x < items[parent]->x))) {
-		items[vacant] = items[parent];
-		vacant = parent;
-		parent = (vacant - 1) >> 1;
-	}
-
-	items[vacant] = missing;
-}
-
-static void
-art_pri_insert(ArtPriQ *pq, ArtPriPoint *point) {
-	if (pq->n_items == pq->n_items_max)
-		art_expand(pq->items, ArtPriPoint *, pq->n_items_max);
-
-	art_pri_bubble_up(pq, pq->n_items++, point);
-}
-
-static void
-art_pri_sift_down_from_root(ArtPriQ *pq, ArtPriPoint *missing) {
-	ArtPriPoint **items = pq->items;
-	int vacant = 0, child = 2;
-	int n = pq->n_items;
-
-	while (child < n) {
-		if (items[child - 1]->y < items[child]->y ||
-		        (items[child - 1]->y == items[child]->y &&
-		         items[child - 1]->x < items[child]->x))
-			child--;
-		items[vacant] = items[child];
-		vacant = child;
-		child = (vacant + 1) << 1;
-	}
-	if (child == n) {
-		items[vacant] = items[n - 1];
-		vacant = n - 1;
-	}
-
-	art_pri_bubble_up(pq, vacant, missing);
-}
-
-static ArtPriPoint *
-art_pri_choose(ArtPriQ *pq) {
-	ArtPriPoint *result = pq->items[0];
-
-	art_pri_sift_down_from_root(pq, pq->items[--pq->n_items]);
-	return result;
-}
-
-#else
-
-/* Choose least point in queue */
-static ArtPriPoint *
-art_pri_choose(ArtPriQ *pq) {
-	int i;
-	int best = 0;
-	double best_x, best_y;
-	double y;
-	ArtPriPoint *result;
-
-	if (pq->n_items == 0)
-		return NULL;
-
-	best_x = pq->items[best]->x;
-	best_y = pq->items[best]->y;
-
-	for (i = 1; i < pq->n_items; i++) {
-		y = pq->items[i]->y;
-		if (y < best_y || (y == best_y && pq->items[i]->x < best_x)) {
-			best = i;
-			best_x = pq->items[best]->x;
-			best_y = y;
-		}
-	}
-	result = pq->items[best];
-	pq->items[best] = pq->items[--pq->n_items];
-	return result;
-}
-
-static void
-art_pri_insert(ArtPriQ *pq, ArtPriPoint *point) {
-	if (pq->n_items == pq->n_items_max)
-		art_expand(pq->items, ArtPriPoint *, pq->n_items_max);
-
-	pq->items[pq->n_items++] = point;
-}
-
-#endif
-
-/* A virtual class for an "svp writer". A client of this object creates an
-   SVP by repeatedly calling "add segment" and "add point" methods on it.
-*/
-
-typedef struct _ArtSvpWriterRewind ArtSvpWriterRewind;
-
-/* An implementation of the svp writer virtual class that applies the
-   winding rule. */
-
-struct _ArtSvpWriterRewind {
-	ArtSvpWriter super;
-	ArtWindRule rule;
-	ArtSVP *svp;
-	int n_segs_max;
-	int *n_points_max;
-};
-
-static int
-art_svp_writer_rewind_add_segment(ArtSvpWriter *self, int wind_left,
-                                  int delta_wind, double x, double y) {
-	ArtSvpWriterRewind *swr = (ArtSvpWriterRewind *)self;
-	ArtSVP *svp;
-	ArtSVPSeg *seg;
-	art_boolean left_filled, right_filled;
-	int wind_right = wind_left + delta_wind;
-	int seg_num;
-	const int init_n_points_max = 4;
-
-	switch (swr->rule) {
-	case ART_WIND_RULE_NONZERO:
-		left_filled = (wind_left != 0);
-		right_filled = (wind_right != 0);
-		break;
-	case ART_WIND_RULE_INTERSECT:
-		left_filled = (wind_left > 1);
-		right_filled = (wind_right > 1);
-		break;
-	case ART_WIND_RULE_ODDEVEN:
-		left_filled = (wind_left & 1);
-		right_filled = (wind_right & 1);
-		break;
-	case ART_WIND_RULE_POSITIVE:
-		left_filled = (wind_left > 0);
-		right_filled = (wind_right > 0);
-		break;
-	default:
-		art_die("Unknown wind rule %d\n", swr->rule);
-	}
-	if (left_filled == right_filled) {
-		/* discard segment now */
-		return -1;
-	}
-
-	svp = swr->svp;
-	seg_num = svp->n_segs++;
-	if (swr->n_segs_max == seg_num) {
-		swr->n_segs_max <<= 1;
-		svp = (ArtSVP *)realloc(svp, sizeof(ArtSVP) +
-		                            (swr->n_segs_max - 1) *
-		                            sizeof(ArtSVPSeg));
-		swr->svp = svp;
-		swr->n_points_max = art_renew(swr->n_points_max, int,
-		                              swr->n_segs_max);
-	}
-	seg = &svp->segs[seg_num];
-	seg->n_points = 1;
-	seg->dir = right_filled;
-	swr->n_points_max[seg_num] = init_n_points_max;
-	seg->bbox.x0 = x;
-	seg->bbox.y0 = y;
-	seg->bbox.x1 = x;
-	seg->bbox.y1 = y;
-	seg->points = art_new(ArtPoint, init_n_points_max);
-	seg->points[0].x = x;
-	seg->points[0].y = y;
-	return seg_num;
-}
-
-static void
-art_svp_writer_rewind_add_point(ArtSvpWriter *self, int seg_id,
-                                double x, double y) {
-	ArtSvpWriterRewind *swr = (ArtSvpWriterRewind *)self;
-	ArtSVPSeg *seg;
-	int n_points;
-
-	if (seg_id < 0)
-		/* omitted segment */
-		return;
-
-	seg = &swr->svp->segs[seg_id];
-	n_points = seg->n_points++;
-	if (swr->n_points_max[seg_id] == n_points)
-		art_expand(seg->points, ArtPoint, swr->n_points_max[seg_id]);
-	seg->points[n_points].x = x;
-	seg->points[n_points].y = y;
-	if (x < seg->bbox.x0)
-		seg->bbox.x0 = x;
-	if (x > seg->bbox.x1)
-		seg->bbox.x1 = x;
-	seg->bbox.y1 = y;
-}
-
-static void
-art_svp_writer_rewind_close_segment(ArtSvpWriter *self, int seg_id) {
-	/* Not needed for this simple implementation. A potential future
-	   optimization is to merge segments that can be merged safely. */
-}
-
-ArtSVP *
-art_svp_writer_rewind_reap(ArtSvpWriter *self) {
-	ArtSvpWriterRewind *swr = (ArtSvpWriterRewind *)self;
-	ArtSVP *result = swr->svp;
-
-	free(swr->n_points_max);
-	free(swr);
-	return result;
-}
-
-ArtSvpWriter *
-art_svp_writer_rewind_new(ArtWindRule rule) {
-	ArtSvpWriterRewind *result = art_new(ArtSvpWriterRewind, 1);
-
-	result->super.add_segment = art_svp_writer_rewind_add_segment;
-	result->super.add_point = art_svp_writer_rewind_add_point;
-	result->super.close_segment = art_svp_writer_rewind_close_segment;
-
-	result->rule = rule;
-	result->n_segs_max = 16;
-	result->svp = (ArtSVP *)malloc(sizeof(ArtSVP) +
-	                                  (result->n_segs_max - 1) * sizeof(ArtSVPSeg));
-	result->svp->n_segs = 0;
-	result->n_points_max = art_new(int, result->n_segs_max);
-
-	return &result->super;
-}
-
-/* Now, data structures for the active list */
-
-typedef struct _ArtActiveSeg ArtActiveSeg;
-
-/* Note: BNEG is 1 for \ lines, and 0 for /. Thus,
-   x[(flags & BNEG) ^ 1] <= x[flags & BNEG] */
-#define ART_ACTIVE_FLAGS_BNEG 1
-
-/* This flag is set if the segment has been inserted into the active
-   list. */
-#define ART_ACTIVE_FLAGS_IN_ACTIVE 2
-
-/* This flag is set when the segment is to be deleted in the
-   horiz commit process. */
-#define ART_ACTIVE_FLAGS_DEL 4
-
-/* This flag is set if the seg_id is a valid output segment. */
-#define ART_ACTIVE_FLAGS_OUT 8
-
-/* This flag is set if the segment is in the horiz list. */
-#define ART_ACTIVE_FLAGS_IN_HORIZ 16
-
-struct _ArtActiveSeg {
-	int flags;
-	int wind_left, delta_wind;
-	ArtActiveSeg *left, *right; /* doubly linked list structure */
-
-	const ArtSVPSeg *in_seg;
-	int in_curs;
-
-	double x[2];
-	double y0, y1;
-	double a, b, c; /* line equation; ax+by+c = 0 for the line, a^2 + b^2 = 1,
-             and a>0 */
-
-	/* bottom point and intersection point stack */
-	int n_stack;
-	int n_stack_max;
-	ArtPoint *stack;
-
-	/* horiz commit list */
-	ArtActiveSeg *horiz_left, *horiz_right;
-	double horiz_x;
-	int horiz_delta_wind;
-	int seg_id;
-};
-
-typedef struct _ArtIntersectCtx ArtIntersectCtx;
-
-struct _ArtIntersectCtx {
-	const ArtSVP *in;
-	ArtSvpWriter *out;
-
-	ArtPriQ *pq;
-
-	ArtActiveSeg *active_head;
-
-	double y;
-	ArtActiveSeg *horiz_first;
-	ArtActiveSeg *horiz_last;
-
-	/* segment index of next input segment to be added to pri q */
-	int in_curs;
-};
-
-#define EPSILON_A 1e-5 /* Threshold for breaking lines at point insertions */
-
-/**
- * art_svp_intersect_setup_seg: Set up an active segment from input segment.
- * @seg: Active segment.
- * @pri_pt: Priority queue point to initialize.
- *
- * Sets the x[], a, b, c, flags, and stack fields according to the
- * line from the current cursor value. Sets the priority queue point
- * to the bottom point of this line. Also advances the input segment
- * cursor.
- **/
-static void
-art_svp_intersect_setup_seg(ArtActiveSeg *seg, ArtPriPoint *pri_pt) {
-	const ArtSVPSeg *in_seg = seg->in_seg;
-	int in_curs = seg->in_curs++;
-	double x0, y0, x1, y1;
-	double dx, dy, s;
-	double a, b, r2;
-
-	x0 = in_seg->points[in_curs].x;
-	y0 = in_seg->points[in_curs].y;
-	x1 = in_seg->points[in_curs + 1].x;
-	y1 = in_seg->points[in_curs + 1].y;
-	pri_pt->x = x1;
-	pri_pt->y = y1;
-	dx = x1 - x0;
-	dy = y1 - y0;
-	r2 = dx * dx + dy * dy;
-	s = r2 == 0 ? 1 : 1 / sqrt(r2);
-	seg->a = a = dy * s;
-	seg->b = b = -dx * s;
-	seg->c = -(a * x0 + b * y0);
-	seg->flags = (seg->flags & ~ART_ACTIVE_FLAGS_BNEG) | (dx > 0);
-	seg->x[0] = x0;
-	seg->x[1] = x1;
-	seg->y0 = y0;
-	seg->y1 = y1;
-	seg->n_stack = 1;
-	seg->stack[0].x = x1;
-	seg->stack[0].y = y1;
-}
-
-/**
- * art_svp_intersect_add_horiz: Add point to horizontal list.
- * @ctx: Intersector context.
- * @seg: Segment with point to insert into horizontal list.
- *
- * Inserts @seg into horizontal list, keeping it in ascending horiz_x
- * order.
- *
- * Note: the horiz_commit routine processes "clusters" of segs in the
- * horiz list, all sharing the same horiz_x value. The cluster is
- * processed in active list order, rather than horiz list order. Thus,
- * the order of segs in the horiz list sharing the same horiz_x
- * _should_ be irrelevant. Even so, we use b as a secondary sorting key,
- * as a "belt and suspenders" defensive coding tactic.
- **/
-static void
-art_svp_intersect_add_horiz(ArtIntersectCtx *ctx, ArtActiveSeg *seg) {
-	ArtActiveSeg **pp = &ctx->horiz_last;
-	ArtActiveSeg *place;
-	ArtActiveSeg *place_right = NULL;
-
-
-#ifdef CHEAP_SANITYCHECK
-	if (seg->flags & ART_ACTIVE_FLAGS_IN_HORIZ) {
-		art_warn("*** attempt to put segment in horiz list twice\n");
-		return;
-	}
-	seg->flags |= ART_ACTIVE_FLAGS_IN_HORIZ;
-#endif
-
-	for (place = *pp; place != NULL && (place->horiz_x > seg->horiz_x ||
-	                                    (place->horiz_x == seg->horiz_x &&
-	                                     place->b < seg->b));
-	        place = *pp) {
-		place_right = place;
-		pp = &place->horiz_left;
-	}
-	*pp = seg;
-	seg->horiz_left = place;
-	seg->horiz_right = place_right;
-	if (place == NULL)
-		ctx->horiz_first = seg;
-	else
-		place->horiz_right = seg;
-}
-
-static void
-art_svp_intersect_push_pt(ArtIntersectCtx *ctx, ArtActiveSeg *seg,
-                          double x, double y) {
-	ArtPriPoint *pri_pt;
-	int n_stack = seg->n_stack;
-
-	if (n_stack == seg->n_stack_max)
-		art_expand(seg->stack, ArtPoint, seg->n_stack_max);
-	seg->stack[n_stack].x = x;
-	seg->stack[n_stack].y = y;
-	seg->n_stack++;
-
-	seg->x[1] = x;
-	seg->y1 = y;
-
-	pri_pt = art_new(ArtPriPoint, 1);
-	pri_pt->x = x;
-	pri_pt->y = y;
-	pri_pt->user_data = seg;
-	art_pri_insert(ctx->pq, pri_pt);
-}
-
-typedef enum {
-	ART_BREAK_LEFT = 1,
-	ART_BREAK_RIGHT = 2
-} ArtBreakFlags;
-
-/**
- * art_svp_intersect_break: Break an active segment.
- *
- * Note: y must be greater than the top point's y, and less than
- * the bottom's.
- *
- * Return value: x coordinate of break point.
- */
-static double
-art_svp_intersect_break(ArtIntersectCtx *ctx, ArtActiveSeg *seg,
-                        double x_ref, double y, ArtBreakFlags break_flags) {
-	double x0, y0, x1, y1;
-	const ArtSVPSeg *in_seg = seg->in_seg;
-	int in_curs = seg->in_curs;
-	double x;
-
-	x0 = in_seg->points[in_curs - 1].x;
-	y0 = in_seg->points[in_curs - 1].y;
-	x1 = in_seg->points[in_curs].x;
-	y1 = in_seg->points[in_curs].y;
-	x = x0 + (x1 - x0) * ((y - y0) / (y1 - y0));
-	if ((break_flags == ART_BREAK_LEFT && x > x_ref) ||
-	        (break_flags == ART_BREAK_RIGHT && x < x_ref)) {
-	}
-
-	/* I think we can count on min(x0, x1) <= x <= max(x0, x1) with sane
-	   arithmetic, but it might be worthwhile to check just in case. */
-
-	if (y > ctx->y)
-		art_svp_intersect_push_pt(ctx, seg, x, y);
-	else {
-		seg->x[0] = x;
-		seg->y0 = y;
-		seg->horiz_x = x;
-		art_svp_intersect_add_horiz(ctx, seg);
-	}
-
-	return x;
-}
-
-/**
- * art_svp_intersect_add_point: Add a point, breaking nearby neighbors.
- * @ctx: Intersector context.
- * @x: X coordinate of point to add.
- * @y: Y coordinate of point to add.
- * @seg: "nearby" segment, or NULL if leftmost.
- *
- * Return value: Segment immediately to the left of the new point, or
- * NULL if the new point is leftmost.
- **/
-static ArtActiveSeg *
-art_svp_intersect_add_point(ArtIntersectCtx *ctx, double x, double y,
-                            ArtActiveSeg *seg, ArtBreakFlags break_flags) {
-	ArtActiveSeg *left, *right;
-	double x_min = x, x_max = x;
-	art_boolean left_live, right_live;
-	double d;
-	double new_x;
-	ArtActiveSeg *test, *result = NULL;
-	double x_test;
-
-	left = seg;
-	if (left == NULL)
-		right = ctx->active_head;
-	else
-		right = left->right;
-	left_live = (break_flags & ART_BREAK_LEFT) && (left != NULL);
-	right_live = (break_flags & ART_BREAK_RIGHT) && (right != NULL);
-	while (left_live || right_live) {
-		if (left_live) {
-			if (x <= left->x[left->flags & ART_ACTIVE_FLAGS_BNEG] &&
-			        /* It may be that one of these conjuncts turns out to be always
-			              true. We test both anyway, to be defensive. */
-			        y != left->y0 && y < left->y1) {
-				d = x_min * left->a + y * left->b + left->c;
-				if (d < EPSILON_A) {
-					new_x = art_svp_intersect_break(ctx, left, x_min, y,
-					                                ART_BREAK_LEFT);
-					if (new_x > x_max) {
-						x_max = new_x;
-						right_live = (right != NULL);
-					} else if (new_x < x_min)
-						x_min = new_x;
-					left = left->left;
-					left_live = (left != NULL);
-				} else
-					left_live = ART_FALSE;
-			} else
-				left_live = ART_FALSE;
-		} else if (right_live) {
-			if (x >= right->x[(right->flags & ART_ACTIVE_FLAGS_BNEG) ^ 1] &&
-			        /* It may be that one of these conjuncts turns out to be always
-			              true. We test both anyway, to be defensive. */
-			        y != right->y0 && y < right->y1) {
-				d = x_max * right->a + y * right->b + right->c;
-				if (d > -EPSILON_A) {
-					new_x = art_svp_intersect_break(ctx, right, x_max, y,
-					                                ART_BREAK_RIGHT);
-					if (new_x < x_min) {
-						x_min = new_x;
-						left_live = (left != NULL);
-					} else if (new_x >= x_max)
-						x_max = new_x;
-					right = right->right;
-					right_live = (right != NULL);
-				} else
-					right_live = ART_FALSE;
-			} else
-				right_live = ART_FALSE;
-		}
-	}
-
-	/* Ascending order is guaranteed by break_flags. Thus, we don't need
-	   to actually fix up non-ascending pairs. */
-
-	/* Now, (left, right) defines an interval of segments broken. Sort
-	   into ascending x order. */
-	test = left == NULL ? ctx->active_head : left->right;
-	result = left;
-	if (test != NULL && test != right) {
-		if (y == test->y0)
-			x_test = test->x[0];
-		else /* assert y == test->y1, I think */
-			x_test = test->x[1];
-		for (;;) {
-			if (x_test <= x)
-				result = test;
-			test = test->right;
-			if (test == right)
-				break;
-			new_x = x_test;
-			if (new_x < x_test) {
-				art_warn("art_svp_intersect_add_point: non-ascending x\n");
-			}
-			x_test = new_x;
-		}
-	}
-	return result;
-}
-
-static void
-art_svp_intersect_swap_active(ArtIntersectCtx *ctx,
-                              ArtActiveSeg *left_seg, ArtActiveSeg *right_seg) {
-	right_seg->left = left_seg->left;
-	if (right_seg->left != NULL)
-		right_seg->left->right = right_seg;
-	else
-		ctx->active_head = right_seg;
-	left_seg->right = right_seg->right;
-	if (left_seg->right != NULL)
-		left_seg->right->left = left_seg;
-	left_seg->left = right_seg;
-	right_seg->right = left_seg;
-}
-
-/**
- * art_svp_intersect_test_cross: Test crossing of a pair of active segments.
- * @ctx: Intersector context.
- * @left_seg: Left segment of the pair.
- * @right_seg: Right segment of the pair.
- * @break_flags: Flags indicating whether to break neighbors.
- *
- * Tests crossing of @left_seg and @right_seg. If there is a crossing,
- * inserts the intersection point into both segments.
- *
- * Return value: True if the intersection took place at the current
- * scan line, indicating further iteration is needed.
- **/
-static art_boolean
-art_svp_intersect_test_cross(ArtIntersectCtx *ctx,
-                             ArtActiveSeg *left_seg, ArtActiveSeg *right_seg,
-                             ArtBreakFlags break_flags) {
-	double left_x0, left_y0, left_x1;
-	double left_y1 = left_seg->y1;
-	double right_y1 = right_seg->y1;
-	double d;
-
-	const ArtSVPSeg *in_seg;
-	int in_curs;
-	double d0, d1, t;
-	double x, y; /* intersection point */
-
-	if (left_seg->y0 == right_seg->y0 && left_seg->x[0] == right_seg->x[0]) {
-		/* Top points of left and right segments coincide. This case
-		     feels like a bit of duplication - we may want to merge it
-		     with the cases below. However, this way, we're sure that this
-		     logic makes only localized changes. */
-
-		if (left_y1 < right_y1) {
-			/* Test left (x1, y1) against right segment */
-			left_x1 = left_seg->x[1];
-
-			if (left_x1 <
-			        right_seg->x[(right_seg->flags & ART_ACTIVE_FLAGS_BNEG) ^ 1] ||
-			        left_y1 == right_seg->y0)
-				return ART_FALSE;
-			d = left_x1 * right_seg->a + left_y1 * right_seg->b + right_seg->c;
-			if (d < -EPSILON_A)
-				return ART_FALSE;
-			else if (d < EPSILON_A) {
-				/* I'm unsure about the break flags here. */
-				double right_x1 = art_svp_intersect_break(ctx, right_seg,
-				                  left_x1, left_y1,
-				                  ART_BREAK_RIGHT);
-				if (left_x1 <= right_x1)
-					return ART_FALSE;
-			}
-		} else if (left_y1 > right_y1) {
-			/* Test right (x1, y1) against left segment */
-			double right_x1 = right_seg->x[1];
-
-			if (right_x1 > left_seg->x[left_seg->flags & ART_ACTIVE_FLAGS_BNEG] ||
-			        right_y1 == left_seg->y0)
-				return ART_FALSE;
-			d = right_x1 * left_seg->a + right_y1 * left_seg->b + left_seg->c;
-			if (d > EPSILON_A)
-				return ART_FALSE;
-			else if (d > -EPSILON_A) {
-				/* See above regarding break flags. */
-				left_x1 = art_svp_intersect_break(ctx, left_seg,
-				                 right_x1, right_y1,
-				                 ART_BREAK_LEFT);
-				if (left_x1 <= right_x1)
-					return ART_FALSE;
-			}
-		} else { /* left_y1 == right_y1 */
-			left_x1 = left_seg->x[1];
-			double right_x1 = right_seg->x[1];
-
-			if (left_x1 <= right_x1)
-				return ART_FALSE;
-		}
-		art_svp_intersect_swap_active(ctx, left_seg, right_seg);
-		return ART_TRUE;
-	}
-
-	if (left_y1 < right_y1) {
-		/* Test left (x1, y1) against right segment */
-		left_x1 = left_seg->x[1];
-
-		if (left_x1 <
-		        right_seg->x[(right_seg->flags & ART_ACTIVE_FLAGS_BNEG) ^ 1] ||
-		        left_y1 == right_seg->y0)
-			return ART_FALSE;
-		d = left_x1 * right_seg->a + left_y1 * right_seg->b + right_seg->c;
-		if (d < -EPSILON_A)
-			return ART_FALSE;
-		else if (d < EPSILON_A) {
-			double right_x1 = art_svp_intersect_break(ctx, right_seg,
-			                  left_x1, left_y1,
-			                  ART_BREAK_RIGHT);
-			if (left_x1 <= right_x1)
-				return ART_FALSE;
-		}
-	} else if (left_y1 > right_y1) {
-		/* Test right (x1, y1) against left segment */
-		double right_x1 = right_seg->x[1];
-
-		if (right_x1 > left_seg->x[left_seg->flags & ART_ACTIVE_FLAGS_BNEG] ||
-		        right_y1 == left_seg->y0)
-			return ART_FALSE;
-		d = right_x1 * left_seg->a + right_y1 * left_seg->b + left_seg->c;
-		if (d > EPSILON_A)
-			return ART_FALSE;
-		else if (d > -EPSILON_A) {
-			left_x1 = art_svp_intersect_break(ctx, left_seg,
-			                 right_x1, right_y1,
-			                 ART_BREAK_LEFT);
-			if (left_x1 <= right_x1)
-				return ART_FALSE;
-		}
-	} else { /* left_y1 == right_y1 */
-		left_x1 = left_seg->x[1];
-		double right_x1 = right_seg->x[1];
-
-		if (left_x1 <= right_x1)
-			return ART_FALSE;
-	}
-
-	/* The segments cross. Find the intersection point. */
-
-	in_seg = left_seg->in_seg;
-	in_curs = left_seg->in_curs;
-	left_x0 = in_seg->points[in_curs - 1].x;
-	left_y0 = in_seg->points[in_curs - 1].y;
-	left_x1 = in_seg->points[in_curs].x;
-	left_y1 = in_seg->points[in_curs].y;
-	d0 = left_x0 * right_seg->a + left_y0 * right_seg->b + right_seg->c;
-	d1 = left_x1 * right_seg->a + left_y1 * right_seg->b + right_seg->c;
-	if (d0 == d1) {
-		x = left_x0;
-		y = left_y0;
-	} else {
-		/* Is this division always safe? It could possibly overflow. */
-		t = d0 / (d0 - d1);
-		if (t <= 0) {
-			x = left_x0;
-			y = left_y0;
-		} else if (t >= 1) {
-			x = left_x1;
-			y = left_y1;
-		} else {
-			x = left_x0 + t * (left_x1 - left_x0);
-			y = left_y0 + t * (left_y1 - left_y0);
-		}
-	}
-
-	/* Make sure intersection point is within bounds of right seg. */
-	if (y < right_seg->y0) {
-		x = right_seg->x[0];
-		y = right_seg->y0;
-	} else if (y > right_seg->y1) {
-		x = right_seg->x[1];
-		y = right_seg->y1;
-	} else if (x < right_seg->x[(right_seg->flags & ART_ACTIVE_FLAGS_BNEG) ^ 1])
-		x = right_seg->x[(right_seg->flags & ART_ACTIVE_FLAGS_BNEG) ^ 1];
-	else if (x > right_seg->x[right_seg->flags & ART_ACTIVE_FLAGS_BNEG])
-		x = right_seg->x[right_seg->flags & ART_ACTIVE_FLAGS_BNEG];
-
-	if (y == left_seg->y0) {
-		if (y != right_seg->y0) {
-			art_svp_intersect_push_pt(ctx, right_seg, x, y);
-			if ((break_flags & ART_BREAK_RIGHT) && right_seg->right != NULL)
-				art_svp_intersect_add_point(ctx, x, y, right_seg->right,
-				                            break_flags);
-		} else {
-			/* Intersection takes place at current scan line; process
-			   immediately rather than queueing intersection point into
-			   priq. */
-			ArtActiveSeg *winner, *loser;
-
-			/* Choose "most vertical" segement */
-			if (left_seg->a > right_seg->a) {
-				winner = left_seg;
-				loser = right_seg;
-			} else {
-				winner = right_seg;
-				loser = left_seg;
-			}
-
-			loser->x[0] = winner->x[0];
-			loser->horiz_x = loser->x[0];
-			loser->horiz_delta_wind += loser->delta_wind;
-			winner->horiz_delta_wind -= loser->delta_wind;
-
-			art_svp_intersect_swap_active(ctx, left_seg, right_seg);
-			return ART_TRUE;
-		}
-	} else if (y == right_seg->y0) {
-		art_svp_intersect_push_pt(ctx, left_seg, x, y);
-		if ((break_flags & ART_BREAK_LEFT) && left_seg->left != NULL)
-			art_svp_intersect_add_point(ctx, x, y, left_seg->left,
-			                            break_flags);
-	} else {
-		/* Insert the intersection point into both segments. */
-		art_svp_intersect_push_pt(ctx, left_seg, x, y);
-		art_svp_intersect_push_pt(ctx, right_seg, x, y);
-		if ((break_flags & ART_BREAK_LEFT) && left_seg->left != NULL)
-			art_svp_intersect_add_point(ctx, x, y, left_seg->left, break_flags);
-		if ((break_flags & ART_BREAK_RIGHT) && right_seg->right != NULL)
-			art_svp_intersect_add_point(ctx, x, y, right_seg->right, break_flags);
-	}
-	return ART_FALSE;
-}
-
-/**
- * art_svp_intersect_active_delete: Delete segment from active list.
- * @ctx: Intersection context.
- * @seg: Segment to delete.
- *
- * Deletes @seg from the active list.
- **/
-static /* todo inline */ void
-art_svp_intersect_active_delete(ArtIntersectCtx *ctx, ArtActiveSeg *seg) {
-	ArtActiveSeg *left = seg->left, *right = seg->right;
-
-	if (left != NULL)
-		left->right = right;
-	else
-		ctx->active_head = right;
-	if (right != NULL)
-		right->left = left;
-}
-
-/**
- * art_svp_intersect_active_free: Free an active segment.
- * @seg: Segment to delete.
- *
- * Frees @seg.
- **/
-static /* todo inline */ void
-art_svp_intersect_active_free(ArtActiveSeg *seg) {
-	free(seg->stack);
-	free(seg);
-}
-
-/**
- * art_svp_intersect_insert_cross: Test crossings of newly inserted line.
- *
- * Tests @seg against its left and right neighbors for intersections.
- * Precondition: the line in @seg is not purely horizontal.
- **/
-static void
-art_svp_intersect_insert_cross(ArtIntersectCtx *ctx,
-                               ArtActiveSeg *seg) {
-	ArtActiveSeg *left = seg, *right = seg;
-
-	for (;;) {
-		if (left != NULL) {
-			ArtActiveSeg *leftc;
-
-			for (leftc = left->left; leftc != NULL; leftc = leftc->left)
-				if (!(leftc->flags & ART_ACTIVE_FLAGS_DEL))
-					break;
-			if (leftc != NULL &&
-			        art_svp_intersect_test_cross(ctx, leftc, left,
-			                                     ART_BREAK_LEFT)) {
-				if (left == right || right == NULL)
-					right = left->right;
-			} else {
-				left = NULL;
-			}
-		} else if (right != NULL && right->right != NULL) {
-			ArtActiveSeg *rightc;
-
-			for (rightc = right->right; rightc != NULL; rightc = rightc->right)
-				if (!(rightc->flags & ART_ACTIVE_FLAGS_DEL))
-					break;
-			if (rightc != NULL &&
-			        art_svp_intersect_test_cross(ctx, right, rightc,
-			                                     ART_BREAK_RIGHT)) {
-				if (left == right || left == NULL)
-					left = right->left;
-			} else {
-				right = NULL;
-			}
-		} else
-			break;
-	}
-}
-
-/**
- * art_svp_intersect_horiz: Add horizontal line segment.
- * @ctx: Intersector context.
- * @seg: Segment on which to add horizontal line.
- * @x0: Old x position.
- * @x1: New x position.
- *
- * Adds a horizontal line from @x0 to @x1, and updates the current
- * location of @seg to @x1.
- **/
-static void
-art_svp_intersect_horiz(ArtIntersectCtx *ctx, ArtActiveSeg *seg,
-                        double x0, double x1) {
-	ArtActiveSeg *hs;
-
-	if (x0 == x1)
-		return;
-
-	hs = art_new(ArtActiveSeg, 1);
-
-	hs->flags = ART_ACTIVE_FLAGS_DEL | (seg->flags & ART_ACTIVE_FLAGS_OUT);
-	if (seg->flags & ART_ACTIVE_FLAGS_OUT) {
-		ArtSvpWriter *swr = ctx->out;
-
-		swr->add_point(swr, seg->seg_id, x0, ctx->y);
-	}
-	hs->seg_id = seg->seg_id;
-	hs->horiz_x = x0;
-	hs->horiz_delta_wind = seg->delta_wind;
-	hs->stack = NULL;
-
-	/* Ideally, the (a, b, c) values will never be read. However, there
-	   are probably some tests remaining that don't check for _DEL
-	   before evaluating the line equation. For those, these
-	   initializations will at least prevent a UMR of the values, which
-	   can crash on some platforms. */
-	hs->a = 0.0;
-	hs->b = 0.0;
-	hs->c = 0.0;
-
-	seg->horiz_delta_wind -= seg->delta_wind;
-
-	art_svp_intersect_add_horiz(ctx, hs);
-
-	if (x0 > x1) {
-		ArtActiveSeg *left;
-		art_boolean first = ART_TRUE;
-
-		for (left = seg->left; left != NULL; left = seg->left) {
-			int left_bneg = left->flags & ART_ACTIVE_FLAGS_BNEG;
-
-			if (left->x[left_bneg] <= x1)
-				break;
-			if (left->x[left_bneg ^ 1] <= x1 &&
-			        x1 *left->a + ctx->y *left->b + left->c >= 0)
-				break;
-			if (left->y0 != ctx->y && left->y1 != ctx->y) {
-				art_svp_intersect_break(ctx, left, x1, ctx->y, ART_BREAK_LEFT);
-			}
-			art_svp_intersect_swap_active(ctx, left, seg);
-			if (first && left->right != NULL) {
-				art_svp_intersect_test_cross(ctx, left, left->right,
-				                             ART_BREAK_RIGHT);
-				first = ART_FALSE;
-			}
-		}
-	} else {
-		ArtActiveSeg *right;
-		art_boolean first = ART_TRUE;
-
-		for (right = seg->right; right != NULL; right = seg->right) {
-			int right_bneg = right->flags & ART_ACTIVE_FLAGS_BNEG;
-
-			if (right->x[right_bneg ^ 1] >= x1)
-				break;
-			if (right->x[right_bneg] >= x1 &&
-			        x1 *right->a + ctx->y *right->b + right->c <= 0)
-				break;
-			if (right->y0 != ctx->y && right->y1 != ctx->y) {
-				art_svp_intersect_break(ctx, right, x1, ctx->y,
-				                        ART_BREAK_LEFT);
-			}
-			art_svp_intersect_swap_active(ctx, seg, right);
-			if (first && right->left != NULL) {
-				art_svp_intersect_test_cross(ctx, right->left, right,
-				                             ART_BREAK_RIGHT);
-				first = ART_FALSE;
-			}
-		}
-	}
-
-	seg->x[0] = x1;
-	seg->x[1] = x1;
-	seg->horiz_x = x1;
-	seg->flags &= ~ART_ACTIVE_FLAGS_OUT;
-}
-
-/**
- * art_svp_intersect_insert_line: Insert a line into the active list.
- * @ctx: Intersector context.
- * @seg: Segment containing line to insert.
- *
- * Inserts the line into the intersector context, taking care of any
- * intersections, and adding the appropriate horizontal points to the
- * active list.
- **/
-static void
-art_svp_intersect_insert_line(ArtIntersectCtx *ctx, ArtActiveSeg *seg) {
-	if (seg->y1 == seg->y0) {
-		art_svp_intersect_horiz(ctx, seg, seg->x[0], seg->x[1]);
-	} else {
-		art_svp_intersect_insert_cross(ctx, seg);
-		art_svp_intersect_add_horiz(ctx, seg);
-	}
-}
-
-static void
-art_svp_intersect_process_intersection(ArtIntersectCtx *ctx,
-                                       ArtActiveSeg *seg) {
-	int n_stack = --seg->n_stack;
-	seg->x[1] = seg->stack[n_stack - 1].x;
-	seg->y1 = seg->stack[n_stack - 1].y;
-	seg->x[0] = seg->stack[n_stack].x;
-	seg->y0 = seg->stack[n_stack].y;
-	seg->horiz_x = seg->x[0];
-	art_svp_intersect_insert_line(ctx, seg);
-}
-
-static void
-art_svp_intersect_advance_cursor(ArtIntersectCtx *ctx, ArtActiveSeg *seg,
-                                 ArtPriPoint *pri_pt) {
-	const ArtSVPSeg *in_seg = seg->in_seg;
-	int in_curs = seg->in_curs;
-	ArtSvpWriter *swr = seg->flags & ART_ACTIVE_FLAGS_OUT ? ctx->out : NULL;
-
-	if (swr != NULL)
-		swr->add_point(swr, seg->seg_id, seg->x[1], seg->y1);
-	if (in_curs + 1 == in_seg->n_points) {
-		ArtActiveSeg *left = seg->left, *right = seg->right;
-
-#if 0
-		if (swr != NULL)
-			swr->close_segment(swr, seg->seg_id);
-		seg->flags &= ~ART_ACTIVE_FLAGS_OUT;
-#endif
-		seg->flags |= ART_ACTIVE_FLAGS_DEL;
-		art_svp_intersect_add_horiz(ctx, seg);
-		art_svp_intersect_active_delete(ctx, seg);
-		if (left != NULL && right != NULL)
-			art_svp_intersect_test_cross(ctx, left, right,
-			                             (ArtBreakFlags)(ART_BREAK_LEFT | ART_BREAK_RIGHT));
-		free(pri_pt);
-	} else {
-		seg->horiz_x = seg->x[1];
-
-		art_svp_intersect_setup_seg(seg, pri_pt);
-		art_pri_insert(ctx->pq, pri_pt);
-		art_svp_intersect_insert_line(ctx, seg);
-	}
-}
-
-static void
-art_svp_intersect_add_seg(ArtIntersectCtx *ctx, const ArtSVPSeg *in_seg) {
-	ArtActiveSeg *seg = art_new(ArtActiveSeg, 1);
-	ArtActiveSeg *test;
-	double x0, y0;
-	ArtActiveSeg *beg_range;
-	ArtActiveSeg *last = NULL;
-	ArtActiveSeg *left, *right;
-	ArtPriPoint *pri_pt = art_new(ArtPriPoint, 1);
-
-	seg->flags = 0;
-	seg->in_seg = in_seg;
-	seg->in_curs = 0;
-
-	seg->n_stack_max = 4;
-	seg->stack = art_new(ArtPoint, seg->n_stack_max);
-
-	seg->horiz_delta_wind = 0;
-
-	seg->wind_left = 0;
-
-	pri_pt->user_data = seg;
-	art_svp_intersect_setup_seg(seg, pri_pt);
-	art_pri_insert(ctx->pq, pri_pt);
-
-	/* Find insertion place for new segment */
-	/* This is currently a left-to-right scan, but should be replaced
-	   with a binary search as soon as it's validated. */
-
-	x0 = in_seg->points[0].x;
-	y0 = in_seg->points[0].y;
-	beg_range = NULL;
-	for (test = ctx->active_head; test != NULL; test = test->right) {
-		double d;
-		int test_bneg = test->flags & ART_ACTIVE_FLAGS_BNEG;
-
-		if (x0 < test->x[test_bneg]) {
-			if (x0 < test->x[test_bneg ^ 1])
-				break;
-			d = x0 * test->a + y0 * test->b + test->c;
-			if (d < 0)
-				break;
-		}
-		last = test;
-	}
-
-	left = art_svp_intersect_add_point(ctx, x0, y0, last, (ArtBreakFlags)(ART_BREAK_LEFT | ART_BREAK_RIGHT));
-	seg->left = left;
-	if (left == NULL) {
-		right = ctx->active_head;
-		ctx->active_head = seg;
-	} else {
-		right = left->right;
-		left->right = seg;
-	}
-	seg->right = right;
-	if (right != NULL)
-		right->left = seg;
-
-	seg->delta_wind = in_seg->dir ? 1 : -1;
-	seg->horiz_x = x0;
-
-	art_svp_intersect_insert_line(ctx, seg);
-}
-
-/**
- * art_svp_intersect_horiz_commit: Commit points in horiz list to output.
- * @ctx: Intersection context.
- *
- * The main function of the horizontal commit is to output new
- * points to the output writer.
- *
- * This "commit" pass is also where winding numbers are assigned,
- * because doing it here provides much greater tolerance for inputs
- * which are not in strict SVP order.
- *
- * Each cluster in the horiz_list contains both segments that are in
- * the active list (ART_ACTIVE_FLAGS_DEL is false) and that are not,
- * and are scheduled to be deleted (ART_ACTIVE_FLAGS_DEL is true). We
- * need to deal with both.
- **/
-static void
-art_svp_intersect_horiz_commit(ArtIntersectCtx *ctx) {
-	ArtActiveSeg *seg;
-	int winding_number = 0; /* initialization just to avoid warning */
-	int horiz_wind = 0;
-	double last_x = 0; /* initialization just to avoid warning */
-
-	/* Output points to svp writer. */
-	for (seg = ctx->horiz_first; seg != NULL;) {
-		/* Find a cluster with common horiz_x, */
-		ArtActiveSeg *curs;
-		double x = seg->horiz_x;
-
-		/* Generate any horizontal segments. */
-		if (horiz_wind != 0) {
-			ArtSvpWriter *swr = ctx->out;
-			int seg_id;
-
-			seg_id = swr->add_segment(swr, winding_number, horiz_wind,
-			                          last_x, ctx->y);
-			swr->add_point(swr, seg_id, x, ctx->y);
-			swr->close_segment(swr, seg_id);
-		}
-
-		/* Find first active segment in cluster. */
-
-		for (curs = seg; curs != NULL && curs->horiz_x == x;
-		        curs = curs->horiz_right)
-			if (!(curs->flags & ART_ACTIVE_FLAGS_DEL))
-				break;
-
-		if (curs != NULL && curs->horiz_x == x) {
-			/* There exists at least one active segment in this cluster. */
-
-			/* Find beginning of cluster. */
-			for (; curs->left != NULL; curs = curs->left)
-				if (curs->left->horiz_x != x)
-					break;
-
-			if (curs->left != NULL)
-				winding_number = curs->left->wind_left + curs->left->delta_wind;
-			else
-				winding_number = 0;
-
-			do {
-				if (!(curs->flags & ART_ACTIVE_FLAGS_OUT) ||
-				        curs->wind_left != winding_number) {
-					ArtSvpWriter *swr = ctx->out;
-
-					if (curs->flags & ART_ACTIVE_FLAGS_OUT) {
-						swr->add_point(swr, curs->seg_id,
-						               curs->horiz_x, ctx->y);
-						swr->close_segment(swr, curs->seg_id);
-					}
-
-					curs->seg_id = swr->add_segment(swr, winding_number,
-					                                curs->delta_wind,
-					                                x, ctx->y);
-					curs->flags |= ART_ACTIVE_FLAGS_OUT;
-				}
-				curs->wind_left = winding_number;
-				winding_number += curs->delta_wind;
-				curs = curs->right;
-			} while (curs != NULL && curs->horiz_x == x);
-		}
-
-		/* Skip past cluster. */
-		do {
-			ArtActiveSeg *next = seg->horiz_right;
-
-			seg->flags &= ~ART_ACTIVE_FLAGS_IN_HORIZ;
-			horiz_wind += seg->horiz_delta_wind;
-			seg->horiz_delta_wind = 0;
-			if (seg->flags & ART_ACTIVE_FLAGS_DEL) {
-				if (seg->flags & ART_ACTIVE_FLAGS_OUT) {
-					ArtSvpWriter *swr = ctx->out;
-					swr->close_segment(swr, seg->seg_id);
-				}
-				art_svp_intersect_active_free(seg);
-			}
-			seg = next;
-		} while (seg != NULL && seg->horiz_x == x);
-
-		last_x = x;
-	}
-	ctx->horiz_first = NULL;
-	ctx->horiz_last = NULL;
-}
-
-void
-art_svp_intersector(const ArtSVP *in, ArtSvpWriter *out) {
-	ArtIntersectCtx *ctx;
-	ArtPriQ *pq;
-	ArtPriPoint *first_point;
-
-	if (in->n_segs == 0)
-		return;
-
-	ctx = art_new(ArtIntersectCtx, 1);
-	ctx->in = in;
-	ctx->out = out;
-	pq = art_pri_new();
-	ctx->pq = pq;
-
-	ctx->active_head = NULL;
-
-	ctx->horiz_first = NULL;
-	ctx->horiz_last = NULL;
-
-	ctx->in_curs = 0;
-	first_point = art_new(ArtPriPoint, 1);
-	first_point->x = in->segs[0].points[0].x;
-	first_point->y = in->segs[0].points[0].y;
-	first_point->user_data = NULL;
-	ctx->y = first_point->y;
-	art_pri_insert(pq, first_point);
-
-	while (!art_pri_empty(pq)) {
-		ArtPriPoint *pri_point = art_pri_choose(pq);
-		ArtActiveSeg *seg = (ArtActiveSeg *)pri_point->user_data;
-
-		if (ctx->y != pri_point->y) {
-			art_svp_intersect_horiz_commit(ctx);
-			ctx->y = pri_point->y;
-		}
-
-		if (seg == NULL) {
-			/* Insert new segment from input */
-			const ArtSVPSeg *in_seg = &in->segs[ctx->in_curs++];
-			art_svp_intersect_add_seg(ctx, in_seg);
-			if (ctx->in_curs < in->n_segs) {
-				const ArtSVPSeg *next_seg = &in->segs[ctx->in_curs];
-				pri_point->x = next_seg->points[0].x;
-				pri_point->y = next_seg->points[0].y;
-				/* user_data is already NULL */
-				art_pri_insert(pq, pri_point);
-			} else
-				free(pri_point);
-		} else {
-			int n_stack = seg->n_stack;
-
-			if (n_stack > 1) {
-				art_svp_intersect_process_intersection(ctx, seg);
-				free(pri_point);
-			} else {
-				art_svp_intersect_advance_cursor(ctx, seg, pri_point);
-			}
-		}
-	}
-
-	art_svp_intersect_horiz_commit(ctx);
-
-	art_pri_free(pq);
-	free(ctx);
-}

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_intersect.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,58 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 2001 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __ART_SVP_INTERSECT_H__
-#define __ART_SVP_INTERSECT_H__
-
-/* The funky new SVP intersector. */
-
-#include "art.h"
-
-#ifndef ART_WIND_RULE_DEFINED
-#define ART_WIND_RULE_DEFINED
-typedef enum {
-	ART_WIND_RULE_NONZERO,
-	ART_WIND_RULE_INTERSECT,
-	ART_WIND_RULE_ODDEVEN,
-	ART_WIND_RULE_POSITIVE
-} ArtWindRule;
-#endif
-
-typedef struct _ArtSvpWriter ArtSvpWriter;
-
-struct _ArtSvpWriter {
-	int (*add_segment)(ArtSvpWriter *self, int wind_left, int delta_wind,
-	                   double x, double y);
-	void (*add_point)(ArtSvpWriter *self, int seg_id, double x, double y);
-	void (*close_segment)(ArtSvpWriter *self, int seg_id);
-};
-
-ArtSvpWriter *
-art_svp_writer_rewind_new(ArtWindRule rule);
-
-ArtSVP *
-art_svp_writer_rewind_reap(ArtSvpWriter *self);
-
-int
-art_svp_seg_compare(const void *s1, const void *s2);
-
-void
-art_svp_intersector(const ArtSVP *in, ArtSvpWriter *out);
-
-#endif /* __ART_SVP_INTERSECT_H__ */

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.cpp
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.cpp	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.cpp	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,428 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998-2000 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* The spiffy antialiased renderer for sorted vector paths. */
-
-#include "art.h"
-#include "art_svp_render_aa.h"
-
-#include <math.h>
-#include <string.h> /* for memmove */
-
-#include <stdio.h>
-
-typedef double artfloat;
-
-struct _ArtSVPRenderAAIter {
-	const ArtSVP *svp;
-	int x0, x1;
-	int y;
-	int seg_ix;
-
-	int *active_segs;
-	int n_active_segs;
-	int *cursor;
-	artfloat *seg_x;
-	artfloat *seg_dx;
-
-	ArtSVPRenderAAStep *steps;
-};
-
-static void
-art_svp_render_insert_active(int i, int *active_segs, int n_active_segs,
-                             artfloat *seg_x, artfloat *seg_dx) {
-	int j;
-	artfloat x;
-	int tmp1, tmp2;
-
-	/* this is a cheap hack to get ^'s sorted correctly */
-	x = seg_x[i] + 0.001 * seg_dx[i];
-	for (j = 0; j < n_active_segs && seg_x[active_segs[j]] < x; j++);
-
-	tmp1 = i;
-	while (j < n_active_segs) {
-		tmp2 = active_segs[j];
-		active_segs[j] = tmp1;
-		tmp1 = tmp2;
-		j++;
-	}
-	active_segs[j] = tmp1;
-}
-
-static void
-art_svp_render_delete_active(int *active_segs, int j, int n_active_segs) {
-	int k;
-
-	for (k = j; k < n_active_segs; k++)
-		active_segs[k] = active_segs[k + 1];
-}
-
-#define EPSILON 1e-6
-
-/* Render the sorted vector path in the given rectangle, antialiased.
-
-   This interface uses a callback for the actual pixel rendering. The
-   callback is called y1 - y0 times (once for each scan line). The y
-   coordinate is given as an argument for convenience (it could be
-   stored in the callback's private data and incremented on each
-   call).
-
-   The rendered polygon is represented in a semi-runlength format: a
-   start value and a sequence of "steps". Each step has an x
-   coordinate and a value delta. The resulting value at position x is
-   equal to the sum of the start value and all step delta values for
-   which the step x coordinate is less than or equal to x. An
-   efficient algorithm will traverse the steps left to right, keeping
-   a running sum.
-
-   All x coordinates in the steps are guaranteed to be x0 <= x < x1.
-   (This guarantee is a change from the gfonted vpaar renderer, and is
-   designed to simplify the callback).
-
-   There is now a further guarantee that no two steps will have the
-   same x value. This may allow for further speedup and simplification
-   of renderers.
-
-   The value 0x8000 represents 0% coverage by the polygon, while
-   0xff8000 represents 100% coverage. This format is designed so that
-   >> 16 results in a standard 0x00..0xff value range, with nice
-   rounding.
-
-   Status of this routine:
-
-   Basic correctness: OK
-
-   Numerical stability: pretty good, although probably not
-   bulletproof.
-
-   Speed: Needs more aggressive culling of bounding boxes.  Can
-   probably speed up the [x0,x1) clipping of step values.  Can do more
-   of the step calculation in fixed point.
-
-   Precision: No known problems, although it should be tested
-   thoroughly, especially for symmetry.
-
-*/
-
-ArtSVPRenderAAIter *
-art_svp_render_aa_iter(const ArtSVP *svp,
-                       int x0, int y0, int x1, int y1) {
-	ArtSVPRenderAAIter *iter = art_new(ArtSVPRenderAAIter, 1);
-
-	iter->svp = svp;
-	iter->y = y0;
-	iter->x0 = x0;
-	iter->x1 = x1;
-	iter->seg_ix = 0;
-
-	iter->active_segs = art_new(int, svp->n_segs);
-	iter->cursor = art_new(int, svp->n_segs);
-	iter->seg_x = art_new(artfloat, svp->n_segs);
-	iter->seg_dx = art_new(artfloat, svp->n_segs);
-	iter->steps = art_new(ArtSVPRenderAAStep, x1 - x0);
-	iter->n_active_segs = 0;
-
-	return iter;
-}
-
-#define ADD_STEP(xpos, xdelta)                          \
-	/* stereotype code fragment for adding a step */      \
-	if (n_steps == 0 || steps[n_steps - 1].x < xpos)      \
-	{                                                   \
-		sx = n_steps;                                     \
-		steps[sx].x = xpos;                               \
-		steps[sx].delta = xdelta;                         \
-		n_steps++;                                        \
-	}                                                   \
-	else                                                  \
-	{                                                   \
-		for (sx = n_steps; sx > 0; sx--)                  \
-		{                                               \
-			if (steps[sx - 1].x == xpos)                  \
-			{                                           \
-				steps[sx - 1].delta += xdelta;            \
-				sx = n_steps;                             \
-				break;                                    \
-			}                                           \
-			else if (steps[sx - 1].x < xpos)              \
-			{                                           \
-				break;                                    \
-			}                                           \
-		}                                               \
-		if (sx < n_steps)                                 \
-		{                                               \
-			memmove (&steps[sx + 1], &steps[sx],          \
-			         (n_steps - sx) * sizeof(steps[0]));  \
-			steps[sx].x = xpos;                           \
-			steps[sx].delta = xdelta;                     \
-			n_steps++;                                    \
-		}                                               \
-	}
-
-void
-art_svp_render_aa_iter_step(ArtSVPRenderAAIter *iter, int *p_start,
-                            ArtSVPRenderAAStep **p_steps, int *p_n_steps) {
-	const ArtSVP *svp = iter->svp;
-	int *active_segs = iter->active_segs;
-	int n_active_segs = iter->n_active_segs;
-	int *cursor = iter->cursor;
-	artfloat *seg_x = iter->seg_x;
-	artfloat *seg_dx = iter->seg_dx;
-	int i = iter->seg_ix;
-	int j;
-	int x0 = iter->x0;
-	int x1 = iter->x1;
-	int y = iter->y;
-	int seg_index;
-
-	int x;
-	ArtSVPRenderAAStep *steps = iter->steps;
-	int n_steps;
-	artfloat y_top, y_bot;
-	artfloat x_top, x_bot;
-	artfloat x_min, x_max;
-	int ix_min, ix_max;
-	artfloat delta; /* delta should be int too? */
-	int last, this_;
-	int xdelta;
-	artfloat rslope, drslope;
-	int start;
-	const ArtSVPSeg *seg;
-	int curs;
-	artfloat dy;
-
-	int sx;
-
-	/* insert new active segments */
-	for (; i < svp->n_segs && svp->segs[i].bbox.y0 < y + 1; i++) {
-		if (svp->segs[i].bbox.y1 > y &&
-		        svp->segs[i].bbox.x0 < x1) {
-			seg = &svp->segs[i];
-			/* move cursor to topmost vector which overlaps [y,y+1) */
-			for (curs = 0; seg->points[curs + 1].y < y; curs++);
-			cursor[i] = curs;
-			dy = seg->points[curs + 1].y - seg->points[curs].y;
-			if (fabs(dy) >= EPSILON)
-				seg_dx[i] = (seg->points[curs + 1].x - seg->points[curs].x) /
-				            dy;
-			else
-				seg_dx[i] = 1e12;
-			seg_x[i] = seg->points[curs].x +
-			           (y - seg->points[curs].y) * seg_dx[i];
-			art_svp_render_insert_active(i, active_segs, n_active_segs++,
-			                             seg_x, seg_dx);
-		}
-	}
-
-	n_steps = 0;
-
-	/* render the runlengths, advancing and deleting as we go */
-	start = 0x8000;
-
-	for (j = 0; j < n_active_segs; j++) {
-		seg_index = active_segs[j];
-		seg = &svp->segs[seg_index];
-		curs = cursor[seg_index];
-		while (curs != seg->n_points - 1 &&
-		        seg->points[curs].y < y + 1) {
-			y_top = y;
-			if (y_top < seg->points[curs].y)
-				y_top = seg->points[curs].y;
-			y_bot = y + 1;
-			if (y_bot > seg->points[curs + 1].y)
-				y_bot = seg->points[curs + 1].y;
-			if (y_top != y_bot) {
-				delta = (seg->dir ? 16711680.0 : -16711680.0) *
-				        (y_bot - y_top);
-				x_top = seg_x[seg_index] + (y_top - y) * seg_dx[seg_index];
-				x_bot = seg_x[seg_index] + (y_bot - y) * seg_dx[seg_index];
-				if (x_top < x_bot) {
-					x_min = x_top;
-					x_max = x_bot;
-				} else {
-					x_min = x_bot;
-					x_max = x_top;
-				}
-				ix_min = (int)floor(x_min);
-				ix_max = (int)floor(x_max);
-				if (ix_min >= x1) {
-					/* skip; it starts to the right of the render region */
-				} else if (ix_max < x0)
-					/* it ends to the left of the render region */
-					start += (int)delta;
-				else if (ix_min == ix_max) {
-					/* case 1, antialias a single pixel */
-					xdelta = (ix_min + 1 - (x_min + x_max) * 0.5) * delta;
-
-					ADD_STEP(ix_min, xdelta)
-
-					if (ix_min + 1 < x1) {
-						xdelta = delta - xdelta;
-
-						ADD_STEP(ix_min + 1, xdelta)
-					}
-				} else {
-					/* case 2, antialias a run */
-					rslope = 1.0 / fabs(seg_dx[seg_index]);
-					drslope = delta * rslope;
-					last =
-					    drslope * 0.5 *
-					    (ix_min + 1 - x_min) * (ix_min + 1 - x_min);
-					xdelta = last;
-					if (ix_min >= x0) {
-						ADD_STEP(ix_min, xdelta)
-
-						x = ix_min + 1;
-					} else {
-						start += last;
-						x = x0;
-					}
-					if (ix_max > x1)
-						ix_max = x1;
-					for (; x < ix_max; x++) {
-						this_ = (seg->dir ? 16711680.0 : -16711680.0) * rslope *
-						        (x + 0.5 - x_min);
-						xdelta = this_ - last;
-						last = this_;
-
-						ADD_STEP(x, xdelta)
-					}
-					if (x < x1) {
-						this_ =
-						    delta * (1 - 0.5 *
-						             (x_max - ix_max) * (x_max - ix_max) *
-						             rslope);
-						xdelta = this_ - last;
-						last = this_;
-
-						ADD_STEP(x, xdelta)
-
-						if (x + 1 < x1) {
-							xdelta = delta - last;
-
-							ADD_STEP(x + 1, xdelta)
-						}
-					}
-				}
-			}
-			curs++;
-			if (curs != seg->n_points - 1 &&
-			        seg->points[curs].y < y + 1) {
-				dy = seg->points[curs + 1].y - seg->points[curs].y;
-				if (fabs(dy) >= EPSILON)
-					seg_dx[seg_index] = (seg->points[curs + 1].x -
-					                     seg->points[curs].x) / dy;
-				else
-					seg_dx[seg_index] = 1e12;
-				seg_x[seg_index] = seg->points[curs].x +
-				                   (y - seg->points[curs].y) * seg_dx[seg_index];
-			}
-			/* break here, instead of duplicating predicate in while? */
-		}
-		if (seg->points[curs].y >= y + 1) {
-			curs--;
-			cursor[seg_index] = curs;
-			seg_x[seg_index] += seg_dx[seg_index];
-		} else {
-			art_svp_render_delete_active(active_segs, j--,
-			                             --n_active_segs);
-		}
-	}
-
-	*p_start = start;
-	*p_steps = steps;
-	*p_n_steps = n_steps;
-
-	iter->seg_ix = i;
-	iter->n_active_segs = n_active_segs;
-	iter->y++;
-}
-
-void
-art_svp_render_aa_iter_done(ArtSVPRenderAAIter *iter) {
-	free(iter->steps);
-
-	free(iter->seg_dx);
-	free(iter->seg_x);
-	free(iter->cursor);
-	free(iter->active_segs);
-	free(iter);
-}
-
-/**
- * art_svp_render_aa: Render SVP antialiased.
- * @svp: The #ArtSVP to render.
- * @x0: Left coordinate of destination rectangle.
- * @y0: Top coordinate of destination rectangle.
- * @x1: Right coordinate of destination rectangle.
- * @y1: Bottom coordinate of destination rectangle.
- * @callback: The callback which actually paints the pixels.
- * @callback_data: Private data for @callback.
- *
- * Renders the sorted vector path in the given rectangle, antialiased.
- *
- * This interface uses a callback for the actual pixel rendering. The
- * callback is called @y1 - @y0 times (once for each scan line). The y
- * coordinate is given as an argument for convenience (it could be
- * stored in the callback's private data and incremented on each
- * call).
- *
- * The rendered polygon is represented in a semi-runlength format: a
- * start value and a sequence of "steps". Each step has an x
- * coordinate and a value delta. The resulting value at position x is
- * equal to the sum of the start value and all step delta values for
- * which the step x coordinate is less than or equal to x. An
- * efficient algorithm will traverse the steps left to right, keeping
- * a running sum.
- *
- * All x coordinates in the steps are guaranteed to be @x0 <= x < @x1.
- * (This guarantee is a change from the gfonted vpaar renderer from
- * which this routine is derived, and is designed to simplify the
- * callback).
- *
- * The value 0x8000 represents 0% coverage by the polygon, while
- * 0xff8000 represents 100% coverage. This format is designed so that
- * >> 16 results in a standard 0x00..0xff value range, with nice
- * rounding.
- *
- **/
-void
-art_svp_render_aa(const ArtSVP *svp,
-                  int x0, int y0, int x1, int y1,
-                  void (*callback)(void *callback_data,
-                                   int y,
-                                   int start,
-                                   ArtSVPRenderAAStep *steps, int n_steps),
-                  void *callback_data) {
-	ArtSVPRenderAAIter *iter;
-	int y;
-	int start;
-	ArtSVPRenderAAStep *steps;
-	int n_steps;
-
-	iter = art_svp_render_aa_iter(svp, x0, y0, x1, y1);
-
-
-	for (y = y0; y < y1; y++) {
-		art_svp_render_aa_iter_step(iter, &start, &steps, &n_steps);
-		(*callback)(callback_data, y, start, steps, n_steps);
-	}
-
-	art_svp_render_aa_iter_done(iter);
-}

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_render_aa.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,55 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __ART_SVP_RENDER_AA_H__
-#define __ART_SVP_RENDER_AA_H__
-
-/* The spiffy antialiased renderer for sorted vector paths. */
-
-#include "art.h"
-
-typedef struct _ArtSVPRenderAAStep ArtSVPRenderAAStep;
-typedef struct _ArtSVPRenderAAIter ArtSVPRenderAAIter;
-
-struct _ArtSVPRenderAAStep {
-	int x;
-	int delta; /* stored with 16 fractional bits */
-};
-
-ArtSVPRenderAAIter *
-art_svp_render_aa_iter(const ArtSVP *svp,
-                       int x0, int y0, int x1, int y1);
-
-void
-art_svp_render_aa_iter_step(ArtSVPRenderAAIter *iter, int *p_start,
-                            ArtSVPRenderAAStep **p_steps, int *p_n_steps);
-
-void
-art_svp_render_aa_iter_done(ArtSVPRenderAAIter *iter);
-
-void
-art_svp_render_aa(const ArtSVP *svp,
-                  int x0, int y0, int x1, int y1,
-                  void (*callback)(void *callback_data,
-                                   int y,
-                                   int start,
-                                   ArtSVPRenderAAStep *steps, int n_steps),
-                  void *callback_data);
-
-#endif /* __ART_SVP_RENDER_AA_H__ */

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.cpp
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.cpp	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.cpp	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,192 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998-2000 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* Sort vector paths into sorted vector paths */
-
-#include "art.h"
-
-#include <stdlib.h>
-#include <math.h>
-
-/* reverse a list of points in place */
-static void
-reverse_points(ArtPoint *points, int n_points) {
-	int i;
-	ArtPoint tmp_p;
-
-	for (i = 0; i < (n_points >> 1); i++) {
-		tmp_p = points[i];
-		points[i] = points[n_points - (i + 1)];
-		points[n_points - (i + 1)] = tmp_p;
-	}
-}
-
-/**
- * art_svp_from_vpath: Convert a vpath to a sorted vector path.
- * @vpath: #ArtVPath to convert.
- *
- * Converts a vector path into sorted vector path form. The svp form is
- * more efficient for rendering and other vector operations.
- *
- * Basically, the implementation is to traverse the vector path,
- * generating a new segment for each "run" of points in the vector
- * path with monotonically increasing Y values. All the resulting
- * values are then sorted.
- *
- * Note: I'm not sure that the sorting rule is correct with respect
- * to numerical stability issues.
- *
- * Return value: Resulting sorted vector path.
- **/
-ArtSVP *
-art_svp_from_vpath(ArtVpath *vpath) {
-	int n_segs, n_segs_max;
-	ArtSVP *svp;
-	int dir;
-	int new_dir;
-	int i;
-	ArtPoint *points;
-	int n_points, n_points_max;
-	double x, y;
-	double x_min, x_max;
-
-	n_segs = 0;
-	n_segs_max = 16;
-	svp = (ArtSVP *)malloc(sizeof(ArtSVP) +
-	                          (n_segs_max - 1) * sizeof(ArtSVPSeg));
-
-	dir = 0;
-	n_points = 0;
-	n_points_max = 0;
-	points = NULL;
-	i = 0;
-
-	x = y = 0; /* unnecessary, given "first code must not be LINETO" invariant,
-        but it makes gcc -Wall -ansi -pedantic happier */
-	x_min = x_max = 0; /* same */
-
-	while (vpath[i].code != ART_END) {
-		if (vpath[i].code == ART_MOVETO || vpath[i].code == ART_MOVETO_OPEN) {
-			if (points != NULL && n_points >= 2) {
-				if (n_segs == n_segs_max) {
-					n_segs_max <<= 1;
-					svp = (ArtSVP *)realloc(svp, sizeof(ArtSVP) +
-					                            (n_segs_max - 1) *
-					                            sizeof(ArtSVPSeg));
-				}
-				svp->segs[n_segs].n_points = n_points;
-				svp->segs[n_segs].dir = (dir > 0);
-				if (dir < 0)
-					reverse_points(points, n_points);
-				svp->segs[n_segs].points = points;
-				svp->segs[n_segs].bbox.x0 = x_min;
-				svp->segs[n_segs].bbox.x1 = x_max;
-				svp->segs[n_segs].bbox.y0 = points[0].y;
-				svp->segs[n_segs].bbox.y1 = points[n_points - 1].y;
-				n_segs++;
-				points = NULL;
-			}
-
-			if (points == NULL) {
-				n_points_max = 4;
-				points = art_new(ArtPoint, n_points_max);
-			}
-
-			n_points = 1;
-			points[0].x = x = vpath[i].x;
-			points[0].y = y = vpath[i].y;
-			x_min = x;
-			x_max = x;
-			dir = 0;
-		} else { /* must be LINETO */
-			new_dir = (vpath[i].y > y ||
-			           (vpath[i].y == y && vpath[i].x > x)) ? 1 : -1;
-			if (dir && dir != new_dir) {
-				/* new segment */
-				x = points[n_points - 1].x;
-				y = points[n_points - 1].y;
-				if (n_segs == n_segs_max) {
-					n_segs_max <<= 1;
-					svp = (ArtSVP *)realloc(svp, sizeof(ArtSVP) +
-					                            (n_segs_max - 1) *
-					                            sizeof(ArtSVPSeg));
-				}
-				svp->segs[n_segs].n_points = n_points;
-				svp->segs[n_segs].dir = (dir > 0);
-				if (dir < 0)
-					reverse_points(points, n_points);
-				svp->segs[n_segs].points = points;
-				svp->segs[n_segs].bbox.x0 = x_min;
-				svp->segs[n_segs].bbox.x1 = x_max;
-				svp->segs[n_segs].bbox.y0 = points[0].y;
-				svp->segs[n_segs].bbox.y1 = points[n_points - 1].y;
-				n_segs++;
-
-				n_points = 1;
-				n_points_max = 4;
-				points = art_new(ArtPoint, n_points_max);
-				points[0].x = x;
-				points[0].y = y;
-				x_min = x;
-				x_max = x;
-			}
-
-			if (points != NULL) {
-				if (n_points == n_points_max)
-					art_expand(points, ArtPoint, n_points_max);
-				points[n_points].x = x = vpath[i].x;
-				points[n_points].y = y = vpath[i].y;
-				if (x < x_min) x_min = x;
-				else if (x > x_max) x_max = x;
-				n_points++;
-			}
-			dir = new_dir;
-		}
-		i++;
-	}
-
-	if (points != NULL) {
-		if (n_points >= 2) {
-			if (n_segs == n_segs_max) {
-				n_segs_max <<= 1;
-				svp = (ArtSVP *)realloc(svp, sizeof(ArtSVP) +
-				                            (n_segs_max - 1) *
-				                            sizeof(ArtSVPSeg));
-			}
-			svp->segs[n_segs].n_points = n_points;
-			svp->segs[n_segs].dir = (dir > 0);
-			if (dir < 0)
-				reverse_points(points, n_points);
-			svp->segs[n_segs].points = points;
-			svp->segs[n_segs].bbox.x0 = x_min;
-			svp->segs[n_segs].bbox.x1 = x_max;
-			svp->segs[n_segs].bbox.y0 = points[0].y;
-			svp->segs[n_segs].bbox.y1 = points[n_points - 1].y;
-			n_segs++;
-		} else
-			free(points);
-	}
-
-	svp->n_segs = n_segs;
-
-	qsort(&svp->segs, n_segs, sizeof(ArtSVPSeg), art_svp_seg_compare);
-
-	return svp;
-}
-

Deleted: scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.h
===================================================================
--- scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.h	2010-10-13 00:05:33 UTC (rev 53386)
+++ scummvm/trunk/engines/sword25/tools/swfdisplay/art_svp_vpath.h	2010-10-13 00:06:12 UTC (rev 53387)
@@ -1,30 +0,0 @@
-/* Libart_LGPL - library of basic graphic primitives
- * Copyright (C) 1998 Raph Levien
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,

@@ Diff output truncated at 100000 characters. @@

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list