Browse Source

Try to do a resize handle widget (not working so well)

pull/1/head
falkTX 11 years ago
parent
commit
1d15a3de0f
2 changed files with 114 additions and 7 deletions
  1. +1
    -1
      dpf
  2. +113
    -6
      examples/demo.cpp

+ 1
- 1
dpf

@@ -1 +1 @@
Subproject commit 3562ad248c032f7906bde90b81d127009c7f3b43
Subproject commit 326178f2327c60c53357b8f88779e229bf435c75

+ 113
- 6
examples/demo.cpp View File

@@ -39,9 +39,9 @@ using DGL::Line;
using DGL::Size;

// ------------------------------------------------------
// Our Demo Window
// Left side tab-like widget

class LeftSizeWidget : public Widget
class LeftSideWidget : public Widget
{
public:
class Callback
@@ -51,7 +51,7 @@ public:
virtual void curPageChanged(int curPage) = 0;
};

LeftSizeWidget(Window& parent, Callback* const cb)
LeftSideWidget(Window& parent, Callback* const cb)
: Widget(parent),
callback(cb),
curPage(0),
@@ -110,7 +110,7 @@ protected:
{
if (button != 1 || ! press)
return false;
if (! bg.contains(x, y))
if (! contains(x, y))
return false;

const int iconSize = getWidth();
@@ -189,11 +189,114 @@ private:
Image img1, img2, img3, img4;
};

// ------------------------------------------------------
// Resize handle

class ResizeHandle : public Widget
{
public:
ResizeHandle(Window& parent)
: Widget(parent),
fMouseUnder(false),
fLastX(0),
fLastY(0)
{
fColor[0] = 1.0f;
fColor[1] = 1.0f;
fColor[2] = 1.0f;
fColor[3] = 1.0f;

setSize(16, 16);
}

void setColor(float color[4]) noexcept
{
std::memcpy(fColor, color, sizeof(float)*4);
}

protected:
void onDisplay() override
{
glColor4f(fColor[0], fColor[1], fColor[2], fColor[3]);

fLine1.draw();
fLine2.draw();
fLine3.draw();

// reset color
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
}

void onReshape(int width, int height) override
{
fLine1.setStartPos(width/10, height*9/10);
fLine1.setEndPos(width*9/10, width/10);

fLine2.setStartPos(width*4/10, height*9/10);
fLine2.setEndPos(width*9/10, height*4/10);

fLine3.setStartPos(width*7/10, height*9/10);
fLine3.setEndPos(width*9/10, height*7/10);
}

bool onMouse(int button, bool press, int x, int y) override
{
if (button != 1)
return false;

if (fMouseUnder)
{
if (! press)
fMouseUnder = false;
return true;
}

if (! contains(x, y))
return false;
if (! press)
return false;

fLastX = x+getX();
fLastY = y+getY();
fMouseUnder = true;
return true;
}

bool onMotion(int x, int y) override
{
if (! fMouseUnder)
return false;

x += getX();
y += getY();

const int movedX = x - fLastX;
const int movedY = y - fLastY;
fLastX = x;
fLastY = y;

d_stdout("Moved %i, %i", movedX, movedY);

Size<uint> size(getParentWindow().getSize());
size += Size<uint>(movedX, movedY);

getParentWindow().setSize(size);
repaint();

return true;
}

float fColor[4];
bool fMouseUnder;
int fLastX, fLastY;
Line<float> fLine1, fLine2, fLine3;
};

// ------------------------------------------------------
// Our Demo Window

class DemoWindow : public Window,
public LeftSizeWidget::Callback
public LeftSideWidget::Callback
{
public:
DemoWindow(App& app)
@@ -203,6 +306,7 @@ public:
wRects(*this),
wShapes(*this),
wLeft(*this, this),
wRezHandle(*this),
curWidget(nullptr)
{
wColor.hide();
@@ -231,6 +335,8 @@ public:
wShapes.setSize(size);

wLeft.setSize(73, height-4);
wRezHandle.setX(width-wRezHandle.getWidth());
wRezHandle.setY(height-wRezHandle.getHeight());

Window::onReshape(width, height);
}
@@ -269,7 +375,8 @@ private:
ExampleImagesWidget wImages;
ExampleRectanglesWidget wRects;
ExampleShapesWidget wShapes;
LeftSizeWidget wLeft;
LeftSideWidget wLeft;
ResizeHandle wRezHandle;

Widget* curWidget;
};


Loading…
Cancel
Save