void LayoutUpdater::onKeyPressed(const Key &key) { Q_D(LayoutUpdater); if (not d->layout) { return; } d->layout->appendActiveKey(MaliitKeyboard::Logic::modifyKey(key, KeyDescription::PressedState, d->activeStyleAttributes())); if (d->layout->activePanel() == LayoutHelper::CenterPanel) { d->layout->setMagnifierKey(magnifyKey(key, d->activeStyleAttributes(), d->layout->orientation(), d->layout->centerPanel().rect())); } switch (key.action()) { case Key::ActionShift: Q_EMIT shiftPressed(); break; case Key::ActionDead: Q_EMIT deadkeyPressed(); break; default: break; } }
QString idFromKey(const Key &key) { switch (key.action()) { case Key::ActionReturn: return g_action_key_id; case Key::ActionInsert: return key.label(); default: // TODO: handle more key actions if needed. return QString(); } }
Key magnifyKey(const Key &key, const StyleAttributes *attributes, LayoutHelper::Orientation orientation, const QRectF &key_area_rect) { if (key.action() != Key::ActionInsert) { return Key(); } const QRect adjusted_key_rect(adjustedRect(key.rect(), key.margins())); QRect magnifier_rect(adjusted_key_rect.topLeft(), QSize(attributes->magnifierKeyWidth(orientation), attributes->magnifierKeyHeight(orientation))); magnifier_rect.translate((adjusted_key_rect.width() - magnifier_rect.width()) / 2, -1 * attributes->verticalOffset(orientation)); const QRect &mapped(magnifier_rect.translated(key_area_rect.topLeft().toPoint())); const int delta_left(mapped.left() - (key_area_rect.left() + attributes->safetyMargin(orientation))); const int delta_right((key_area_rect.x() + key_area_rect.width() - attributes->safetyMargin(orientation)) - (mapped.x() + mapped.width())); if (delta_left < 0) { magnifier_rect.translate(qAbs<int>(delta_left), 0); } else if (delta_right < 0) { magnifier_rect.translate(delta_right, 0); } Key magnifier(key); magnifier.setOrigin(magnifier_rect.topLeft()); magnifier.rArea().setBackground(attributes->magnifierKeyBackground()); magnifier.rArea().setSize(magnifier_rect.size()); magnifier.rArea().setBackgroundBorders(attributes->magnifierKeyBackgroundBorders()); magnifier.setMargins(QMargins()); return magnifier; }