Coder Social home page Coder Social logo

gjbadros / cassowary Goto Github PK

View Code? Open in Web Editor NEW
5.0 2.0 0.0 0 B

The original Cassowary constraint solver for user-interface interactions, layout, and more. Used by SCWM, CCSS, and inspired macOS and iOS AutoLayout

License: Other

Batchfile 0.03% Java 16.76% CSS 2.13% HTML 62.52% Lex 0.13% Makefile 0.69% Shell 0.35% Smalltalk 0.08% C++ 7.06% C 0.17% Yacc 0.07% SuperCollider 0.01% QMake 0.01% Scheme 0.06% JavaScript 1.94% TeX 7.66% Python 0.32% Perl 0.01%

cassowary's Introduction

Cassowary Constraint Solving Toolkit for C++, Java, and Smalltalk
Version 0.70

Web Page: http://www.cs.washington.edu/research/constraints/cassowary
Contact: [email protected]
SourceForge hosting: http://sourceforge.net/projects/cassowary/

Greg J. Badros (email: my last name at cs.washington.edu) and
Alan Borning <[email protected]>
University of Washington
Computer Science and Engineering
Seattle, WA 98195-2350
10-April-2000
(Hosting moved to SourceForge November 2005)
v0.70 Update for GCC 4.x 29-December-2006


with Constraint Drawing Applet (CDA) by Michael Noth <[email protected]>

See ANNOUNCE for a brief description and announcement of this distribution.
See NEWS for a history of user-visible changes.
See ChangeLog for a detailed listing of the changes to each source file.
See LICENSE for legalese regarding use of this distribution.

The Smalltalk implementation is in the public domain -- see smalltalk/README.

Please send bug reports to [email protected]

Also, send mail to [email protected] if you would like to be
informed about bug fixes, feature enhancements, etc.  Let us know what
implementation(s) you are using, too.

------------------------------------------------------------------

HOW TO GET STARTED

The Cassowary library uses GNU autoconf to permit easy building on
various platforms.  You should be able to do:

./configure
make

and everything will work.  A more complex, but realistic example is:

./configure --with-prefix=/usr/contrib \
            --with-guile-prefix=/usr/contrib \
            --with-python-headers=/usr/include/python1.5 \
 	    --enable-java-build \
            --with-gtl=/usr/contrib \
            --with-java-class-path=/usr/contrib/share/java/site \
            --enable-warnings
make -k

Be sure to give the extra --enable-permissive flag to configure if
you are building with gcc-2.95 or more recent.

As yet another data point, I build Cassowary with:

./configure --with-guile-exec-prefix=/uns/bin \
            --with-guile-prefix=/uns/share --prefix=/uns/share \
            --exec-prefix=/uns --enable-maintainer-mode

See the file "INSTALL" for more details about
autoconf support and the options that the "configure" takes.  You can
also do "./configure --help" for the list of the options that configure
accepts. 

If the make in any of the subdirectories fails, you can turn on the "-k" 
option to make, or just do make in the subdirectories that you want
build.  E.g., if you do not have the JDK installed, the Java version of
Cassowary might not compile; if you still want the guile version, just
"cd guile; make -k".

Be sure that configure detects the validity of using the "-fpermissive"
flag of more recent g++/egcs compilers to work around some
const-discrepancies between the const-challenged guile header files and
Cassowary's more const-correct usage.  You should get a message like:

  checking whether gcc understands -fpermissive option... yes

when running configure if you're using, e.g., gcc-2.95 or later.

You need to apply GTL.h.patch to the installed GTL.h header file for
Cassowary to compile with recent versions of egcs/gcc (e.g., gcc-2.95).

Also, you may need to change libguile/gsubr.h from:

     extern SCM scm_make_gsubr SCM_P ((char *name, int req, int opt, 
                                       int rst, SCM (*fcn)()));
   to

     extern SCM scm_make_gsubr SCM_P ((char *name, int req, int opt, 
                                       int rst, void*));

or patch guile's snarf.h to insert the appropriate case at each call to
SCM_PROC and SCM_PROC1.  (Thanks to Alexandre Duret-Lutz for the above
information about more recent g++/egcs compilers).

Note that the generated Makefiles depend upon features of GNU Make.  See:

ftp://ftp.gnu.org/pub/gnu/

for a version of make that you can build first to then build Cassowary.

Example applications exist in subdirectories of the top-level
implementation subdirectories (e.g., c++/qdemos contains demos for C++
that use the Qt Widget toolkit).

Please send mail to [email protected] if you are using this
toolkit so we know how to reach you for bug fixes, updates, etc.

------------------------------------------------------------------

WHAT THE DISTRIBUTION CONTAINS

This distribution contains 3 implementations of the Cassowary constraint
solving toolkit:

o C++
o Java
o Smalltalk

For each implementation language, there is at least one example program; 
for some there are many.

There is a wrapping of the C++ solver in Guile-Scheme -- see the guile/
subdirectory.  Also, Anthony Beurivé has wrapped Cassowary for
STk/Scheme.  His code is available at:

  http://dept-info.labri.u-bordeaux.fr/~beurive/Code

and the STk Scheme system is available at:

  http://kaolin.unice.fr/STk/

There is also a SWIG-generated wrapper of the C++ library making the
solver available from the Python language.

A technical report describing the solver, its interface, and its
implementation is in cassowary-tr.ps (pdf version in cassowary-tr.pdf).
This paper is required reading if you intend to use the solver in your
own project(s).

See also the Scwm (Scheme Constraints Window Manager) web page:

http://scwm.mit.edu/scwm/

Scwm, also by Greg Badros (and Maciej Stachowiak), is the most
substantial application using this toolkit that we are aware of.

------------------------------------------------------------------

VARIOUS IMPLEMENTATION NOTES

Cassowary/C++ needs to be compiled using a modern C++ compiler.
At one time or another, it has compiled using:
  o egcs-1.0.1
  o egcs-1.0.3a
  o egcs-1.1b
  o egcs-1.1.1
  o gcc-2.8.1 (needs libstdc++-2.8.x, too)
  o Visual C++ 5.0 (not tried recently)

In particular, Cassowary will *not* build with gcc-2.7.x.x!

See c++/README for more details about building the C++ version.

The C++ implementation of the toolkit also has an optional finite domain
subsolver.  You need to build and install the GTL -- the Graph Template
Library -- and use the "--with-gtl=DIR" configure option for the finite
domain subsolver to be built.  GTL is available from:

http://www.fmi.uni-passau.de/Graphlet/GTL/

Cassowary was tested against GTL-0.3.1;  it may work with later
versions, but I have not tried it.  You need to apply GTL.h.patch to
the installed GTL.h header file for Cassowary to compile with recent
versions of egcs/gcc (e.g., gcc-2.95).

Cassowary/Java was developed using Sun's JDK-1.1.x, ported to Linux
More recent versions should work fine.

See java/README for more details about building the Java version.


Cassowary/Smalltalk was written under OTI Smalltalk-- other versions of
smalltalk will likely require (possibly significant) changes.

See smalltalk/README for more details about the Smalltalk version.

See guile/README for details about the Guile Scheme wrapper of the C++
implementation, and for a pointer to SCWM, the Scheme Constraints Window 
Manager which uses Cassowary.

The Python bindings (by Tessa Lau) bindings for the Cassowary library
are in the wrappers/ subdirectory.  SWIG was used in wrapping the
library.  These bindings may no longer work, and are provided only for
your hacking pleasure (please send back useful patches if you do get the 
code working).

For more information about SWIG, see:

http://www.swig.org/


For more information about the Python language, see:

http://www.python.org/


For more information about the Guile-Scheme language, see:

http://www.red-bean.com/guile/
http://www.fsf.org/software/guile/guile.html


------------------------------------------------------------------

DEMONSTRATION APPLICATION

A standard demonstration application is included for each implementation 
of the Cassowary solver.  The application builds a quadrilateral and
connects the neighboring midpoints of each of the outer edges to form an 
interior quadrilateral which is provably a parallelogram.  The
constraint solver manages the constraints to keep the outer
quadrilateral inside the window, keep the midpoints properly positioned, 
and keep the outer quadrilateral from turning "inside out."  

The user is able to select points (draggable boxes) and move them around 
within the window (both midpoints and endpoints can be selected, of
course).  The solver updates the figure, and redraws.


------------------------------------------------------------------

FUNDING ACKNOWLEDGEMENTS

This work has been funded in part by the National Science Foundation under
Grants IRI-9302249 and CCR-9402551, by Object Technology International, and
by a Fulbright Award from the Australian-American Educational
Foundation.

Additionally, Greg Badros is supported by a National Science Foundation
Graduate Research Fellowship.  Parts of this material are based upon
work supported under that fellowship.

cassowary's People

Stargazers

John O'Connor avatar Steven Brunwasser avatar dbaspider avatar Scott Eikenberry avatar Zaki Mughal [sivoais] avatar

Watchers

Zaki Mughal [sivoais] avatar Greg Badros avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.