author | zecke <zecke> | 2004-04-07 23:33:48 (UTC) |
---|---|---|
committer | zecke <zecke> | 2004-04-07 23:33:48 (UTC) |
commit | 61cb9c9ad238e5aec6aaa1384549e0aab99d14bf (patch) (unidiff) | |
tree | b96da732386aa45060bd80890cd7466cbcf77afb /noncore/graphics/opie-eye/gui | |
parent | 0a21abab4eed64d17c4b1475569194117dab709c (diff) | |
download | opie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.zip opie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.tar.gz opie-61cb9c9ad238e5aec6aaa1384549e0aab99d14bf.tar.bz2 |
First version of the zoomer placement still needs some work though
Diffstat (limited to 'noncore/graphics/opie-eye/gui') (more/less context) (ignore whitespace changes)
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.cpp | 38 | ||||
-rw-r--r-- | noncore/graphics/opie-eye/gui/imagescrollview.h | 7 |
2 files changed, 43 insertions, 2 deletions
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.cpp b/noncore/graphics/opie-eye/gui/imagescrollview.cpp index ad19219..5b12258 100644 --- a/noncore/graphics/opie-eye/gui/imagescrollview.cpp +++ b/noncore/graphics/opie-eye/gui/imagescrollview.cpp | |||
@@ -39,48 +39,63 @@ void ImageScrollView::setImage(const QImage&img) | |||
39 | _original_data.setAlphaBuffer(false); | 39 | _original_data.setAlphaBuffer(false); |
40 | m_lastName = ""; | 40 | m_lastName = ""; |
41 | if (first_resize_done) { | 41 | if (first_resize_done) { |
42 | generateImage(); | 42 | generateImage(); |
43 | } | 43 | } |
44 | } | 44 | } |
45 | 45 | ||
46 | void ImageScrollView::setImage( const QString& path ) { | 46 | void ImageScrollView::setImage( const QString& path ) { |
47 | odebug << "load new image " << oendl; | 47 | odebug << "load new image " << oendl; |
48 | if (m_lastName == path) return; | 48 | if (m_lastName == path) return; |
49 | m_lastName = path; | 49 | m_lastName = path; |
50 | _original_data.load(path); | 50 | _original_data.load(path); |
51 | _original_data.convertDepth(QPixmap::defaultDepth()); | 51 | _original_data.convertDepth(QPixmap::defaultDepth()); |
52 | _original_data.setAlphaBuffer(false); | 52 | _original_data.setAlphaBuffer(false); |
53 | _image_data = QImage(); | 53 | _image_data = QImage(); |
54 | if (first_resize_done) { | 54 | if (first_resize_done) { |
55 | generateImage(); | 55 | generateImage(); |
56 | } | 56 | } |
57 | } | 57 | } |
58 | 58 | ||
59 | /* should be called every time the QImage changed it content */ | 59 | /* should be called every time the QImage changed it content */ |
60 | void ImageScrollView::init() | 60 | void ImageScrollView::init() |
61 | { | 61 | { |
62 | odebug << "init " << oendl; | 62 | odebug << "init " << oendl; |
63 | |||
64 | /* | ||
65 | * create the zoomer | ||
66 | * and connect ther various signals | ||
67 | */ | ||
68 | _zoomer = new Opie::MM::OImageZoomer( this, "The Zoomer" ); | ||
69 | connect(_zoomer, SIGNAL( zoomAreaRel(int,int)), | ||
70 | this, SLOT(scrollBy(int,int)) ); | ||
71 | connect(this,SIGNAL(contentsMoving(int,int)), | ||
72 | _zoomer, (SLOT(setVisiblePoint(int,int))) ); | ||
73 | connect(this,SIGNAL(imageSizeChanged(const QSize&)), | ||
74 | _zoomer, SLOT(setImageSize(const QSize&)) ); | ||
75 | connect(this,SIGNAL(viewportSizeChanged(const QSize&)), | ||
76 | _zoomer, SLOT(setViewPortSize(const QSize&)) ); | ||
77 | |||
63 | viewport()->setBackgroundColor(white); | 78 | viewport()->setBackgroundColor(white); |
64 | setFocusPolicy(QWidget::StrongFocus); | 79 | setFocusPolicy(QWidget::StrongFocus); |
65 | if (first_resize_done) { | 80 | if (first_resize_done) { |
66 | last_rot = Rotate0; | 81 | last_rot = Rotate0; |
67 | generateImage(); | 82 | generateImage(); |
68 | odebug << "reinit display " << oendl; | 83 | odebug << "reinit display " << oendl; |
69 | } else if (_original_data.size().isValid()) { | 84 | } else if (_original_data.size().isValid()) { |
70 | resizeContents(_original_data.width(),_original_data.height()); | 85 | resizeContents(_original_data.width(),_original_data.height()); |
71 | } | 86 | } |
72 | } | 87 | } |
73 | 88 | ||
74 | void ImageScrollView::setAutoRotate(bool how) | 89 | void ImageScrollView::setAutoRotate(bool how) |
75 | { | 90 | { |
76 | /* to avoid double repaints */ | 91 | /* to avoid double repaints */ |
77 | if (rotate_to_fit != how) { | 92 | if (rotate_to_fit != how) { |
78 | rotate_to_fit = how; | 93 | rotate_to_fit = how; |
79 | _image_data = QImage(); | 94 | _image_data = QImage(); |
80 | generateImage(); | 95 | generateImage(); |
81 | } | 96 | } |
82 | } | 97 | } |
83 | 98 | ||
84 | void ImageScrollView::setAutoScale(bool how) | 99 | void ImageScrollView::setAutoScale(bool how) |
85 | { | 100 | { |
86 | scale_to_fit = how; | 101 | scale_to_fit = how; |
@@ -230,57 +245,74 @@ void ImageScrollView::generateImage() | |||
230 | if (rotate_to_fit) r = Rotate90; | 245 | if (rotate_to_fit) r = Rotate90; |
231 | } | 246 | } |
232 | odebug << " r = " << r << oendl; | 247 | odebug << " r = " << r << oendl; |
233 | if (scale_to_fit) { | 248 | if (scale_to_fit) { |
234 | if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) { | 249 | if (!_image_data.size().isValid()||width()>_image_data.width()||height()>_image_data.height()) { |
235 | odebug << "Rescaling data" << oendl; | 250 | odebug << "Rescaling data" << oendl; |
236 | if (r==Rotate0) { | 251 | if (r==Rotate0) { |
237 | _image_data = _original_data; | 252 | _image_data = _original_data; |
238 | } else { | 253 | } else { |
239 | rotate_into_data(r); | 254 | rotate_into_data(r); |
240 | } | 255 | } |
241 | } | 256 | } |
242 | rescaleImage(width(),height()); | 257 | rescaleImage(width(),height()); |
243 | resizeContents(_image_data.width(),_image_data.height()); | 258 | resizeContents(_image_data.width(),_image_data.height()); |
244 | } else if (!first_resize_done||r!=last_rot||_image_data.width()==0) { | 259 | } else if (!first_resize_done||r!=last_rot||_image_data.width()==0) { |
245 | if (r==Rotate0) { | 260 | if (r==Rotate0) { |
246 | _image_data = _original_data; | 261 | _image_data = _original_data; |
247 | } else { | 262 | } else { |
248 | rotate_into_data(r); | 263 | rotate_into_data(r); |
249 | } | 264 | } |
250 | last_rot = r; | 265 | last_rot = r; |
251 | resizeContents(_image_data.width(),_image_data.height()); | 266 | resizeContents(_image_data.width(),_image_data.height()); |
252 | } | 267 | } |
253 | _pdata.convertFromImage(_image_data); | 268 | _pdata.convertFromImage(_image_data); |
269 | |||
270 | /* | ||
271 | * update the zoomer | ||
272 | */ | ||
273 | emit imageSizeChanged( _image_data.size() ); | ||
274 | rescaleImage( 128, 128 ); | ||
275 | _zoomer->setImage( _image_data ); | ||
276 | |||
277 | /* | ||
278 | * invalidate | ||
279 | */ | ||
254 | _image_data=QImage(); | 280 | _image_data=QImage(); |
255 | } | 281 | } |
256 | 282 | ||
257 | void ImageScrollView::resizeEvent(QResizeEvent * e) | 283 | void ImageScrollView::resizeEvent(QResizeEvent * e) |
258 | { | 284 | { |
259 | odebug << "ImageScrollView resizeEvent" << oendl; | 285 | odebug << "ImageScrollView resizeEvent" << oendl; |
260 | QScrollView::resizeEvent(e); | 286 | QScrollView::resizeEvent(e); |
261 | generateImage(); | 287 | generateImage(); |
262 | first_resize_done = true; | 288 | first_resize_done = true; |
289 | emit viewportSizeChanged( viewport()->size() ); | ||
290 | |||
291 | /* | ||
292 | * move scrollbar | ||
293 | */ | ||
294 | _zoomer->setGeometry( viewport()->width()-100, viewport()->height()-50, 100, 50 ); | ||
263 | } | 295 | } |
264 | 296 | ||
265 | void ImageScrollView::keyPressEvent(QKeyEvent * e) | 297 | void ImageScrollView::keyPressEvent(QKeyEvent * e) |
266 | { | 298 | { |
267 | if (!e) return; | 299 | if (!e) return; |
268 | int dx = horizontalScrollBar()->lineStep(); | 300 | int dx = horizontalScrollBar()->lineStep(); |
269 | int dy = verticalScrollBar()->lineStep(); | 301 | int dy = verticalScrollBar()->lineStep(); |
270 | if (e->key()==Qt::Key_Right) { | 302 | if (e->key()==Qt::Key_Right) { |
271 | scrollBy(dx,0); | 303 | scrollBy(dx,0); |
272 | e->accept(); | 304 | e->accept(); |
273 | } else if (e->key()==Qt::Key_Left) { | 305 | } else if (e->key()==Qt::Key_Left) { |
274 | scrollBy(0-dx,0); | 306 | scrollBy(0-dx,0); |
275 | e->accept(); | 307 | e->accept(); |
276 | } else if (e->key()==Qt::Key_Up) { | 308 | } else if (e->key()==Qt::Key_Up) { |
277 | scrollBy(0,0-dy); | 309 | scrollBy(0,0-dy); |
278 | e->accept(); | 310 | e->accept(); |
279 | } else if (e->key()==Qt::Key_Down) { | 311 | } else if (e->key()==Qt::Key_Down) { |
280 | scrollBy(0,dy); | 312 | scrollBy(0,dy); |
281 | e->accept(); | 313 | e->accept(); |
282 | } else { | 314 | } else { |
283 | e->ignore(); | 315 | e->ignore(); |
284 | } | 316 | } |
285 | QScrollView::keyPressEvent(e); | 317 | QScrollView::keyPressEvent(e); |
286 | } | 318 | } |
@@ -299,68 +331,70 @@ void ImageScrollView::drawContents(QPainter * p, int clipx, int clipy, int clipw | |||
299 | } | 331 | } |
300 | if (w>_pdata.width()) { | 332 | if (w>_pdata.width()) { |
301 | w=_pdata.width(); | 333 | w=_pdata.width(); |
302 | x = 0; | 334 | x = 0; |
303 | erase = true; | 335 | erase = true; |
304 | } else if (x+w>_pdata.width()){ | 336 | } else if (x+w>_pdata.width()){ |
305 | x = _pdata.width()-w; | 337 | x = _pdata.width()-w; |
306 | } | 338 | } |
307 | if (h>_pdata.height()) { | 339 | if (h>_pdata.height()) { |
308 | h=_pdata.height(); | 340 | h=_pdata.height(); |
309 | y = 0; | 341 | y = 0; |
310 | erase = true; | 342 | erase = true; |
311 | } else if (y+h>_pdata.height()){ | 343 | } else if (y+h>_pdata.height()){ |
312 | y = _pdata.height()-h; | 344 | y = _pdata.height()-h; |
313 | } | 345 | } |
314 | if (erase||_original_data.hasAlphaBuffer()) { | 346 | if (erase||_original_data.hasAlphaBuffer()) { |
315 | p->fillRect(clipx,clipy,clipw,cliph,white); | 347 | p->fillRect(clipx,clipy,clipw,cliph,white); |
316 | } | 348 | } |
317 | p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); | 349 | p->drawPixmap(clipx,clipy,_pdata,x,y,w,h); |
318 | } | 350 | } |
319 | 351 | ||
320 | /* using the real geometry points and not the translated points is wanted! */ | 352 | /* using the real geometry points and not the translated points is wanted! */ |
321 | void ImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) | 353 | void ImageScrollView::viewportMouseMoveEvent(QMouseEvent* e) |
322 | { | 354 | { |
355 | odebug << "Move X and Y " << e->x() << " " << e->y() << oendl; | ||
323 | int mx, my; | 356 | int mx, my; |
324 | mx = e->x(); | 357 | mx = e->x(); |
325 | my = e->y(); | 358 | my = e->y(); |
326 | if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { | 359 | if (_mouseStartPosX!=-1 && _mouseStartPosY!=-1) { |
327 | int diffx = _mouseStartPosX-mx; | 360 | int diffx = _mouseStartPosX-mx; |
328 | int diffy = _mouseStartPosY-my; | 361 | int diffy = _mouseStartPosY-my; |
329 | #if 0 | 362 | #if 0 |
330 | QScrollBar*xbar = horizontalScrollBar(); | 363 | QScrollBar*xbar = horizontalScrollBar(); |
331 | QScrollBar*ybar = verticalScrollBar(); | 364 | QScrollBar*ybar = verticalScrollBar(); |
332 | if (xbar->value()+diffx>xbar->maxValue()) { | 365 | if (xbar->value()+diffx>xbar->maxValue()) { |
333 | diffx = xbar->maxValue()-xbar->value(); | 366 | diffx = xbar->maxValue()-xbar->value(); |
334 | } else if (xbar->value()+diffx<0) { | 367 | } else if (xbar->value()+diffx<0) { |
335 | diffx=0-xbar->value(); | 368 | diffx=0-xbar->value(); |
336 | } | 369 | } |
337 | if (ybar->value()+diffy>ybar->maxValue()) { | 370 | if (ybar->value()+diffy>ybar->maxValue()) { |
338 | diffy = ybar->maxValue()-ybar->value(); | 371 | diffy = ybar->maxValue()-ybar->value(); |
339 | } else if (ybar->value()+diffy<0) { | 372 | } else if (ybar->value()+diffy<0) { |
340 | diffy=0-ybar->value(); | 373 | diffy=0-ybar->value(); |
341 | } | 374 | } |
342 | #endif | 375 | #endif |
343 | scrollBy(diffx,diffy); | 376 | scrollBy(diffx,diffy); |
344 | } | 377 | } |
345 | _mouseStartPosX=mx; | 378 | _mouseStartPosX=mx; |
346 | _mouseStartPosY=my; | 379 | _mouseStartPosY=my; |
347 | } | 380 | } |
348 | 381 | ||
349 | void ImageScrollView::contentsMousePressEvent ( QMouseEvent * ) | 382 | void ImageScrollView::contentsMousePressEvent ( QMouseEvent * e) |
350 | { | 383 | { |
384 | odebug << " X and Y " << e->x() << " " << e->y() << oendl; | ||
351 | /* this marks the beginning of a possible mouse move. Due internal reasons of QT | 385 | /* this marks the beginning of a possible mouse move. Due internal reasons of QT |
352 | the geometry values here may real differ from that set in MoveEvent (I don't know | 386 | the geometry values here may real differ from that set in MoveEvent (I don't know |
353 | why). For getting them in real context, we use the first move-event to set the start | 387 | why). For getting them in real context, we use the first move-event to set the start |
354 | position ;) | 388 | position ;) |
355 | */ | 389 | */ |
356 | _mouseStartPosX = -1; | 390 | _mouseStartPosX = -1; |
357 | _mouseStartPosY = -1; | 391 | _mouseStartPosY = -1; |
358 | } | 392 | } |
359 | 393 | ||
360 | void ImageScrollView::setDestructiveClose() { | 394 | void ImageScrollView::setDestructiveClose() { |
361 | WFlags fl = getWFlags(); | 395 | WFlags fl = getWFlags(); |
362 | /* clear it just in case */ | 396 | /* clear it just in case */ |
363 | fl &= ~WDestructiveClose; | 397 | fl &= ~WDestructiveClose; |
364 | fl |= WDestructiveClose; | 398 | fl |= WDestructiveClose; |
365 | setWFlags( fl ); | 399 | setWFlags( fl ); |
366 | } | 400 | } |
diff --git a/noncore/graphics/opie-eye/gui/imagescrollview.h b/noncore/graphics/opie-eye/gui/imagescrollview.h index eb91dbd..1b25103 100644 --- a/noncore/graphics/opie-eye/gui/imagescrollview.h +++ b/noncore/graphics/opie-eye/gui/imagescrollview.h | |||
@@ -1,64 +1,71 @@ | |||
1 | #ifndef _IMAGE_SCROLL_VIEW_H | 1 | #ifndef _IMAGE_SCROLL_VIEW_H |
2 | #define _IMAGE_SCROLL_VIEW_H | 2 | #define _IMAGE_SCROLL_VIEW_H |
3 | 3 | ||
4 | #include <lib/oimagezoomer.h> | ||
5 | |||
4 | #include <qscrollview.h> | 6 | #include <qscrollview.h> |
5 | #include <qimage.h> | 7 | #include <qimage.h> |
6 | #include <qpixmap.h> | 8 | #include <qpixmap.h> |
7 | #include <qstring.h> | 9 | #include <qstring.h> |
8 | #include <qdialog.h> | 10 | #include <qdialog.h> |
9 | 11 | ||
12 | |||
13 | |||
10 | class QPainter; | 14 | class QPainter; |
11 | 15 | ||
12 | class ImageScrollView:public QScrollView | 16 | class ImageScrollView:public QScrollView |
13 | { | 17 | { |
14 | Q_OBJECT | 18 | Q_OBJECT |
15 | public: | 19 | public: |
16 | ImageScrollView( QWidget* parent, const char* name = 0, WFlags fl = 0 ); | 20 | ImageScrollView( QWidget* parent, const char* name = 0, WFlags fl = 0 ); |
17 | ImageScrollView (const QImage&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false ); | 21 | ImageScrollView (const QImage&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false ); |
18 | ImageScrollView (const QString&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false ); | 22 | ImageScrollView (const QString&, QWidget * parent=0, const char * name=0, WFlags f=0,bool always_scale=false,bool rfit=false ); |
19 | virtual ~ImageScrollView(); | 23 | virtual ~ImageScrollView(); |
20 | 24 | ||
21 | virtual void setImage(const QImage&); | 25 | virtual void setImage(const QImage&); |
22 | virtual void setImage( const QString& path ); | 26 | virtual void setImage( const QString& path ); |
23 | virtual void setDestructiveClose(); | 27 | virtual void setDestructiveClose(); |
24 | 28 | ||
25 | virtual void setAutoRotate(bool); | 29 | virtual void setAutoRotate(bool); |
26 | virtual void setAutoScale(bool); | 30 | virtual void setAutoScale(bool); |
27 | 31 | ||
28 | enum Rotation { | 32 | enum Rotation { |
29 | Rotate0, | 33 | Rotate0, |
30 | Rotate90, | 34 | Rotate90, |
31 | Rotate180, | 35 | Rotate180, |
32 | Rotate270 | 36 | Rotate270 |
33 | }; | 37 | }; |
34 | 38 | ||
35 | signals: | 39 | signals: |
36 | void sig_return(); | 40 | void sig_return(); |
41 | void imageSizeChanged( const QSize& ); | ||
42 | void viewportSizeChanged( const QSize& ); | ||
37 | 43 | ||
38 | protected: | 44 | protected: |
39 | virtual void drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph ); | 45 | virtual void drawContents ( QPainter * p, int clipx, int clipy, int clipw, int cliph ); |
40 | void init(); | 46 | void init(); |
41 | 47 | ||
48 | Opie::MM::OImageZoomer *_zoomer; | ||
42 | QImage _image_data; | 49 | QImage _image_data; |
43 | QImage _original_data; | 50 | QImage _original_data; |
44 | QPixmap _pdata; | 51 | QPixmap _pdata; |
45 | 52 | ||
46 | int _mouseStartPosX,_mouseStartPosY; | 53 | int _mouseStartPosX,_mouseStartPosY; |
47 | 54 | ||
48 | bool scale_to_fit; | 55 | bool scale_to_fit; |
49 | bool rotate_to_fit; | 56 | bool rotate_to_fit; |
50 | bool first_resize_done; | 57 | bool first_resize_done; |
51 | Rotation last_rot; | 58 | Rotation last_rot; |
52 | QString m_lastName; | 59 | QString m_lastName; |
53 | virtual void rescaleImage(int w, int h); | 60 | virtual void rescaleImage(int w, int h); |
54 | 61 | ||
55 | virtual void rotate_into_data(Rotation r); | 62 | virtual void rotate_into_data(Rotation r); |
56 | virtual void generateImage(); | 63 | virtual void generateImage(); |
57 | 64 | ||
58 | protected slots: | 65 | protected slots: |
59 | virtual void viewportMouseMoveEvent(QMouseEvent* e); | 66 | virtual void viewportMouseMoveEvent(QMouseEvent* e); |
60 | virtual void contentsMousePressEvent ( QMouseEvent * e); | 67 | virtual void contentsMousePressEvent ( QMouseEvent * e); |
61 | virtual void resizeEvent(QResizeEvent * e); | 68 | virtual void resizeEvent(QResizeEvent * e); |
62 | virtual void keyPressEvent(QKeyEvent * e); | 69 | virtual void keyPressEvent(QKeyEvent * e); |
63 | }; | 70 | }; |
64 | #endif | 71 | #endif |