font.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. define(function(require, exports, module) {
  2. var kity = require('../core/kity');
  3. var utils = require('../core/utils');
  4. var Minder = require('../core/minder');
  5. var MinderNode = require('../core/node');
  6. var Command = require('../core/command');
  7. var Module = require('../core/module');
  8. var TextRenderer = require('./text');
  9. function getNodeDataOrStyle(node, name) {
  10. return node.getData(name) || node.getStyle(name);
  11. }
  12. TextRenderer.registerStyleHook(function(node, textGroup) {
  13. var dataColor = node.getData('color');
  14. var selectedColor = node.getStyle('selected-color');
  15. var styleColor = node.getStyle('color');
  16. var foreColor = dataColor || (node.isSelected() && selectedColor ? selectedColor : styleColor);
  17. var fontFamily = getNodeDataOrStyle(node, 'font-family');
  18. var fontSize = getNodeDataOrStyle(node, 'font-size');
  19. textGroup.fill(foreColor);
  20. textGroup.eachItem(function(index, item) {
  21. item.setFont({
  22. 'family': fontFamily,
  23. 'size': fontSize
  24. });
  25. });
  26. });
  27. Module.register('fontmodule', {
  28. 'commands': {
  29. /**
  30. * @command ForeColor
  31. * @description 设置选中节点的字体颜色
  32. * @param {string} color 表示颜色的字符串
  33. * @state
  34. * 0: 当前有选中的节点
  35. * -1: 当前没有选中的节点
  36. * @return 如果只有一个节点选中,返回已选中节点的字体颜色;否则返回 'mixed'。
  37. */
  38. 'forecolor': kity.createClass('fontcolorCommand', {
  39. base: Command,
  40. execute: function(km, color) {
  41. var nodes = km.getSelectedNodes();
  42. nodes.forEach(function(n) {
  43. n.setData('color', color);
  44. n.render();
  45. });
  46. },
  47. queryState: function(km) {
  48. return km.getSelectedNodes().length === 0 ? -1 : 0;
  49. },
  50. queryValue: function(km) {
  51. if (km.getSelectedNodes().length == 1) {
  52. return km.getSelectedNodes()[0].getData('color');
  53. }
  54. return 'mixed';
  55. }
  56. }),
  57. /**
  58. * @command Background
  59. * @description 设置选中节点的背景颜色
  60. * @param {string} color 表示颜色的字符串
  61. * @state
  62. * 0: 当前有选中的节点
  63. * -1: 当前没有选中的节点
  64. * @return 如果只有一个节点选中,返回已选中节点的背景颜色;否则返回 'mixed'。
  65. */
  66. 'background': kity.createClass('backgroudCommand', {
  67. base: Command,
  68. execute: function(km, color) {
  69. var nodes = km.getSelectedNodes();
  70. nodes.forEach(function(n) {
  71. n.setData('background', color);
  72. n.render();
  73. });
  74. },
  75. queryState: function(km) {
  76. return km.getSelectedNodes().length === 0 ? -1 : 0;
  77. },
  78. queryValue: function(km) {
  79. if (km.getSelectedNodes().length == 1) {
  80. return km.getSelectedNodes()[0].getData('background');
  81. }
  82. return 'mixed';
  83. }
  84. }),
  85. /**
  86. * @command FontFamily
  87. * @description 设置选中节点的字体
  88. * @param {string} family 表示字体的字符串
  89. * @state
  90. * 0: 当前有选中的节点
  91. * -1: 当前没有选中的节点
  92. * @return 返回首个选中节点的字体
  93. */
  94. 'fontfamily': kity.createClass('fontfamilyCommand', {
  95. base: Command,
  96. execute: function(km, family) {
  97. var nodes = km.getSelectedNodes();
  98. nodes.forEach(function(n) {
  99. n.setData('font-family', family);
  100. n.render();
  101. km.layout();
  102. });
  103. },
  104. queryState: function(km) {
  105. return km.getSelectedNodes().length === 0 ? -1 : 0;
  106. },
  107. queryValue: function(km) {
  108. var node = km.getSelectedNode();
  109. if (node) return node.getData('font-family');
  110. return null;
  111. }
  112. }),
  113. /**
  114. * @command FontSize
  115. * @description 设置选中节点的字体大小
  116. * @param {number} size 字体大小(px)
  117. * @state
  118. * 0: 当前有选中的节点
  119. * -1: 当前没有选中的节点
  120. * @return 返回首个选中节点的字体大小
  121. */
  122. 'fontsize': kity.createClass('fontsizeCommand', {
  123. base: Command,
  124. execute: function(km, size) {
  125. var nodes = km.getSelectedNodes();
  126. nodes.forEach(function(n) {
  127. n.setData('font-size', size);
  128. n.render();
  129. km.layout(300);
  130. });
  131. },
  132. queryState: function(km) {
  133. return km.getSelectedNodes().length === 0 ? -1 : 0;
  134. },
  135. queryValue: function(km) {
  136. var node = km.getSelectedNode();
  137. if (node) return node.getData('font-size');
  138. return null;
  139. }
  140. })
  141. }
  142. });
  143. });