void KstViewArrow::paintSelf(KstPainter& p, const QRegion& bounds) { p.save(); if (p.type() != KstPainter::P_PRINT && p.type() != KstPainter::P_EXPORT) { if (p.makingMask()) { p.setCompositionMode(QPainter::CompositionMode_Source); } else { const QRegion clip(clipRegion()); KstViewLine::paintSelf(p, bounds - _myClipMask); p.setClipRegion(bounds & clip); } } else { KstViewLine::paintSelf(p, bounds); } if (hasArrow()) { QPoint to = KstViewLine::to(); QPoint from = KstViewLine::from(); const int w = width() * p.lineWidthAdjustmentFactor(); QPen pen(_foregroundColor, w); pen.setCapStyle(capStyle()); p.setPen(pen); p.setBrush(_foregroundColor); if (_hasToArrow) { paintArrow(p, to, from, w, _toArrowScaling); } if (_hasFromArrow) { paintArrow(p, from, to, w, _fromArrowScaling); } } p.restore(); }
void GraphicalBoardFrame::keyPressEvent(QKeyEvent *event) { enum { Backspace = 0, Delete, Submit, Commit, Append } mode; switch (event->key()) { case Qt::Key_Backspace: mode = Backspace; break; case Qt::Key_Delete: mode = Delete; break; case Qt::Key_Return: case Qt::Key_Enter: mode = event->modifiers() & Qt::ShiftModifier || event->modifiers() & Qt::ControlModifier || event->modifiers() & Qt::MetaModifier? Commit : Submit; break; default: mode = Append; break; } if (!hasCandidate()) { event->ignore(); return; } switch (mode) { // these modes need a candidate case Submit: submitHandler(); break; case Commit: commitHandler(); break; default: if (!hasArrow()) { event->ignore(); return; } switch (mode) { // these modes need an arrow case Delete: deleteHandler(); break; case Backspace: backspaceHandler(); break; case Append: if (event->text().isEmpty() || (event->text().at(0) >= 0xa8 && event->text().at(0) <= 0xb8) || // combining character (event->text().at(0) >= 0x2b9 && event->text().at(0) <= 0x2ff)) // combining character break; // let AltGr (Ctrl+Alt) and other composite keyboard events slip through else if (event->modifiers() & Qt::AltModifier || event->modifiers() & Qt::ControlModifier) { if (!event->text().isEmpty() && ((event->text().at(0) >= 'a' && event->text().at(0) <= 'z') || (event->text().at(0) >= 'A' && event->text().at(0) <= 'Z'))) { event->ignore(); return; } } appendHandler(event->text(), event->modifiers() & Qt::ShiftModifier); break; case Commit: case Submit: break; } break; } prepare(); event->accept(); }