|
|
@@ -35,26 +35,39 @@ USE_NAMESPACE_DGL; |
|
|
|
// ------------------------------------------------------ |
|
|
|
// Test |
|
|
|
|
|
|
|
class BlenderOption : public NanoWidget |
|
|
|
class BlendishCommon : public NanoWidget |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlenderOption(NanoWidget* groupWidget) |
|
|
|
enum State { |
|
|
|
kStateDefault = 0, // not interacting |
|
|
|
kStateHover = 1, // the mouse is hovering over the control |
|
|
|
kStateActive = 2 // the widget is activated (pressed) or in an active state (toggled) |
|
|
|
}; |
|
|
|
|
|
|
|
BlendishCommon(NanoWidget* groupWidget) |
|
|
|
: NanoWidget(groupWidget), |
|
|
|
state(BND_DEFAULT), |
|
|
|
area(10, 10, 200, BND_WIDGET_HEIGHT) {} |
|
|
|
fState(kStateDefault) |
|
|
|
{ |
|
|
|
setSize(250, BND_WIDGET_HEIGHT); |
|
|
|
} |
|
|
|
|
|
|
|
State getCurrentState() const noexcept |
|
|
|
{ |
|
|
|
return fState; |
|
|
|
} |
|
|
|
|
|
|
|
protected: |
|
|
|
bool onMouse(const MouseEvent& e) |
|
|
|
{ |
|
|
|
if (! e.press) |
|
|
|
return false; |
|
|
|
if (! area.contains(e.pos)) |
|
|
|
if (! contains(e.pos)) |
|
|
|
return false; |
|
|
|
|
|
|
|
if (state == BND_ACTIVE) |
|
|
|
state = BND_HOVER; |
|
|
|
if (fState == kStateActive) |
|
|
|
fState = kStateHover; |
|
|
|
else |
|
|
|
state = BND_ACTIVE; |
|
|
|
fState = kStateActive; |
|
|
|
|
|
|
|
repaint(); |
|
|
|
return true; |
|
|
@@ -62,11 +75,11 @@ protected: |
|
|
|
|
|
|
|
bool onMotion(const MotionEvent& e) |
|
|
|
{ |
|
|
|
if (! area.contains(e.pos)) |
|
|
|
if (! contains(e.pos)) |
|
|
|
{ |
|
|
|
if (state == BND_HOVER) |
|
|
|
if (fState == kStateHover) |
|
|
|
{ |
|
|
|
state = BND_DEFAULT; |
|
|
|
fState = kStateDefault; |
|
|
|
repaint(); |
|
|
|
return true; |
|
|
|
} |
|
|
@@ -74,83 +87,172 @@ protected: |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
if (state == BND_DEFAULT) |
|
|
|
if (fState == kStateDefault) |
|
|
|
{ |
|
|
|
state = BND_HOVER; |
|
|
|
fState = kStateHover; |
|
|
|
repaint(); |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
State fState; |
|
|
|
}; |
|
|
|
|
|
|
|
// ------------------------------------------------------ |
|
|
|
// Test |
|
|
|
|
|
|
|
class BlendishLabel : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishLabel(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndOptionButton(getContext(), 10, 10, 200, BND_WIDGET_HEIGHT, state, "checkbox whoohoo!"); |
|
|
|
bndLabel(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
BND_ICON_HELP, |
|
|
|
"this is a label [help]"); |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
BNDwidgetState state; |
|
|
|
Rectangle<int> area; |
|
|
|
}; |
|
|
|
|
|
|
|
class BlenderRadioBox : public NanoWidget |
|
|
|
class BlendishToolButton : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlenderRadioBox(NanoWidget* groupWidget) |
|
|
|
: NanoWidget(groupWidget), |
|
|
|
state(BND_DEFAULT), |
|
|
|
area(10, 40, 200, BND_WIDGET_HEIGHT) {} |
|
|
|
BlendishToolButton(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
protected: |
|
|
|
bool onMouse(const MouseEvent& e) |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
if (! e.press) |
|
|
|
return false; |
|
|
|
if (! area.contains(e.pos)) |
|
|
|
return false; |
|
|
|
bndToolButton(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
0, static_cast<BNDwidgetState>(getCurrentState()), BND_ICON_SOUND, |
|
|
|
"this is a tool-button [sound]"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
if (state == BND_ACTIVE) |
|
|
|
state = BND_HOVER; |
|
|
|
else |
|
|
|
state = BND_ACTIVE; |
|
|
|
class BlendishPushButton: public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishPushButton(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
repaint(); |
|
|
|
return true; |
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndRadioButton(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
0, static_cast<BNDwidgetState>(getCurrentState()), BND_ICON_NEW, |
|
|
|
"this is a push-button [file->new]"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
bool onMotion(const MotionEvent& e) |
|
|
|
// text field here |
|
|
|
|
|
|
|
class BlendishCheckbox : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishCheckbox(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
if (! area.contains(e.pos)) |
|
|
|
{ |
|
|
|
if (state == BND_HOVER) |
|
|
|
{ |
|
|
|
state = BND_DEFAULT; |
|
|
|
repaint(); |
|
|
|
return true; |
|
|
|
} |
|
|
|
bndOptionButton(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
static_cast<BNDwidgetState>(getCurrentState()), |
|
|
|
"this is a checkbox"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
|
class BlendishComboBox : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishComboBox(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
if (state == BND_DEFAULT) |
|
|
|
{ |
|
|
|
state = BND_HOVER; |
|
|
|
repaint(); |
|
|
|
} |
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndChoiceButton(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
0, static_cast<BNDwidgetState>(getCurrentState()), BND_ICON_NEW, |
|
|
|
"this is a combobox"); |
|
|
|
|
|
|
|
// bndMenuBackground |
|
|
|
// bndMenuLabel |
|
|
|
// bndMenuItem |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
return true; |
|
|
|
class BlendishColorButton : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishColorButton(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndColorButton(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
BND_DEFAULT, |
|
|
|
Color::fromHTML("#132487")); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// bndNumberField |
|
|
|
|
|
|
|
class BlendishSlider : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishSlider(NanoWidget* groupWidget) |
|
|
|
: BlendishCommon(groupWidget) {} |
|
|
|
|
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndRadioButton(getContext(), 10, 40, 200, BND_WIDGET_HEIGHT, 0, state, BND_ICON_NONE, "radio blender style yeah"); |
|
|
|
bndSlider(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
0, static_cast<BNDwidgetState>(getCurrentState()), |
|
|
|
0.25f, "this is a slider", "and value"); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
private: |
|
|
|
BNDwidgetState state; |
|
|
|
Rectangle<int> area; |
|
|
|
class BlendishScrollBar : public BlendishCommon |
|
|
|
{ |
|
|
|
public: |
|
|
|
BlendishScrollBar(NanoWidget* groupWidget, bool horizontal) |
|
|
|
: BlendishCommon(groupWidget) |
|
|
|
{ |
|
|
|
if (horizontal) |
|
|
|
setSize(250, BND_SCROLLBAR_HEIGHT); |
|
|
|
else |
|
|
|
setSize(BND_SCROLLBAR_WIDTH, 200); |
|
|
|
} |
|
|
|
|
|
|
|
protected: |
|
|
|
void onNanoDisplay() override |
|
|
|
{ |
|
|
|
bndScrollBar(getContext(), |
|
|
|
getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight(), |
|
|
|
static_cast<BNDwidgetState>(getCurrentState()), |
|
|
|
0.25f, 0.5f); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
// bndTooltipBackground |
|
|
|
// bndNodePort |
|
|
|
// bndNodeWire |
|
|
|
// bndColoredNodeWire |
|
|
|
// bndNodeBackground |
|
|
|
// bndSplitterWidgets |
|
|
|
// bndJoinAreaOverlay |
|
|
|
|
|
|
|
// ------------------------------------------------------ |
|
|
|
// Test |
|
|
|
|
|
|
@@ -159,13 +261,33 @@ class TestWidget : public NanoWidget |
|
|
|
public: |
|
|
|
TestWidget(Window& parent) |
|
|
|
: NanoWidget(parent, NanoVG::CREATE_ANTIALIAS|NanoVG::CREATE_STENCIL_STROKES), |
|
|
|
opt(this), |
|
|
|
rb(this) |
|
|
|
w0(this), |
|
|
|
w1(this), |
|
|
|
w2(this), |
|
|
|
w3(this), |
|
|
|
w4(this), |
|
|
|
w5(this), |
|
|
|
w6(this), |
|
|
|
w7(this, true), |
|
|
|
w7b(this, false) |
|
|
|
{ |
|
|
|
NVGcontext* const context(getContext()); |
|
|
|
|
|
|
|
bndSetFont(nvgCreateFont(context, "system", "./blendish_res/DejaVuSans.ttf")); |
|
|
|
bndSetIconImage(nvgCreateImage(context, "./blendish_res/blender_icons16.png", 0)); |
|
|
|
|
|
|
|
w0.setAbsolutePos(10, 10+25*0); |
|
|
|
w1.setAbsolutePos(10, 10+25*1); |
|
|
|
w2.setAbsolutePos(10, 10+25*2); |
|
|
|
w3.setAbsolutePos(10, 10+25*3); |
|
|
|
w4.setAbsolutePos(10, 10+25*4); |
|
|
|
w5.setAbsolutePos(10, 10+25*5); |
|
|
|
w6.setAbsolutePos(10, 10+25*6); |
|
|
|
w7.setAbsolutePos(10, 10+25*7); |
|
|
|
//w8.setAbsolutePos(10, 10+25*8); |
|
|
|
//w9.setAbsolutePos(10, 10+25*9); |
|
|
|
|
|
|
|
w7b.setAbsolutePos(470, 10); |
|
|
|
} |
|
|
|
|
|
|
|
protected: |
|
|
@@ -176,8 +298,15 @@ protected: |
|
|
|
} |
|
|
|
|
|
|
|
private: |
|
|
|
BlenderOption opt; |
|
|
|
BlenderRadioBox rb; |
|
|
|
BlendishLabel w0; |
|
|
|
BlendishToolButton w1; |
|
|
|
BlendishPushButton w2; |
|
|
|
BlendishCheckbox w3; |
|
|
|
BlendishComboBox w4; |
|
|
|
BlendishColorButton w5; |
|
|
|
BlendishSlider w6; |
|
|
|
BlendishScrollBar w7; |
|
|
|
BlendishScrollBar w7b; |
|
|
|
}; |
|
|
|
|
|
|
|
// ------------------------------------------------------ |
|
|
|