[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Windstille-devel] rev 353 - trunk/src
From: |
Ingo Ruhnke |
Subject: |
[Windstille-devel] rev 353 - trunk/src |
Date: |
Thu, 27 May 2004 14:44:27 +0200 |
Author: grumbel
Date: 2004-05-27 14:44:26 +0200 (Thu, 27 May 2004)
New Revision: 353
Modified:
trunk/src/scrollbar.cxx
Log:
- added drag&drop to scrollbar
Modified: trunk/src/scrollbar.cxx
===================================================================
--- trunk/src/scrollbar.cxx 2004-05-27 12:04:43 UTC (rev 352)
+++ trunk/src/scrollbar.cxx 2004-05-27 12:44:26 UTC (rev 353)
@@ -18,6 +18,7 @@
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <ClanLib/Display/display.h>
+#include <ClanLib/Display/keys.h>
#include "scrollbar.hxx"
class ScrollbarImpl
@@ -32,8 +33,16 @@
float max;
float pagesize;
float pos;
+
+ float old_pos;
+ bool pressed;
+ CL_Point click_pos;
+
void draw();
+ void on_mouse_up(const CL_InputEvent& event);
+ void on_mouse_down(const CL_InputEvent& event);
+ void on_mouse_move(const CL_InputEvent& event);
};
Scrollbar::Scrollbar(const CL_Rect& rect, CL_Component* parent)
@@ -44,8 +53,13 @@
impl->max = 100;
impl->pagesize = 10;
impl->pos = 0;
+ impl->pressed = false;
impl->slots.push_back(sig_paint().connect(impl.get(), &ScrollbarImpl::draw));
+
+ impl->slots.push_back(sig_mouse_down().connect(impl.get(),
&ScrollbarImpl::on_mouse_down));
+ impl->slots.push_back(sig_mouse_up().connect(impl.get(),
&ScrollbarImpl::on_mouse_up));
+ impl->slots.push_back(sig_mouse_move().connect(impl.get(),
&ScrollbarImpl::on_mouse_move));
}
void
@@ -86,4 +100,44 @@
CL_Color(0, 0, 0));
}
+void
+ScrollbarImpl::on_mouse_up(const CL_InputEvent& event)
+{
+ if (event.id == CL_MOUSE_LEFT)
+ {
+ pressed = false;
+ parent->release_mouse();
+ }
+}
+
+void
+ScrollbarImpl::on_mouse_down(const CL_InputEvent& event)
+{
+ if (event.id == CL_MOUSE_LEFT)
+ {
+ pressed = true;
+ click_pos = event.mouse_pos;
+
+ parent->capture_mouse();
+
+ float scale = parent->get_height()/(max - min);
+ old_pos = pos * scale;
+
+ click_pos.x += parent->get_position().left;
+ click_pos.y += parent->get_position().top;
+ }
+}
+
+void
+ScrollbarImpl::on_mouse_move(const CL_InputEvent& event)
+{
+ if(pressed)
+ {
+ CL_Rect rect = parent->get_position();
+
+ float scale = parent->get_height()/(max - min);
+ pos = (old_pos - (click_pos.y - (rect.top + event.mouse_pos.y)))/scale;
+ }
+}
+
/* EOF */
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Windstille-devel] rev 353 - trunk/src,
Ingo Ruhnke <=