wxPictureWindow.cpp
author viric@mandarina
Sat, 01 Nov 2008 20:57:17 +0100
changeset 0 7e720dcafcaf
child 1 506e0fc65ba3
permissions -rw-r--r--
First checkin. It works enough.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     1
#include <wx/scrolwin.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     2
#include <wx/image.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     3
#include <wx/bitmap.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     4
#include <wx/dc.h>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     5
#include <iostream>
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     6
#include "wxPictureWindow.hpp"
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     7
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     8
const int factor = 3;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
     9
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    10
BEGIN_EVENT_TABLE(wxPictureWindow, wxScrolledWindow)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    11
  EVT_MOUSE_EVENTS (wxPictureWindow::OnMouse)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    12
END_EVENT_TABLE()
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    13
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    14
wxPictureWindow::wxPictureWindow(const wxImage &img, const CropArea area, wxWindow *parent)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    15
    :wxScrolledWindow(parent, wxID_ANY),
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    16
    _bmp(wxBitmap(img)),
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    17
    _area(area)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    18
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    19
    SetVirtualSize(_bmp.GetWidth(), _bmp.GetHeight());
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    20
    SetScrollRate(10, 10);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    21
    _area.x /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    22
    _area.y /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    23
    _area.width /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    24
    _area.height /= factor;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    25
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    26
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    27
void wxPictureWindow::OnDraw(wxDC &dc)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    28
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    29
    dc.DrawBitmap(_bmp, 0, 0, false);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    30
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    31
    wxRect rect(_area.x, _area.y, _area.width, _area.height);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    32
    dc.SetPen(*wxGREEN_PEN);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    33
    dc.SetBrush(*wxTRANSPARENT_BRUSH);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    34
    dc.DrawRectangle(rect);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    35
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    36
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    37
void wxPictureWindow::OnMouse(wxMouseEvent &ev)
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    38
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    39
    wxClientDC dc(this);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    40
    DoPrepareDC(dc);
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    41
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    42
    if (ev.LeftDown())
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    43
    {
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    44
        _area.x = ev.GetLogicalPosition(dc).x;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    45
        _area.y = ev.GetLogicalPosition(dc).y;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    46
        _area.width = 0;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    47
        _area.height = 0;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    48
    }
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    49
    else if (ev.LeftIsDown())
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    50
    {
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    51
        _area.width = ev.GetLogicalPosition(dc).x - _area.x;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    52
        _area.height = ev.GetLogicalPosition(dc).y - _area.y;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    53
    }
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    54
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    55
    Refresh();
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    56
}
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    57
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    58
wxPictureWindow::~wxPictureWindow()
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    59
{
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    60
    std::cout << _area.x * factor << " ";
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    61
    std::cout << _area.y * factor << " ";
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    62
    std::cout << _area.width * factor << " ";
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    63
    std::cout << _area.height * factor << std::endl;
7e720dcafcaf First checkin. It works enough.
viric@mandarina
parents:
diff changeset
    64
}