Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: properly size icons in distribute/align #1694

Merged
merged 1 commit into from Jul 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 4 additions & 5 deletions assets/bpmn-js.css
Expand Up @@ -129,15 +129,14 @@
}

[data-popup="align-elements"] .djs-popup-body .entry {
height: 20px;
width: 20px;

padding: 6px 8px;
}

[data-popup="align-elements"] .djs-popup-body .entry img {
height: 100%;
width: 100%;
display: block;

height: 20px;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there no other way than hardcoding (to the parent height)?

For me this looks like duplicate magic numbering. We already define the entry height in diagram-js (cf. https://github.com/bpmn-io/diagram-js/blob/develop/assets/diagram-js.css#L512).

Copy link
Member Author

@barmac barmac Jul 8, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, perhaps we could just use 1.25em here (1em = 16px for that img). We need to set the image size explicitly because otherwise it shrinks.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But then the em value is also a magic number as it uses the line-height / font-size ratio 🙈

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Other way would be to use box-sizing: content-box for the entries and not care about app-specific overrides.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't the issue that width: 100% does not mean a thing? I#ll have a look.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

<div>
  <style>
    .border { box-sizing: border-box; }
    .content { box-sizing: content-box; }

    .box {
      width:20px; height: 20px; padding: 4px 6px; background-color: aqua;
    }

    .box img {
      height: 100%; width: 100%; display: block; background-color: red;
    }
  </style>
  <div>
    <div class="box border">
      <img>
    </div>
  </div>
  <div>
    <div class="box content">
      <img>
    </div>
  </div>
</div>

image

width: 20px;
}

[data-popup="align-elements"] .bjs-align-elements-menu-entry {
Expand Down
28 changes: 28 additions & 0 deletions test/spec/features/align-elements/AlignElementsMenuProviderSpec.js
Expand Up @@ -78,6 +78,34 @@ describe('features/align-elements - popup menu', function() {
expect(popupMenu.isOpen()).to.be.false;
})
);


it('should properly size icons even with border-box', inject(function(elementRegistry, popupMenu, canvas) {

// given
var container = canvas.getContainer();
var elements = [
elementRegistry.get('EndEvent_lane'),
elementRegistry.get('Task_lane'),
elementRegistry.get('SubProcess_lane')
];

// when
container.style['box-sizing'] = 'border-box';
popupMenu.open(elements, 'align-elements', {
x: 0,
y: 0
});

// then
var entry = getEntry('align-elements-left'),
icon = domQuery('img', entry);

var bbox = icon.getBoundingClientRect();

expect(bbox.width).to.eql(20);
expect(bbox.height).to.eql(20);
}));
});


Expand Down