@@ -98,8 +98,6 @@ public: | |||||
bool isResizable() const noexcept; | bool isResizable() const noexcept; | ||||
void setResizable(bool yesNo); | void setResizable(bool yesNo); | ||||
void setGeometryConstraints(uint width, uint height, bool aspect); | |||||
uint getWidth() const noexcept; | uint getWidth() const noexcept; | ||||
uint getHeight() const noexcept; | uint getHeight() const noexcept; | ||||
Size<uint> getSize() const noexcept; | Size<uint> getSize() const noexcept; | ||||
@@ -109,11 +107,15 @@ public: | |||||
const char* getTitle() const noexcept; | const char* getTitle() const noexcept; | ||||
void setTitle(const char* title); | void setTitle(const char* title); | ||||
void setGeometryConstraints(uint width, uint height, bool aspect); | |||||
void setTransientWinId(uintptr_t winId); | void setTransientWinId(uintptr_t winId); | ||||
double getScaling() const noexcept; | double getScaling() const noexcept; | ||||
void setScaling(double scaling) noexcept; | void setScaling(double scaling) noexcept; | ||||
bool getIgnoringKeyRepeat() const noexcept; | |||||
void setIgnoringKeyRepeat(bool ignore) noexcept; | |||||
Application& getApp() const noexcept; | Application& getApp() const noexcept; | ||||
intptr_t getWindowId() const noexcept; | intptr_t getWindowId() const noexcept; | ||||
@@ -710,6 +710,18 @@ struct Window::PrivateData { | |||||
// ------------------------------------------------------------------- | // ------------------------------------------------------------------- | ||||
bool getIgnoringKeyRepeat() const noexcept | |||||
{ | |||||
return fView->ignoreKeyRepeat; | |||||
} | |||||
void setIgnoringKeyRepeat(bool ignore) noexcept | |||||
{ | |||||
puglIgnoreKeyRepeat(fView, ignore); | |||||
} | |||||
// ------------------------------------------------------------------- | |||||
void addWidget(Widget* const widget) | void addWidget(Widget* const widget) | ||||
{ | { | ||||
fWidgets.push_back(widget); | fWidgets.push_back(widget); | ||||
@@ -1333,6 +1345,16 @@ void Window::setScaling(double scaling) noexcept | |||||
pData->setScaling(scaling); | pData->setScaling(scaling); | ||||
} | } | ||||
bool Window::getIgnoringKeyRepeat() const noexcept | |||||
{ | |||||
return pData->getIgnoringKeyRepeat(); | |||||
} | |||||
void Window::setIgnoringKeyRepeat(bool ignore) noexcept | |||||
{ | |||||
pData->setIgnoringKeyRepeat(ignore); | |||||
} | |||||
Application& Window::getApp() const noexcept | Application& Window::getApp() const noexcept | ||||
{ | { | ||||
return pData->fApp; | return pData->fApp; | ||||
@@ -126,7 +126,8 @@ | |||||
// ----------------------------------------------------------------------- | // ----------------------------------------------------------------------- | ||||
// Enable full state if plugin exports presets | // Enable full state if plugin exports presets | ||||
#if DISTRHO_PLUGIN_WANT_PROGRAMS && DISTRHO_PLUGIN_WANT_STATE | |||||
#if DISTRHO_PLUGIN_WANT_PROGRAMS && DISTRHO_PLUGIN_WANT_STATE && ! DISTRHO_PLUGIN_WANT_FULL_STATE | |||||
# warning Plugins with programs and state need to implement full state API | |||||
# undef DISTRHO_PLUGIN_WANT_FULL_STATE | # undef DISTRHO_PLUGIN_WANT_FULL_STATE | ||||
# define DISTRHO_PLUGIN_WANT_FULL_STATE 1 | # define DISTRHO_PLUGIN_WANT_FULL_STATE 1 | ||||
#endif | #endif | ||||
@@ -613,7 +613,6 @@ public: | |||||
fEventsOutData.initIfNeeded(fURIDs.atomSequence); | fEventsOutData.initIfNeeded(fURIDs.atomSequence); | ||||
LV2_Atom_Event* aev; | LV2_Atom_Event* aev; | ||||
uint32_t offset = fEventsOutData.offset; | |||||
const uint32_t capacity = fEventsOutData.capacity; | const uint32_t capacity = fEventsOutData.capacity; | ||||
for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) | for (uint32_t i=0, count=fPlugin.getStateCount(); i < count; ++i) | ||||
@@ -635,8 +634,11 @@ public: | |||||
// set msg size (key + value + separator + 2x null terminator) | // set msg size (key + value + separator + 2x null terminator) | ||||
const size_t msgSize(key.length()+value.length()+3); | const size_t msgSize(key.length()+value.length()+3); | ||||
if (sizeof(LV2_Atom_Event) + msgSize > capacity - offset) | |||||
if (sizeof(LV2_Atom_Event) + msgSize > capacity - fEventsOutData.offset) | |||||
{ | |||||
d_stdout("Sending key '%s' to UI failed, out of space", key.buffer()); | |||||
break; | break; | ||||
} | |||||
// reserve msg space | // reserve msg space | ||||
// FIXME create a large enough buffer beforehand | // FIXME create a large enough buffer beforehand | ||||
@@ -644,15 +646,15 @@ public: | |||||
std::memset(msgBuf, 0, msgSize); | std::memset(msgBuf, 0, msgSize); | ||||
// write key and value in atom bufer | // write key and value in atom bufer | ||||
std::memcpy(msgBuf, key.buffer(), key.length()); | |||||
std::memcpy(msgBuf+(key.length()+1), value.buffer(), value.length()); | |||||
std::memcpy(msgBuf, key.buffer(), key.length()+1); | |||||
std::memcpy(msgBuf+(key.length()+1), value.buffer(), value.length()+1); | |||||
// put data | // put data | ||||
aev = (LV2_Atom_Event*)(LV2_ATOM_CONTENTS(LV2_Atom_Sequence, fEventsOutData.port) + offset); | |||||
aev = (LV2_Atom_Event*)(LV2_ATOM_CONTENTS(LV2_Atom_Sequence, fEventsOutData.port) + fEventsOutData.offset); | |||||
aev->time.frames = 0; | aev->time.frames = 0; | ||||
aev->body.type = fURIDs.distrhoState; | aev->body.type = fURIDs.distrhoState; | ||||
aev->body.size = msgSize; | aev->body.size = msgSize; | ||||
std::memcpy(LV2_ATOM_BODY(&aev->body), msgBuf, msgSize-1); | |||||
std::memcpy(LV2_ATOM_BODY(&aev->body), msgBuf, msgSize); | |||||
fEventsOutData.growBy(lv2_atom_pad_size(sizeof(LV2_Atom_Event) + msgSize)); | fEventsOutData.growBy(lv2_atom_pad_size(sizeof(LV2_Atom_Event) + msgSize)); | ||||
@@ -194,7 +194,7 @@ protected: | |||||
uint8_t mdata[4] = { | uint8_t mdata[4] = { | ||||
0, | 0, | ||||
channel + (velocity != 0 ? 0x90 : 0x80), | |||||
static_cast<uint8_t>(channel + (velocity != 0 ? 0x90 : 0x80)), | |||||
note, | note, | ||||
velocity | velocity | ||||
}; | }; | ||||
@@ -27,5 +27,6 @@ | |||||
#define DISTRHO_PLUGIN_NUM_OUTPUTS 2 | #define DISTRHO_PLUGIN_NUM_OUTPUTS 2 | ||||
#define DISTRHO_PLUGIN_WANT_PROGRAMS 1 | #define DISTRHO_PLUGIN_WANT_PROGRAMS 1 | ||||
#define DISTRHO_PLUGIN_WANT_STATE 1 | #define DISTRHO_PLUGIN_WANT_STATE 1 | ||||
#define DISTRHO_PLUGIN_WANT_FULL_STATE 1 | |||||
#endif // DISTRHO_PLUGIN_INFO_H_INCLUDED | #endif // DISTRHO_PLUGIN_INFO_H_INCLUDED |