OSDN Git Service

Added: gui package
[dvibrowser/jdisp.git] / src / js / include / jdisp / gui / Floating.jsh
diff --git a/src/js/include/jdisp/gui/Floating.jsh b/src/js/include/jdisp/gui/Floating.jsh
new file mode 100644 (file)
index 0000000..8adfe50
--- /dev/null
@@ -0,0 +1,77 @@
+#ifndef _JDISP_GUI_FLOATING_JSH\r
+#define _JDISP_GUI_FLOATING_JSH\r
+\r
+OOP_CLASS(Floating) = function()\r
+{\r
+  this.nodes = [];\r
+\r
+  var me = this;\r
+  var f = function () {\r
+    me.adjustComponents();\r
+  };\r
+  PROJECT_PREFIX.domUtils.setScrollHandler(f);\r
+  PROJECT_PREFIX.domUtils.setResizeHandler(f);\r
+  f();\r
+};\r
+OOP_FIELD(Floating, nodes) = null;\r
+\r
+OOP_METHOD(Floating, add) = function (node)\r
+{\r
+  var n = PROJECT_PREFIX.domUtils.getNode(node);\r
+  if (IS_NON_NULL_OBJECT(n)) {\r
+    this.nodes.push(n);\r
+    this.adjustComponent(n);\r
+  }\r
+};\r
+OOP_METHOD(Floating, remove) = function (node)\r
+{\r
+  var n = PROJECT_PREFIX.domUtils.getNode(node);\r
+\r
+  for (var i in this.nodes) {\r
+    if (n === this.nodes[i]) {\r
+      delete this.nodes[i];\r
+    }\r
+  }\r
+};\r
+\r
+OOP_METHOD(Floating, adjustComponents) = function ()\r
+{\r
+  for (var i in this.nodes) {\r
+    var n = this.nodes[i];\r
+    this.adjustComponent(n);\r
+  }\r
+};\r
+\r
+OOP_METHOD(Floating, adjustComponent) = function (node)\r
+{\r
+  var util = PROJECT_PREFIX.domUtils;\r
+  var n = util.getNode(node);\r
+  if (!IS_NON_NULL_OBJECT(n)) return;\r
+  n.style.position = 'absolute';\r
+  var es  = util.getElementSize(n);\r
+  var pos = util.getScrollPosition();\r
+  var cs  = util.getClientSize();\r
+  var ss  = util.getScrollSize();\r
+  var x = cs.width  + pos.x - n.offsetWidth;\r
+  var y = cs.height + pos.y - n.offsetHeight;\r
+  LOG_DEBUG\r
+    ( 'adjustComponent: '\r
+    + ' es=' + PROJECT_PREFIX.stringUtils.formatDimension(es)\r
+    + ' es=' + PROJECT_PREFIX.global.dumpVar(es)\r
+    + ',pos=' + PROJECT_PREFIX.stringUtils.formatPoint(pos)\r
+    + ',cs(b)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getClientSizeByBody())\r
+    + ',cs(de)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getClientSizeByDocument())\r
+    + ',cs=' + PROJECT_PREFIX.stringUtils.formatDimension(cs)\r
+    + ',ss(b)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScrollSizeByBody())\r
+    + ',ss(de)=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScrollSizeByDocument())\r
+    + ',ss=' + PROJECT_PREFIX.stringUtils.formatDimension(ss)\r
+    + ',in=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getInnerSize())\r
+    + ',out=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getOuterSize())\r
+    + ',avail=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getAvailableSize())\r
+    + ',screen=' + PROJECT_PREFIX.stringUtils.formatDimension(util.getScreenSize())\r
+    + ',new=' + PROJECT_PREFIX.stringUtils.formatPoint({x:x,y:y})\r
+    );\r
+  util.setElementPosition(n, x, y);\r
+};\r
+\r
+#endif /* _JDISP_GUI_FLOATING_JSH */\r