MCPcopy Create free account
hub / github.com/Tom94/tev / handleIpcPacket

Function handleIpcPacket

src/main.cpp:62–156  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

60}
61
62static void handleIpcPacket(const IpcPacket& packet, const shared_ptr<BackgroundImagesLoader>& imagesLoader) {
63 switch (packet.type()) {
64 case IpcPacket::OpenImage:
65 case IpcPacket::OpenImageV2: {
66 const auto info = packet.interpretAsOpenImage();
67 imagesLoader->enqueue(toPath(info.imagePath), ensureUtf8(info.channelSelector), info.grabFocus);
68 break;
69 }
70
71 case IpcPacket::ReloadImage: {
72 while (!imageViewerIsReady) {}
73 const auto info = packet.interpretAsReloadImage();
74 sImageViewer->scheduleToUiThread([&, info] { sImageViewer->reloadImage(ensureUtf8(info.imageName), info.grabFocus); });
75
76 sImageViewer->redraw();
77 break;
78 }
79
80 case IpcPacket::CloseImage: {
81 while (!imageViewerIsReady) {}
82 const auto info = packet.interpretAsCloseImage();
83 sImageViewer->scheduleToUiThread([&, info] { sImageViewer->removeImage(ensureUtf8(info.imageName)); });
84
85 sImageViewer->redraw();
86 break;
87 }
88
89 case IpcPacket::UpdateImage:
90 case IpcPacket::UpdateImageV2:
91 case IpcPacket::UpdateImageV3: {
92 while (!imageViewerIsReady) {}
93 const auto info = packet.interpretAsUpdateImage();
94 sImageViewer->scheduleToUiThread([&, info] {
95 const string imageString = ensureUtf8(info.imageName);
96 const Box2i bounds = {
97 {info.x, info.y },
98 {info.x + info.width, info.y + info.height},
99 };
100
101 for (int i = 0; i < info.nChannels; ++i) {
102 sImageViewer->updateImage(imageString, info.grabFocus, info.channelNames[i], bounds, info.imageData[i]);
103 }
104 });
105
106 sImageViewer->redraw();
107 break;
108 }
109
110 case IpcPacket::CreateImage: {
111 while (!imageViewerIsReady) {}
112 const auto info = packet.interpretAsCreateImage();
113 sImageViewer->scheduleToUiThread([&, info] {
114 stringstream imageStream;
115 imageStream << "empty" << " " << info.width << " " << info.height << " " << info.nChannels << " ";
116 for (int i = 0; i < info.nChannels; ++i) {
117 // The following lines encode strings by prefixing their length. The reason for using this encoding is to allow
118 // arbitrary characters, including whitespaces, in the channel names.
119 imageStream << info.channelNames[i].length() << info.channelNames[i];

Callers 1

mainFuncFunction · 0.85

Calls 15

toPathFunction · 0.85
ensureUtf8Function · 0.85
tryLoadImageFunction · 0.85
interpretAsOpenImageMethod · 0.80
enqueueMethod · 0.80
scheduleToUiThreadMethod · 0.80
interpretAsCloseImageMethod · 0.80
updateImageMethod · 0.80
groupChannelsMethod · 0.80

Tested by

no test coverage detected