Update emoji picker and translations

pull/217/head
Joseph Donofry 5 years ago
parent dfb76c693d
commit ff7468e6d5
No known key found for this signature in database
GPG Key ID: E8A1D78EF044B0CB
  1. BIN
      resources/icons/emoji-categories/search.png
  2. BIN
      resources/icons/emoji-categories/search@2x.png
  3. BIN
      resources/icons/ui/search.png
  4. BIN
      resources/icons/ui/search@2x.png
  5. 10
      resources/langs/nheko_de.ts
  6. 10
      resources/langs/nheko_el.ts
  7. 10
      resources/langs/nheko_en.ts
  8. 10
      resources/langs/nheko_fi.ts
  9. 10
      resources/langs/nheko_fr.ts
  10. 10
      resources/langs/nheko_ja.ts
  11. 10
      resources/langs/nheko_nl.ts
  12. 10
      resources/langs/nheko_pl.ts
  13. 10
      resources/langs/nheko_ru.ts
  14. 10
      resources/langs/nheko_zh_CN.ts
  15. 1
      resources/qml/TimelineRow.qml
  16. 13
      resources/qml/TimelineView.qml
  17. 15
      resources/qml/emoji/EmojiButton.qml
  18. 215
      resources/qml/emoji/EmojiPicker.qml
  19. 2
      resources/res.qrc
  20. 38
      scripts/generate_icns.sh

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 573 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -751,7 +751,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation>Antworten</translation> <translation>Antworten</translation>
</message> </message>
@ -764,7 +764,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -751,7 +751,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -764,7 +764,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -751,7 +751,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation>Reply</translation> <translation>Reply</translation>
</message> </message>
@ -764,7 +764,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -751,7 +751,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -764,7 +764,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -752,7 +752,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -765,7 +765,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -750,7 +750,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation></translation> <translation></translation>
</message> </message>
@ -763,7 +763,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -751,7 +751,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -764,7 +764,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -752,7 +752,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -765,7 +765,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -752,7 +752,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -765,7 +765,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -189,13 +189,13 @@
<context> <context>
<name>EmojiPicker</name> <name>EmojiPicker</name>
<message> <message>
<location filename="../qml/emoji/EmojiPicker.qml" line="+33"/> <location filename="../qml/emoji/EmojiPicker.qml" line="+104"/>
<location line="+133"/> <location line="+135"/>
<source>Search</source> <source>Search</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="-16"/> <location line="-42"/>
<source>People</source> <source>People</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -750,7 +750,7 @@
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location line="+15"/> <location line="+16"/>
<source>Reply</source> <source>Reply</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -763,7 +763,7 @@
<context> <context>
<name>TimelineView</name> <name>TimelineView</name>
<message> <message>
<location filename="../qml/TimelineView.qml" line="+52"/> <location filename="../qml/TimelineView.qml" line="+65"/>
<source>React</source> <source>React</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

@ -81,6 +81,7 @@ MouseArea {
hoverEnabled: true hoverEnabled: true
ToolTip.visible: hovered ToolTip.visible: hovered
ToolTip.text: qsTr("React") ToolTip.text: qsTr("React")
emojiPicker: emojiPopup
// onClicked: chat.model.reactAction(model.id) // onClicked: chat.model.reactAction(model.id)
} }
ImageButton { ImageButton {

@ -6,8 +6,10 @@ import QtQuick.Window 2.2
import Qt.labs.settings 1.0 import Qt.labs.settings 1.0
import im.nheko 1.0 import im.nheko 1.0
import im.nheko.EmojiModel 1.0
import "./delegates" import "./delegates"
import "./emoji"
Page { Page {
property var colors: currentActivePalette property var colors: currentActivePalette
@ -34,6 +36,17 @@ Page {
property bool buttons: true property bool buttons: true
} }
EmojiPicker {
id: emojiPopup
width: 7 * 52 + 20
height: 6 * 52
colors: palette
model: EmojiProxyModel {
category: Emoji.Category.People
sourceModel: EmojiModel {}
}
}
Menu { Menu {
id: messageContextMenu id: messageContextMenu
modal: true modal: true

@ -7,21 +7,10 @@ import "../"
ImageButton { ImageButton {
property var colors: currentActivePalette property var colors: currentActivePalette
property var emojiPicker
image: ":/icons/icons/ui/smile.png" image: ":/icons/icons/ui/smile.png"
id: emojiButton id: emojiButton
onClicked: emojiPopup.open() onClicked: emojiPicker.visible ? emojiPicker.close() : emojiPicker.show(emojiButton)
EmojiPicker {
id: emojiPopup
x: Math.round((emojiButton.width - width) / 2)
y: emojiButton.height
width: 7 * 52
height: 6 * 52
colors: emojiButton.colors
model: EmojiProxyModel {
category: Emoji.Category.People
sourceModel: EmojiModel {}
}
}
} }

@ -1,6 +1,7 @@
import QtQuick 2.9 import QtQuick 2.9
import QtQuick.Controls 2.9 import QtQuick.Controls 2.9
import QtQuick.Layouts 1.3 import QtQuick.Layouts 1.3
import QtGraphicalEffects 1.9
import im.nheko 1.0 import im.nheko 1.0
import im.nheko.EmojiModel 1.0 import im.nheko.EmojiModel 1.0
@ -8,6 +9,13 @@ import im.nheko.EmojiModel 1.0
import "../" import "../"
Popup { Popup {
function show(showAt) {
parent = showAt
x = Math.round((showAt.width - width) / 2)
y = showAt.height
open()
}
property var colors property var colors
property alias model: gridView.model property alias model: gridView.model
property var textArea property var textArea
@ -16,54 +24,31 @@ Popup {
id: emojiPopup id: emojiPopup
margins: 0 margins: 0
bottomPadding: 1
leftPadding: 1
rightPadding: 1
modal: true modal: true
focus: true focus: true
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutsideParent closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
ColumnLayout { ColumnLayout {
id: columnView
anchors.fill: parent anchors.fill: parent
spacing: 0
// Search field Layout.bottomMargin: 0
TextField { Layout.leftMargin: 3
id: emojiSearch Layout.rightMargin: 3
Layout.alignment: Qt.AlignVCenter Layout.topMargin: 2
Layout.preferredWidth: parent.width - 4
visible: emojiPopup.model.category === Emoji.Category.Search
placeholderText: qsTr("Search")
selectByMouse: true
rightPadding: clearSearch.width
Timer {
id: searchTimer
interval: 350 // tweak as needed?
onTriggered: emojiPopup.model.filter = emojiSearch.text
}
ToolButton {
id: clearSearch
anchors {
verticalCenter: parent.verticalCenter
right: parent.right
}
// clear the default hover effects.
background: Item {}
visible: emojiSearch.text !== ''
icon.source: "image://colorimage/:/icons/icons/ui/round-remove-button.png?" + (clearSearch.hovered ? colors.highlight : colors.buttonText)
focusPolicy: Qt.NoFocus
onClicked: emojiSearch.clear()
}
onTextChanged: searchTimer.restart()
onVisibleChanged: if (visible) forceActiveFocus()
}
// emoji grid // emoji grid
GridView { GridView {
id: gridView id: gridView
Layout.preferredHeight: emojiPopup.height
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
Layout.leftMargin: 4
cellWidth: 52 cellWidth: 52
cellHeight: 52 cellHeight: 52
@ -76,12 +61,12 @@ Popup {
delegate: AbstractButton { delegate: AbstractButton {
width: 48 width: 48
height: 48 height: 48
contentItem: Text { contentItem: Text {
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter verticalAlignment: Text.AlignVCenter
font.family: settings.emoji_font_family
font.pointSize: 36
font.pixelSize: 36
text: model.unicode text: model.unicode
} }
@ -94,53 +79,115 @@ Popup {
hoverEnabled: true hoverEnabled: true
ToolTip.text: model.shortName ToolTip.text: model.shortName
ToolTip.visible: hovered ToolTip.visible: hovered
// give the emoji a little oomf
DropShadow {
width: parent.width;
height: parent.height;
horizontalOffset: 3
verticalOffset: 3
radius: 8.0
samples: 17
color: "#80000000"
source: parent.contentItem
}
// TODO: emit a signal and maybe add favorites at some point? // TODO: emit a signal and maybe add favorites at some point?
//onClicked: textArea.insert(textArea.cursorPosition, modelData.unicode) //onClicked: textArea.insert(textArea.cursorPosition, modelData.unicode)
} }
ScrollBar.vertical: ScrollBar {} // Search field
header: TextField {
id: emojiSearch
anchors.left: parent.left
anchors.right: parent.right
anchors.rightMargin: emojiScroll.width + 4
placeholderText: qsTr("Search")
selectByMouse: true
rightPadding: clearSearch.width
Timer {
id: searchTimer
interval: 350 // tweak as needed?
onTriggered: {
emojiPopup.model.filter = emojiSearch.text
emojiPopup.model.category = Emoji.Category.Search
}
}
ToolButton {
id: clearSearch
anchors {
verticalCenter: parent.verticalCenter
right: parent.right
}
// clear the default hover effects.
background: Item {}
visible: emojiSearch.text !== ''
icon.source: "image://colorimage/:/icons/icons/ui/round-remove-button.png?" + (clearSearch.hovered ? colors.highlight : colors.buttonText)
focusPolicy: Qt.NoFocus
onClicked: emojiSearch.clear()
}
onTextChanged: searchTimer.restart()
onVisibleChanged: if (visible) forceActiveFocus()
}
ScrollBar.vertical: ScrollBar {
id: emojiScroll
}
} }
// Separator // Separator
Rectangle { Rectangle {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 2 Layout.preferredHeight: 1
color: emojiPopup.colors.highlight color: emojiPopup.colors.dark
} }
// Category picker row // Category picker row
Row { RowLayout {
Layout.bottomMargin: 0
Layout.preferredHeight: 42
implicitHeight: 42
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
// Display the normal categories
Repeater { Repeater {
model: ListModel { model: ListModel {
// TODO: Would like to get 'simple' icons for the categories // TODO: Would like to get 'simple' icons for the categories
ListElement { label: "😏"; category: Emoji.Category.People } ListElement { image: ":/icons/icons/emoji-categories/people.png"; category: Emoji.Category.People }
ListElement { label: "🌲"; category: Emoji.Category.Nature } ListElement { image: ":/icons/icons/emoji-categories/nature.png"; category: Emoji.Category.Nature }
ListElement { label: "🍛"; category: Emoji.Category.Food } ListElement { image: ":/icons/icons/emoji-categories/foods.png"; category: Emoji.Category.Food }
ListElement { label: "🚁"; category: Emoji.Category.Activity } ListElement { image: ":/icons/icons/emoji-categories/activity.png"; category: Emoji.Category.Activity }
ListElement { label: "🚅"; category: Emoji.Category.Travel } ListElement { image: ":/icons/icons/emoji-categories/travel.png"; category: Emoji.Category.Travel }
ListElement { label: "💡"; category: Emoji.Category.Objects } ListElement { image: ":/icons/icons/emoji-categories/objects.png"; category: Emoji.Category.Objects }
ListElement { label: "🔣"; category: Emoji.Category.Symbols } ListElement { image: ":/icons/icons/emoji-categories/symbols.png"; category: Emoji.Category.Symbols }
ListElement { label: "🏁"; category: Emoji.Category.Flags } ListElement { image: ":/icons/icons/emoji-categories/flags.png"; category: Emoji.Category.Flags }
ListElement { label: "🔍"; category: Emoji.Category.Search }
} }
delegate: AbstractButton { delegate: AbstractButton {
width: 40 Layout.preferredWidth: 36
height: 40 Layout.preferredHeight: 36
contentItem: Text {
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
font.pointSize: 30 contentItem: Image {
text: model.label horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
fillMode: Image.Pad
smooth: true
sourceSize.width: 32
sourceSize.height: 32
source: "image://colorimage/" + model.image + "?" + (hovered ? colors.highlight : colors.buttonText)
} }
background: Rectangle { background: Rectangle {
anchors.fill: parent anchors.fill: parent
color: emojiPopup.model.category === model.category ? colors.highlight : 'transparent' property real highlightHue: colors.highlight.hslHue
property real highlightSat: colors.highlight.hslSaturation
property real highlightLight: colors.highlight.hslLightness
color: emojiPopup.model.category === model.category ? Qt.hsla(highlightHue, highlightSat, highlightLight, 0.25) : 'transparent'
radius: 5 radius: 5
border.color: emojiPopup.model.category === model.category ? colors.highlight : 'transparent'
} }
hoverEnabled: true hoverEnabled: true
@ -162,13 +209,55 @@ Popup {
return qsTr('Symbols'); return qsTr('Symbols');
case Emoji.Category.Flags: case Emoji.Category.Flags:
return qsTr('Flags'); return qsTr('Flags');
case Emoji.Category.Search:
return qsTr('Search');
} }
} }
ToolTip.visible: hovered ToolTip.visible: hovered
onClicked: emojiPopup.model.category = model.category onClicked: {
emojiPopup.model.category = model.category
}
}
}
// Separator
Rectangle {
Layout.fillHeight: true
Layout.preferredWidth: 1
implicitWidth: 1
height: parent.height
color: emojiPopup.colors.dark
}
// Search Button is special
AbstractButton {
id: searchBtn
hoverEnabled: true
Layout.alignment: Qt.AlignRight
Layout.bottomMargin: 0
ToolTip.text: qsTr("Search")
ToolTip.visible: hovered
onClicked: {
// clear any filters
emojiPopup.model.category = Emoji.Category.Search
gridView.positionViewAtBeginning()
emojiSearch.forceActiveFocus()
}
Layout.preferredWidth: 36
Layout.preferredHeight: 36
implicitWidth: 36
implicitHeight: 36
contentItem: Image {
anchors.right: parent.right
horizontalAlignment: Image.AlignHCenter
verticalAlignment: Image.AlignVCenter
fillMode: Image.Pad
smooth: true
sourceSize.width: 32
sourceSize.height: 32
source: "image://colorimage/:/icons/icons/ui/search.png?" + (parent.hovered ? colors.highlight : colors.buttonText)
} }
} }
} }

@ -20,6 +20,8 @@
<file>icons/ui/checkmark@2x.png</file> <file>icons/ui/checkmark@2x.png</file>
<file>icons/ui/cursor.png</file> <file>icons/ui/cursor.png</file>
<file>icons/ui/cursor@2x.png</file> <file>icons/ui/cursor@2x.png</file>
<file>icons/ui/search.png</file>
<file>icons/ui/search@2x.png</file>
<file>icons/ui/settings.png</file> <file>icons/ui/settings.png</file>
<file>icons/ui/settings@2x.png</file> <file>icons/ui/settings@2x.png</file>
<file>icons/ui/smile.png</file> <file>icons/ui/smile.png</file>

@ -9,19 +9,35 @@ set -eu
INPUT=$1 INPUT=$1
OUTPUT=nheko OUTPUT=nheko
filename=$(basename -- "$1")
extension="${filename##*.}"
mkdir ${OUTPUT}.iconset mkdir ${OUTPUT}.iconset
sips -z 16 16 "${INPUT}" --out ${OUTPUT}.iconset/icon_16x16.png if [ extension = "svg" ]; then
sips -z 32 32 "${INPUT}" --out ${OUTPUT}.iconset/icon_16x16@2x.png rsvg-convert -h 16 "${INPUT}" > ${OUTPUT}.iconset/icon_16x16.png
sips -z 32 32 "${INPUT}" --out ${OUTPUT}.iconset/icon_32x32.png rsvg-convert -h 32 "${INPUT}" > ${OUTPUT}.iconset/icon_16x16@2x.png
sips -z 64 64 "${INPUT}" --out ${OUTPUT}.iconset/icon_32x32@2x.png rsvg-convert -h 32 "${INPUT}" > ${OUTPUT}.iconset/icon_32x32.png
sips -z 128 128 "${INPUT}" --out ${OUTPUT}.iconset/icon_128x128.png rsvg-convert -h 64 "${INPUT}" > ${OUTPUT}.iconset/icon_32x32@2x.png
sips -z 256 256 "${INPUT}" --out ${OUTPUT}.iconset/icon_128x128@2x.png rsvg-convert -h 128 "${INPUT}" > ${OUTPUT}.iconset/icon_128x128.png
sips -z 256 256 "${INPUT}" --out ${OUTPUT}.iconset/icon_256x256.png rsvg-convert -h 256 "${INPUT}" > ${OUTPUT}.iconset/icon_128x128@2x.png
sips -z 512 512 "${INPUT}" --out ${OUTPUT}.iconset/icon_256x256@2x.png rsvg-convert -h 256 "${INPUT}" > ${OUTPUT}.iconset/icon_256x256.png
sips -z 512 512 "${INPUT}" --out ${OUTPUT}.iconset/icon_512x512.png rsvg-convert -h 512 "${INPUT}" > ${OUTPUT}.iconset/icon_256x256@2x.png
rsvg-convert -h 512 "${INPUT}" > ${OUTPUT}.iconset/icon_512x512.png
cp "${INPUT}" ${OUTPUT}.iconset/icon_512x512@2x.png rsvg-convert -h 1024 "${INPUT}" > ${OUTPUT}.iconset/icon_512x512@2x.png
else
sips -z 16 16 "${INPUT}" --out ${OUTPUT}.iconset/icon_16x16.png
sips -z 32 32 "${INPUT}" --out ${OUTPUT}.iconset/icon_16x16@2x.png
sips -z 32 32 "${INPUT}" --out ${OUTPUT}.iconset/icon_32x32.png
sips -z 64 64 "${INPUT}" --out ${OUTPUT}.iconset/icon_32x32@2x.png
sips -z 128 128 "${INPUT}" --out ${OUTPUT}.iconset/icon_128x128.png
sips -z 256 256 "${INPUT}" --out ${OUTPUT}.iconset/icon_128x128@2x.png
sips -z 256 256 "${INPUT}" --out ${OUTPUT}.iconset/icon_256x256.png
sips -z 512 512 "${INPUT}" --out ${OUTPUT}.iconset/icon_256x256@2x.png
sips -z 512 512 "${INPUT}" --out ${OUTPUT}.iconset/icon_512x512.png
cp "${INPUT}" ${OUTPUT}.iconset/icon_512x512@2x.png
fi
iconutil -c icns ${OUTPUT}.iconset iconutil -c icns ${OUTPUT}.iconset

Loading…
Cancel
Save