fixed some bugs and the new commands
This commit is contained in:
parent
ce899439c9
commit
3327fb7e11
1 changed files with 49 additions and 14 deletions
|
@ -19,12 +19,13 @@
|
||||||
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
// DEALINGS IN THE SOFTWARE.
|
// DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// $Id: Button.cc,v 1.1 2002/12/13 20:24:33 fluxgen Exp $
|
// $Id: Button.cc,v 1.2 2002/12/16 11:05:35 fluxgen Exp $
|
||||||
|
|
||||||
#include "Button.hh"
|
#include "Button.hh"
|
||||||
|
|
||||||
#include "Command.hh"
|
#include "Command.hh"
|
||||||
#include "EventManager.hh"
|
#include "EventManager.hh"
|
||||||
|
#include "App.hh"
|
||||||
|
|
||||||
namespace FbTk {
|
namespace FbTk {
|
||||||
|
|
||||||
|
@ -34,18 +35,19 @@ Button::Button(int screen_num, int x, int y,
|
||||||
ExposureMask | ButtonPressMask | ButtonReleaseMask),
|
ExposureMask | ButtonPressMask | ButtonReleaseMask),
|
||||||
m_foreground_pm(0),
|
m_foreground_pm(0),
|
||||||
m_pressed_pm(0),
|
m_pressed_pm(0),
|
||||||
m_gc(0) {
|
m_gc(DefaultGC(FbTk::App::instance()->display(), screen_num)) {
|
||||||
|
|
||||||
// add this to eventmanager
|
// add this to eventmanager
|
||||||
FbTk::EventManager::instance()->add(*this, m_win);
|
FbTk::EventManager::instance()->add(*this, m_win);
|
||||||
}
|
}
|
||||||
|
|
||||||
Button::Button(FbWindow &parent, int x, int y,
|
Button::Button(const FbWindow &parent, int x, int y,
|
||||||
size_t width, size_t height):
|
size_t width, size_t height):
|
||||||
m_win(parent, x, y, width, height,
|
m_win(parent, x, y, width, height,
|
||||||
ExposureMask | ButtonPressMask | ButtonReleaseMask),
|
ExposureMask | ButtonPressMask | ButtonReleaseMask),
|
||||||
m_foreground_pm(0),
|
m_foreground_pm(0),
|
||||||
m_pressed_pm(0),
|
m_pressed_pm(0),
|
||||||
m_gc(0) {
|
m_gc(DefaultGC(FbTk::App::instance()->display(), m_win.screenNumber())) {
|
||||||
// add this to eventmanager
|
// add this to eventmanager
|
||||||
FbTk::EventManager::instance()->add(*this, m_win);
|
FbTk::EventManager::instance()->add(*this, m_win);
|
||||||
}
|
}
|
||||||
|
@ -76,11 +78,14 @@ void Button::setPressedPixmap(Pixmap pm) {
|
||||||
|
|
||||||
void Button::setBackgroundColor(const Color &color) {
|
void Button::setBackgroundColor(const Color &color) {
|
||||||
m_win.setBackgroundColor(color);
|
m_win.setBackgroundColor(color);
|
||||||
|
m_background_color = color;
|
||||||
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::setBackgroundPixmap(Pixmap pm) {
|
void Button::setBackgroundPixmap(Pixmap pm) {
|
||||||
m_win.setBackgroundPixmap(pm);
|
m_win.setBackgroundPixmap(pm);
|
||||||
m_foreground_pm = pm;
|
m_background_pm = pm;
|
||||||
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::show() {
|
void Button::show() {
|
||||||
|
@ -93,19 +98,49 @@ void Button::hide() {
|
||||||
|
|
||||||
void Button::buttonPressEvent(XButtonEvent &event) {
|
void Button::buttonPressEvent(XButtonEvent &event) {
|
||||||
m_win.setBackgroundPixmap(m_pressed_pm);
|
m_win.setBackgroundPixmap(m_pressed_pm);
|
||||||
m_win.clear();
|
m_pressed = true;
|
||||||
m_pressed = true;
|
clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::buttonReleaseEvent(XButtonEvent &event) {
|
void Button::buttonReleaseEvent(XButtonEvent &event) {
|
||||||
// set normal pixmap
|
|
||||||
m_win.setBackgroundPixmap(m_foreground_pm);
|
|
||||||
m_win.clear();
|
|
||||||
|
|
||||||
if (*m_onclick != 0) // check on click action
|
|
||||||
m_onclick->execute(); // do on click action
|
|
||||||
|
|
||||||
m_pressed = false;
|
m_pressed = false;
|
||||||
|
if (m_background_pm)
|
||||||
|
m_win.setBackgroundPixmap(m_background_pm);
|
||||||
|
else
|
||||||
|
m_win.setBackgroundColor(m_background_color);
|
||||||
|
clear(); // clear background
|
||||||
|
|
||||||
|
if (m_foreground_pm) { // draw foreground
|
||||||
|
Display *disp = App::instance()->display();
|
||||||
|
|
||||||
|
if (m_gc == 0) // get default gc
|
||||||
|
m_gc = DefaultGC(disp, m_win.screenNumber());
|
||||||
|
|
||||||
|
XCopyArea(disp, m_foreground_pm, m_win.window(), m_gc, 0, 0, width(), height(), 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.x < 0 || event.y < 0 ||
|
||||||
|
event.x > width() || event.y > height())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// call commands
|
||||||
|
switch (event.button) {
|
||||||
|
case Button1:
|
||||||
|
if (*m_onclick_left != 0)
|
||||||
|
m_onclick_left->execute();
|
||||||
|
break;
|
||||||
|
case Button2:
|
||||||
|
if (*m_onclick_middle != 0)
|
||||||
|
m_onclick_middle->execute();
|
||||||
|
break;
|
||||||
|
case Button3:
|
||||||
|
if (*m_onclick_right != 0)
|
||||||
|
m_onclick_right->execute();
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Button::exposeEvent(XExposeEvent &event) {
|
void Button::exposeEvent(XExposeEvent &event) {
|
||||||
|
|
Loading…
Reference in a new issue