Changed the window logos from images to (localized) text.

This fixes #1843.
This commit is contained in:
fgerlits 2006-10-25 14:52:01 +00:00
parent 2b3bf4b759
commit f2e7b03f03
40 changed files with 78 additions and 286 deletions

View File

@ -207,7 +207,6 @@ install: all
${USR_VAR_DIR}/LiveSupport/Widgets/icons \
${USR_VAR_DIR}/LiveSupport/Widgets/imageButton \
${USR_VAR_DIR}/LiveSupport/Widgets/tabButton \
${USR_VAR_DIR}/LiveSupport/Widgets/titleImages \
${USR_VAR_DIR}/LiveSupport/Widgets/whiteWindow
${CP} ${VAR_DIR}/blueBin/*.png \
${USR_VAR_DIR}/LiveSupport/Widgets/blueBin
@ -225,8 +224,6 @@ install: all
${USR_VAR_DIR}/LiveSupport/Widgets/imageButton
${CP} ${VAR_DIR}/tabButton/*.png \
${USR_VAR_DIR}/LiveSupport/Widgets/tabButton
${CP} ${VAR_DIR}/titleImages/*.png \
${USR_VAR_DIR}/LiveSupport/Widgets/titleImages
${CP} ${VAR_DIR}/whiteWindow/*.png \
${USR_VAR_DIR}/LiveSupport/Widgets/whiteWindow

View File

@ -123,11 +123,6 @@ class WhiteWindow : public Gtk::Window,
*/
Gtk::Table * layout;
/**
* The event box for the title, enabling capturing mouse events.
*/
Gtk::HBox * titleBox;
/**
* The left alignment contaner for the title.
*/
@ -335,31 +330,17 @@ class WhiteWindow : public Gtk::Window,
public:
/**
* Constructor for windows with image titles.
* Constructor.
*
* @param title the title of the window.
* @param applicationTitle the name of the application.
* @param backgroundColor the background color.
* @param cornerImages the corner images.
* @param properties some WindowProperties flags
*/
WhiteWindow(WidgetConstants::ImageType title,
Colors::ColorName backgroundColor,
WhiteWindow(Colors::ColorName backgroundColor,
Ptr<CornerImages>::Ref cornerImages,
int properties = isResizable)
throw ();
/**
* Constructor for windows with text titles.
*
* @param title the title of the window.
* @param backgroundColor the background color.
* @param cornerImages the corner images.
* @param properties some WindowProperties flags
*/
WhiteWindow(Glib::ustring title,
Colors::ColorName backgroundColor,
Ptr<CornerImages>::Ref cornerImages,
int properties = isResizable)
int properties = 0)
throw ();
/**
@ -371,18 +352,17 @@ class WhiteWindow : public Gtk::Window,
/**
* Set the title of the window.
*
* @param title the title of the window.
* This sets the title shown in the upper left corner of the window
* to "TITLE", and sets the window manager title shown in the task
* bar to "title - applicationTitle".
*
* @param title the title of the window.
* @param applicationTitle the name of the application.
*/
void
set_title(const Glib::ustring & title) throw ();
/**
* Get the title of the window.
*
* @return the title of the window.
*/
Glib::ustring
get_title(void) const throw ();
setTitle(const Glib::ustring & title,
const Glib::ustring & applicationTitle)
throw ();
/**
* Set the default size of the window.
@ -398,8 +378,9 @@ class WhiteWindow : public Gtk::Window,
* Properties the WhiteWindow can have. This is passed as the
* properties parameter to the constructors.
*/
typedef enum { isResizable = 1,
isModal = 2 } WindowProperties;
typedef enum { hasNoTitle = 1,
isNotResizable = 2,
isModal = 4 } WindowProperties;
};

View File

@ -88,11 +88,7 @@ class WidgetConstants
* The list of available miscellaneous images.
*/
typedef enum { resizeImage,
scratchpadWindowTitleImage,
searchWindowTitleImage,
liveModeWindowTitleImage,
playlistsWindowTitleImage,
schedulerWindowTitleImage,
windowTitleLogoImage,
audioClipIconImage,
playlistIconImage } ImageType;
};

View File

@ -58,10 +58,9 @@ using namespace LiveSupport::Widgets;
*----------------------------------------------------------------------------*/
DateTimeChooserWindow :: DateTimeChooserWindow(Ptr<ResourceBundle>::Ref bundle)
throw ()
: WhiteWindow("",
Colors::White,
: WhiteWindow(Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners(),
WhiteWindow::isModal),
WhiteWindow::hasNoTitle || WhiteWindow::isModal),
LocalizedObject(bundle)
{
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();

View File

@ -62,10 +62,9 @@ DialogWindow :: DialogWindow (Ptr<Glib::ustring>::Ref message,
int buttonTypes,
Ptr<ResourceBundle>::Ref bundle)
throw ()
: WhiteWindow("",
Colors::White,
: WhiteWindow(Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners(),
WhiteWindow::isModal),
WhiteWindow::hasNoTitle || WhiteWindow::isModal),
LocalizedObject(bundle)
{
Ptr<WidgetFactory>::Ref widgetFactory = WidgetFactory::getInstance();

View File

@ -64,12 +64,13 @@ static const std::string bundleConfigFileName = "etc/resourceBundle.xml";
*----------------------------------------------------------------------------*/
TestWindow :: TestWindow (void)
throw ()
: WhiteWindow("test window",
Colors::White,
: WhiteWindow(Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners())
{
Ptr<WidgetFactory>::Ref widgetFactory = WidgetFactory::getInstance();
setTitle("test widget", "Test App");
// init the imageButtons
hugeImageButton = Gtk::manage(
widgetFactory->createButton(WidgetConstants::hugePlayButton));

View File

@ -48,6 +48,14 @@ using namespace LiveSupport::Widgets;
/* ================================================ local constants & macros */
namespace {
/*------------------------------------------------------------------------------
* The font used for the window title.
*----------------------------------------------------------------------------*/
const Glib::ustring windowTitleFont = "Bitstream Vera Sans Mono Bold 9";
}
/* =============================================== local function prototypes */
@ -55,73 +63,45 @@ using namespace LiveSupport::Widgets;
/* ============================================================= module code */
/*------------------------------------------------------------------------------
* Constructor for windows with image titles.
* Constructor.
*----------------------------------------------------------------------------*/
WhiteWindow :: WhiteWindow(WidgetConstants::ImageType title,
Colors::ColorName backgroundColor,
WhiteWindow :: WhiteWindow(Colors::ColorName backgroundColor,
Ptr<CornerImages>::Ref cornerImages,
int properties)
throw ()
: Gtk::Window(Gtk::WINDOW_TOPLEVEL),
isMaximized(false)
{
// do the image title-specific stuff
titleLabel = 0;
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
Gtk::Image* titleImage = Gtk::manage(wf->createImage(title));
titleBox = Gtk::manage(new Gtk::HBox());
titleBox->add(*titleImage);
constructWindow(backgroundColor, cornerImages, properties);
}
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
/*------------------------------------------------------------------------------
* Constructor for windows with text titles.
*----------------------------------------------------------------------------*/
WhiteWindow :: WhiteWindow(Glib::ustring title,
Colors::ColorName backgroundColor,
Ptr<CornerImages>::Ref cornerImages,
int properties)
throw ()
: Gtk::Window(Gtk::WINDOW_TOPLEVEL),
isMaximized(false)
{
// do the text title-specific stuff
titleLabel = Gtk::manage(new Gtk::Label);
titleLabel->modify_font(Pango::FontDescription(
"Bitstream Vera Sans 10"));
set_title(title);
titleBox = Gtk::manage(new Gtk::HBox());
titleBox->add(*titleLabel);
constructWindow(backgroundColor, cornerImages, properties);
}
/*------------------------------------------------------------------------------
* The common part of both constructors.
*----------------------------------------------------------------------------*/
void
WhiteWindow :: constructWindow(Colors::ColorName backgroundColor,
Ptr<CornerImages>::Ref cornerImages,
int properties)
throw ()
{
set_decorated(false);
defaultWidth = -1;
defaultHeight = -1;
set_resizable(properties & isResizable);
set_resizable(!(properties & isNotResizable));
set_modal(properties & isModal);
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();
layout = Gtk::manage(new Gtk::Table());
// create the background color, as it is needed by the event box
Gdk::Color bgColor = Colors::getColor(backgroundColor);
// create the title
Gtk::Box * titleBox = Gtk::manage(new Gtk::VBox());
titleLabel = 0;
if (!(properties & hasNoTitle)) {
Gtk::Image * titleImage = Gtk::manage(wf->createImage(
WidgetConstants::windowTitleLogoImage));
titleLabel = Gtk::manage(new Gtk::Label());
titleLabel->modify_font(Pango::FontDescription(windowTitleFont));
titleLabel->modify_fg(Gtk::STATE_NORMAL, Colors::getColor(
Colors::Orange));
titleBox->pack_start(*titleImage, Gtk::PACK_SHRINK, 0);
titleBox->pack_start(*titleLabel, Gtk::PACK_SHRINK, 2);
}
titleBox->modify_bg(Gtk::STATE_NORMAL, bgColor);
titleAlignment = Gtk::manage(new Gtk::Alignment(Gtk::ALIGN_LEFT,
Gtk::ALIGN_CENTER,
@ -141,7 +121,7 @@ WhiteWindow :: constructWindow(Colors::ColorName backgroundColor,
closeButton->signal_clicked().connect(sigc::mem_fun(*this,
&WhiteWindow::onCloseButtonClicked));
}
if (properties & isResizable) {
if (!(properties & isNotResizable)) {
maximizeButton = Gtk::manage(wf->createButton(
WidgetConstants::windowMaximizeButton));
cornerButtonBox->pack_end(*maximizeButton, Gtk::PACK_SHRINK, padding);
@ -168,7 +148,7 @@ WhiteWindow :: constructWindow(Colors::ColorName backgroundColor,
layout->attach(*childContainer, 0, 2, 1, 2);
// create the resize image
if (properties & isResizable) {
if (!(properties & isNotResizable)) {
resizeImage = Gtk::manage(wf->createImage(WidgetConstants::resizeImage));
resizeEventBox = Gtk::manage(new Gtk::EventBox());
resizeEventBox->modify_bg(Gtk::STATE_NORMAL, bgColor);
@ -393,25 +373,17 @@ WhiteWindow :: onCloseButtonClicked (void) throw ()
* Set the title of the window.
*----------------------------------------------------------------------------*/
void
WhiteWindow :: set_title(const Glib::ustring & title) throw ()
WhiteWindow :: setTitle(const Glib::ustring & title,
const Glib::ustring & applicationTitle)
throw ()
{
Gtk::Window::set_title(title);
Gtk::Window::set_title(title + " - " + applicationTitle);
if (titleLabel) {
titleLabel->set_label(title);
titleLabel->set_label(title.uppercase());
}
}
/*------------------------------------------------------------------------------
* Get the title of the window.
*----------------------------------------------------------------------------*/
Glib::ustring
WhiteWindow :: get_title(void) const throw ()
{
return titleLabel ? titleLabel->get_label() : "";
}
/*------------------------------------------------------------------------------
* Set the default window size.
*----------------------------------------------------------------------------*/

View File

@ -253,28 +253,10 @@ static const std::string comboBoxRightName = "combo/right.png";
static const std::string resizeImageName = "whiteWindow/resize.png";
/**
* The name of the image for the title of the scratchpad window.
* The name of the image for the title logo of the GUI windows.
*/
static const std::string scratchpadWindowTitleImageName
= "titleImages/scratchpadWindowTitle.png";
/**
* The name of the image for the title of the search window.
*/
static const std::string searchWindowTitleImageName
= "titleImages/searchWindowTitle.png";
/**
* The name of the image for the title of the live mode window.
*/
static const std::string liveModeWindowTitleImageName
= "titleImages/liveModeWindowTitle.png";
/**
* The name of the image for the title of the playlist editor window.
*/
static const std::string playlistsWindowTitleImageName
= "titleImages/playlistsWindowTitle.png";
static const std::string windowTitleLogoImageName
= "whiteWindow/windowTitleLogo.png";
/**
* The name of the image for the audio clip icon.
@ -286,12 +268,6 @@ static const std::string audioClipIconImageName = "icons/audioClipIcon.png";
*/
static const std::string playlistIconImageName = "icons/playlistIcon.png";
/**
* The name of the image for the title of the scheduler window.
*/
static const std::string schedulerWindowTitleImageName
= "titleImages/schedulerWindowTitle.png";
/**
* The name of the passive image for the minimize window button.
*/
@ -389,16 +365,8 @@ WidgetFactory :: configure(const xmlpp::Element & element)
// load the miscellaneous images
imageTypePixbufs[WidgetConstants::resizeImage]
= loadImage(resizeImageName);
imageTypePixbufs[WidgetConstants::scratchpadWindowTitleImage]
= loadImage(scratchpadWindowTitleImageName);
imageTypePixbufs[WidgetConstants::searchWindowTitleImage]
= loadImage(searchWindowTitleImageName);
imageTypePixbufs[WidgetConstants::liveModeWindowTitleImage]
= loadImage(liveModeWindowTitleImageName);
imageTypePixbufs[WidgetConstants::playlistsWindowTitleImage]
= loadImage(playlistsWindowTitleImageName);
imageTypePixbufs[WidgetConstants::schedulerWindowTitleImage]
= loadImage(schedulerWindowTitleImageName);
imageTypePixbufs[WidgetConstants::windowTitleLogoImage]
= loadImage(windowTitleLogoImageName);
imageTypePixbufs[WidgetConstants::audioClipIconImage]
= loadImage(audioClipIconImageName);
imageTypePixbufs[WidgetConstants::playlistIconImage]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B

View File

@ -82,8 +82,7 @@ ExportPlaylistWindow :: ExportPlaylistWindow(
Ptr<Playlist>::Ref playlist)
throw ()
: GuiWindow(gLiveSupport,
bundle,
""),
bundle),
playlist(playlist)
{
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();

View File

@ -53,7 +53,7 @@ namespace {
/**
* The name of the application, shown on the task bar.
*/
const Glib::ustring applicationTitleSuffix = " - Campcaster";
const Glib::ustring applicationTitle = "Campcaster";
}
@ -67,68 +67,10 @@ const Glib::ustring applicationTitleSuffix = " - Campcaster";
*----------------------------------------------------------------------------*/
GuiWindow :: GuiWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
WidgetConstants::ImageType titleImage,
Button * windowOpenerButton)
throw ()
: WhiteWindow(titleImage,
Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners()),
LocalizedObject(bundle),
windowOpenerButton(windowOpenerButton),
gLiveSupport(gLiveSupport)
{
}
/*------------------------------------------------------------------------------
* Constructor.
*----------------------------------------------------------------------------*/
GuiWindow :: GuiWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
WidgetConstants::ImageType titleImage,
Button * windowOpenerButton,
int properties)
throw ()
: WhiteWindow(titleImage,
Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners(),
properties),
LocalizedObject(bundle),
windowOpenerButton(windowOpenerButton),
gLiveSupport(gLiveSupport)
{
}
/*------------------------------------------------------------------------------
* Constructor.
*----------------------------------------------------------------------------*/
GuiWindow :: GuiWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
const Glib::ustring & titleString,
Button * windowOpenerButton)
throw ()
: WhiteWindow(titleString,
Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners()),
LocalizedObject(bundle),
windowOpenerButton(windowOpenerButton),
gLiveSupport(gLiveSupport)
{
}
/*------------------------------------------------------------------------------
* Constructor.
*----------------------------------------------------------------------------*/
GuiWindow :: GuiWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
const Glib::ustring & titleString,
Button * windowOpenerButton,
int properties)
throw ()
: WhiteWindow(titleString,
Colors::White,
: WhiteWindow(Colors::White,
WidgetFactory::getInstance()->getWhiteWindowCorners(),
properties),
LocalizedObject(bundle),
@ -176,7 +118,6 @@ GuiWindow :: on_hide (void) throw ()
void
GuiWindow :: set_title (const Glib::ustring & title) throw ()
{
Glib::ustring completeTitle = title + applicationTitleSuffix;
WhiteWindow::set_title(completeTitle);
WhiteWindow::setTitle(title, applicationTitle);
}

View File

@ -115,66 +115,15 @@ class GuiWindow : public WhiteWindow,
* @param gLiveSupport the GLiveSupport application object.
* @param bundle the resource bundle holding the localized
* resources for this window.
* @param titleImage the LS logo for this window.
* @param windowOpenerButton the button which was pressed to open
* this window (optional).
* @param properties see WhiteWindow::WindowProperties
* (optional).
*/
GuiWindow(Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
WidgetConstants::ImageType titleImage,
Button * windowOpenerButton = 0)
throw ();
/**
* Constructor.
*
* @param gLiveSupport the GLiveSupport application object.
* @param bundle the resource bundle holding the localized
* resources for this window.
* @param titleImage the LS logo for this window.
* @param windowOpenerButton the button which was pressed to open
* this window.
* @param properties see WhiteWindow::WindowProperties.
*/
GuiWindow(Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
WidgetConstants::ImageType titleImage,
Button * windowOpenerButton,
int properties)
throw ();
/**
* Constructor.
*
* @param gLiveSupport the GLiveSupport, application object.
* @param bundle the resource bundle holding the localized
* resources for this window.
* @param titleString the title of this window.
* @param windowOpenerButton the button which was pressed to open
* this window (optional).
*/
GuiWindow(Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
const Glib::ustring & titleString,
Button * windowOpenerButton = 0)
throw ();
/**
* Constructor.
*
* @param gLiveSupport the GLiveSupport, application object.
* @param bundle the resource bundle holding the localized
* resources for this window.
* @param titleString the title of this window.
* @param windowOpenerButton the button which was pressed to open
* this window.
* @param properties see WhiteWindow::WindowProperties.
*/
GuiWindow(Ptr<GLiveSupport>::Ref gLiveSupport,
Ptr<ResourceBundle>::Ref bundle,
const Glib::ustring & titleString,
Button * windowOpenerButton,
int properties)
Button * windowOpenerButton = 0,
int properties = 0)
throw ();
/**
@ -189,8 +138,8 @@ class GuiWindow : public WhiteWindow,
* Set the title of the window.
*
* Overrides WhiteWindow::set_title() (inherited from Gtk::Window).
* Adds " - LiveSupport" to the title of the window shown on the
* task bar.
* Adds the application's title to the title of the window shown
* on the task bar.
*
* @param title the title of the window.
*/

View File

@ -78,7 +78,6 @@ LiveModeWindow :: LiveModeWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
throw ()
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::liveModeWindowTitleImage,
windowOpenerButton)
{
try {

View File

@ -66,9 +66,8 @@ LoginWindow :: LoginWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
throw ()
: GuiWindow(gLiveSupport,
bundle,
"",
windowOpenerButton,
0 /* not resizable */),
WhiteWindow::isNotResizable),
loggedIn(false)
{
this->gLiveSupport = gLiveSupport;

View File

@ -74,8 +74,7 @@ OptionsWindow :: OptionsWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
Button * windowOpenerButton)
throw ()
: GuiWindow(gLiveSupport,
bundle,
"",
bundle,
windowOpenerButton),
backupView(0)
{

View File

@ -63,8 +63,7 @@ RestoreBackupWindow :: RestoreBackupWindow (
Ptr<const Glib::ustring>::Ref fileName)
throw ()
: GuiWindow(gLiveSupport,
bundle,
""),
bundle),
fileName(fileName),
currentState(AsyncState::pendingState)
{

View File

@ -69,7 +69,6 @@ SchedulePlaylistWindow :: SchedulePlaylistWindow (
throw ()
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::schedulerWindowTitleImage,
windowOpenerButton),
playlist(playlist)
{

View File

@ -76,7 +76,6 @@ SchedulerWindow :: SchedulerWindow (
throw (XmlRpcException)
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::schedulerWindowTitleImage,
windowOpenerButton)
{
Ptr<WidgetFactory>::Ref wf = WidgetFactory::getInstance();

View File

@ -83,7 +83,6 @@ ScratchpadWindow :: ScratchpadWindow (
throw ()
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::scratchpadWindowTitleImage,
windowOpenerButton)
{
Ptr<WidgetFactory>::Ref widgetFactory = WidgetFactory::getInstance();

View File

@ -85,7 +85,6 @@ SearchWindow :: SearchWindow (Ptr<GLiveSupport>::Ref gLiveSupport,
throw ()
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::searchWindowTitleImage,
windowOpenerButton)
{
Gtk::Box * searchWhereBox = constructSearchWhereBox();

View File

@ -76,7 +76,6 @@ SimplePlaylistManagementWindow :: SimplePlaylistManagementWindow (
throw ()
: GuiWindow(gLiveSupport,
bundle,
WidgetConstants::playlistsWindowTitleImage,
windowOpenerButton),
isPlaylistModified(false)
{

View File

@ -73,7 +73,6 @@ UploadFileWindow :: UploadFileWindow (
throw ()
: GuiWindow(gLiveSupport,
bundle,
"",
windowOpenerButton),
fileType(invalidType)
{

View File

@ -133,7 +133,7 @@ root:table
simplePlaylistManagementWindow:table
{
windowTitle:string { "Simple Playlist Management" }
windowTitle:string { "Edit Playlist" }
startColumnLabel:string { "Start" }
titleColumnLabel:string { "Title" }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 664 B