summaryrefslogtreecommitdiffstats
path: root/ktouch/src/ktouchkeys.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ktouch/src/ktouchkeys.cpp')
-rw-r--r--ktouch/src/ktouchkeys.cpp223
1 files changed, 223 insertions, 0 deletions
diff --git a/ktouch/src/ktouchkeys.cpp b/ktouch/src/ktouchkeys.cpp
new file mode 100644
index 00000000..c254682b
--- /dev/null
+++ b/ktouch/src/ktouchkeys.cpp
@@ -0,0 +1,223 @@
+/***************************************************************************
+ * ktouchkeys.cpp *
+ * -------------- *
+ * Copyright (C) 2000 by Håvard Frøiland, 2004 by Andreas Nicolai *
+ * ghorwin@users.sourceforge.net *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ ***************************************************************************/
+
+#include "ktouchkeys.h"
+#include <kdebug.h>
+#include <algorithm> // for std::min
+
+//#include "ktouch.h"
+#include "prefs.h"
+#include "ktouchcolorscheme.h"
+
+// Initialisation of static variables
+int KTouchFingerKey::m_fingerKeyCount = 0;
+// -----------------------------------------------------------------------------
+
+
+// ***** Implementation of class KTouchKey ****
+
+void KTouchBaseKey::paint(QPainter& p) const {
+ // We simply paint the key using the current brush and pen, so the derived classes
+ // will have to care about that
+ p.fillRect(m_xS, m_yS, m_wS, m_hS, p.brush());
+ p.drawRect(m_xS, m_yS, m_wS, m_hS);
+}
+
+void KTouchBaseKey::resize(double scale) {
+ m_xS = static_cast<int>(scale*m_x);
+ m_yS = static_cast<int>(scale*m_y);
+ m_wS = static_cast<int>(scale*m_w);
+ m_hS = static_cast<int>(scale*m_h);
+ // we set the font from the keyboard widget
+ m_font=Prefs::keyboardFont();
+ m_font.setPointSize( static_cast<int>(std::min(m_wS,m_hS)/m_font_scale) );
+}
+// -----------------------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchNormalKey ****
+
+KTouchNormalKey::KTouchNormalKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchBaseKey(keyChar, keyText, x, y, w, h), m_colorIndex(0)
+{
+ m_type = NORMAL_KEY;
+ m_font_scale =2;
+}
+
+void KTouchNormalKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ QColor textColor;
+ if (m_isNextKey) {
+ // mark the key as "next"
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_textH;
+ }
+ else {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_text;
+ };
+ KTouchBaseKey::paint(p); // call the parents paint() function
+ p.setPen(textColor);
+
+ p.setFont( m_font );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+}
+// --------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchFingerKey ****
+
+KTouchFingerKey::KTouchFingerKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchNormalKey(keyChar, keyText, x, y, w, h)
+{
+ m_colorIndex = m_fingerKeyCount++;
+ if (m_colorIndex>=8) {
+ kdDebug() << "[KTouchFingerKey::KTouchFingerKey] Number of finger keys = "
+ << m_colorIndex << "! Setting colour index to 0" << endl;
+ m_colorIndex=0;
+ };
+ m_type = FINGER_KEY;
+ m_font_scale =2;
+}
+
+void KTouchFingerKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ p.setFont( m_font );
+ if (m_isActive) {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p); // draw background and frame
+ p.setPen( QPen(colorScheme.m_frame,3) );
+ p.drawRect(m_xS+2, m_yS+2, m_wS-4, m_hS-4); // mark it as "active"
+ p.setPen( colorScheme.m_text );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ }
+ else if (m_isNextKey) {
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p);
+ p.setPen( colorScheme.m_textH );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ }
+ else {
+ p.setBrush( colorScheme.m_background[m_colorIndex] );
+ p.setPen( colorScheme.m_frame );
+ KTouchBaseKey::paint(p);
+ p.drawRoundRect(m_xS+2, m_yS+2, m_wS-4, m_hS-4);
+ p.setPen( colorScheme.m_text );
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter, m_keyText);
+ };
+}
+// --------------------------------------------------------------
+
+
+
+// **** Implementation of class KTouchControlKey ****
+
+KTouchControlKey::KTouchControlKey(const QChar& keyChar, const QString& keyText, int x, int y, int w, int h)
+ : KTouchBaseKey(keyChar, keyText, x, y, w, h)
+{
+ m_type = CONTROL_KEY;
+ m_font_scale = 4;
+}
+
+void KTouchControlKey::paint(QPainter& p) const {
+ const KTouchColorScheme& colorScheme = KTouchColorScheme::m_colorSchemes[Prefs::currentColorScheme()];
+ p.setFont( m_font );
+ QColor textColor;
+ if (m_isActive) {
+ p.setBrush( colorScheme.m_cBackgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_cTextH;
+ }
+ else if (m_isNextKey) {
+ p.setBrush( colorScheme.m_backgroundH );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_textH;
+ }
+ else {
+ p.setBrush( colorScheme.m_cBackground );
+ p.setPen( colorScheme.m_frame );
+ textColor = colorScheme.m_cText;
+ };
+ KTouchBaseKey::paint(p);
+ p.setPen( textColor );
+ int h = std::min(m_wS, m_hS);
+ int ch = static_cast<int>(h*0.5); // the height for the special chars
+ if (m_keyText=="Shift") {
+ int x = m_xS+h/2;
+ int y = m_yS+m_hS/2;
+ p.moveTo(x-ch/2, y);
+ p.lineTo(x-ch/4, y);
+ p.lineTo(x-ch/4, y+ch/2);
+ p.lineTo(x+ch/4, y+ch/2);
+ p.lineTo(x+ch/4, y);
+ p.lineTo(x+ch/2, y);
+ p.lineTo(x, y-ch/2);
+ p.lineTo(x-ch/2, y);
+ }
+ else if (m_keyText=="CapsLock") {
+ int x = m_xS+h/2;
+ int y = m_yS+m_hS/2;
+ p.moveTo(x-ch/2, y);
+ p.lineTo(x-ch/4, y);
+ p.lineTo(x-ch/4, y-ch/2);
+ p.lineTo(x+ch/4, y-ch/2);
+ p.lineTo(x+ch/4, y);
+ p.lineTo(x+ch/2, y);
+ p.lineTo(x, y+ch/2);
+ p.lineTo(x-ch/2, y);
+ }
+ else if (m_keyText=="Tab") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xleft, y,xleft, y-ch/2);
+ p.drawLine(xleft, y-ch/4, xright, y-ch/4);
+ p.drawLine(xleft, y-ch/4, xleft+ch/2, y-static_cast<int>(ch*0.10));
+ p.drawLine(xleft, y-ch/4, xleft+ch/2, y-static_cast<int>(ch*0.40));
+ p.drawLine(xright, y, xright, y+ch/2);
+ p.drawLine(xleft, y+ch/4, xright, y+ch/4);
+ p.drawLine(xright, y+ch/4, xright-ch/2, y+static_cast<int>(ch*0.10));
+ p.drawLine(xright, y+ch/4, xright-ch/2, y+static_cast<int>(ch*0.40));
+
+ }
+ else if (m_keyText=="BackSpace") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xleft, y,xright, y);
+ p.drawLine(xleft, y, xleft+ch/2, y-static_cast<int>(ch*0.15));
+ p.drawLine(xleft, y, xleft+ch/2, y+static_cast<int>(ch*0.15));
+ }
+ else if (m_keyText=="Enter") {
+ int xleft = m_xS+h/2-ch/2;
+ int xright = m_xS + std::min(m_wS-h/2+ch/2,h);
+ int y = m_yS+m_hS/2;
+ p.drawLine(xright, y-ch/2,xright, y);
+ p.drawLine(xleft, y,xright, y);
+ p.drawLine(xleft, y, xleft+ch/3, y-static_cast<int>(ch*0.15));
+ p.drawLine(xleft, y, xleft+ch/3, y+static_cast<int>(ch*0.15));
+ }
+ else if (m_keyText=="AltGr") {
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter | QPainter::AlignVCenter, "Alt Gr");
+ }
+ else
+ p.drawText(m_xS, m_yS, m_wS, m_hS, QPainter::AlignCenter | QPainter::AlignVCenter, m_keyText);
+}
+
+
+