Skip to content

Commit

Permalink
feat(bpmn-renderer): allow overriding colors, width, and height
Browse files Browse the repository at this point in the history
* fill, stroke, width and height can be overridden
* no other attributes can be overridden
* public API only exposes renderers for actual BPMN elements
* opacity removed, everything is full opacity
  • Loading branch information
philippfromme committed Oct 25, 2023
1 parent ed24e65 commit 3ce5c33
Show file tree
Hide file tree
Showing 5 changed files with 2,033 additions and 937 deletions.
59 changes: 53 additions & 6 deletions lib/draw/BpmnRenderUtil.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import {
has,
some
} from 'min-dash';

Expand All @@ -16,6 +17,9 @@ import {
* @typedef {import('../model').Element} Element
*
* @typedef {import('../model').ShapeLike} ShapeLike
*
* @typedef {import('diagram-js/lib/util/Types').Dimensions} Dimensions
* @typedef {import('diagram-js/lib/util/Types').Rect} Rect
*/

// re-export for compatibility
Expand All @@ -26,6 +30,7 @@ export {


export var black = 'hsl(225, 10%, 15%)';
export var white = 'white';

// element utils //////////////////////

Expand Down Expand Up @@ -73,39 +78,42 @@ export function isCollection(element) {
/**
* @param {Element} element
* @param {string} [defaultColor]
* @param {string} [overrideColor]
*
* @return {string}
*/
export function getFillColor(element, defaultColor) {
export function getFillColor(element, defaultColor, overrideColor) {
var di = getDi(element);

return di.get('color:background-color') || di.get('bioc:fill') || defaultColor || 'white';
return overrideColor || di.get('color:background-color') || di.get('bioc:fill') || defaultColor || white;
}

/**
* @param {Element} element
* @param {string} [defaultColor]
* @param {string} [overrideColor]
*
* @return {string}
*/
export function getStrokeColor(element, defaultColor) {
export function getStrokeColor(element, defaultColor, overrideColor) {
var di = getDi(element);

return di.get('color:border-color') || di.get('bioc:stroke') || defaultColor || black;
return overrideColor || di.get('color:border-color') || di.get('bioc:stroke') || defaultColor || black;
}

/**
* @param {Element} element
* @param {string} [defaultColor]
* @param {string} [defaultStrokeColor]
* @param {string} [overrideColor]
*
* @return {string}
*/
export function getLabelColor(element, defaultColor, defaultStrokeColor) {
export function getLabelColor(element, defaultColor, defaultStrokeColor, overrideColor) {
var di = getDi(element),
label = di.get('label');

return label && label.get('color:color') || defaultColor ||
return overrideColor || (label && label.get('color:color')) || defaultColor ||
getStrokeColor(element, defaultStrokeColor);
}

Expand Down Expand Up @@ -208,3 +216,42 @@ export function getRectPath(shape) {

return componentsToPath(rectPath);
}

/**
* Get width and height from element or overrides.
*
* @param {Dimensions|Rect|Shape} bounds
* @param {Object} overrides
*
* @returns {Dimensions}
*/
export function getBounds(bounds, overrides = {}) {
return {
width: getWidth(bounds, overrides),
height: getHeight(bounds, overrides)
};
}

/**
* Get width from element or overrides.
*
* @param {Dimensions|Rect|Shape} bounds
* @param {Object} overrides
*
* @returns {number}
*/
export function getWidth(bounds, overrides = {}) {
return has(overrides, 'width') ? overrides.width : bounds.width;
}

/**
* Get height from element or overrides.
*
* @param {Dimensions|Rect|Shape} bounds
* @param {Object} overrides
*
* @returns {number}
*/
export function getHeight(bounds, overrides = {}) {
return has(overrides, 'height') ? overrides.height : bounds.height;
}
Loading

0 comments on commit 3ce5c33

Please sign in to comment.