summaryrefslogtreecommitdiff
path: root/plugingui
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2015-11-07 10:39:46 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2015-11-07 10:39:46 +0100
commita65ca7af57feaf7a4ea73f7e071a72eb9b3a1e24 (patch)
tree6cf9fa3b8b57513b8eae030bdc6e1a18495d7e75 /plugingui
parent60109b8a737059058d2b0664c7ea88ec501490f7 (diff)
Refactored Painter.
Diffstat (limited to 'plugingui')
-rw-r--r--plugingui/button.cc6
-rw-r--r--plugingui/checkbox.cc14
-rw-r--r--plugingui/combobox.cc4
-rw-r--r--plugingui/eventhandler.cc44
-rw-r--r--plugingui/eventhandler.h6
-rw-r--r--plugingui/filebrowser.cc4
-rw-r--r--plugingui/font.cc6
-rw-r--r--plugingui/font.h11
-rw-r--r--plugingui/image.cc6
-rw-r--r--plugingui/image.h6
-rw-r--r--plugingui/knob.cc4
-rw-r--r--plugingui/label.cc2
-rw-r--r--plugingui/layout.h4
-rw-r--r--plugingui/led.cc2
-rw-r--r--plugingui/lineedit.cc4
-rw-r--r--plugingui/listbox.cc4
-rw-r--r--plugingui/listboxbasic.cc4
-rw-r--r--plugingui/listboxthin.cc4
-rw-r--r--plugingui/painter.cc761
-rw-r--r--plugingui/painter.h89
-rw-r--r--plugingui/plugingui.cc2
-rw-r--r--plugingui/progressbar.cc6
-rw-r--r--plugingui/scrollbar.cc4
-rw-r--r--plugingui/slider.cc2
-rw-r--r--plugingui/verticalline.cc4
-rw-r--r--plugingui/widget.cc6
-rw-r--r--plugingui/window.cc9
27 files changed, 496 insertions, 522 deletions
diff --git a/plugingui/button.cc b/plugingui/button.cc
index be5f82e..9248242 100644
--- a/plugingui/button.cc
+++ b/plugingui/button.cc
@@ -106,7 +106,7 @@ void Button::buttonEvent(ButtonEvent *e)
void Button::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -119,10 +119,10 @@ void Button::repaintEvent(RepaintEvent *e)
switch(draw_state) {
case up:
- p.drawBox(0, 0, &box_up, w, h);
+ p.drawBox(0, 0, box_up, w, h);
break;
case down:
- p.drawBox(0, 0, &box_down, w, h);
+ p.drawBox(0, 0, box_down, w, h);
break;
}
diff --git a/plugingui/checkbox.cc b/plugingui/checkbox.cc
index 6d85615..b9468d3 100644
--- a/plugingui/checkbox.cc
+++ b/plugingui/checkbox.cc
@@ -83,32 +83,32 @@ void CheckBox::keyEvent(KeyEvent *e)
void CheckBox::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
if(state)
{
- p.drawImage(0, (knob.height() - bg_on.height()) / 2, &bg_on);
+ p.drawImage(0, (knob.height() - bg_on.height()) / 2, bg_on);
if(middle)
{
- p.drawImage((bg_on.width() - knob.width()) / 2 + 1, 0, &knob);
+ p.drawImage((bg_on.width() - knob.width()) / 2 + 1, 0, knob);
}
else
{
- p.drawImage(bg_on.width() - 40 + 2, 0, &knob);
+ p.drawImage(bg_on.width() - 40 + 2, 0, knob);
}
}
else
{
- p.drawImage(0, (knob.height() - bg_off.height()) / 2, &bg_off);
+ p.drawImage(0, (knob.height() - bg_off.height()) / 2, bg_off);
if(middle)
{
- p.drawImage((bg_on.width() - knob.width()) / 2 + 1, 0, &knob);
+ p.drawImage((bg_on.width() - knob.width()) / 2 + 1, 0, knob);
}
else
{
- p.drawImage(0, 0, &knob);
+ p.drawImage(0, 0, knob);
}
}
}
diff --git a/plugingui/combobox.cc b/plugingui/combobox.cc
index 4a6d2b5..6e6a9c8 100644
--- a/plugingui/combobox.cc
+++ b/plugingui/combobox.cc
@@ -115,7 +115,7 @@ static void drawArrow(Painter &p, int x, int y, int w, int h)
void ComboBox::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -128,7 +128,7 @@ void ComboBox::repaintEvent(RepaintEvent *e)
return;
}
- p.drawBox(0, 0, &box, w, h);
+ p.drawBox(0, 0, box, w, h);
p.setColour(Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
p.drawText(BORDER - 4 + 3, height()/2+5 + 1 + 1, font, _text);
diff --git a/plugingui/eventhandler.cc b/plugingui/eventhandler.cc
index e47cbf5..4b55ce5 100644
--- a/plugingui/eventhandler.cc
+++ b/plugingui/eventhandler.cc
@@ -31,7 +31,7 @@
namespace GUI {
-EventHandler::EventHandler(NativeWindow *nativeWindow, Window *window)
+EventHandler::EventHandler(NativeWindow& nativeWindow, Window& window)
: window(window)
, nativeWindow(nativeWindow)
// , last_click(0)
@@ -40,12 +40,12 @@ EventHandler::EventHandler(NativeWindow *nativeWindow, Window *window)
bool EventHandler::hasEvent()
{
- return nativeWindow->hasEvent();
+ return nativeWindow.hasEvent();
}
Event *EventHandler::getNextEvent()
{
- return nativeWindow->getNextEvent();
+ return nativeWindow.getNextEvent();
}
void EventHandler::processEvents()
@@ -63,16 +63,16 @@ void EventHandler::processEvents()
switch(event->type()) {
case Event::Repaint:
- window->redraw();
+ window.redraw();
break;
case Event::Resize:
{
auto resizeEvent = static_cast<ResizeEvent*>(event);
- if((resizeEvent->width != window->width()) ||
- (resizeEvent->height != window->height()))
+ if((resizeEvent->width != window.width()) ||
+ (resizeEvent->height != window.height()))
{
- window->resized(resizeEvent->width, resizeEvent->height);
+ window.resized(resizeEvent->width, resizeEvent->height);
}
}
break;
@@ -81,8 +81,8 @@ void EventHandler::processEvents()
{
auto moveEvent = static_cast<MouseMoveEvent*>(event);
- auto widget = window->find(moveEvent->x, moveEvent->y);
- auto oldwidget = window->mouseFocus();
+ auto widget = window.find(moveEvent->x, moveEvent->y);
+ auto oldwidget = window.mouseFocus();
if(widget != oldwidget)
{
// Send focus leave to oldwidget
@@ -97,16 +97,16 @@ void EventHandler::processEvents()
widget->mouseEnterEvent();
}
- window->setMouseFocus(widget);
+ window.setMouseFocus(widget);
}
- if(window->buttonDownFocus())
+ if(window.buttonDownFocus())
{
- auto widget = window->buttonDownFocus();
+ auto widget = window.buttonDownFocus();
moveEvent->x -= widget->windowX();
moveEvent->y -= widget->windowY();
- window->buttonDownFocus()->mouseMoveEvent(moveEvent);
+ window.buttonDownFocus()->mouseMoveEvent(moveEvent);
break;
}
@@ -131,13 +131,13 @@ void EventHandler::processEvents()
lastWasDoubleClick = buttonEvent->doubleclick;
- auto widget = window->find(buttonEvent->x, buttonEvent->y);
+ auto widget = window.find(buttonEvent->x, buttonEvent->y);
- if(window->buttonDownFocus())
+ if(window.buttonDownFocus())
{
if(buttonEvent->direction == ButtonEvent::Up)
{
- auto widget = window->buttonDownFocus();
+ auto widget = window.buttonDownFocus();
buttonEvent->x -= widget->windowX();
buttonEvent->y -= widget->windowY();
@@ -146,7 +146,7 @@ void EventHandler::processEvents()
}
else // Event::Button::Down
{
- window->setButtonDownFocus(nullptr);
+ window.setButtonDownFocus(nullptr);
}
}
@@ -160,12 +160,12 @@ void EventHandler::processEvents()
if((buttonEvent->direction == ButtonEvent::Down) &&
widget->catchMouse())
{
- window->setButtonDownFocus(widget);
+ window.setButtonDownFocus(widget);
}
if(widget->isFocusable())
{
- window->setKeyboardFocus(widget);
+ window.setKeyboardFocus(widget);
}
}
}
@@ -175,7 +175,7 @@ void EventHandler::processEvents()
{
auto scrollEvent = static_cast<ScrollEvent*>(event);
- auto widget = window->find(scrollEvent->x, scrollEvent->y);
+ auto widget = window.find(scrollEvent->x, scrollEvent->y);
if(widget)
{
scrollEvent->x -= widget->windowX();
@@ -189,9 +189,9 @@ void EventHandler::processEvents()
case Event::Key:
{
auto keyEvent = static_cast<KeyEvent*>(event);
- if(window->keyboardFocus())
+ if(window.keyboardFocus())
{
- window->keyboardFocus()->keyEvent(keyEvent);
+ window.keyboardFocus()->keyEvent(keyEvent);
}
}
break;
diff --git a/plugingui/eventhandler.h b/plugingui/eventhandler.h
index b865cbb..8fa42e4 100644
--- a/plugingui/eventhandler.h
+++ b/plugingui/eventhandler.h
@@ -36,7 +36,7 @@ class Window;
class EventHandler {
public:
- EventHandler(NativeWindow *nativeWindow, Window *window);
+ EventHandler(NativeWindow& nativeWindow, Window& window);
//! \brief Process all evebts currently in the event queue.
void processEvents();
@@ -51,8 +51,8 @@ public:
Notifier<> closeNotifier;
private:
- Window *window;
- NativeWindow *nativeWindow;
+ Window& window;
+ NativeWindow& nativeWindow;
// Used to ignore mouse button release after a double click.
bool lastWasDoubleClick;
diff --git a/plugingui/filebrowser.cc b/plugingui/filebrowser.cc
index 9635c94..6872a4e 100644
--- a/plugingui/filebrowser.cc
+++ b/plugingui/filebrowser.cc
@@ -131,8 +131,8 @@ void FileBrowser::resize(int w, int h)
void FileBrowser::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
- p.drawImageStretched(0,0, &back, width(), height());
+ Painter p(*this);
+ p.drawImageStretched(0,0, back, width(), height());
}
void FileBrowser::listSelectionChanged()
diff --git a/plugingui/font.cc b/plugingui/font.cc
index 79e3ab9..8cc0a4f 100644
--- a/plugingui/font.cc
+++ b/plugingui/font.cc
@@ -72,7 +72,7 @@ Font::Font(const std::string& fontfile)
characters[c - 1].width = characters[c].offset - characters[c - 1].offset - 1;
}
-size_t Font::textWidth(const std::string& text)
+size_t Font::textWidth(const std::string& text) const
{
size_t len = 0;
@@ -86,12 +86,12 @@ size_t Font::textWidth(const std::string& text)
return len;
}
-size_t Font::textHeight(const std::string& text)
+size_t Font::textHeight(const std::string& text) const
{
return img_font.height();
}
-PixelBufferAlpha *Font::render(const std::string& text)
+PixelBufferAlpha *Font::render(const std::string& text) const
{
int border = 1;
PixelBufferAlpha *pb =
diff --git a/plugingui/font.h b/plugingui/font.h
index c7fe67e..d350481 100644
--- a/plugingui/font.h
+++ b/plugingui/font.h
@@ -38,10 +38,10 @@ class Font {
public:
Font(const std::string& fontfile = ":font.png");
- size_t textWidth(const std::string& text);
- size_t textHeight(const std::string& text = "");
+ size_t textWidth(const std::string& text) const;
+ size_t textHeight(const std::string& text = "") const;
- PixelBufferAlpha *render(const std::string& text);
+ PixelBufferAlpha *render(const std::string& text) const;
private:
Image img_font;
@@ -54,11 +54,6 @@ private:
};
std::array<Character, 255> characters;
-
-// std::map<char, int> character_offset;
-// std::map<char, size_t> character_width;
-// std::map<char, int> character_pre_bias;
-// std::map<char, int> character_post_bias;
};
} // GUI::
diff --git a/plugingui/image.cc b/plugingui/image.cc
index f2dfb9c..6c16a69 100644
--- a/plugingui/image.cc
+++ b/plugingui/image.cc
@@ -92,17 +92,17 @@ void Image::load(const char* data, size_t size)
}
}
-size_t Image::width()
+size_t Image::width() const
{
return _width;
}
-size_t Image::height()
+size_t Image::height() const
{
return _height;
}
-Colour Image::getPixel(size_t x, size_t y)
+Colour Image::getPixel(size_t x, size_t y) const
{
if(x > _width || y > _height)
{
diff --git a/plugingui/image.h b/plugingui/image.h
index 1a6e40a..791ade4 100644
--- a/plugingui/image.h
+++ b/plugingui/image.h
@@ -39,10 +39,10 @@ public:
Image(const std::string& filename);
~Image();
- size_t width();
- size_t height();
+ size_t width() const;
+ size_t height() const;
- Colour getPixel(size_t x, size_t y);
+ Colour getPixel(size_t x, size_t y) const;
private:
void setError(int err);
diff --git a/plugingui/knob.cc b/plugingui/knob.cc
index 360766e..535448b 100644
--- a/plugingui/knob.cc
+++ b/plugingui/knob.cc
@@ -144,10 +144,10 @@ void Knob::repaintEvent(RepaintEvent *e)
int center_x = width() / 2;
int center_y = height() / 2;
- Painter p(this);
+ Painter p(*this);
p.clear();
- p.drawImageStretched(0, 0, &img_knob, diameter, diameter);
+ p.drawImageStretched(0, 0, img_knob, diameter, diameter);
char buf[64];
sprintf(buf, "%.2f", currentValue * maximum);
diff --git a/plugingui/label.cc b/plugingui/label.cc
index 1b2ec14..7d82f1b 100644
--- a/plugingui/label.cc
+++ b/plugingui/label.cc
@@ -44,7 +44,7 @@ void Label::setText(std::string text)
void Label::repaintEvent(GUI::RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
diff --git a/plugingui/layout.h b/plugingui/layout.h
index 9814f7e..72e4fc8 100644
--- a/plugingui/layout.h
+++ b/plugingui/layout.h
@@ -38,7 +38,7 @@ public:
LayoutItem();
virtual ~LayoutItem();
- void setLayoutParent(Layout *parent);
+ void setLayoutParent(Layout* parent);
virtual void resize(int width, int height) = 0;
virtual void move(size_t x, size_t y) = 0;
@@ -48,7 +48,7 @@ public:
virtual size_t height() = 0;
private:
- Layout *parent;
+ Layout* parent;
};
//! \brief Abtract Layout class.
diff --git a/plugingui/led.cc b/plugingui/led.cc
index f8c001c..1d844c3 100644
--- a/plugingui/led.cc
+++ b/plugingui/led.cc
@@ -50,7 +50,7 @@ void LED::repaintEvent(RepaintEvent *e)
size_t h = height() - 1;
size_t w = width() - 1;
- Painter p(this);
+ Painter p(*this);
float alpha = 0.9;
switch(state) {
case Red:
diff --git a/plugingui/lineedit.cc b/plugingui/lineedit.cc
index 12969ba..ff936f4 100644
--- a/plugingui/lineedit.cc
+++ b/plugingui/lineedit.cc
@@ -213,7 +213,7 @@ void LineEdit::keyEvent(KeyEvent *keyEvent)
void LineEdit::repaintEvent(RepaintEvent *repaintEvent)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -224,7 +224,7 @@ void LineEdit::repaintEvent(RepaintEvent *repaintEvent)
return;
}
- p.drawBox(0, 0, &box, w, h);
+ p.drawBox(0, 0, box, w, h);
p.setColour(Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
diff --git a/plugingui/listbox.cc b/plugingui/listbox.cc
index 22263b0..a573e0e 100644
--- a/plugingui/listbox.cc
+++ b/plugingui/listbox.cc
@@ -101,7 +101,7 @@ void ListBox::clearSelectedValue()
void ListBox::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -112,7 +112,7 @@ void ListBox::repaintEvent(RepaintEvent *e)
return;
}
- p.drawBox(0, 0, &box, w, h);
+ p.drawBox(0, 0, box, w, h);
}
void ListBox::resize(int width, int height)
diff --git a/plugingui/listboxbasic.cc b/plugingui/listboxbasic.cc
index fa1601f..0d854ab 100644
--- a/plugingui/listboxbasic.cc
+++ b/plugingui/listboxbasic.cc
@@ -142,7 +142,7 @@ void ListBoxBasic::clearSelectedValue()
void ListBoxBasic::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -154,7 +154,7 @@ void ListBoxBasic::repaintEvent(RepaintEvent *e)
return;
}
- p.drawImageStretched(0, 0, &bg_img, w, h);
+ p.drawImageStretched(0, 0, bg_img, w, h);
p.setColour(Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
diff --git a/plugingui/listboxthin.cc b/plugingui/listboxthin.cc
index 18cfc76..0120c50 100644
--- a/plugingui/listboxthin.cc
+++ b/plugingui/listboxthin.cc
@@ -96,7 +96,7 @@ std::string ListBoxThin::selectedValue()
void ListBoxThin::repaintEvent(RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
p.clear();
@@ -107,7 +107,7 @@ void ListBoxThin::repaintEvent(RepaintEvent *e)
return;
}
- p.drawBox(0, 0, &box, w, h);
+ p.drawBox(0, 0, box, w, h);
}
void ListBoxThin::resize(int width, int height)
diff --git a/plugingui/painter.cc b/plugingui/painter.cc
index 842ff11..c1ab811 100644
--- a/plugingui/painter.cc
+++ b/plugingui/painter.cc
@@ -28,461 +28,444 @@
#include "window.h"
-#include <string.h>
+#include <cmath>
-GUI::Painter::Painter(GUI::Widget *widget)
-{
- this->widget = widget;
- widget->window()->beginPaint();
- pixbuf = &widget->pixbuf;
- colour = Colour(0, 0, 0, 0.5);
-}
+namespace GUI {
-GUI::Painter::~Painter()
+Painter::Painter(Widget& widget)
+ : widget(widget)
{
- widget->window()->endPaint();
- flush();
-}
+ if(widget.window())
+ {
+ widget.window()->beginPaint();
+ }
-void GUI::Painter::setColour(Colour colour)
-{
- this->colour = colour;
+ pixbuf = &widget.pixbuf;
+ colour = Colour(0, 0, 0, 0.5);
}
-void GUI::Painter::plot(int x, int y, double c)
+Painter::~Painter()
{
- // plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
- pixbuf->addPixel(x, y,
- (unsigned char)(colour.red * 255.0),
- (unsigned char)(colour.green * 255.0),
- (unsigned char)(colour.blue * 255.0),
- (unsigned char)(colour.alpha * 255 * c));
+ if(widget.window())
+ {
+ widget.window()->endPaint();
+ }
+ flush();
}
-#include <math.h>
-double GUI::Painter::ipart(double x)
+void Painter::setColour(const Colour& colour)
{
- return floor(x); //integer part of x'
+ this->colour = colour;
}
-
-double GUI::Painter::round(double x)
-{
- return ipart(x + 0.5);
-}
-
-double GUI::Painter::fpart(double x)
-{
- return x - ipart(x);//'fractional part of x'
-}
-
-double GUI::Painter::rfpart(double x)
+
+void Painter::plot(int x, int y, double c)
{
- return 1 - fpart(x);
-}
+ // plot the pixel at (x, y) with brightness c (where 0 ≤ c ≤ 1)
+ pixbuf->addPixel(x, y,
+ (unsigned char)(colour.red * 255.0),
+ (unsigned char)(colour.green * 255.0),
+ (unsigned char)(colour.blue * 255.0),
+ (unsigned char)(colour.alpha * 255 * c));
+}
-#define SWAP(x, y) { int tmp = x; x = y; y = tmp; }
-void GUI::Painter::drawLine(int x0, int y0, int x1, int y1)
+double Painter::fpart(double x)
{
- bool steep = abs(y1 - y0) > abs(x1 - x0);
-
- if(steep) {
- SWAP(x0, y0);
- SWAP(x1, y1);
- }
- if(x0 > x1) {
- SWAP(x0, x1);
- SWAP(y0, y1);
- }
-
- double dx = x1 - x0;
- double dy = y1 - y0;
- double gradient = dy / dx;
-
- // Handle first endpoint:
- double xend = round(x0);
- double yend = y0 + gradient * (xend - x0);
- //double xgap = rfpart(x0 + 0.5);
- double xpxl1 = xend; //this will be used in the main loop
- double ypxl1 = ipart(yend);
-
- if(steep) {
- plot(ypxl1, xpxl1, 1);
- //plot(ypxl1, xpxl1, rfpart(yend) * xgap);
- //plot(ypxl1+1, xpxl1, fpart(yend) * xgap);
- } else {
- plot(xpxl1, ypxl1, 1);
- //plot(xpxl1, ypxl1 , rfpart(yend) * xgap);
- //plot(xpxl1, ypxl1+1, fpart(yend) * xgap);
- }
-
- double intery = yend + gradient; // first y-intersection for the main loop
-
- // Handle second endpoint:
- xend = round(x1);
- yend = y1 + gradient * (xend - x1);
- //xgap = fpart(x1 + 0.5);
- double xpxl2 = xend; //this will be used in the main loop
- double ypxl2 = ipart(yend);
-
- if(steep) {
- plot(ypxl2, xpxl2, 1);
- //plot(ypxl2 , xpxl2, rfpart(yend) * xgap);
- //plot(ypxl2+1, xpxl2, fpart(yend) * xgap);
- } else {
- plot(xpxl2, ypxl2, 1);
- //plot(xpxl2, ypxl2, rfpart(yend) * xgap);
- //plot(xpxl2, ypxl2+1, fpart(yend) * xgap);
- }
-
- // main loop
- for(int x = xpxl1 + 1; x <= xpxl2 - 1; x++) {
- if(steep) {
- plot(ipart(intery) , x, rfpart(intery));
- plot(ipart(intery)+1, x, fpart(intery));
- } else {
- plot(x, ipart (intery), rfpart(intery));
- plot(x, ipart (intery)+1, fpart(intery));
- }
- intery += gradient;
- }
+ return x - std::floor(x);// fractional part of x
}
-void GUI::Painter::drawRectangle(int x1, int y1, int x2, int y2)
+double Painter::rfpart(double x)
{
- drawLine(x1, y1, x2 - 1, y1);
- drawLine(x2, y1, x2, y2 - 1);
- drawLine(x1 + 1, y2, x2, y2);
- drawLine(x1, y1 + 1, x1, y2);
+ return 1 - fpart(x); // reverse fractional part of x
}
-void GUI::Painter::drawFilledRectangle(int x1, int y1, int x2, int y2)
+void Painter::drawLine(int x0, int y0, int x1, int y1)
{
- for(int y = y1; y < y2; y++) {
- drawLine(x1, y, x2, y);
- }
+ bool steep = abs(y1 - y0) > abs(x1 - x0);
+
+ if(steep)
+ {
+ std::swap(x0, y0);
+ std::swap(x1, y1);
+ }
+ if(x0 > x1)
+ {
+ std::swap(x0, x1);
+ std::swap(y0, y1);
+ }
+
+ double dx = x1 - x0;
+ double dy = y1 - y0;
+ double gradient = dy / dx;
+
+ // Handle first endpoint:
+ double xend = std::round(x0);
+ double yend = y0 + gradient * (xend - x0);
+
+ double xpxl1 = xend; // this will be used in the main loop
+ double ypxl1 = std::floor(yend);
+
+ if(steep)
+ {
+ plot(ypxl1, xpxl1, 1);
+ }
+ else
+ {
+ plot(xpxl1, ypxl1, 1);
+ }
+
+ double intery = yend + gradient; // first y-intersection for the main loop
+
+ // Handle second endpoint:
+ xend = std::round(x1);
+ yend = y1 + gradient * (xend - x1);
+
+ double xpxl2 = xend; // this will be used in the main loop
+ double ypxl2 = std::floor(yend);
+
+ if(steep)
+ {
+ plot(ypxl2, xpxl2, 1);
+ }
+ else
+ {
+ plot(xpxl2, ypxl2, 1);
+ }
+
+ // main loop
+ for(int x = xpxl1 + 1; x <= xpxl2 - 1; ++x)
+ {
+ if(steep)
+ {
+ plot(std::floor(intery) , x, rfpart(intery));
+ plot(std::floor(intery)+1, x, fpart(intery));
+ }
+ else
+ {
+ plot(x, std::floor(intery), rfpart(intery));
+ plot(x, std::floor(intery)+1, fpart(intery));
+ }
+ intery += gradient;
+ }
}
-void GUI::Painter::clear()
+void Painter::drawRectangle(int x1, int y1, int x2, int y2)
{
- for(int x = 0; x < (int)pixbuf->width; x++) {
- for(int y = 0; y < (int)pixbuf->height; y++) {
- pixbuf->setPixel(x, y, 0, 0, 0, 0);
- }
- }
+ drawLine(x1, y1, x2 - 1, y1);
+ drawLine(x2, y1, x2, y2 - 1);
+ drawLine(x1 + 1, y2, x2, y2);
+ drawLine(x1, y1 + 1, x1, y2);
}
-void GUI::Painter::drawText(int x0, int y0, GUI::Font &font, std::string text,
- bool nocolour)
+void Painter::drawFilledRectangle(int x1, int y1, int x2, int y2)
{
- PixelBufferAlpha *textbuf = font.render(text);
- if(nocolour) {
- for(size_t x = 0; x < textbuf->width; x++) {
- for(size_t y = 0; y < textbuf->height; y++) {
- unsigned char r,g,b,a;
- textbuf->pixel(x, y, &r, &g, &b, &a);
- pixbuf->addPixel(x + x0, y + y0 - textbuf->height, r,g,b,a);
- }
- }
- } else {
- for(size_t x = 0; x < textbuf->width; x++) {
- for(size_t y = 0; y < textbuf->height; y++) {
- unsigned char r,g,b,a;
- textbuf->pixel(x, y, &r, &g, &b, &a);
- pixbuf->addPixel(x + x0, y + y0 - textbuf->height,
- colour.red * 255,
- colour.green * 255,
- colour.blue * 255,
- colour.alpha * a);
- }
- }
- }
-
- delete textbuf;
+ for(int y = y1; y < y2; ++y)
+ {
+ drawLine(x1, y, x2, y);
+ }
}
-#include <stdio.h>
-void GUI::Painter::drawPoint(int x, int y)
+void Painter::clear()
{
- pixbuf->setPixel(x, y,
- (unsigned char)(colour.red * 255.0),
- (unsigned char)(colour.green * 255.0),
- (unsigned char)(colour.blue * 255.0),
- (unsigned char)(colour.alpha * 255.0));
+ for(int x = 0; x < (int)pixbuf->width; ++x)
+ {
+ for(int y = 0; y < (int)pixbuf->height; ++y)
+ {
+ pixbuf->setPixel(x, y, 0, 0, 0, 0);
+ }
+ }
}
-#if 0
-static double distance(double r, double y)
+void Painter::drawText(int x0, int y0, const Font &font,
+ const std::string& text, bool nocolour)
{
- double real_point = sqrt(pow(r, 2) - pow(y, 2));
- return ceil(real_point) - real_point;
+ PixelBufferAlpha* textbuf = font.render(text);
+
+ if(nocolour)
+ {
+ for(size_t x = 0; x < textbuf->width; ++x)
+ {
+ for(size_t y = 0; y < textbuf->height; ++y)
+ {
+ unsigned char r, g, b, a;
+ textbuf->pixel(x, y, &r, &g, &b, &a);
+ pixbuf->addPixel(x + x0, y + y0 - textbuf->height, r, g, b, a);
+ }
+ }
+ }
+ else
+ {
+ for(size_t x = 0; x < textbuf->width; ++x)
+ {
+ for(size_t y = 0; y < textbuf->height; ++y)
+ {
+ unsigned char r,g,b,a;
+ textbuf->pixel(x, y, &r, &g, &b, &a);
+ pixbuf->addPixel(x + x0, y + y0 - textbuf->height,
+ colour.red * 255,
+ colour.green * 255,
+ colour.blue * 255,
+ colour.alpha * a);
+ }
+ }
+ }
+
+ delete textbuf;
}
-double new_color(double i) {
- return i * 127;
+void Painter::drawPoint(int x, int y)
+{
+ pixbuf->setPixel(x, y,
+ (unsigned char)(colour.red * 255.0),
+ (unsigned char)(colour.green * 255.0),
+ (unsigned char)(colour.blue * 255.0),
+ (unsigned char)(colour.alpha * 255.0));
}
-void GUI::Painter::drawCircle(int cx, int cy, double radius)
+static void plot4points(Painter *p, int cx, int cy, int x, int y)
{
- // wu_circle($image, $r, $color, $offset_x = null, $offset_y = null) {
- //$red = $color["red"];
- //$green = $color["green"];
- //$blue = $color["blue"];
- int offset_x = cx;
- int offset_y = cy;
- int x = radius;
- // int xx = radius;
- int y = -1;
- // int yy = -1;
- double t = 0;
- //$color = imagecolorallocate($image, $red, $green, $blue);
- while(x > y) {
- y++;
- double current_distance = distance(radius, y);
- if(current_distance < t) {
- x--;
- }
-
- double trasparency = new_color(current_distance);
- double alpha = trasparency;
- double alpha2 = 127.0 - trasparency;
-
- double color = 1;
-
- plot(x + offset_x, y + offset_y, color);
- plot(x + offset_x - 1, y + offset_y, alpha2 );
- plot(x + offset_x + 1, y + offset_y, alpha );
-
- plot(y + offset_x, x + offset_y, color);
- plot(y + offset_x, x + offset_y - 1, alpha2);
- plot(y + offset_x, x + offset_y + 1, alpha);
-
- plot(offset_x - x , y + offset_y, color);
- plot(offset_x - x + 1, y + offset_y, alpha2);
- plot(offset_x - x - 1, y + offset_y, alpha);
-
- plot(offset_x - y, x + offset_y, color);
- plot(offset_x - y, x + offset_y - 1, alpha2);
- plot(offset_x - y, x + offset_y + 1, alpha);
-
- plot(x + offset_x, offset_y - y, color);
- plot(x + offset_x - 1, offset_y - y, alpha2);
- plot(x + offset_x + 1, offset_y - y, alpha);
-
- plot(y + offset_x, offset_y - x, color);
- plot(y + offset_x, offset_y - x - 1, alpha);
- plot(y + offset_x, offset_y - x + 1, alpha2);
-
- plot(offset_x - y, offset_y - x, color);
- plot(offset_x - y, offset_y - x - 1, alpha);
- plot(offset_x - y, offset_y - x + 1, alpha2);
-
- plot(offset_x - x, offset_y - y, color);
- plot(offset_x - x - 1, offset_y - y, alpha);
- plot(offset_x - x + 1, offset_y - y, alpha2);
-
- t = current_distance;
- }
+ p->drawPoint(cx + x, cy + y);
+ if(x != 0)
+ {
+ p->drawPoint(cx - x, cy + y);
+ }
+
+ if(y != 0)
+ {
+ p->drawPoint(cx + x, cy - y);
+ }
+
+ if(x != 0 && y != 0)
+ {
+ p->drawPoint(cx - x, cy - y);
+ }
}
-#else
-static void plot4points(GUI::Painter *p, int cx, int cy, int x, int y)
+
+void Painter::drawCircle(int cx, int cy, double radius)
{
- p->drawPoint(cx + x, cy + y);
- if(x != 0) p->drawPoint(cx - x, cy + y);
- if(y != 0) p->drawPoint(cx + x, cy - y);
- if(x != 0 && y != 0) p->drawPoint(cx - x, cy - y);
+ int error = -radius;
+ int x = radius;
+ int y = 0;
+
+ while(x >= y)
+ {
+ plot4points(this, cx, cy, x, y);
+
+ if(x != y)
+ {
+ plot4points(this, cx, cy, y, x);
+ }
+
+ error += y;
+ ++y;
+ error += y;
+
+ if(error >= 0)
+ {
+ --x;
+ error -= x;
+ error -= x;
+ }
+ }
}
-void GUI::Painter::drawCircle(int cx, int cy, double radius)
+static void plot4lines(Painter *p, int cx, int cy, int x, int y)
{
- int error = -radius;
- int x = radius;
- int y = 0;
-
- while(x >= y) {
- plot4points(this, cx, cy, x, y);
- if(x != y) plot4points(this, cx, cy, y, x);
-
- error += y;
- ++y;
- error += y;
-
- if(error >= 0) {
- --x;
- error -= x;
- error -= x;
- }
- }
+ p->drawLine(cx + x, cy + y, cx - x, cy + y);
+ if(x != 0)
+ {
+ p->drawLine(cx - x, cy + y, cx + x, cy + y);
+ }
+
+ if(y != 0)
+ {
+ p->drawLine(cx + x, cy - y, cx - x, cy - y);
+ }
+
+ if(x != 0 && y != 0)
+ {
+ p->drawLine(cx - x, cy - y, cx + x, cy - y);
+ }
}
-#endif
-static void plot4lines(GUI::Painter *p, int cx, int cy, int x, int y)
+void Painter::drawFilledCircle(int cx, int cy, int radius)
{
- p->drawLine(cx + x, cy + y, cx - x, cy + y);
- if(x != 0) p->drawLine(cx - x, cy + y, cx + x, cy + y);
- if(y != 0) p->drawLine(cx + x, cy - y, cx - x, cy - y);
- if(x != 0 && y != 0) p->drawLine(cx - x, cy - y, cx + x, cy - y);
+ int error = -radius;
+ int x = radius;
+ int y = 0;
+
+ while(x >= y)
+ {
+ plot4lines(this, cx, cy, x, y);
+
+ if(x != y)
+ {
+ plot4lines(this, cx, cy, y, x);
+ }
+
+ error += y;
+ ++y;
+ error += y;
+
+ if(error >= 0)
+ {
+ --x;
+ error -= x;
+ error -= x;
+ }
+ }
}
-void GUI::Painter::drawFilledCircle(int cx, int cy, int radius)
+void Painter::drawImage(int x0, int y0, const Image& image)
{
- int error = -radius;
- int x = radius;
- int y = 0;
-
- while(x >= y) {
- plot4lines(this, cx, cy, x, y);
- if(x != y) plot4lines(this, cx, cy, y, x);
-
- error += y;
- ++y;
- error += y;
-
- if(error >= 0) {
- --x;
- error -= x;
- error -= x;
- }
- }
+ size_t fw = image.width();
+ size_t fh = image.height();
+
+ for(size_t y = 0; y < fh; ++y)
+ {
+ for(size_t x = 0; x < fw; ++x)
+ {
+ Colour c = image.getPixel(x, y);
+ pixbuf->addPixel(x0 + x, y0 + y, c);
+ }
+ }
}
-void GUI::Painter::drawImage(int x0, int y0, GUI::Image *image)
+void Painter::drawImageStretched(int x0, int y0, const Image& image,
+ int w, int h)
{
- size_t fw = image->width();
- size_t fh = image->height();
-
- for(size_t x = 0; x < fw; x++) {
- for(size_t y = 0; y < fh; y++) {
- GUI::Colour c = image->getPixel(x, y);
- pixbuf->addPixel(x0 + x, y0 + y, c);
- }
- }
+ if((w < 1) || (h < 1))
+ {
+ return;
+ }
+
+ float fw = image.width();
+ float fh = image.height();
+
+ for(int y = 0; y < h; ++y)
+ {
+ for(int x = 0; x < w; ++x)
+ {
+ int lx = ((float)x / (float)w) * fw;
+ int ly = ((float)y / (float)h) * fh;
+ Colour c = image.getPixel(lx, ly);
+ pixbuf->addPixel(x0 + x, y0 + y, c);
+ }
+ }
}
-void GUI::Painter::drawImageStretched(int x0, int y0, GUI::Image *image,
- int w, int h)
+void Painter::drawBox(int x, int y, const Box& box, int width, int height)
{
- if(w < 1 || h < 1) return;
-
- float fw = image->width();
- float fh = image->height();
-
- for(int x = 0; x < w; x++) {
- for(int y = 0; y < h; y++) {
- int lx = ((float)x/(float)w)*fw;
- int ly = ((float)y/(float)h)*fh;
- GUI::Colour c = image->getPixel(lx, ly);
- pixbuf->addPixel(x0 + x, y0 + y, c);
- }
- }
+ int dx = x;
+ int dy = y;
+
+ // Top:
+ drawImage(dx, dy, *box.topLeft);
+
+ dx += box.topLeft->width();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImageStretched(dx, dy, *box.top,
+ width - box.topRight->width() - box.topLeft->width(),
+ box.top->height());
+
+ dx = x + width - box.topRight->width();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImage(dx, dy, *box.topRight);
+
+ // Center:
+ dy = y + box.topLeft->height();
+ dx = x + box.left->width();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImageStretched(dx, dy, *box.center,
+ width - box.left->width() - box.right->width(),
+ height - box.topLeft->height() - box.bottomLeft->height());
+
+ // Mid:
+ dx = x;
+ dy = y + box.topLeft->height();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImageStretched(dx, dy, *box.left, box.left->width(),
+ height - box.topLeft->height() - box.bottomLeft->height());
+
+ dx = x + width - box.right->width();
+ dy = y + box.topRight->height();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImageStretched(dx, dy, *box.right,
+ box.right->width(),
+ height - box.topRight->height() - box.bottomRight->height());
+
+ // Bottom:
+ dx = x;
+ dy = y + height - box.bottomLeft->height();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImage(dx, dy, *box.bottomLeft);
+
+ dx += box.bottomLeft->width();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImageStretched(dx, dy, *box.bottom,
+ width - box.bottomRight->width() - box.bottomLeft->width(),
+ box.bottom->height());
+
+ dx = x + width - box.bottomRight->width();
+ if((dx < 0) || (dy < 0))
+ {
+ return;
+ }
+
+ drawImage(dx, dy, *box.bottomRight);
}
-void GUI::Painter::drawBox(int x, int y, Box *box, int width, int height)
+void Painter::drawBar(int x, int y, const Bar& bar, int width, int height)
{
- int dx = x;
- int dy = y;
-
- // Top:
-
- drawImage(dx, dy, box->topLeft);
-
- dx += box->topLeft->width();
- if(dx < 0 || dy < 0) return;
-
- drawImageStretched(dx, dy, box->top,
- width - box->topRight->width() - box->topLeft->width(),
- box->top->height());
-
- dx = x + width - box->topRight->width();
- if(dx < 0 || dy < 0) return;
+ if(width < ((int)bar.left->width() + (int)bar.right->width() + 1))
+ {
+ width = bar.left->width() + bar.right->width() + 1;
+ }
- drawImage(dx, dy, box->topRight);
+ drawImageStretched(x, y, *bar.left, bar.left->width(), height);
- // Center
- dy = y + box->topLeft->height();
- dx = x + box->left->width();
- if(dx < 0 || dy < 0) return;
+ drawImageStretched(x + bar.left->width(), y, *bar.center,
+ width - bar.left->width() - bar.right->width(), height);
- drawImageStretched(dx, dy, box->center,
- width - box->left->width() - box->right->width(),
- height - box->topLeft->height() - box->bottomLeft->height());
-
- // Mid:
- dx = x;
- dy = y + box->topLeft->height();
- if(dx < 0 || dy < 0) return;
-
- drawImageStretched(dx, dy, box->left, box->left->width(),
- height - box->topLeft->height() - box->bottomLeft->height());
-
- dx = x + width - box->right->width();
- dy = y + box->topRight->height();
- if(dx < 0 || dy < 0) return;
-
- drawImageStretched(dx, dy, box->right,
- box->right->width(),
- height - box->topRight->height() - box->bottomRight->height());
-
- // Bottom:
- dx = x;
- dy = y + height - box->bottomLeft->height();
- if(dx < 0 || dy < 0) return;
-
- drawImage(dx, dy, box->bottomLeft);
-
- dx += box->bottomLeft->width();
- if(dx < 0 || dy < 0) return;
-
- drawImageStretched(dx, dy, box->bottom,
- width - box->bottomRight->width() - box->bottomLeft->width(),
- box->bottom->height());
-
- dx = x + width - box->bottomRight->width();
- if(dx < 0 || dy < 0) return;
-
- drawImage(dx, dy, box->bottomRight);
-}
-
-void GUI::Painter::drawBar(int x, int y, Bar *bar, int width, int height)
-{
- if(width < ((int)bar->left->width() + (int)bar->right->width() + 1)) {
- width = bar->left->width() + bar->right->width() + 1;
- }
- drawImageStretched(x, y,
- bar->left,
- bar->left->width(), height);
-
- drawImageStretched(x + bar->left->width(), y,
- bar->center,
- width - bar->left->width() - bar->right->width(), height);
-
- drawImageStretched(x + width - bar->left->width(), y,
- bar->right,
- bar->right->width(), height);
+ drawImageStretched(x + width - bar.left->width(), y, *bar.right,
+ bar.right->width(), height);
}
-void GUI::Painter::flush()
+void Painter::flush()
{
#ifdef X11
- // Send the "DrawLine" request to the server
- //XFlush(gctx->display);
+ // Send the "DrawLine" request to the server
+ //XFlush(gctx->display);
#endif/*X11*/
}
-#ifdef TEST_PAINTER
-//Additional dependency files
-//deps:
-//Required cflags (autoconf vars may be used)
-//cflags:
-//Required link options (autoconf vars may be used)
-//libs:
-#include "test.h"
-
-TEST_BEGIN;
-
-// TODO: Put some testcode here (see test.h for usable macros).
-
-TEST_END;
-
-#endif/*TEST_PAINTER*/
+} // GUI::
diff --git a/plugingui/painter.h b/plugingui/painter.h
index 0a93f50..40747a7 100644
--- a/plugingui/painter.h
+++ b/plugingui/painter.h
@@ -24,8 +24,7 @@
* along with DrumGizmo; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*/
-#ifndef __DRUMGIZMO_PAINTER_H__
-#define __DRUMGIZMO_PAINTER_H__
+#pragma once
#include <string>
@@ -39,59 +38,55 @@ namespace GUI {
class Painter {
public:
- Painter(Widget *widget);
- ~Painter();
+ Painter(Widget& widget);
+ ~Painter();
- void flush();
+ void flush();
- void setColour(Colour colour);
+ void setColour(const Colour& colour);
- void drawLine(int x1, int y1, int x2, int y2);
- void drawText(int x, int y, Font &font, std::string text,
- bool nocolour = false);
- void drawRectangle(int x1, int y1, int x2, int y2);
- void drawFilledRectangle(int x1, int y1, int x2, int y2);
- void drawPoint(int x, int y);
- void drawCircle(int x, int y, double r);
- void drawFilledCircle(int x, int y, int r);
- void drawImage(int x, int y, Image *image);
- void drawImageStretched(int x0, int y0, GUI::Image *image,
- int width, int height);
+ void drawLine(int x1, int y1, int x2, int y2);
+ void drawText(int x, int y, const Font &font, const std::string& text,
+ bool nocolour = false);
+ void drawRectangle(int x1, int y1, int x2, int y2);
+ void drawFilledRectangle(int x1, int y1, int x2, int y2);
+ void drawPoint(int x, int y);
+ void drawCircle(int x, int y, double r);
+ void drawFilledCircle(int x, int y, int r);
+ void drawImage(int x, int y, const Image& image);
+ void drawImageStretched(int x, int y, const Image& image,
+ int width, int height);
- typedef struct {
- Image *topLeft;
- Image *top;
- Image *topRight;
- Image *left;
- Image *right;
- Image *bottomLeft;
- Image *bottom;
- Image *bottomRight;
- Image *center;
- } Box;
- void drawBox(int x, int y, Box *box, int width, int height);
+ typedef struct {
+ Image *topLeft;
+ Image *top;
+ Image *topRight;
+ Image *left;
+ Image *right;
+ Image *bottomLeft;
+ Image *bottom;
+ Image *bottomRight;
+ Image *center;
+ } Box;
+ void drawBox(int x, int y, const Box& box, int width, int height);
- typedef struct {
- Image *left;
- Image *right;
- Image *center;
- } Bar;
- void drawBar(int x, int y, Bar *bar, int width, int height);
+ typedef struct {
+ Image *left;
+ Image *right;
+ Image *center;
+ } Bar;
+ void drawBar(int x, int y, const Bar& bar, int width, int height);
- void clear();
+ void clear();
private:
- void plot(int x, int y, double c);
- double ipart(double x);
- double round(double x);
- double fpart(double x);
- double rfpart(double x);
+ void plot(int x, int y, double c);
+ double fpart(double x);
+ double rfpart(double x);
- Widget *widget;
- PixelBufferAlpha *pixbuf;
- Colour colour;
+ Widget& widget;
+ PixelBufferAlpha* pixbuf;
+ Colour colour;
};
-};
-
-#endif/*__DRUMGIZMO_PAINTER_H__*/
+} // GUI::
diff --git a/plugingui/plugingui.cc b/plugingui/plugingui.cc
index deb1309..007a0ff 100644
--- a/plugingui/plugingui.cc
+++ b/plugingui/plugingui.cc
@@ -84,7 +84,7 @@ void PluginGUI::stopThread()
void PluginGUI::handleMessage(Message *msg)
{
- Painter p(window);// Make sure we only redraw buffer one time.
+ Painter p(*window);// Make sure we only redraw buffer one time.
switch(msg->type()) {
case Message::LoadStatus:
diff --git a/plugingui/progressbar.cc b/plugingui/progressbar.cc
index 3b821bb..f834fc4 100644
--- a/plugingui/progressbar.cc
+++ b/plugingui/progressbar.cc
@@ -71,14 +71,14 @@ void GUI::ProgressBar::setProgress(float progress)
void GUI::ProgressBar::repaintEvent(GUI::RepaintEvent *e)
{
- Painter p(this);
+ Painter p(*this);
int max = width() * _progress;
p.clear();
int brd = 4;
- p.drawBar(0, 0, &bar_bg, width(), height());
+ p.drawBar(0, 0, bar_bg, width(), height());
GUI::Painter::Bar *b = NULL;
switch(state) {
@@ -87,7 +87,7 @@ void GUI::ProgressBar::repaintEvent(GUI::RepaintEvent *e)
case blue: b = &bar_blue; break;
default: break;
}
- if(b) p.drawBar(brd, 0, b, max - 2*brd, height());
+ if(b) p.drawBar(brd, 0, *b, max - 2*brd, height());
}
#ifdef TEST_PROGRESSBAR
diff --git a/plugingui/scrollbar.cc b/plugingui/scrollbar.cc
index 3107987..c175720 100644
--- a/plugingui/scrollbar.cc
+++ b/plugingui/scrollbar.cc
@@ -107,11 +107,11 @@ static void drawArrow(GUI::Painter &p, int x, int y, int w, int h)
void GUI::ScrollBar::repaintEvent(RepaintEvent *e)
{
- GUI::Painter p(this);
+ GUI::Painter p(*this);
p.clear();
- p.drawImageStretched(0, 0, &bg_img, width(), height());
+ p.drawImageStretched(0, 0, bg_img, width(), height());
p.setColour(GUI::Colour(183.0/255.0, 219.0/255.0 , 255.0/255.0, 1));
if(!max) return;
diff --git a/plugingui/slider.cc b/plugingui/slider.cc
index 311497a..4f56344 100644
--- a/plugingui/slider.cc
+++ b/plugingui/slider.cc
@@ -104,7 +104,7 @@ void GUI::Slider::repaintEvent(GUI::RepaintEvent *e)
{
//DEBUG(slider, "Slider::repaintEvent (%f)\n", val);
- Painter p(this);
+ Painter p(*this);
float alpha = 0.8;
diff --git a/plugingui/verticalline.cc b/plugingui/verticalline.cc
index 53d82a6..bbf0d28 100644
--- a/plugingui/verticalline.cc
+++ b/plugingui/verticalline.cc
@@ -36,6 +36,6 @@ GUI::VerticalLine::VerticalLine(GUI::Widget *parent)
void GUI::VerticalLine::repaintEvent(RepaintEvent *e)
{
(void)e;
- GUI::Painter p(this);
- p.drawImageStretched(0, 0, &vline, width(), height());
+ GUI::Painter p(*this);
+ p.drawImageStretched(0, 0, vline, width(), height());
}
diff --git a/plugingui/widget.cc b/plugingui/widget.cc
index 65d269b..6106f7c 100644
--- a/plugingui/widget.cc
+++ b/plugingui/widget.cc
@@ -35,15 +35,17 @@ namespace GUI {
Widget::Widget(Widget *parent)
: pixbuf(1, 1)
+ , parent(parent)
+ , _window(nullptr)
{
_width = _height = 10;
- this->parent = parent;
if(parent)
{
parent->addChild(this);
_window = parent->window();
}
+
_width = _height = 0;
_visible = true;
}
@@ -173,7 +175,7 @@ Window *Widget::window()
void Widget::repaint_r(RepaintEvent *e)
{
- Painter p(this); // make sure pixbuf refcount is incremented.
+ Painter p(*this); // make sure pixbuf refcount is incremented.
repaintEvent(e);
diff --git a/plugingui/window.cc b/plugingui/window.cc
index b9a1092..afbcb21 100644
--- a/plugingui/window.cc
+++ b/plugingui/window.cc
@@ -69,7 +69,7 @@ GUI::Window::Window()
native = new NativeWindowPugl(this);
#endif
- eventhandler = new GUI::EventHandler(native, this);
+ eventhandler = new GUI::EventHandler(*native, *this);
}
GUI::Window::~Window()
@@ -92,10 +92,9 @@ void GUI::Window::repaintEvent(GUI::RepaintEvent *e)
{
if(!visible()) return;
- Painter p(this);
- p.drawImageStretched(0,0, &back, width(), height());
- p.drawImage(width() - logo.width(),
- height() - logo.height(), &logo);
+ Painter p(*this);
+ p.drawImageStretched(0,0, back, width(), height());
+ p.drawImage(width() - logo.width(), height() - logo.height(), logo);
}
void GUI::Window::setFixedSize(int w, int h)