File indexing completed on 2024-04-21 04:02:36

0001 /*
0002     SPDX-FileCopyrightText: 1997 Mathias Mueller <in5y158@public.uni-hamburg.de>
0003     SPDX-FileCopyrightText: 2006 Mauricio Piacentini <mauricio@tabuleiro.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 // own
0009 #include "frameimage.h"
0010 
0011 // Qt
0012 #include <QPaintEvent>
0013 #include <QPainter>
0014 #include <QPixmap>
0015 
0016 // KF
0017 
0018 // KMahjongg
0019 #include "editor.h"
0020 #include "prefs.h"
0021 
0022 FrameImage::FrameImage(QWidget * parent, const QSize & initialImageSize)
0023     : QWidget(parent)
0024     , m_rx(-1)
0025     , m_ry(0)
0026     , m_rw(0)
0027     , m_rh(0)
0028     , m_rs(0)
0029     , m_rt(0)
0030     , m_thePixmap(new QPixmap(initialImageSize))
0031 {
0032 }
0033 
0034 FrameImage::~FrameImage()
0035 {
0036     delete m_thePixmap;
0037 }
0038 
0039 void FrameImage::resizeEvent(QResizeEvent * ev)
0040 {
0041     *m_thePixmap = QPixmap(ev->size());
0042 }
0043 
0044 void FrameImage::paintEvent(QPaintEvent * pa)
0045 {
0046     QPainter p(this);
0047 
0048     QPen line;
0049     line.setWidth(1);
0050     line.setColor(Qt::red);
0051     p.setPen(line);
0052     p.setBackgroundMode(Qt::OpaqueMode);
0053     p.setBackground(Qt::black);
0054 
0055     int x = pa->rect().left();
0056     int y = pa->rect().top();
0057     int h = pa->rect().height();
0058     int w = pa->rect().width();
0059 
0060     p.drawPixmap(x, y, *m_thePixmap, x, y, w - 2, h - 2);
0061     if (m_rx >= 0) {
0062         p.drawRect(m_rx + m_rs, m_ry, m_rw - m_rs, m_rh - m_rs);
0063         p.drawLine(m_rx, m_ry + m_rs, m_rx, m_ry + m_rh);
0064         p.drawLine(m_rx, m_ry + m_rs, m_rx + m_rs, m_ry);
0065         p.drawLine(m_rx, m_ry + m_rh, m_rx + m_rs, m_ry + m_rh - m_rs);
0066         p.drawLine(m_rx, m_ry + m_rh, m_rx + m_rw - m_rs, m_ry + m_rh);
0067         p.drawLine(m_rx + m_rw - m_rs, m_ry + m_rh, m_rx + m_rw, m_ry + m_rh - m_rs);
0068 
0069         int midX = m_rx + m_rs + ((m_rw - m_rs) / 2);
0070         int midY = m_ry + ((m_rh - m_rs) / 2);
0071         switch (m_rt) {
0072             case 0: // delete mode cursor
0073                 p.drawLine(m_rx + m_rs, m_ry, m_rx + m_rw, m_ry + m_rh - m_rs);
0074                 p.drawLine(m_rx + m_rw, m_ry, m_rx + m_rs, m_ry + m_rh - m_rs);
0075 
0076                 break;
0077             case 1: // insert cursor
0078                 p.drawLine(midX, m_ry, midX, m_ry + m_rh - m_rs);
0079                 p.drawLine(m_rx + m_rs, midY, m_rx + m_rw, midY);
0080 
0081                 break;
0082             case 2: // move mode cursor
0083                 p.drawLine(midX, m_ry, m_rx + m_rw, midY);
0084                 p.drawLine(m_rx + m_rw, midY, midX, m_ry + m_rh - m_rs);
0085                 p.drawLine(midX, m_ry + m_rh - m_rs, m_rx + m_rs, midY);
0086                 p.drawLine(m_rx + m_rs, midY, midX, m_ry);
0087 
0088                 break;
0089         }
0090     }
0091 }
0092 
0093 void FrameImage::setRect(int x, int y, int w, int h, int s, int t)
0094 {
0095     m_rx = x;
0096     m_ry = y;
0097     m_rw = w;
0098     m_rh = h;
0099     m_rt = t;
0100     m_rs = s;
0101 }
0102 
0103 void FrameImage::mousePressEvent(QMouseEvent * m)
0104 {
0105     Q_EMIT mousePressed(m);
0106 }
0107 
0108 void FrameImage::mouseMoveEvent(QMouseEvent * e)
0109 {
0110     Q_EMIT mouseMoved(e);
0111 }
0112 
0113 #include "moc_frameimage.cpp"