Simplify code for bidi icons

Most of the RtL icons that we provide are simply mirrors of the LtR ones.
Therefore let the code do that by default if no +rtl icon is found.

The only RtL icon left for now is for "layout Enumerate" (notice the
numbers in it).

Also remove useless getPixmap wrapper and several old bidi_xxx icons
that were forgotten in previous patch.
This commit is contained in:
Jean-Marc Lasgouttes 2020-04-16 19:21:54 +02:00
parent 2b7ab02252
commit bb0117d182
33 changed files with 34 additions and 44 deletions

View File

@ -568,9 +568,7 @@ dist_images_DATA1X = \
images/tab-group-close.svgz \ images/tab-group-close.svgz \
images/copy.svgz \ images/copy.svgz \
images/cut.svgz \ images/cut.svgz \
images/depth-decrement+rtl.svgz \
images/depth-decrement.svgz \ images/depth-decrement.svgz \
images/depth-increment+rtl.svgz \
images/depth-increment.svgz \ images/depth-increment.svgz \
images/dialog-preferences.svgz \ images/dialog-preferences.svgz \
images/dialog-show-new-inset_citation.svgz \ images/dialog-show-new-inset_citation.svgz \
@ -612,17 +610,13 @@ dist_images_DATA1X = \
images/layout-document.svgz \ images/layout-document.svgz \
images/layout-paragraph.svgz \ images/layout-paragraph.svgz \
images/layout-toggle_Chunk.svgz \ images/layout-toggle_Chunk.svgz \
images/layout-toggle_Description+rtl.svgz \
images/layout-toggle_Description.svgz \ images/layout-toggle_Description.svgz \
images/layout-toggle_Enumerate+rtl.svgz \ images/layout-toggle_Enumerate+rtl.svgz \
images/layout-toggle_Enumerate.svgz \ images/layout-toggle_Enumerate.svgz \
images/layout-toggle_Itemize+rtl.svgz \
images/layout-toggle_Itemize.svgz \ images/layout-toggle_Itemize.svgz \
images/layout-toggle_Labeling+rtl.svgz \
images/layout-toggle_Labeling.svgz \ images/layout-toggle_Labeling.svgz \
images/layout-toggle_List.svgz \ images/layout-toggle_List.svgz \
images/layout-toggle_LyX-Code.svgz \ images/layout-toggle_LyX-Code.svgz \
images/layout-toggle_Section+rtl.svgz \
images/layout-toggle_Section.svgz \ images/layout-toggle_Section.svgz \
images/lyxfiles-system.svgz \ images/lyxfiles-system.svgz \
images/lyxfiles-user.svgz \ images/lyxfiles-user.svgz \
@ -1860,9 +1854,7 @@ dist_imagesoxygen_DATA1X = \
images/oxygen/closetab.svgz \ images/oxygen/closetab.svgz \
images/oxygen/copy.svgz \ images/oxygen/copy.svgz \
images/oxygen/cut.svgz \ images/oxygen/cut.svgz \
images/oxygen/depth-decrement+rtl.svgz \
images/oxygen/depth-decrement.svgz \ images/oxygen/depth-decrement.svgz \
images/oxygen/depth-increment+rtl.svgz \
images/oxygen/depth-increment.svgz \ images/oxygen/depth-increment.svgz \
images/oxygen/dialog-preferences.svgz \ images/oxygen/dialog-preferences.svgz \
images/oxygen/dialog-show-new-inset_citation.svgz \ images/oxygen/dialog-show-new-inset_citation.svgz \
@ -1901,17 +1893,13 @@ dist_imagesoxygen_DATA1X = \
images/oxygen/layout-paragraph.svgz \ images/oxygen/layout-paragraph.svgz \
images/oxygen/layout.svgz \ images/oxygen/layout.svgz \
images/oxygen/layout-toggle_Chunk.svgz \ images/oxygen/layout-toggle_Chunk.svgz \
images/oxygen/layout-toggle_Description+rtl.svgz \
images/oxygen/layout-toggle_Description.svgz \ images/oxygen/layout-toggle_Description.svgz \
images/oxygen/layout-toggle_Enumerate+rtl.svgz \ images/oxygen/layout-toggle_Enumerate+rtl.svgz \
images/oxygen/layout-toggle_Enumerate.svgz \ images/oxygen/layout-toggle_Enumerate.svgz \
images/oxygen/layout-toggle_Itemize+rtl.svgz \
images/oxygen/layout-toggle_Itemize.svgz \ images/oxygen/layout-toggle_Itemize.svgz \
images/oxygen/layout-toggle_Labeling+rtl.svgz \
images/oxygen/layout-toggle_Labeling.svgz \ images/oxygen/layout-toggle_Labeling.svgz \
images/oxygen/layout-toggle_List.svgz \ images/oxygen/layout-toggle_List.svgz \
images/oxygen/layout-toggle_LyX-Code.svgz \ images/oxygen/layout-toggle_LyX-Code.svgz \
images/oxygen/layout-toggle_Section+rtl.svgz \
images/oxygen/layout-toggle_Section.svgz \ images/oxygen/layout-toggle_Section.svgz \
images/oxygen/lyx-quit.svgz \ images/oxygen/lyx-quit.svgz \
images/oxygen/marginalnote-insert.svgz \ images/oxygen/marginalnote-insert.svgz \
@ -2071,9 +2059,7 @@ dist_imagesclassic_DATA = \
images/classic/tab-group-close.png \ images/classic/tab-group-close.png \
images/classic/copy.png \ images/classic/copy.png \
images/classic/cut.png \ images/classic/cut.png \
images/classic/depth-decrement+rtl.png \
images/classic/depth-decrement.png \ images/classic/depth-decrement.png \
images/classic/depth-increment+rtl.png \
images/classic/depth-increment.png \ images/classic/depth-increment.png \
images/classic/dialog-preferences.png \ images/classic/dialog-preferences.png \
images/classic/dialog-show_mathdelimiter.png \ images/classic/dialog-show_mathdelimiter.png \
@ -2109,17 +2095,13 @@ dist_imagesclassic_DATA = \
images/classic/layout-paragraph.png \ images/classic/layout-paragraph.png \
images/classic/layout.png \ images/classic/layout.png \
images/classic/layout-toggle_Chunk.png \ images/classic/layout-toggle_Chunk.png \
images/classic/layout-toggle_Description+rtl.png \
images/classic/layout-toggle_Description.png \ images/classic/layout-toggle_Description.png \
images/classic/layout-toggle_Enumerate+rtl.png \ images/classic/layout-toggle_Enumerate+rtl.png \
images/classic/layout-toggle_Enumerate.png \ images/classic/layout-toggle_Enumerate.png \
images/classic/layout-toggle_Itemize+rtl.png \
images/classic/layout-toggle_Itemize.png \ images/classic/layout-toggle_Itemize.png \
images/classic/layout-toggle_Labeling+rtl.png \
images/classic/layout-toggle_Labeling.png \ images/classic/layout-toggle_Labeling.png \
images/classic/layout-toggle_List.png \ images/classic/layout-toggle_List.png \
images/classic/layout-toggle_LyX-Code.png \ images/classic/layout-toggle_LyX-Code.png \
images/classic/layout-toggle_Section+rtl.png \
images/classic/layout-toggle_Section.png \ images/classic/layout-toggle_Section.png \
images/classic/marginalnote-insert.png \ images/classic/marginalnote-insert.png \
images/classic/master-buffer-update.png \ images/classic/master-buffer-update.png \

View File

@ -17,12 +17,13 @@
!!Documents compilation process and images conversion !!Documents compilation process and images conversion
* LyX now uses utf8 encoding per default for all languages. This does not affect * LyX now uses utf8 encoding per default for all languages. This does
existing documents. Note that LyX also does not touch personal defaults and templates. not affect existing documents. Note that LyX also does not touch
That is to say, if you still see traditional encoding preset for new documents, personal defaults and templates. That is to say, if you still see
you can change that by selecting "Unicode (utf8) [default]" and hitting "Save traditional encoding preset for new documents, you can change that
as Documents Defaults" afterwards. Your personal templates need to be changed manually by selecting "Unicode (utf8) [default]" and hitting "Save as
if desired. Documents Defaults" afterwards. Your personal templates need to be
changed manually if desired.
* LyX defaults to the "HE8" LaTeX font encoding with Hebrew if the * LyX defaults to the "HE8" LaTeX font encoding with Hebrew if the
"Culmus" LaTeX fonts are installed. "Culmus" LaTeX fonts are installed.
@ -97,6 +98,10 @@
* date-insert: obsoleted by info-insert date. * date-insert: obsoleted by info-insert date.
!!!The following LyX function has been added and then removed in 2.4 development cycle.
* bidi: used as a first solution to provide icons that change
direction with language.
!!!The following LyX documents have been moved in 2.4: !!!The following LyX documents have been moved in 2.4:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 202 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 192 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

Binary file not shown.

View File

@ -38,7 +38,8 @@
# #
# BidiItem is like Item, but an alternative icon (with name ending # BidiItem is like Item, but an alternative icon (with name ending
# with "+rtl") will be used <hen the paragraph has a right-to-left # with "+rtl") will be used <hen the paragraph has a right-to-left
# layout. # layout. If this alternative icon does not exist, the LtR icon will
# be mirrored instead.
# #
# Layouts adds the layouts combo-box to the toolbar # Layouts adds the layouts combo-box to the toolbar
# #
@ -122,6 +123,7 @@ ToolbarSet
BidiItem "Itemized list" "layout-toggle Itemize" BidiItem "Itemized list" "layout-toggle Itemize"
BidiItem "Labeled List" "layout-toggle Labeling" BidiItem "Labeled List" "layout-toggle Labeling"
BidiItem "Description" "layout-toggle Description" BidiItem "Description" "layout-toggle Description"
BidiItem "Section" "layout-toggle Section"
BidiItem "Increase depth" "depth-increment" BidiItem "Increase depth" "depth-increment"
BidiItem "Decrease depth" "depth-decrement" BidiItem "Decrease depth" "depth-decrement"
Separator Separator

View File

@ -529,6 +529,7 @@ QString iconName(FuncRequest const & f, bool unknown, QString const & suffix)
// maybe a suffix? // maybe a suffix?
name1 += suffix; name1 += suffix;
name2 += suffix;
QStringList imagedirs; QStringList imagedirs;
imagedirs << "images/" << "images/ipa/"; imagedirs << "images/" << "images/ipa/";
@ -580,12 +581,6 @@ QString iconName(FuncRequest const & f, bool unknown, QString const & suffix)
} }
bool getPixmap(QPixmap & pixmap, QString const & path)
{
return pixmap.load(path);
}
QPixmap getPixmap(QString const & path, QString const & name, QString const & ext) QPixmap getPixmap(QString const & path, QString const & name, QString const & ext)
{ {
QString imagedir = path; QString imagedir = path;
@ -593,14 +588,14 @@ QPixmap getPixmap(QString const & path, QString const & name, QString const & ex
QString fpath = toqstr(fname.absFileName()); QString fpath = toqstr(fname.absFileName());
QPixmap pixmap = QPixmap(); QPixmap pixmap = QPixmap();
if (getPixmap(pixmap, fpath)) { if (pixmap.load(fpath)) {
return pixmap; return pixmap;
} }
QStringList exts = ext.split(","); QStringList exts = ext.split(",");
fpath = ":/" + path + name + "."; fpath = ":/" + path + name + ".";
for (int i = 0; i < exts.size(); ++i) { for (int i = 0; i < exts.size(); ++i) {
if (getPixmap(pixmap, fpath + exts.at(i))) { if (pixmap.load(fpath + exts.at(i))) {
return pixmap; return pixmap;
} }
} }
@ -614,7 +609,7 @@ QPixmap getPixmap(QString const & path, QString const & name, QString const & ex
} }
QIcon getIcon(FuncRequest const & f, bool unknown, QString const & suffix) QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl)
{ {
#if (QT_VERSION >= 0x040600) #if (QT_VERSION >= 0x040600)
if (lyxrc.use_system_theme_icons) { if (lyxrc.use_system_theme_icons) {
@ -631,18 +626,29 @@ QIcon getIcon(FuncRequest const & f, bool unknown, QString const & suffix)
} }
#endif #endif
QString icon = iconName(f, unknown, suffix); bool flip = false;
QString icon;
if (rtl) {
icon = iconName(f, unknown, "+rtl");
// No RTL icon, we'll make it ourselves
flip = icon.isEmpty();
}
if (icon.isEmpty())
icon = iconName(f, unknown);
if (icon.isEmpty()) if (icon.isEmpty())
return QIcon(); return QIcon();
//LYXERR(Debug::GUI, "Found icon: " << icon); //LYXERR(Debug::GUI, "Found icon: " << icon);
QPixmap pixmap = QPixmap(); QPixmap pixmap = QPixmap();
if (!getPixmap(pixmap,icon)) { if (!pixmap.load(icon)) {
LYXERR0("Cannot load icon " << icon << " please verify resource system!"); LYXERR0("Cannot load icon " << icon << " please verify resource system!");
return QIcon(); return QIcon();
} }
return QIcon(pixmap); if (flip)
return QIcon(pixmap.transformed(QTransform().scale(-1, 1)));
else
return QIcon(pixmap);
} }

View File

@ -264,14 +264,9 @@ QString iconName(FuncRequest const & f, bool unknown,
/// \return the pixmap for the given path, name and extension. /// \return the pixmap for the given path, name and extension.
/// in case of errors a warning is produced and an empty pixmap is returned. /// in case of errors a warning is produced and an empty pixmap is returned.
QPixmap getPixmap(QString const & path, QString const & name, QString const & ext); QPixmap getPixmap(QString const & path, QString const & name, QString const & ext);
/// Load the file at \param path and convert it to a pixmap.
/// \return true on success otherwise invalidate the pixmap and return false.
/// The caller is responsible for error reporting.
bool getPixmap(QPixmap & pixmap, QString const & path);
/// \return an icon for the given action. /// \return an icon for the given action.
QIcon getIcon(FuncRequest const & f, bool unknown, QIcon getIcon(FuncRequest const & f, bool unknown, bool rtl = false);
QString const & suffix = QString());
/// ///
GuiApplication * theGuiApp(); GuiApplication * theGuiApp();

View File

@ -131,7 +131,7 @@ Action * GuiToolbar::addItem(ToolbarItem const & item)
Action * act = new Action(item.func_, getIcon(*item.func_, false), text, Action * act = new Action(item.func_, getIcon(*item.func_, false), text,
text, this); text, this);
if (item.type_ == ToolbarItem::BIDICOMMAND) if (item.type_ == ToolbarItem::BIDICOMMAND)
act->setRtlIcon(getIcon(*item.func_, false, "+rtl")); act->setRtlIcon(getIcon(*item.func_, false, true));
actions_.append(act); actions_.append(act);
return act; return act;