File: horizontal-resize-grip.cpp

package info (click to toggle)
ares 126-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 32,600 kB
  • sloc: cpp: 356,508; ansic: 20,394; makefile: 16; sh: 2
file content (50 lines) | stat: -rw-r--r-- 1,622 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#if defined(Hiro_HorizontalResizeGrip)

mHorizontalResizeGrip::mHorizontalResizeGrip() {
  image icon;
  icon.allocate(5, 15);
  for(u32 y : range(icon.height())) {
    auto data = icon.data() + y * icon.pitch();
    icon.write(data, 0x00000000); data += icon.stride();
    icon.write(data, 0xff9f9f9f); data += icon.stride();
    icon.write(data, 0x00000000); data += icon.stride();
    icon.write(data, 0xff9f9f9f); data += icon.stride();
    icon.write(data, 0x00000000); data += icon.stride();
  }
  mCanvas::setIcon(icon);
  mCanvas::setMouseCursor(MouseCursor::HorizontalResize);
  mCanvas::onMousePress([&](auto button) {
    if(button == Mouse::Button::Left && !state.timer.enabled()) {
      doActivate();
      state.offset = 0;
      state.origin = Mouse::position();
      state.timer.setEnabled();
    }
  });
  state.timer.setInterval(10).onActivate([&] {
    if(!Mouse::pressed(Mouse::Button::Left)) return (void)state.timer.setEnabled(false);
    auto position = Mouse::position();
    auto offset = position.x() - state.origin.x();
    if(offset != state.offset) doResize(offset), offset = state.offset;
  });
}

auto mHorizontalResizeGrip::doActivate() const -> void {
  if(state.onActivate) state.onActivate();
}

auto mHorizontalResizeGrip::doResize(s32 offset) const -> void {
  if(state.onResize) state.onResize(offset);
}

auto mHorizontalResizeGrip::onActivate(const function<void ()>& callback) -> type& {
  state.onActivate = callback;
  return *this;
}

auto mHorizontalResizeGrip::onResize(const function<void (s32)>& callback) -> type& {
  state.onResize = callback;
  return *this;
}

#endif