Browse Source

Make widget coordinates relative

gh-pages
falkTX 11 years ago
parent
commit
3562ad248c
5 changed files with 37 additions and 23 deletions
  1. +10
    -2
      dgl/Widget.hpp
  2. +4
    -4
      dgl/src/ImageButton.cpp
  3. +4
    -3
      dgl/src/ImageKnob.cpp
  4. +13
    -5
      dgl/src/Widget.cpp
  5. +6
    -9
      dgl/src/Window.cpp

+ 10
- 2
dgl/Widget.hpp View File

@@ -57,14 +57,22 @@ public:
virtual void setSize(int width, int height) noexcept; virtual void setSize(int width, int height) noexcept;
virtual void setSize(const Size<int>& size) noexcept; virtual void setSize(const Size<int>& size) noexcept;


const Rectangle<int>& getArea() const noexcept;

uint getEventTimestamp() const noexcept; uint getEventTimestamp() const noexcept;
int getModifiers() const noexcept; int getModifiers() const noexcept;


App& getParentApp() const noexcept; App& getParentApp() const noexcept;
Window& getParentWindow() const noexcept; Window& getParentWindow() const noexcept;


/**
Check if this widget contains the point defined by @a X and @a Y.
*/
bool contains(int x, int y) const noexcept;

/**
Check if this widget contains the point @a pos.
*/
bool contains(const Point<int>& pos) const noexcept;

void repaint() noexcept; void repaint() noexcept;


protected: protected:


+ 4
- 4
dgl/src/ImageButton.cpp View File

@@ -104,7 +104,7 @@ bool ImageButton::onMouse(int button, bool press, int x, int y)
repaint(); repaint();
} }


if (! getArea().contains(x, y))
if (! contains(x, y))
{ {
fCurButton = -1; fCurButton = -1;
return false; return false;
@@ -113,7 +113,7 @@ bool ImageButton::onMouse(int button, bool press, int x, int y)
if (fCallback != nullptr) if (fCallback != nullptr)
fCallback->imageButtonClicked(this, fCurButton); fCallback->imageButtonClicked(this, fCurButton);


//if (getArea().contains(x, y))
//if (contains(x, y))
//{ //{
// fCurImage = &fImageHover; // fCurImage = &fImageHover;
// repaint(); // repaint();
@@ -124,7 +124,7 @@ bool ImageButton::onMouse(int button, bool press, int x, int y)
return true; return true;
} }


if (press && getArea().contains(x, y))
if (press && contains(x, y))
{ {
if (fCurImage != &fImageDown) if (fCurImage != &fImageDown)
{ {
@@ -144,7 +144,7 @@ bool ImageButton::onMotion(int x, int y)
if (fCurButton != -1) if (fCurButton != -1)
return true; return true;


if (getArea().contains(x, y))
if (contains(x, y))
{ {
if (fCurImage != &fImageHover) if (fCurImage != &fImageHover)
{ {


+ 4
- 3
dgl/src/ImageKnob.cpp View File

@@ -248,7 +248,7 @@ void ImageKnob::onDisplay()
const GLint w2 = getWidth()/2; const GLint w2 = getWidth()/2;
const GLint h2 = getHeight()/2; const GLint h2 = getHeight()/2;


glTranslatef(static_cast<float>(getX()+w2), static_cast<float>(getY()+h2), 0.0f);
glTranslatef(static_cast<float>(w2), static_cast<float>(h2), 0.0f);
glRotatef(normValue*static_cast<float>(fRotationAngle), 0.0f, 0.0f, 1.0f); glRotatef(normValue*static_cast<float>(fRotationAngle), 0.0f, 0.0f, 1.0f);


Rectangle<int>(-w2, -h2, getWidth(), getHeight()).draw(); Rectangle<int>(-w2, -h2, getWidth(), getHeight()).draw();
@@ -268,7 +268,8 @@ void ImageKnob::onDisplay()


glPixelStorei(GL_PACK_ALIGNMENT, 1); glPixelStorei(GL_PACK_ALIGNMENT, 1);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glRasterPos2i(getX(), getY()+getHeight());
glRasterPos2i(0, getHeight());
//glRasterPos2i(getX(), getY()+getHeight());
glDrawPixels(fImgLayerSize, fImgLayerSize, fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset); glDrawPixels(fImgLayerSize, fImgLayerSize, fImage.getFormat(), fImage.getType(), fImage.getRawData() + imageDataOffset);
} }
} }
@@ -280,7 +281,7 @@ bool ImageKnob::onMouse(int button, bool press, int x, int y)


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


fDragging = true; fDragging = true;


+ 13
- 5
dgl/src/Widget.cpp View File

@@ -127,6 +127,7 @@ void Widget::setWidth(int width) noexcept


fArea.setWidth(width); fArea.setWidth(width);
fParent.repaint(); fParent.repaint();
onReshape(width, fArea.getHeight());
} }


void Widget::setHeight(int height) noexcept void Widget::setHeight(int height) noexcept
@@ -136,6 +137,7 @@ void Widget::setHeight(int height) noexcept


fArea.setHeight(height); fArea.setHeight(height);
fParent.repaint(); fParent.repaint();
onReshape(fArea.getWidth(), height);
} }


void Widget::setSize(int width, int height) noexcept void Widget::setSize(int width, int height) noexcept
@@ -150,11 +152,7 @@ void Widget::setSize(const Size<int>& size) noexcept


fArea.setSize(size); fArea.setSize(size);
fParent.repaint(); fParent.repaint();
}

const Rectangle<int>& Widget::getArea() const noexcept
{
return fArea;
onReshape(fArea.getWidth(), fArea.getHeight());
} }


uint Widget::getEventTimestamp() const noexcept uint Widget::getEventTimestamp() const noexcept
@@ -177,6 +175,16 @@ Window& Widget::getParentWindow() const noexcept
return fParent; return fParent;
} }


bool Widget::contains(int x, int y) const noexcept
{
return (x >= 0 && y >= 0 && x < fArea.getWidth() && y < fArea.getHeight());
}

bool Widget::contains(const Point<int>& pos) const noexcept
{
return contains(pos.getX(), pos.getY());
}

void Widget::repaint() noexcept void Widget::repaint() noexcept
{ {
fParent.repaint(); fParent.repaint();


+ 6
- 9
dgl/src/Window.cpp View File

@@ -582,7 +582,10 @@ struct Window::PrivateData {
Widget* const widget(*it); Widget* const widget(*it);


if (widget->isVisible()) if (widget->isVisible())
{
glViewport(widget->getX(), -widget->getY(), fView->width, fView->height);
widget->onDisplay(); widget->onDisplay();
}
} }


fSelf->onDisplayAfter(); fSelf->onDisplayAfter();
@@ -615,7 +618,7 @@ struct Window::PrivateData {
{ {
Widget* const widget(*rit); Widget* const widget(*rit);


if (widget->isVisible() && widget->onMouse(button, press, x, y))
if (widget->isVisible() && widget->onMouse(button, press, x-widget->getX(), y-widget->getY()))
break; break;
} }
} }
@@ -631,7 +634,7 @@ struct Window::PrivateData {
{ {
Widget* const widget(*rit); Widget* const widget(*rit);


if (widget->isVisible() && widget->onMotion(x, y))
if (widget->isVisible() && widget->onMotion(x-widget->getX(), y-widget->getY()))
break; break;
} }
} }
@@ -647,7 +650,7 @@ struct Window::PrivateData {
{ {
Widget* const widget(*rit); Widget* const widget(*rit);


if (widget->isVisible() && widget->onScroll(x, y, dx, dy))
if (widget->isVisible() && widget->onScroll(x-widget->getX(), y-widget->getY(), dx, dy))
break; break;
} }
} }
@@ -673,12 +676,6 @@ struct Window::PrivateData {
DBGp("PUGL: onReshape : %i %i\n", width, height); DBGp("PUGL: onReshape : %i %i\n", width, height);


fSelf->onReshape(width, height); fSelf->onReshape(width, height);

FOR_EACH_WIDGET(it)
{
Widget* const widget(*it);
widget->onReshape(width, height);
}
} }


void onClose() void onClose()


Loading…
Cancel
Save