The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

st/gui: Improve record window scaling and add 180 degree flipping

authored by

Moses Turner and committed by
Jakob Bornecrantz
9a9878a8 d5dd9a26

+19 -24
+17 -23
src/xrt/state_trackers/gui/gui_window_record.c
··· 196 196 static void 197 197 window_draw_misc(struct gui_record_window *rw) 198 198 { 199 - if (!igCollapsingHeaderBoolPtr("Misc", NULL, ImGuiTreeNodeFlags_None)) { 200 - return; 201 - } 199 + igSliderFloat("", &rw->texture.scale, 20.0, 300.f, "Scale %f%%", ImGuiSliderFlags_None); 202 200 203 - static ImVec2 button_dims = {0, 0}; 204 - bool plus = igButton("+", button_dims); 205 - igSameLine(0.0f, 4.0f); 206 - bool minus = igButton("-", button_dims); 207 - igSameLine(0.0f, 4.0f); 201 + igSameLine(0, 30); 208 202 209 - if (rw->texture.scale == 1) { 210 - igText("Scale 100%%"); 211 - } else { 212 - igText("Scale 1/%i", rw->texture.scale); 213 - } 203 + igCheckbox("Rotate 180 degrees", &rw->texture.rotate_180); 214 204 215 - if (plus && rw->texture.scale > 1) { 216 - rw->texture.scale--; 217 - } 218 - if (minus && rw->texture.scale < 6) { 219 - rw->texture.scale++; 220 - } 205 + igSameLine(0, 30); 221 206 222 207 igText("Sequence %u", (uint32_t)rw->texture.ogl->seq); 223 208 } ··· 278 263 279 264 280 265 // Setup the preview texture. 281 - rw->texture.scale = 2; 266 + // 50% scale. 267 + rw->texture.scale = 50.0; 282 268 struct xrt_frame_sink *tmp = NULL; 283 269 rw->texture.ogl = gui_ogl_sink_create("View", &rw->texture.xfctx, &tmp); 284 270 u_sink_create_to_r8g8b8_r8g8b8a8_r8g8b8x8_or_l8(&rw->texture.xfctx, tmp, &tmp); ··· 295 281 296 282 gui_ogl_sink_update(rw->texture.ogl); 297 283 284 + window_draw_misc(rw); 285 + 298 286 struct gui_ogl_texture *tex = rw->texture.ogl; 299 287 300 - int w = tex->w / rw->texture.scale; 301 - int h = tex->h / rw->texture.scale; 288 + int w = tex->w * rw->texture.scale / 100.0f; 289 + int h = tex->h * rw->texture.scale / 100.0f; 302 290 303 291 ImVec2 size = {(float)w, (float)h}; 304 292 ImVec2 uv0 = {0, 0}; 305 293 ImVec2 uv1 = {1, 1}; 294 + 295 + // Note: We can't easily do 90 or 270-degree rotations: https://github.com/ocornut/imgui/issues/3267 296 + if (rw->texture.rotate_180) { 297 + uv0 = (ImVec2){1, 1}; 298 + uv1 = (ImVec2){0, 0}; 299 + } 300 + 306 301 ImVec4 white = {1, 1, 1, 1}; 307 302 ImTextureID id = (ImTextureID)(intptr_t)tex->id; 308 303 igImage(id, size, uv0, uv1, white, white); ··· 311 306 draw_gst(rw); 312 307 #endif 313 308 314 - window_draw_misc(rw); 315 309 316 310 // Pop the ID making everything unique. 317 311 igPopID();
+2 -1
src/xrt/state_trackers/gui/gui_window_record.h
··· 58 58 { 59 59 struct xrt_frame_context xfctx; 60 60 61 - int scale; 61 + float scale; 62 + bool rotate_180; 62 63 63 64 struct xrt_frame_sink *sink; 64 65 struct gui_ogl_texture *ogl;