Draw resize handle in UI rather than custom opengl; Set min size

Signed-off-by: falkTX <falktx@falktx.com>
This commit is contained in:
falkTX 2021-12-14 22:14:44 +00:00
parent 43951635e9
commit 36f144e501
No known key found for this signature in database
GPG key ID: CDBAA37ABC74FBA0
4 changed files with 67 additions and 24 deletions

View file

@ -180,6 +180,7 @@ GLFWAPI const char* glfwGetKeyName(const int key, int)
namespace rack {
namespace app {
widget::Widget* createMenuBar(bool isStandalone);
void hideResizeHandle(Scene* scene);
}
namespace window {
void WindowSetPluginUI(Window* window, DISTRHO_NAMESPACE::UI* ui);
@ -269,12 +270,19 @@ public:
context->nativeWindowId = window.getNativeWindowHandle();
if (isResizable())
fResizeHandle.hide();
hideResizeHandle(context->scene);
const double scaleFactor = getScaleFactor();
if (scaleFactor != 1)
{
setGeometryConstraints(640 * scaleFactor, 480 * scaleFactor);
setSize(1228 * scaleFactor, 666 * scaleFactor);
}
else
{
setGeometryConstraints(640, 480);
}
rack::contextSet(context);

View file

@ -53,29 +53,8 @@ public:
protected:
void onDisplay() override
{
const GraphicsContext& context(getGraphicsContext());
const double lineWidth = 1.0 * getScaleFactor();
#ifdef DGL_OPENGL
// glUseProgram(0);
glMatrixMode(GL_MODELVIEW);
#endif
// draw white lines, 1px wide
Color(1.0f, 1.0f, 1.0f).setFor(context);
l1.draw(context, lineWidth);
l2.draw(context, lineWidth);
l3.draw(context, lineWidth);
// draw black lines, offset by 1px and 1px wide
Color(0.0f, 0.0f, 0.0f).setFor(context);
Line<double> l1b(l1), l2b(l2), l3b(l3);
l1b.moveBy(lineWidth, lineWidth);
l2b.moveBy(lineWidth, lineWidth);
l3b.moveBy(lineWidth, lineWidth);
l1b.draw(context, lineWidth);
l2b.draw(context, lineWidth);
l3b.draw(context, lineWidth);
/* Nothing here, we purposefully avoid drawing anything.
* The resize handle is on the plugin UI directly. */
}
bool onMouse(const MouseEvent& ev) override

View file

@ -46,11 +46,58 @@ namespace rack {
namespace app {
struct ResizeHandle : widget::OpaqueWidget {
void draw(const DrawArgs& args) override {
nvgStrokeColor(args.vg, nvgRGBf(1, 1, 1));
nvgStrokeWidth(args.vg, 1);
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x, 0);
nvgLineTo(args.vg, 0, box.size.y);
nvgStroke(args.vg);
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x + 5, 0);
nvgLineTo(args.vg, 0, box.size.y + 5);
nvgStroke(args.vg);
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x + 10, 0);
nvgLineTo(args.vg, 0, box.size.y + 10);
nvgStroke(args.vg);
nvgStrokeColor(args.vg, nvgRGBf(0, 0, 0));
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x+1, 0);
nvgLineTo(args.vg, 0, box.size.y+1);
nvgStroke(args.vg);
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x + 6, 0);
nvgLineTo(args.vg, 0, box.size.y + 6);
nvgStroke(args.vg);
nvgBeginPath(args.vg);
nvgMoveTo(args.vg, box.size.x + 11, 0);
nvgLineTo(args.vg, 0, box.size.y + 11);
nvgStroke(args.vg);
}
};
struct Scene::Internal {
ResizeHandle* resizeHandle;
bool heldArrowKeys[4] = {};
};
void hideResizeHandle(Scene* scene) {
scene->internal->resizeHandle->hide();
}
Scene::Scene() {
internal = new Internal;
@ -65,6 +112,10 @@ Scene::Scene() {
browser = browserCreate();
browser->hide();
addChild(browser);
internal->resizeHandle = new ResizeHandle;
internal->resizeHandle->box.size = math::Vec(16, 16);
addChild(internal->resizeHandle);
}
@ -79,6 +130,8 @@ math::Vec Scene::getMousePos() {
void Scene::step() {
internal->resizeHandle->box.pos = box.size.minus(internal->resizeHandle->box.size);
// Resize owned descendants
menuBar->box.size.x = box.size.x;
rackScroll->box.pos.y = menuBar->box.size.y;

View file

@ -325,6 +325,9 @@ math::Vec Window::getSize() {
void Window::setSize(math::Vec size) {
internal->size = size.max(minWindowSize);
if (DISTRHO_NAMESPACE::UI* const ui = internal->ui)
ui->setSize(internal->size.x, internal->size.y);
}