www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Cassowary.d

reply "ketmar" <ketmar ketmar.no-ip.org> writes:
preliminary, but working port of Cassowary Solver — GUI-oriented 
constraint solver, toolkit-agnostic layout engine. it's not 
D-spirited yet, but it works. todo list includes templated 
classes and bindings for gtk.d. feel free to fork and improve.

url: http://repo.or.cz/w/cassowary.d.git
Jul 27 2014
next sibling parent reply "Yuriy" <yuriy.glukhov gmail.com> writes:
On Sunday, 27 July 2014 at 11:44:35 UTC, ketmar wrote:
 preliminary, but working port of Cassowary Solver — 
 GUI-oriented constraint solver, toolkit-agnostic layout engine. 
 it's not D-spirited yet, but it works. todo list includes 
 templated classes and bindings for gtk.d. feel free to fork and 
 improve.

 url: http://repo.or.cz/w/cassowary.d.git
+1 http://code.dlang.org/packages/cassowary-d
Jul 27 2014
next sibling parent ketmar via Digitalmars-d-announce <digitalmars-d-announce puremagic.com> writes:
On Sun, 27 Jul 2014 12:01:45 +0000
Yuriy via Digitalmars-d-announce <digitalmars-d-announce puremagic.com>
wrote:

 +1
 http://code.dlang.org/packages/cassowary-d
damn it! my google-fu sux again. i did search and found nothing, so made a port. feel so stupid now...
Jul 27 2014
prev sibling next sibling parent reply ketmar via Digitalmars-d-announce <digitalmars-d-announce puremagic.com> writes:
On Sun, 27 Jul 2014 15:16:07 +0300
ketmar via Digitalmars-d-announce
<digitalmars-d-announce puremagic.com> wrote:

heh. but i have a nice text parser! so it's not a completely trashcan
work. ;-)
Jul 27 2014
parent "Yuriy" <yuriy.glukhov gmail.com> writes:
 so it's not a completely trashcan work. ;-)
No way it could be! We don't like monopoly here, right? =) I just ported the library for my own fun, and added a couple of D-ish features, like operator overloads, etc. It's not claimed to be the best one in the world =). Please feel free to continue with your own, or contributing to my lib, whatever you prefer =). Best regards, Yuriy Glukhov.
Jul 28 2014
prev sibling parent "Kagamin" <spam here.lot> writes:
On Sunday, 27 July 2014 at 12:01:47 UTC, Yuriy wrote:
 On Sunday, 27 July 2014 at 11:44:35 UTC, ketmar wrote:
 preliminary, but working port of Cassowary Solver — 
 GUI-oriented constraint solver, toolkit-agnostic layout 
 engine. it's not D-spirited yet, but it works. todo list 
 includes templated classes and bindings for gtk.d. feel free 
 to fork and improve.

 url: http://repo.or.cz/w/cassowary.d.git
+1 http://code.dlang.org/packages/cassowary-d
http://code.dlang.org/?sort=updated&category=library.scientific.linalg categorization can be better though.
Jul 27 2014
prev sibling parent "ketmar" <ketmar ketmar.no-ip.org> writes:
a small update for parser: it is now possible to parse so-called 
"scripts" (only from 'string' type for now). sample script can 
look like this one, which centers two buttons inside the panel, 
keepeng equal button sizes:

===[cutline]===
var(stay)
   panel.left = 0,
   panel.top = 0,
   panel.width = 80,
   panel.height = 20;


// this is just a simple constants,
// use 'define' to avoid introducing new vars
define
   button.hpadding = 4,
   button.defheight = 10+6; // simple math


var
   bt0.left, // default is 0
   bt0.top,
   <stay> bt0.width = 30,
   <stay> bt0.height = button.defheight;
     // oh, yeah, this will be calculated in-place


var
   bt1.left,
   bt1.top,
   bt1.width,
   bt1.height;


// some useful macros
define
   panel.right = (panel.left+panel.width),
   panel.bottom = (panel.top+panel.height),

   bt0.right = (bt0.left+bt0.width),
   bt0.bottom = (bt0.top+bt0.height),

   bt1.right = (bt1.left+bt1.width),
   bt1.bottom = (bt1.top+bt1.height);


// button-button placement and sizes
// default strength is <required>
bt1.left >= bt0.right+button.hpadding; // buttons padding
bt1.height == bt0.height; // same height
bt1.width == bt0.width; // same width
bt1.top == bt0.top; // same vertical position


// button-panel placement (this should center buttons)
// horizontal
bt0.left-panel.left == panel.right-bt1.right;
// vertical
bt0.top-panel.top == panel.bottom-bt0.bottom;


// print values (for debug mode)
print panel.left;
print panel.top;
print panel.width;
print panel.height;

print bt0.left;
print bt0.top;
print bt0.width;
print bt0.height;

print bt1.left;
print bt1.top;
print bt1.width;
print bt1.height;
===[cutline]===

there is no support for any kind of 'autobinding' variables to 
class/struct properties yet, and parser code is awful. but the 
whole thing is slowly growing…

anyway, it's really fun to play with various layout scripts. try 
it yourself!
Aug 07 2014