Browse Source

Start of layout related classes, WIP

pull/321/merge
falkTX 2 years ago
parent
commit
bd92cf2061
4 changed files with 170 additions and 1 deletions
  1. +16
    -1
      dgl/EventHandlers.hpp
  2. +64
    -0
      dgl/Layout.hpp
  3. +1
    -0
      dgl/Makefile
  4. +89
    -0
      dgl/src/Layout.cpp

+ 16
- 1
dgl/EventHandlers.hpp View File

@@ -1,6 +1,6 @@
/*
* DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com>
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
*
* Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this
@@ -168,6 +168,21 @@ private:

// --------------------------------------------------------------------------------------------------------------------

class SliderEventHandler
{
public:
explicit SliderEventHandler(SubWidget* self);
virtual ~SliderEventHandler();

private:
struct PrivateData;
PrivateData* const pData;

DISTRHO_LEAK_DETECTOR(SliderEventHandler)
};

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

#endif // DGL_EVENT_HANDLERS_HPP_INCLUDED


+ 64
- 0
dgl/Layout.hpp View File

@@ -0,0 +1,64 @@
/*
* DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2021 Filipe Coelho <falktx@falktx.com>
*
* Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this
* permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#ifndef DGL_LAYOUT_HPP_INCLUDED
#define DGL_LAYOUT_HPP_INCLUDED

#include "Base.hpp"

#include <list>

START_NAMESPACE_DGL

class SubWidget;

// --------------------------------------------------------------------------------------------------------------------

// NOTE: under development, API to be finalized and documented soon

enum SizeHint {
Expanding,
Fixed
};

struct SubWidgetWithSizeHint {
SubWidget* widget;
SizeHint sizeHint;
};

template<bool horizontal>
struct Layout
{
std::list<SubWidgetWithSizeHint> widgets;
uint setAbsolutePos(int x, int y, uint padding);
void setSize(uint size, uint padding);
};

typedef Layout<true> HorizontalLayout;
typedef Layout<false> VerticalLayout;

struct VerticallyStackedHorizontalLayout
{
std::list<HorizontalLayout*> items;
void setAbsolutePos(int x, int y, uint padding);
void setWidth(uint width, uint padding);
};

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

#endif // DGL_LAYOUT_HPP_INCLUDED

+ 1
- 0
dgl/Makefile View File

@@ -34,6 +34,7 @@ OBJS_common = \
../build/dgl/Geometry.cpp.o \
../build/dgl/ImageBase.cpp.o \
../build/dgl/ImageBaseWidgets.cpp.o \
../build/dgl/Layout.cpp.o \
../build/dgl/Resources.cpp.o \
../build/dgl/SubWidget.cpp.o \
../build/dgl/SubWidgetPrivateData.cpp.o \


+ 89
- 0
dgl/src/Layout.cpp View File

@@ -0,0 +1,89 @@
/*
* DISTRHO Plugin Framework (DPF)
* Copyright (C) 2012-2022 Filipe Coelho <falktx@falktx.com>
*
* Permission to use, copy, modify, and/or distribute this software for any purpose with
* or without fee is hereby granted, provided that the above copyright notice and this
* permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

#include "../Layout.hpp"
#include "../SubWidget.hpp"

START_NAMESPACE_DGL

// --------------------------------------------------------------------------------------------------------------------

template<> // horizontal
uint Layout<true>::setAbsolutePos(int x, const int y, const uint padding)
{
uint maxHeight = 0;

for (SubWidgetWithSizeHint& s : widgets)
{
maxHeight = std::max(maxHeight, s.widget->getHeight());
s.widget->setAbsolutePos(x, y);
x += s.widget->getWidth();
x += padding;
}

return maxHeight;
}

template<> // horizontal
void Layout<true>::setSize(const uint width, const uint padding)
{
uint maxHeight = 0;
uint nonFixedWidth = width;
uint numDynamiclySizedWidgets = 0;

for (SubWidgetWithSizeHint& s : widgets)
{
maxHeight = std::max(maxHeight, s.widget->getHeight());

if (s.sizeHint == Fixed)
nonFixedWidth -= s.widget->getWidth();
else
++numDynamiclySizedWidgets;
}

const uint widthPerWidget = numDynamiclySizedWidgets != 0
? (nonFixedWidth - padding * numDynamiclySizedWidgets) / numDynamiclySizedWidgets
: 0;

for (SubWidgetWithSizeHint& s : widgets)
{
if (s.sizeHint != Fixed)
s.widget->setSize(widthPerWidget, maxHeight);
else
s.widget->setHeight(maxHeight);
}
}

// --------------------------------------------------------------------------------------------------------------------

void VerticallyStackedHorizontalLayout::setAbsolutePos(const int x, int y, const uint padding)
{
for (HorizontalLayout* l : items)
{
y += l->setAbsolutePos(x, y, padding);
y += padding;
}
}

void VerticallyStackedHorizontalLayout::setWidth(const uint width, const uint padding)
{
for (HorizontalLayout* l : items)
l->setSize(width, padding);
}

// --------------------------------------------------------------------------------------------------------------------

END_NAMESPACE_DGL

Loading…
Cancel
Save