Revision: 4796
http://sourceforge.net/p/vexi/code/4796
Author: clrg
Date: 2015-05-23 11:30:20 +0000 (Sat, 23 May 2015)
Log Message:
-----------
Port scroll widgets
Added Paths:
-----------
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/Button.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/gui/Scroll.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/image/pacman_origin.jpg
Removed Paths:
-------------
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/button.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollbar.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollpane.t
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/pacman_origin.jpg
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/scroll.t
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollbar.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollbar.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollbar.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,378 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:ui="vexi://ui"
+ xmlns:meta="vexi://meta"
+ xmlns="org.vexi.lib.role">
+
+ <meta:doc>
+ <author>Charles Goodwin</author>
+ <usage>
+ * th_thumb should be a role.Draggable
+ * viewport should have the structure:
+ <Box layout="place"><Box /></Box>
+ </usage>
+ </meta:doc>
+
+ <Polarized />
+ <ui:Box>
+
+ // public variables
+ thisbox.lineheight = vexi.ui.font.height(font, fontsize, "dp");
+ thisbox.mwheelshift = 4;
+ thisbox.pageshift;
+ thisbox.autohide;
+ thisbox.enabled = true;
+ thisbox.hide;
+ thisbox.minthumbsize;
+ thisbox.shift;
+ thisbox.uiport;
+ thisbox.viewport;
+
+ // theme box variables
+ thisbox.th_back;
+ thisbox.th_next;
+ thisbox.th_thumb;
+ thisbox.th_track;
+
+ // private variables
+ var listeners = {};
+ var percent;
+ var percentset;
+ var trackpos;
+
+ // for efficient lookups
+ var max = vexi.math.max;
+ var min = vexi.math.min;
+ var thumb, track;
+ var vport, varea;
+
+ ////////
+ // sync functions
+
+ /** sync viewport with thumb position */
+ const syncViewport = function() {
+ if (vport and varea)
+ varea[pos] = percent * (vport[dim] - varea[dim]);
+ }
+
+ /** sync specific listener with viewport position */
+ const syncListener = function(v) {
+ if (v and v[0]) v[0][pos] = percent * (v[dim] - v[0][dim]);
+ }
+
+ /** syncs all listeners with viewport position */
+ const syncAllListeners = function(v) {
+ // BROKEN - disabling this, it prevents button from working
(until thumb has been moved)
+ // Once motion is set it doesn't seem to get unset in normal
use, so it seems like
+ // a useless check.
+// if (motion) {
+ for (var key in listeners) {
+ if (v == key) continue;
+ syncListener(key);
+ }
+// }
+ }
+
+ /** sync thumb with viewport size and position */
+ const syncThumb = function() {
+ // don't do much if we're hidden
+ if (hide) display = false;
+ // conditions where thumb placement is not [yet] desirable
+ else if (!surface || vport == null || varea == null || vport[dim]
>= varea[dim]) {
+ if (enabled) enabled = false;
+ if (autohide) display = false;
+ else {
+ thumb[dim] = track[dim];
+ thumb[pos] = 0;
+ }
+ // display, size, and place thumb
+ } else {
+ if (!enabled) enabled = true;
+ if (!display) display = true;
+ thumb[dim] =
+ max(minthumbsize,
+ min(track[dim],
+ (vport[dim] / varea[dim]) * track[dim]));
+ thumb[pos] = max(0, (track[dim] - thumb[dim]) * percent);
+ }
+ }
+
+ ////////
+ // trap functions to invoke sync
+
+ /** invokes sync funcs on all but listener trapee */
+ const listenerMove = function(v) {
+ if (trapee[trapname] == v) return;
+ cascade = v;
+ if (percentset or !trapee.constrain) return;
+ percentset = true;
+ percent = trapee[0][pos] / (trapee[0][dim] - trapee[dim]);
+ syncAllListeners(trapee);
+ syncViewport();
+ percentset = false;
+ }
+
+ /** listener resized - sync with viewport */
+ const listenerResize = function(v) { cascade = v;
syncListener(trapee); }
+
+ const syncThumbTrap = function(v) { cascade = v; syncThumb(); }
+
+ const viewportMove = function(v) {
+ cascade = min(0, max(v, vport[dim] - varea[dim]));
+ if (percentset) return;
+ percentset = true;
+ percent = varea[pos] / (vport[dim] - varea[dim]);
+ syncThumb();
+ syncAllListeners();
+ percentset = false;
+ }
+
+ /** viewport or varea resized */
+ const viewportResize = function(v) {
+ var v0 = trapee[trapname];
+ if(v==v0) return;
+
+ cascade = v;
+ if (percentset) return;
+ // avoid resetting percent
+ percentset = true;
+ // viewport bigger than view subject
+ if (vport[dim] >= varea[dim]) varea[pos] = 0;
+ // constrain viewport position
+ else varea[pos] = -percent * (varea[dim] - vport[dim]);
+ // sync thumbsize to viewport
+ syncThumb();
+ percentset = false;
+ }
+
+ /** vertical mousewheel movement */
+ const mwheelWrite = function(v) {
+ if (display and (track[dim] > thumb[dim])) {
+ shift = lineheight * v * mwheelshift;
+ return;
+ }
+ cascade = v;
+ }
+
+ ////////
+ // public functions
+
+ /** add listener (weak viewport) to the scrollbar */
+ thisbox.addListener = function(v) {
+ listeners[v] = true;
+ v[dim] ++= listenerResize;
+ v[0][dim] ++= listenerResize;
+ v[0][pos] ++= listenerMove;
+ syncListener(v);
+ }
+
+ /** remove listener (weak viewport) to the scrollbar */
+ thisbox.removeListener = function(v) {
+ if (listeners[v] != null) {
+ listeners[v][dim] --= listenerResize;
+ listeners[v][0][dim] --= listenerResize;
+ listeners[v][0][pos] --= listenerMove;
+ (keysof(listeners)).remove(v);
+ }
+ }
+
+ ////////
+ // public property traps
+
+ autohide ++= syncThumbTrap;
+ minthumbsize ++= static.minthumbsizeWrite;
+ pageshift ++= static.pageshiftRead;
+ v_container ++= static.containerWrite;
+
+ /** adjust scrollbar orient - "horizontal" or "vertical" */
+ orient ++= function(v) {
+ if (v == orient) return;
+ cascade = v;
+ // reassign track traps
+ if (track) {
+ track[flip(dim)] --= syncThumbTrap;
+ track[dim] ++= syncThumbTrap;
+ track[flip(mindim)] = 0;
+ track[mindim] = minthumbsize;
+ }
+ // reassign viewport traps
+ if (vport) {
+ if (!varea) throw "viewport must have a child";
+ // react to viewport resize
+ vport[flip(dim)] --= viewportResize;
+ vport[dim] ++= viewportResize;
+ // react to viewarea resize
+ varea[flip(dim)] --= viewportResize;
+ varea[dim] ++= viewportResize;
+ // react to viewarea movement
+ varea[flip(pos)] --= viewportMove;
+ varea[pos] ++= viewportMove;
+ }
+ // reassign uiport traps
+ if (uiport) {
+ uiport[flip(mousewheel)] --= mwheelWrite;
+ uiport[mousewheel] ++= mwheelWrite;
+ }
+ // reassign listener traps
+ const olddim = flip(dim);
+ const oldpos = flip(pos);
+ const newdim = dim;
+ const newpos = pos;
+ for (var key in listeners) {
+ dim = olddim;
+ pos = oldpos;
+ removeListener(key);
+ dim = newdim;
+ pos = newpos;
+ addListener(key);
+ }
+ }
+
+ /** attempt to shift viewport by given amount */
+ shift ++= function(v) {
+ varea[pos] =
+ min(0,
+ max(vport[dim] - varea[dim],
+ varea[pos] - v));
+ return;
+ }
+
+ /** set up viewport */
+ viewport ++= function(v) {
+ // clean up old viewport
+ if (vport) {
+ if (!varea) throw "viewport must have a child";
+ vport[dim] --= viewportResize;
+ varea[dim] --= viewportResize;
+ varea[pos] --= viewportMove;
+ }
+ // set up new viewport
+ if (v) {
+ if (!v[0]) throw "viewport must have a child";
+ v[dim] ++= viewportResize;
+ v[0][dim] ++= viewportResize;
+ v[0][pos] ++= viewportMove;
+ }
+ cascade = v;
+ vport = v;
+ varea = v ? v[0] : null;
+ syncThumb();
+ }
+
+ /** set up ui port (see scrollpane uiport) in case viewport is virtual
*/
+ uiport ++= function(v) {
+ if (uiport) {
+ uiport[mousewheel] --= mwheelWrite;
+ }
+ if (v) {
+ v[mousewheel] ++= mwheelWrite;
+ }
+ cascade = v;
+ }
+
+ ////////
+ // theme trap assignments
+
+ /** move up a line */
+ const backAction = function(a) { shift = -(mwheelshift * lineheight);
cascade = a; }
+
+ /** set up back button */
+ th_back ++= function(v) {
+ v.action ++= backAction;
+ v.focusable = false;
+ cascade = v;
+ }
+
+ /** move down a line */
+ const nextAction = function(a) { shift = mwheelshift * lineheight;
cascade = a; }
+
+ /** set up next button */
+ th_next ++= function(v) {
+ v.action ++= nextAction;
+ v.focusable = false;
+ cascade = v;
+ }
+
+ /** invokes a pageshift in appropriate direction */
+ const trackAction = function(a) {
+ const trackpos = track.mouse[pos];
+ if (thumb[pos] > trackpos) shift = -pageshift;
+ else if (trackpos > thumb[pos] + thumb[dim]) shift = pageshift;
+ cascade = a;
+ }
+
+ /** set up track */
+ th_track ++= function(v) {
+ v[dim] ++= syncThumbTrap;
+ v.action ++= trackAction;
+ v[mindim] = minthumbsize;
+ cascade = v;
+ track = v;
+ }
+
+ /** thumb is moved by user */
+ var lastpos;
+ var limitpos;
+ var startpos;
+ const thumbStart = function(v) {
+ motion = true;
+ startpos = v==1 ? thumb[pos] : varea[pos];
+ limitpos = v==1 ? track[dim] - thumb[dim] : vport[dim] -
varea[dim];
+ return;
+ }
+ const thumbStop = function(v) { motion = false; lastpos = null;
return; }
+ const thumbMove = function(d) {
+ // avoid duplicates (when flip(pos) changes)
+ if (d[pos] == lastpos) return;
+ lastpos = d[pos];
+ // RMB drags relative to the content
+ if (d.button == 2) {
+ varea[pos] = min(0, max(limitpos, startpos - d[pos]));
+ return;
+ }
+ // LMB drags relative to the scrollbar
+ thumb[pos] = max(0, min(limitpos, startpos + d[pos]));
+ if (percentset) return;
+ // set percent according to thumb
+ percentset = true;
+ percent = thumb[pos] / (track[dim] - thumb[dim]);
+ syncViewport();
+ syncAllListeners();
+ percentset = false;
+ return;
+ }
+
+ /** set up scrollbar thumb */
+ th_thumb ++= function(v) {
+ v.dragUpdate ++= thumbMove;
+ v.dragStart ++= thumbStart;
+ v.dragStop ++= thumbStop;
+ v.dragButton = 2;
+ cascade = v;
+ thumb = v;
+ }
+
+ </ui:Box>
+
+ /** scrollbars can not have content */
+ static.containerWrite = function(v) { cascade = v; trapee.v_content =
null; }
+
+ /** updates the lineheight as used by mousewheel scrolling */
+ static.fontWrite = function(v) {
+ cascade = v;
+ trapee.lineheight = vexi.ui.font.height(trapee.font, trapee.fontsize,
"dp");
+ }
+
+ /** constrain track to minimum size of thumb */
+ static.minthumbsizeWrite = function(v) {
+ cascade = v;
+ if (trapee.th_track) trapee.th_track[trapee.mindim] = v;
+ }
+
+ /** return amount by which to shift a full page */
+ static.pageshiftRead = function() {
+ if (trapee.viewport) return 0.9 * (trapee.viewport[trapee.dim]);
+ else return 0;
+ }
+
+</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollpane.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollpane.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollpane.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/gui/Scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,222 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:ui="vexi://ui"
+ xmlns:meta="vexi://meta"
+ xmlns="org.vexi.lib.gui">
+
+ <meta:doc>
+ <author>Charles Goodwin</author>
+ <fixme>
+ - toggling autohidehorizontal/vertical does not toggle autohide
+ - setting scrollhorizontal/vertical is not guarranteed as autohide
+ also sets the display properties on scrollbars
+ </fixme>
+ </meta:doc>
+
+ <ui:Box>
+
+ // public variables
+ thisbox.autohide;
+ thisbox.autohidehorizontal = false;
+ thisbox.autohidevertical = false;
+ thisbox.scrollhorizontal = true;
+ thisbox.scrollvertical = true;
+
+ // theme variables
+ thisbox.th_hscroll;
+ thisbox.th_vscroll;
+ thisbox.th_viewport;
+ thisbox.th_uiport;
+
+ /** reusable function for write traps that constrain the viewport to
the contents */
+ var constrainPaneH = function(v) { cascade = v; th_viewport.minwidth =
th_viewport[0].contentwidth; }
+
+ /** reusable function for write traps that constrain the viewport to
the contents */
+ var constrainPaneV = function(v) { cascade = v; th_viewport.minheight
= th_viewport[0].contentheight; }
+
+ // apply constrain traps
+ hshrink ++= constrainPaneH;
+ vshrink ++= constrainPaneV;
+
+ /** set up horizontal scrollbar */
+ th_hscroll ++= function(v) {
+ cascade = v;
+
+ /** autohide th_hscroll */
+ autohidehorizontal ++= function(a) {
+ if (v == autohidehorizontal) {
+ return;
+ }
+ v.autohide = a;
+ cascade = a;
+ }
+
+ /** toggle horizontal scrollbar */
+ scrollhorizontal ++= function(s) {
+ if (v.display != s) {
+ v.display = s;
+ }
+ if (s and v.viewport != th_viewport) {
+ v.viewport = th_viewport;
+ }
+ if (!s and v.viewport == th_viewport) {
+ v.viewport = null;
+ }
+ if (!th_viewport) {
+ return;
+ }
+ if (!s) {
+ if (scrollhorizontal) {
+ th_viewport[0].contentwidth ++= constrainPaneH;
+ }
+ } else {
+ th_viewport[0].contentwidth --= constrainPaneH;
+ }
+ cascade = s;
+ }
+ }
+
+ /** set up vertical scrollbar */
+ th_vscroll ++= function(v) {
+ cascade = v;
+
+ /** autohide th_vscroll */
+ autohidevertical ++= function(a) {
+ if (a == autohidevertical) {
+ return;
+ }
+ v.autohide = a;
+ cascade = a;
+ }
+
+ /** toggle vertical scrollbar */
+ scrollvertical ++= function(s) {
+ if (v.display != s) {
+ v.display = s;
+ }
+ if (s and v.viewport != th_viewport) {
+ v.viewport = th_viewport;
+ }
+ if (!s and v.viewport == th_viewport) {
+ v.viewport = null;
+ }
+ if (!th_viewport) {
+ return;
+ }
+ if (!s) {
+ if (scrollvertical) {
+ th_viewport[0].contentheight ++= constrainPaneV;
+ }
+ } else {
+ th_viewport[0].contentheight --= constrainPaneV;
+ }
+ cascade = s;
+ }
+ }
+
+ /** set up viewport */
+ th_viewport ++= function(v) {
+ // clean up existing viewport
+ if (th_viewport) {
+ if (!scrollhorizontal) {
+ th_viewport[0].width --= constrainPaneH;
+ }
+ if (!scrollvertical) {
+ th_viewport[0].height --= constrainPaneV;
+ }
+ }
+ // set up new viewport
+ cascade = v;
+ if (scrollhorizontal) {
+ th_hscroll.viewport = v;
+ } else {
+ v[0].width ++= constrainPaneH;
+ }
+ if (scrollvertical) {
+ th_vscroll.viewport = v;
+ } else {
+ v[0].height ++= constrainPaneV;
+ }
+ // usually these are the same
+ if (th_uiport==null) {
+ th_uiport = v;
+ }
+ }
+
+ /** th_uiport is used in case the viewport is virtual
+ * in which case uiport represents the ui area that
+ * would otherwise be the viewport
+ */
+ thisbox.th_uiport ++= function(v) {
+ cascade = v;
+ th_hscroll.uiport = v;
+ th_vscroll.uiport = v;
+ }
+
+ // assign static traps
+
+ thisbox.autohide ++= static.autohideWrite;
+ thisbox.autohide ++= static.autohideRead;
+ thisbox.scroll ++= static.scrollWrite;
+ thisbox.scroll ++= static.scrollRead;
+ thisbox.hinset ++= static.hinsetRead;
+ thisbox.vinset ++= static.vinsetRead;
+ thisbox.viewheight ++= static.viewheightRead;
+ thisbox.viewwidth ++= static.viewwidthRead;
+ thisbox.viewx ++= static.viewxRead;
+ thisbox.viewx ++= static.viewxWrite;
+ thisbox.viewy ++= static.viewyRead;
+ thisbox.viewy ++= static.viewyWrite;
+
+ </ui:Box>
+
+ /** write trap to set autohide on scrollbars */
+ static.autohideWrite = function(v) { trapee.autohidehorizontal = v;
trapee.autohidevertical = v; return; }
+
+ /** read trap to return current autohide state */
+ static.autohideRead = function() { return trapee.autohidehorizontal and
trapee.autohidevertical; }
+
+ /** write trap to enable or disable scrollbars */
+ static.scrollWrite = function(v) { trapee.scrollhorizontal = v;
trapee.scrollvertical = v; return; }
+
+ /** read trap to return current scroll state */
+ static.scrollRead = function() { return trapee.scrollhorizontal and
trapee.scrollvertical; }
+
+ var max = vexi.math.max;
+ var min = vexi.math.min;
+
+ /** return horizontal inset caused by vertical scrollbar */
+ static.hinsetRead = function() { return trapee.th_vscroll.display ?
trapee.th_vscroll.width : 0; }
+
+ /** return vertical inset caused by horizontal scrollbar */
+ static.vinsetRead = function() { return trapee.th_hscroll.display ?
trapee.th_hscroll.height : 0; }
+
+ /** return the height of the viewport */
+ static.viewheightRead = function() { return trapee.th_viewport.height; }
+
+ /** return the width of the viewport */
+ static.viewwidthRead = function() { return trapee.th_viewport.width; }
+
+ /** set the view x offset */
+ static.viewxWrite = function(v) {
+ var vp = trapee.th_viewport;
+ var ox = max(0, min(v, vp[0].width - vp.width));
+ vp[0].x = -ox;
+ return;
+ }
+
+ /** fetch the view x offset */
+ static.viewxRead = function() { return -trapee.th_viewport[0].x; }
+
+ /** set the view y offset */
+ static.viewyWrite = function(v) {
+ var vp = trapee.th_viewport;
+ var oy = max(0, min(v, vp[0].height - vp.height));
+ vp[0].y = -oy;
+ return;
+ }
+
+ /** fetch the view y offset */
+ static.viewyRead = function() { return -trapee.th_viewport[0].y; }
+
+</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollbar.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollbar.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,375 +0,0 @@
-<!-- Copyright 2009 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns="org.vexi.lib.role">
- <meta:doc>
- <author>Charles Goodwin</author>
- <usage>
- * th_thumb should be a role.draggable
- * viewport should have the structure:
- <box layout="place"><box /></box>
- </usage>
- </meta:doc>
-
- <polarizable />
- <ui:box>
-
- // public variables
- thisbox.lineheight = vexi.ui.font.height(font, fontsize, "dp");
- thisbox.mwheelshift = 4;
- thisbox.pageshift;
- thisbox.autohide;
- thisbox.enabled = true;
- thisbox.hide;
- thisbox.minthumbsize;
- thisbox.shift;
- thisbox.uiport;
- thisbox.viewport;
-
- // theme box variables
- thisbox.th_back;
- thisbox.th_next;
- thisbox.th_thumb;
- thisbox.th_track;
-
- // private variables
- var listeners = {};
- var percent;
- var percentset;
- var trackpos;
-
- // for efficient lookups
- var max = vexi.math.max;
- var min = vexi.math.min;
- var thumb, track;
- var vport, varea;
-
- ////////
- // sync functions
-
- /** sync viewport with thumb position */
- const syncViewport = function() {
- if (vport and varea)
- varea[pos] = percent * (vport[dim] - varea[dim]);
- }
-
- /** sync specific listener with viewport position */
- const syncListener = function(v) {
- if (v and v[0]) v[0][pos] = percent * (v[dim] - v[0][dim]);
- }
-
- /** syncs all listeners with viewport position */
- const syncAllListeners = function(v) {
- // BROKEN - disabling this, it prevents button from working
(until thumb has been moved)
- // Once motion is set it doesn't seem to get unset in normal
use, so it seems like
- // a useless check.
-// if (motion) {
- for (var key in listeners) {
- if (v == key) continue;
- syncListener(key);
- }
-// }
- }
-
- /** sync thumb with viewport size and position */
- const syncThumb = function() {
- // don't do much if we're hidden
- if (hide) display = false;
- // conditions where thumb placement is not [yet] desirable
- else if (!surface || vport == null || varea == null || vport[dim]
>= varea[dim]) {
- if (enabled) enabled = false;
- if (autohide) display = false;
- else {
- thumb[dim] = track[dim];
- thumb[pos] = 0;
- }
- // display, size, and place thumb
- } else {
- if (!enabled) enabled = true;
- if (!display) display = true;
- thumb[dim] =
- max(minthumbsize,
- min(track[dim],
- (vport[dim] / varea[dim]) * track[dim]));
- thumb[pos] = max(0, (track[dim] - thumb[dim]) * percent);
- }
- }
-
- ////////
- // trap functions to invoke sync
-
- /** invokes sync funcs on all but listener trapee */
- const listenerMove = function(v) {
- if (trapee[trapname] == v) return;
- cascade = v;
- if (percentset or !trapee.constrain) return;
- percentset = true;
- percent = trapee[0][pos] / (trapee[0][dim] - trapee[dim]);
- syncAllListeners(trapee);
- syncViewport();
- percentset = false;
- }
-
- /** listener resized - sync with viewport */
- const listenerResize = function(v) { cascade = v;
syncListener(trapee); }
-
- const syncThumbTrap = function(v) { cascade = v; syncThumb(); }
-
- const viewportMove = function(v) {
- cascade = min(0, max(v, vport[dim] - varea[dim]));
- if (percentset) return;
- percentset = true;
- percent = varea[pos] / (vport[dim] - varea[dim]);
- syncThumb();
- syncAllListeners();
- percentset = false;
- }
-
- /** viewport or varea resized */
- const viewportResize = function(v) {
- var v0 = trapee[trapname];
- if(v==v0) return;
-
- cascade = v;
- if (percentset) return;
- // avoid resetting percent
- percentset = true;
- // viewport bigger than view subject
- if (vport[dim] >= varea[dim]) varea[pos] = 0;
- // constrain viewport position
- else varea[pos] = -percent * (varea[dim] - vport[dim]);
- // sync thumbsize to viewport
- syncThumb();
- percentset = false;
- }
-
- /** vertical mousewheel movement */
- const mwheelWrite = function(v) {
- if (display and (track[dim] > thumb[dim])) {
- shift = lineheight * v * mwheelshift;
- return;
- }
- cascade = v;
- }
-
- ////////
- // public functions
-
- /** add listener (weak viewport) to the scrollbar */
- thisbox.addListener = function(v) {
- listeners[v] = true;
- v[dim] ++= listenerResize;
- v[0][dim] ++= listenerResize;
- v[0][pos] ++= listenerMove;
- syncListener(v);
- }
-
- /** remove listener (weak viewport) to the scrollbar */
- thisbox.removeListener = function(v) {
- if (listeners[v] != null) {
- listeners[v][dim] --= listenerResize;
- listeners[v][0][dim] --= listenerResize;
- listeners[v][0][pos] --= listenerMove;
- (keysof(listeners)).remove(v);
- }
- }
-
- ////////
- // public property traps
-
- autohide ++= syncThumbTrap;
- minthumbsize ++= static.minthumbsizeWrite;
- pageshift ++= static.pageshiftRead;
- v_container ++= static.containerWrite;
-
- /** adjust scrollbar orient - "horizontal" or "vertical" */
- orient ++= function(v) {
- if (v == orient) return;
- cascade = v;
- // reassign track traps
- if (track) {
- track[flip(dim)] --= syncThumbTrap;
- track[dim] ++= syncThumbTrap;
- track[flip(mindim)] = 0;
- track[mindim] = minthumbsize;
- }
- // reassign viewport traps
- if (vport) {
- if (!varea) throw "viewport must have a child";
- // react to viewport resize
- vport[flip(dim)] --= viewportResize;
- vport[dim] ++= viewportResize;
- // react to viewarea resize
- varea[flip(dim)] --= viewportResize;
- varea[dim] ++= viewportResize;
- // react to viewarea movement
- varea[flip(pos)] --= viewportMove;
- varea[pos] ++= viewportMove;
- }
- // reassign uiport traps
- if (uiport) {
- uiport[flip(mousewheel)] --= mwheelWrite;
- uiport[mousewheel] ++= mwheelWrite;
- }
- // reassign listener traps
- const olddim = flip(dim);
- const oldpos = flip(pos);
- const newdim = dim;
- const newpos = pos;
- for (var key in listeners) {
- dim = olddim;
- pos = oldpos;
- removeListener(key);
- dim = newdim;
- pos = newpos;
- addListener(key);
- }
- }
-
- /** attempt to shift viewport by given amount */
- shift ++= function(v) {
- varea[pos] =
- min(0,
- max(vport[dim] - varea[dim],
- varea[pos] - v));
- return;
- }
-
- /** set up viewport */
- viewport ++= function(v) {
- // clean up old viewport
- if (vport) {
- if (!varea) throw "viewport must have a child";
- vport[dim] --= viewportResize;
- varea[dim] --= viewportResize;
- varea[pos] --= viewportMove;
- }
- // set up new viewport
- if (v) {
- if (!v[0]) throw "viewport must have a child";
- v[dim] ++= viewportResize;
- v[0][dim] ++= viewportResize;
- v[0][pos] ++= viewportMove;
- }
- cascade = v;
- vport = v;
- varea = v ? v[0] : null;
- syncThumb();
- }
-
- /** set up ui port (see scrollpane uiport) in case viewport is virtual
*/
- uiport ++= function(v) {
- if (uiport) {
- uiport[mousewheel] --= mwheelWrite;
- }
- if (v) {
- v[mousewheel] ++= mwheelWrite;
- }
- cascade = v;
- }
-
- ////////
- // theme trap assignments
-
- /** move up a line */
- const backAction = function(a) { shift = -(mwheelshift * lineheight);
cascade = a; }
-
- /** set up back button */
- th_back ++= function(v) {
- v.action ++= backAction;
- v.focusable = false;
- cascade = v;
- }
-
- /** move down a line */
- const nextAction = function(a) { shift = mwheelshift * lineheight;
cascade = a; }
-
- /** set up next button */
- th_next ++= function(v) {
- v.action ++= nextAction;
- v.focusable = false;
- cascade = v;
- }
-
- /** invokes a pageshift in appropriate direction */
- const trackAction = function(a) {
- const trackpos = track.mouse[pos];
- if (thumb[pos] > trackpos) shift = -pageshift;
- else if (trackpos > thumb[pos] + thumb[dim]) shift = pageshift;
- cascade = a;
- }
-
- /** set up track */
- th_track ++= function(v) {
- v[dim] ++= syncThumbTrap;
- v.action ++= trackAction;
- v[mindim] = minthumbsize;
- cascade = v;
- track = v;
- }
-
- /** thumb is moved by user */
- var lastpos;
- var limitpos;
- var startpos;
- const thumbStart = function(v) {
- motion = true;
- startpos = v==1 ? thumb[pos] : varea[pos];
- limitpos = v==1 ? track[dim] - thumb[dim] : vport[dim] -
varea[dim];
- return;
- }
- const thumbStop = function(v) { motion = false; lastpos = null;
return; }
- const thumbMove = function(d) {
- // avoid duplicates (when flip(pos) changes)
- if (d[pos] == lastpos) return;
- lastpos = d[pos];
- // RMB drags relative to the content
- if (d.button == 2) {
- varea[pos] = min(0, max(limitpos, startpos - d[pos]));
- return;
- }
- // LMB drags relative to the scrollbar
- thumb[pos] = max(0, min(limitpos, startpos + d[pos]));
- if (percentset) return;
- // set percent according to thumb
- percentset = true;
- percent = thumb[pos] / (track[dim] - thumb[dim]);
- syncViewport();
- syncAllListeners();
- percentset = false;
- return;
- }
-
- /** set up scrollbar thumb */
- th_thumb ++= function(v) {
- v.dragUpdate ++= thumbMove;
- v.dragStart ++= thumbStart;
- v.dragStop ++= thumbStop;
- v.dragButton = 2;
- cascade = v;
- thumb = v;
- }
-
- </ui:box>
-
- /** scrollbars can not have content */
- static.containerWrite = function(v) { cascade = v; trapee.v_content =
null; }
-
- /** updates the lineheight as used by mousewheel scrolling */
- static.fontWrite = function(v) {
- cascade = v;
- trapee.lineheight = vexi.ui.font.height(trapee.font, trapee.fontsize,
"dp");
- }
-
- /** constrain track to minimum size of thumb */
- static.minthumbsizeWrite = function(v) {
- cascade = v;
- if (trapee.th_track) trapee.th_track[trapee.mindim] = v;
- }
-
- /** return amount by which to shift a full page */
- static.pageshiftRead = function() {
- if (trapee.viewport) return 0.9 * (trapee.viewport[trapee.dim]);
- else return 0;
- }
-
-</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollpane.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollpane.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/lib/widget/scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,233 +0,0 @@
-<!-- Copyright 2009 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns="org.vexi.lib.widget"
- xmlns:common="vexi.util.common">
- <meta:doc>
- <author>Charles Goodwin</author>
- <fixme>
- - toggling autohidehorizontal/vertical does not toggle autohide
- - setting scrollhorizontal/vertical is not guarranteed as autohide
- also sets the display properties on scrollbars
- </fixme>
- </meta:doc>
-
- <ui:box>
-
- // public variables
- thisbox.autohide;
- thisbox.autohidehorizontal = false;
- thisbox.autohidevertical = false;
- thisbox.scrollhorizontal = true;
- thisbox.scrollvertical = true;
-
- // theme variables
- thisbox.th_hscroll;
- thisbox.th_vscroll;
- thisbox.th_viewport;
- thisbox.th_uiport;
-
- /** reusable function for write traps that constrain the viewport to
the contents */
- var constrainPaneH = function(v) { cascade = v; th_viewport.minwidth =
th_viewport[0].contentwidth; }
-
- /** reusable function for write traps that constrain the viewport to
the contents */
- var constrainPaneV = function(v) { cascade = v; th_viewport.minheight
= th_viewport[0].contentheight; }
-
- // apply constrain traps
- hshrink ++= constrainPaneH;
- vshrink ++= constrainPaneV;
-
- /** set up horizontal scrollbar */
- th_hscroll ++= function(v) {
- cascade = v;
-
- /** autohide th_hscroll */
- autohidehorizontal ++= function(a) {
- if (v == autohidehorizontal) {
- return;
- }
- v.autohide = a;
- cascade = a;
- }
-
- /** toggle horizontal scrollbar */
- scrollhorizontal ++= function(s) {
- if (v.display != s) {
- v.display = s;
- }
- if (s and v.viewport != th_viewport) {
- v.viewport = th_viewport;
- }
- if (!s and v.viewport == th_viewport) {
- v.viewport = null;
- }
- if (!th_viewport) {
- return;
- }
- if (!s) {
- if (scrollhorizontal) {
- th_viewport[0].contentwidth ++= constrainPaneH;
- }
- } else {
- th_viewport[0].contentwidth --= constrainPaneH;
- }
- cascade = s;
- }
- }
-
- /** set up vertical scrollbar */
- th_vscroll ++= function(v) {
- cascade = v;
-
- /** autohide th_vscroll */
- autohidevertical ++= function(a) {
- if (a == autohidevertical) {
- return;
- }
- v.autohide = a;
- cascade = a;
- }
-
- /** toggle vertical scrollbar */
- scrollvertical ++= function(s) {
- if (v.display != s) {
- v.display = s;
- }
- if (s and v.viewport != th_viewport) {
- v.viewport = th_viewport;
- }
- if (!s and v.viewport == th_viewport) {
- v.viewport = null;
- }
- if (!th_viewport) {
- return;
- }
- if (!s) {
- if (scrollvertical) {
- th_viewport[0].contentheight ++= constrainPaneV;
- }
- } else {
- th_viewport[0].contentheight --= constrainPaneV;
- }
- cascade = s;
- }
- }
-
- /** set up viewport */
- th_viewport ++= function(v) {
- // clean up existing viewport
- if (th_viewport) {
- if (!scrollhorizontal) {
- th_viewport[0].width --= constrainPaneH;
- }
- if (!scrollvertical) {
- th_viewport[0].height --= constrainPaneV;
- }
- }
- // set up new viewport
- cascade = v;
- if (scrollhorizontal) {
- th_hscroll.viewport = v;
- } else {
- v[0].width ++= constrainPaneH;
- }
- if (scrollvertical) {
- th_vscroll.viewport = v;
- } else {
- v[0].height ++= constrainPaneV;
- }
- // usually these are the same
- if (th_uiport==null) {
- th_uiport = v;
- }
- }
-
- /** th_uiport is used in case the viewport is virtual
- * in which case uiport represents the ui area that
- * would otherwise be the viewport
- */
- thisbox.th_uiport ++= function(v) {
- cascade = v;
- th_hscroll.uiport = v;
- th_vscroll.uiport = v;
- }
-
- // assign static traps
-
- thisbox.autohide ++= static.autohideWrite;
- thisbox.autohide ++= static.autohideRead;
- thisbox.scroll ++= static.scrollWrite;
- thisbox.scroll ++= static.scrollRead;
- thisbox.hinset ++= static.hinsetRead;
- thisbox.vinset ++= static.vinsetRead;
- thisbox.viewheight ++= static.viewheightRead;
- thisbox.viewwidth ++= static.viewwidthRead;
- thisbox.viewx ++= static.viewxRead;
- thisbox.viewx ++= static.viewxWrite;
- thisbox.viewy ++= static.viewyRead;
- thisbox.viewy ++= static.viewyWrite;
-
- // TODO - remove these
-
- thisbox.getViewportHeight ++= common..noFunction;
- thisbox.getViewportWidth ++= common..noFunction;
- thisbox.getHorizontalInset ++= common..noFunction;
- thisbox.getVerticalInset ++= common..noFunction;
- thisbox.getOffset ++= common..noFunction;
- thisbox.getXOffset ++= common..noFunction;
- thisbox.getYOffset ++= common..noFunction;
- thisbox.setOffset ++= common..noFunction;
- thisbox.setXOffset ++= common..noFunction;
- thisbox.setYOffset ++= common..noFunction;
-
- </ui:box>
-
- /** write trap to set autohide on scrollbars */
- static.autohideWrite = function(v) { trapee.autohidehorizontal = v;
trapee.autohidevertical = v; return; }
-
- /** read trap to return current autohide state */
- static.autohideRead = function() { return trapee.autohidehorizontal and
trapee.autohidevertical; }
-
- /** write trap to enable or disable scrollbars */
- static.scrollWrite = function(v) { trapee.scrollhorizontal = v;
trapee.scrollvertical = v; return; }
-
- /** read trap to return current scroll state */
- static.scrollRead = function() { return trapee.scrollhorizontal and
trapee.scrollvertical; }
-
- var max = vexi.math.max;
- var min = vexi.math.min;
-
- /** return horizontal inset caused by vertical scrollbar */
- static.hinsetRead = function() { return trapee.th_vscroll.display ?
trapee.th_vscroll.width : 0; }
-
- /** return vertical inset caused by horizontal scrollbar */
- static.vinsetRead = function() { return trapee.th_hscroll.display ?
trapee.th_hscroll.height : 0; }
-
- /** return the height of the viewport */
- static.viewheightRead = function() { return trapee.th_viewport.height; }
-
- /** return the width of the viewport */
- static.viewwidthRead = function() { return trapee.th_viewport.width; }
-
- /** set the view x offset */
- static.viewxWrite = function(v) {
- var vp = trapee.th_viewport;
- var ox = max(0, min(v, vp[0].width - vp.width));
- vp[0].x = -ox;
- return;
- }
-
- /** fetch the view x offset */
- static.viewxRead = function() { return -trapee.th_viewport[0].x; }
-
- /** set the view y offset */
- static.viewyWrite = function(v) {
- var vp = trapee.th_viewport;
- var oy = max(0, min(v, vp[0].height - vp.height));
- vp[0].y = -oy;
- return;
- }
-
- /** fetch the view y offset */
- static.viewyRead = function() { return -trapee.th_viewport[0].y; }
-
-</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollbar.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollbar.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollbar.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,72 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:ui="vexi://ui"
+ xmlns:lib="org.vexi.lib.gui"
+ xmlns:role="org.vexi.lib.role"
+ xmlns="vexi.theme">
+
+ <lib:Scrollbar />
+ <ui:Box minthumbsize="8">
+ <lib.Button id="back" width="16" height="16" repeats="true"
shrink="true">
+ <ui:Box layout="place"><ui:Box id="backimg" debug="true"
shrink="true" /></ui:Box>
+ </lib.Button>
+ <role:Clickable id="track" align="topleft" enabled="true"
fill=":.image.scrollbg" layout="place" repeats="true">
+ <ui:Box id="shadow" fill="#c4c0b8" display="false" />
+ <role:Draggable id="thumb">
+ <Bevel fill=":.Settings..widgetfill" form="up" />
+ </role:Draggable>
+ </role:Clickable>
+ <lib.Button id="next" width="16" height="16" repeats="true"
shrink="true">
+ <ui:Box layout="place"><ui:Box id="nextimg" debug="true"
shrink="true" /></ui:Box>
+ </lib.Button>
+
+ thisbox.th_back = $back;
+ thisbox.th_next = $next;
+ thisbox.th_thumb = $thumb;
+ thisbox.th_track = $track;
+
+ /** set orient specific visual elements */
+ thisbox.orient ++= function(v) {
+ cascade = v;
+ thisbox[shr] = false;
+ thisbox[flip(shr)] = true;
+ if (horizontal) {
+ $backimg.fill = .image.arrowleft;
+ $nextimg.fill = .image.arrowright;
+ } else {
+ $backimg.fill = .image.arrowup;
+ $nextimg.fill = .image.arrowdown;
+ }
+ }
+
+ /** prevent thumb presses from activating track action */
+ $track.Press1 ++= function(v) { if ($thumb.mouse.inside) return;
cascade = v; }
+
+ /** set shadow to cover track to one side of the thumb */
+ var setShadow = function() {
+ var thumbpos = $thumb[pos];
+ var thumbdim = $thumb[dim];
+ var trackpos = $track.mouse[pos];
+ if (thumbpos > trackpos) {
+ $shadow.display = true;
+ $shadow[dim] = $thumbpos;
+ $shadow[pos] = 0;
+ } else if (trackpos > thumbpos + thumbdim) {
+ $shadow.display = true;
+ $shadow[dim] = $track[dim] - thumbdim - thumbpos;
+ $shadow[pos] = thumbdim + thumbpos;
+ }
+ }
+
+ /** trap function to invoke setShadow() */
+ var syncShadow = function(v) {
+ cascade = v;
+ if (v) setShadow();
+ else $shadow.display = false;
+ }
+
+ $track.action ++= syncShadow;
+ $track.repeat ++= syncShadow;
+
+ </ui:Box>
+</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollpane.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollpane.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollpane.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/Scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,38 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:ui="vexi://ui"
+ xmlns:lib="org.vexi.lib.gui"
+ xmlns="vexi.theme">
+
+ <lib:Scrollpane redirect=":$content">
+ <ui:Box orient="vertical">
+ <ui:Box id="view" align="topleft" layout="place">
+ <ui:Box id="content" align="topleft" />
+ </ui:Box>
+ <Scrollbar id="hscroll" orient="horizontal" />
+ </ui:Box>
+ <ui:Box orient="vertical" hshrink="true">
+ <Scrollbar id="vscroll" orient="vertical" />
+ <ui:Box id="inset" fill=":.Settings..panefill" shrink="true" />
+ </ui:Box>
+
+ thisbox.v_fillbox = $content;
+ thisbox.th_hscroll = $hscroll;
+ thisbox.th_vscroll = $vscroll;
+ thisbox.th_viewport = $view;
+
+ $hscroll.height ++= function(v) { $inset.height = v; cascade = v; }
+ $vscroll.width ++= function(v) { $inset.width = v; cascade = v; }
+
+ // REMARK: once the scrollbars are shown, they fix the minimum size
+ // in order to prevent a loop where the scrollbars appear increasing
+ // the size of $view beyond the content size, hiding the scrollbars
+
+ $hscroll.contentwidth ++= function(v) { $view.minwidth = v; cascade =
v; }
+ $vscroll.contentheight ++= function(v) { $view.minheight = v; cascade
= v; }
+
+ $hscroll.display ++= function(v) { $inset.display = (v and
$vscroll.display); cascade = v; }
+ $vscroll.display ++= function(v) { $inset.display = (v and
$hscroll.display); cascade = v; }
+
+ </lib:Scrollpane>
+</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/Button.t
(from rev 4793,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/button.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/Button.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/Button.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,24 @@
+<!-- Copyright (c) - see COPYING for details [LGPL] -->
+
+<vexi xmlns:gui="org.vexi.lib.gui"
+ xmlns:role="org.vexi.lib.role"
+ xmlns="org.vexi.theme.classic">
+
+ // a no-frills button i.e. no focus, margin, padding etc
+
+ <role:Clickable />
+ <Bevel>
+ {
+ const button_ = .Button[""];
+ active ++= button_.activeWrite;
+ hover ++= button_.normalWrite;
+ hover ++= button_.normalWrite;
+ normal ++= button_.normalWrite;
+ v_defaultSettings = static.defaultSettings;
+ }
+ </Bevel>
+ <gui:Defaults />
+
+ static.defaultSettings = { fill: .Settings..buttonfill };
+
+</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/button.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/button.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/lib/button.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,21 +0,0 @@
-<!-- Copyright (c) - see COPYING for details [LGPL] -->
-
-<vexi xmlns:lay="org.vexi.lib.layout"
- xmlns:role="org.vexi.lib.role"
- xmlns="org.vexi.theme.classic">
-
- // a no-frills button i.e. no focus, margin, padding etc
-
- <role:Clickable />
- <Bevel>
-
- var button_static = .Button[""];
- active ++= button_static.activeWrite;
- hover ++= button_static.normalWrite;
- hover ++= button_static.normalWrite;
- normal ++= button_static.normalWrite;
- v_init = button_static.init;
-
- </Bevel>
- <lay:container />
-</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollbar.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollbar.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,73 +0,0 @@
-<!-- Copyright 2011 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns="vexi.theme"
- xmlns:lib="org.vexi.lib.widget" xmlns:role="org.vexi.lib.role">
- <meta:doc>
- <author>Charles Goodwin</author>
- </meta:doc>
-
- <lib:scrollbar />
- <ui:box minthumbsize="8">
- <lib.button id="back" width="16" height="16" repeats="true"
shrink="true">
- <ui:box layout="place"><ui:box id="backimg" debug="true"
shrink="true" /></ui:box>
- </lib.button>
- <role:clickable id="track" align="topleft" enabled="true"
fill=":.image.scrollbg" layout="place" repeats="true">
- <ui:box id="shadow" fill="#c4c0b8" display="false" />
- <role:draggable id="thumb">
- <bevel fill=":.settings..widgetfill" form="up" />
- </role:draggable>
- </role:clickable>
- <lib.button id="next" width="16" height="16" repeats="true"
shrink="true">
- <ui:box layout="place"><ui:box id="nextimg" debug="true"
shrink="true" /></ui:box>
- </lib.button>
-
- thisbox.th_back = $back;
- thisbox.th_next = $next;
- thisbox.th_thumb = $thumb;
- thisbox.th_track = $track;
-
- /** set orient specific visual elements */
- thisbox.orient ++= function(v) {
- cascade = v;
- thisbox[shr] = false;
- thisbox[flip(shr)] = true;
- if (horizontal) {
- $backimg.fill = .image.arrowleft;
- $nextimg.fill = .image.arrowright;
- } else {
- $backimg.fill = .image.arrowup;
- $nextimg.fill = .image.arrowdown;
- }
- }
-
- /** prevent thumb presses from activating track action */
- $track.Press1 ++= function(v) { if ($thumb.mouse.inside) return;
cascade = v; }
-
- /** set shadow to cover track to one side of the thumb */
- var setShadow = function() {
- var thumbpos = $thumb[pos];
- var thumbdim = $thumb[dim];
- var trackpos = $track.mouse[pos];
- if (thumbpos > trackpos) {
- $shadow.display = true;
- $shadow[dim] = $thumbpos;
- $shadow[pos] = 0;
- } else if (trackpos > thumbpos + thumbdim) {
- $shadow.display = true;
- $shadow[dim] = $track[dim] - thumbdim - thumbpos;
- $shadow[pos] = thumbdim + thumbpos;
- }
- }
-
- /** trap function to invoke setShadow() */
- var syncShadow = function(v) {
- cascade = v;
- if (v) setShadow();
- else $shadow.display = false;
- }
-
- $track.action ++= syncShadow;
- $track.repeat ++= syncShadow;
-
- </ui:box>
-</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollpane.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollpane.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/org/vexi/theme/classic/scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,40 +0,0 @@
-<!-- Copyright 2011 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns="vexi.theme"
- xmlns:lib="org.vexi.lib.widget">
- <meta:doc>
- <author>Charles Goodwin</author>
- </meta:doc>
-
- <lib:scrollpane redirect=":$content">
- <ui:box orient="vertical">
- <ui:box id="view" align="topleft" layout="place">
- <ui:box id="content" align="topleft" />
- </ui:box>
- <scrollbar id="hscroll" orient="horizontal" />
- </ui:box>
- <ui:box orient="vertical" hshrink="true">
- <scrollbar id="vscroll" orient="vertical" />
- <ui:box id="inset" fill=":.settings..panefill" shrink="true" />
- </ui:box>
-
- thisbox.v_fillbox = $content;
- thisbox.th_hscroll = $hscroll;
- thisbox.th_vscroll = $vscroll;
- thisbox.th_viewport = $view;
-
- $hscroll.height ++= function(v) { $inset.height = v; cascade = v; }
- $vscroll.width ++= function(v) { $inset.width = v; cascade = v; }
-
- // REMARK: once the scrollbars are shown, they fix the minimum size
- // in order to prevent a loop where the scrollbars appear increasing
- // the size of $view beyond the content size, hiding the scrollbars
-
- $hscroll.contentwidth ++= function(v) { $view.minwidth = v; cascade =
v; }
- $vscroll.contentheight ++= function(v) { $view.minheight = v; cascade
= v; }
-
- $hscroll.display ++= function(v) { $inset.display = (v and
$vscroll.display); cascade = v; }
- $vscroll.display ++= function(v) { $inset.display = (v and
$hscroll.display); cascade = v; }
-
- </lib:scrollpane>
-</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollbar.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollbar.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollbar.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,27 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:meta="vexi://meta"
+ xmlns="vexi.theme">
+
+ <meta:doc>
+ <name>Scrollbar</name>
+ <desc>A scrollbar widget, commonly found in scrollpanes</desc>
+ <usage>
+ It is recommended that you use vexi.widget.scrollpane in most
+ cases, as you have to manually set up a scrollbar.
+
+ To set up a scrollbar, you assign a box to the viewport property
+ of the scrollbar. The viewport box should contain a child box,
+ and the viewport layout as place and align being topleft.
+
+ <Box id="vp" align="topleft" layout="place">
+ <Box id="c" />
+ </Box>
+ <Scrollbar id="s" />
+
+ $s.viewport = $viewport;
+ </usage>
+ </meta:doc>
+
+ <Scrollbar />
+</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollpane.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollpane.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollpane.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/gui/Scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,17 @@
+<!-- Copyright 2015 - see COPYING for details [LGPL] -->
+
+<vexi xmlns:meta="vexi://meta"
+ xmlns="vexi.theme">
+
+ <meta:doc>
+ <name>Scrollpane</name>
+ <desc>A scrollpane widget</desc>
+ <usage>
+ Wrap scrollpane around a box/set of boxes to allow panning.
+ To hide scrollbars automatically, set autohidehorizontal and
autohidevertical.
+ To disable scrollbars, unset scrollhorizontal or scrollvertical.
+ </usage>
+ </meta:doc>
+
+ <Scrollpane />
+</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollbar.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollbar.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollbar.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,27 +0,0 @@
-<!-- Copyright 2009 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:theme="vexi.theme"
- xmlns="org.vexi.lib.layout">
- <meta:doc>
- <name>Scrollbar</name>
- <desc>A scrollbar widget, commonly found in scrollpanes</desc>
- <usage>
- It is recommended that you use vexi.widget.scrollpane in most
- cases, as you have to manually set up a scrollbar.
-
- To set up a scrollbar, you assign a box to the viewport property
- of the scrollbar. The viewport box should contain a child box,
- and the viewport layout as place and align being topleft.
-
- <ui:box id="vp" align="topleft" layout="place">
- <ui:box id="c" />
- </ui:box>
- <scrollbar id="s" />
-
- $s.viewport = $viewport;
- </usage>
- </meta:doc>
-
- <margin />
- <theme:scrollbar />
-</vexi>
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollpane.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollpane.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_main/vexi/widget/scrollpane.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,19 +0,0 @@
-<!-- Copyright 2009 - see COPYING for details [LGPL] -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:meta="vexi://meta" xmlns:theme="vexi.theme"
- xmlns="org.vexi.lib.layout">
- <meta:doc>
- <name>Scrollpane</name>
- <desc>A scrollpane widget</desc>
- <usage>
- Wrap scrollpane around a box/set of boxes to allow panning.
- To hide scrollbars automatically, set autohidehorizontal and
autohidevertical.
- To disable scrollbars, unset scrollhorizontal or scrollvertical.
- </usage>
- </meta:doc>
-
- <margin />
- <theme:scrollpane />
- <pad />
- <container />
-</vexi>
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/gui/Scroll.t
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/scroll.t)
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/gui/Scroll.t
(rev 0)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/gui/Scroll.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -0,0 +1,19 @@
+<!-- public domain -->
+
+<vexi xmlns:ui="vexi://ui" xmlns:img="poke.image" xmlns="vexi.gui">
+ <Surface />
+ <ui:Box frameheight="200">
+ <ui:Box>
+ <Scrollbar orient="horizontal" />
+ </ui:Box>
+ <Bevel form="down">
+ <Scrollpane>
+ <ui:Box fill=":img.pacman_origin" shrink="true" />
+ </Scrollpane>
+ </Bevel>
+ <ui:Box>
+ <Scrollbar orient="vertical" />
+ </ui:Box>
+ vexi.ui.frame = thisbox;
+ </ui:Box>
+</vexi>
\ No newline at end of file
Copied:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/image/pacman_origin.jpg
(from rev 4785,
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/pacman_origin.jpg)
===================================================================
(Binary files differ)
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/pacman_origin.jpg
===================================================================
(Binary files differ)
Deleted:
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/scroll.t
===================================================================
---
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/scroll.t
2015-05-12 21:58:49 UTC (rev 4795)
+++
branches/vexi3_integrated_layout/org.vexi-vexi.widgets/src_poke/poke/widgets/scroll.t
2015-05-23 11:30:20 UTC (rev 4796)
@@ -1,21 +0,0 @@
-<!-- public domain -->
-
-<vexi xmlns:ui="vexi://ui" xmlns:w="vexi.widget">
- <w:surface />
- <ui:box frameheight="200">
- <ui:box>
- <w:scrollbar orient="horizontal" />
- </ui:box>
- <w:bevel form="down">
- <w:scrollpane>
- <ui:box shrink="true">
- fill = .test["pacman_origin.jpg"];
- </ui:box>
- </w:scrollpane>
- </w:bevel>
- <ui:box>
- <w:scrollbar orient="vertical" />
- </ui:box>
- vexi.ui.frame = thisbox;
- </ui:box>
-</vexi>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
One dashboard for servers and applications across Physical-Virtual-Cloud
Widest out-of-the-box monitoring support with 50+ applications
Performance metrics, stats and reports that give you Actionable Insights
Deep dive visibility with transaction tracing using APM Insight.
http://ad.doubleclick.net/ddm/clk/290420510;117567292;y
_______________________________________________
Vexi-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/vexi-svn