background: Move preview to CcBackgroundPreview

This is a dedicate class to generate the preview. Not only
it renders the pixbuf of the wallpaper, but it also adds
lock screen or desktop frames on top of it. It also monitors
the time to keep the lock screen preview label always updated.
This commit is contained in:
Georges Basile Stavracas Neto 2019-05-22 18:55:17 -03:00
parent 205bfb9446
commit 5b214404a1
No known key found for this signature in database
GPG key ID: 886C17EE170D1385
8 changed files with 542 additions and 156 deletions

View file

@ -3,5 +3,7 @@
<gresource prefix="/org/gnome/control-center/background"> <gresource prefix="/org/gnome/control-center/background">
<file preprocess="xml-stripblanks">cc-background-chooser.ui</file> <file preprocess="xml-stripblanks">cc-background-chooser.ui</file>
<file preprocess="xml-stripblanks">cc-background-panel.ui</file> <file preprocess="xml-stripblanks">cc-background-panel.ui</file>
<file preprocess="xml-stripblanks">cc-background-preview.ui</file>
<file>preview.css</file>
</gresource> </gresource>
</gresources> </gresources>

View file

@ -31,6 +31,7 @@
#include "cc-background-chooser.h" #include "cc-background-chooser.h"
#include "cc-background-item.h" #include "cc-background-item.h"
#include "cc-background-preview.h"
#include "cc-background-resources.h" #include "cc-background-resources.h"
#include "cc-background-xml.h" #include "cc-background-xml.h"
@ -61,10 +62,8 @@ struct _CcBackgroundPanel
GCancellable *copy_cancellable; GCancellable *copy_cancellable;
GtkWidget *bottom_hbox; GtkWidget *bottom_hbox;
GtkWidget *desktop_drawing_area; CcBackgroundPreview *desktop_preview;
GtkWidget *desktop_slide_image; CcBackgroundPreview *lock_screen_preview;
GtkWidget *lock_drawing_area;
GtkWidget *lock_slide_image;
GtkWidget *spinner; GtkWidget *spinner;
GtkWidget *chooser; GtkWidget *chooser;
@ -72,41 +71,6 @@ struct _CcBackgroundPanel
CC_PANEL_REGISTER (CcBackgroundPanel, cc_background_panel) CC_PANEL_REGISTER (CcBackgroundPanel, cc_background_panel)
static GdkPixbuf*
get_or_create_cached_pixbuf (CcBackgroundPanel *panel,
GtkWidget *widget,
CcBackgroundItem *background)
{
const gint preview_width = 309;
const gint preview_height = 168;
gint scale_factor;
GdkPixbuf *pixbuf;
scale_factor = gtk_widget_get_scale_factor (widget);
pixbuf = cc_background_item_get_frame_thumbnail (background,
panel->thumb_factory,
preview_width,
preview_height,
scale_factor,
-2, TRUE);
return pixbuf;
}
static void
update_display_preview (CcBackgroundPanel *panel,
GtkWidget *widget,
cairo_t *cr,
CcBackgroundItem *background)
{
g_autoptr(GdkPixbuf) pixbuf = NULL;
pixbuf = get_or_create_cached_pixbuf (panel, widget, background);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
}
static CcBackgroundItem * static CcBackgroundItem *
get_current_background (CcBackgroundPanel *panel, get_current_background (CcBackgroundPanel *panel,
GSettings *settings) GSettings *settings)
@ -122,7 +86,6 @@ update_preview (CcBackgroundPanel *panel,
GSettings *settings, GSettings *settings,
CcBackgroundItem *item) CcBackgroundItem *item)
{ {
gboolean changes_with_time;
CcBackgroundItem *current_background; CcBackgroundItem *current_background;
current_background = get_current_background (panel, settings); current_background = get_current_background (panel, settings);
@ -138,23 +101,10 @@ update_preview (CcBackgroundPanel *panel,
cc_background_item_load (current_background, NULL); cc_background_item_load (current_background, NULL);
} }
changes_with_time = FALSE;
if (current_background)
{
changes_with_time = cc_background_item_changes_with_time (current_background);
}
if (settings == panel->settings) if (settings == panel->settings)
{ cc_background_preview_set_item (panel->desktop_preview, current_background);
gtk_widget_set_visible (panel->desktop_slide_image, changes_with_time);
gtk_widget_queue_draw (panel->desktop_drawing_area);
}
else else
{ cc_background_preview_set_item (panel->lock_screen_preview, current_background);
gtk_widget_set_visible (panel->lock_slide_image, changes_with_time);
gtk_widget_queue_draw (panel->lock_drawing_area);
}
} }
static gchar * static gchar *
@ -439,24 +389,6 @@ on_chooser_background_chosen_cb (CcBackgroundChooser *chooser,
set_background (self, self->lock_settings, item); set_background (self, self->lock_settings, item);
} }
static gboolean
on_preview_draw_cb (GtkWidget *widget,
cairo_t *cr,
CcBackgroundPanel *panel)
{
update_display_preview (panel, widget, cr, panel->current_background);
return TRUE;
}
static gboolean
on_lock_preview_draw_cb (GtkWidget *widget,
cairo_t *cr,
CcBackgroundPanel *panel)
{
update_display_preview (panel, widget, cr, panel->current_lock_background);
return TRUE;
}
static const char * static const char *
cc_background_panel_get_help_uri (CcPanel *panel) cc_background_panel_get_help_uri (CcPanel *panel)
{ {
@ -500,6 +432,7 @@ cc_background_panel_class_init (CcBackgroundPanelClass *klass)
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
g_type_ensure (CC_TYPE_BACKGROUND_CHOOSER); g_type_ensure (CC_TYPE_BACKGROUND_CHOOSER);
g_type_ensure (CC_TYPE_BACKGROUND_PREVIEW);
panel_class->get_help_uri = cc_background_panel_get_help_uri; panel_class->get_help_uri = cc_background_panel_get_help_uri;
@ -509,14 +442,10 @@ cc_background_panel_class_init (CcBackgroundPanelClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/background/cc-background-panel.ui"); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/background/cc-background-panel.ui");
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, bottom_hbox); gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, bottom_hbox);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, desktop_drawing_area); gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, desktop_preview);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, desktop_slide_image); gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, lock_screen_preview);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, lock_drawing_area);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPanel, lock_slide_image);
gtk_widget_class_bind_template_callback (widget_class, on_chooser_background_chosen_cb); gtk_widget_class_bind_template_callback (widget_class, on_chooser_background_chosen_cb);
gtk_widget_class_bind_template_callback (widget_class, on_lock_preview_draw_cb);
gtk_widget_class_bind_template_callback (widget_class, on_preview_draw_cb);
} }
static void static void

View file

@ -25,13 +25,10 @@
<property name="valign">center</property> <property name="valign">center</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkDrawingArea" id="desktop_drawing_area"> <object class="CcBackgroundPreview" id="desktop_preview">
<property name="width_request">310</property>
<property name="height_request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="draw" handler="on_preview_draw_cb" object="CcBackgroundPanel" swapped="no" />
</object> </object>
</child> </child>
<child> <child>
@ -39,37 +36,6 @@
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="spacing">12</property> <property name="spacing">12</property>
<child>
<object class="GtkBox" id="hbox2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="margin_top">12</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage" id="desktop_slide_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">slideshow-symbolic</property>
</object>
</child>
<child>
<object class="GtkLabel" id="strut">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label"> </property>
</object>
</child>
<child>
<object class="GtkLabel" id="desktop_slide_label">
<property name="visible" bind-source="desktop_slide_image" bind-property="visible" bind-flags="default|sync-create" />
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="This refers to a slideshow background">Changes throughout the day</property>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>
@ -82,51 +48,11 @@
<property name="halign">start</property> <property name="halign">start</property>
<property name="valign">center</property> <property name="valign">center</property>
<child> <child>
<object class="GtkDrawingArea" id="lock_drawing_area"> <object class="CcBackgroundPreview" id="lock_screen_preview">
<property name="width_request">310</property>
<property name="height_request">170</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="is-lock-screen">True</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="draw" handler="on_lock_preview_draw_cb" object="CcBackgroundPanel" swapped="no" />
</object>
</child>
<child>
<object class="GtkBox" id="bottom-hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="spacing">12</property>
<child>
<object class="GtkBox" id="hbox1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">center</property>
<property name="margin_top">12</property>
<property name="spacing">2</property>
<child>
<object class="GtkImage" id="lock_slide_image">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="icon_name">slideshow-symbolic</property>
</object>
</child>
<child>
<object class="GtkLabel" id="strut1">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label"> </property>
</object>
</child>
<child>
<object class="GtkLabel">
<property name="visible" bind-source="lock_slide_image" bind-property="visible" bind-flags="default|sync-create" />
<property name="can_focus">False</property>
<property name="xalign">0</property>
<property name="label" translatable="yes" comments="This refers to a slideshow background">Changes throughout the day</property>
</object>
</child>
</object>
</child>
</object> </object>
</child> </child>
</object> </object>

View file

@ -0,0 +1,322 @@
/* cc-background-preview.c
*
* Copyright 2019 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#include "cc-background-preview.h"
struct _CcBackgroundPreview
{
GtkBox parent;
GtkLabel *desktop_clock_label;
GtkWidget *drawing_area;
GtkLabel *lock_screen_label;
GtkStack *stack;
GnomeDesktopThumbnailFactory *thumbnail_factory;
CcBackgroundItem *item;
GSettings *desktop_settings;
guint lock_screen_time_timeout_id;
gboolean is_lock_screen;
GDateTime *previous_time;
gboolean is_24h_format;
};
G_DEFINE_TYPE (CcBackgroundPreview, cc_background_preview, GTK_TYPE_BOX)
enum
{
PROP_0,
PROP_IS_LOCK_SCREEN,
PROP_ITEM,
N_PROPS
};
static GParamSpec *properties [N_PROPS];
/* Auxiliary methods */
static void
update_lock_screen_label (CcBackgroundPreview *self,
gboolean force)
{
g_autoptr(GDateTime) now = NULL;
g_autofree gchar *label = NULL;
now = g_date_time_new_now_local ();
/* Don't update the label if the hour:minute pair did not change */
if (!force && self->previous_time &&
g_date_time_get_hour (now) == g_date_time_get_hour (self->previous_time) &&
g_date_time_get_minute (now) == g_date_time_get_minute (self->previous_time))
{
return;
}
if (self->is_24h_format)
label = g_date_time_format (now, "%R");
else
label = g_date_time_format (now, "%I:%M %p");
gtk_label_set_label (self->lock_screen_label, label);
gtk_label_set_label (self->desktop_clock_label, label);
g_clear_pointer (&self->previous_time, g_date_time_unref);
self->previous_time = g_steal_pointer (&now);
}
static void
update_clock_format (CcBackgroundPreview *self)
{
g_autofree gchar *clock_format = NULL;
gboolean is_24h_format;
clock_format = g_settings_get_string (self->desktop_settings, "clock-format");
is_24h_format = g_strcmp0 (clock_format, "24h") == 0;
if (is_24h_format != self->is_24h_format)
{
self->is_24h_format = is_24h_format;
update_lock_screen_label (self, TRUE);
}
}
static void
load_custom_css (CcBackgroundPreview *self)
{
g_autoptr(GtkCssProvider) provider = NULL;
/* use custom CSS */
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (provider, "/org/gnome/control-center/background/preview.css");
gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
GTK_STYLE_PROVIDER (provider),
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
static gboolean
update_clock_cb (gpointer data)
{
CcBackgroundPreview *self = data;
update_lock_screen_label (self, FALSE);
return G_SOURCE_CONTINUE;
}
static void
start_monitor_time (CcBackgroundPreview *self)
{
if (self->lock_screen_time_timeout_id > 0)
return;
self->lock_screen_time_timeout_id = g_timeout_add_seconds (1,
update_clock_cb,
self);
}
static void
stop_monitor_time (CcBackgroundPreview *self)
{
if (self->lock_screen_time_timeout_id > 0)
{
g_source_remove (self->lock_screen_time_timeout_id);
self->lock_screen_time_timeout_id = 0;
}
}
/* Callbacks */
static gboolean
on_preview_draw_cb (GtkWidget *widget,
cairo_t *cr,
CcBackgroundPreview *self)
{
g_autoptr(GdkPixbuf) pixbuf = NULL;
GtkAllocation allocation;
gint scale_factor;
if (!self->item)
return FALSE;
scale_factor = gtk_widget_get_scale_factor (widget);
gtk_widget_get_allocation (widget, &allocation);
pixbuf = cc_background_item_get_frame_thumbnail (self->item,
self->thumbnail_factory,
allocation.width,
allocation.height,
scale_factor,
0,
TRUE);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
return TRUE;
}
/* GObject overrides */
static void
cc_background_preview_finalize (GObject *object)
{
CcBackgroundPreview *self = (CcBackgroundPreview *)object;
g_clear_object (&self->desktop_settings);
g_clear_object (&self->item);
g_clear_object (&self->thumbnail_factory);
g_clear_pointer (&self->previous_time, g_date_time_unref);
stop_monitor_time (self);
G_OBJECT_CLASS (cc_background_preview_parent_class)->finalize (object);
}
static void
cc_background_preview_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
CcBackgroundPreview *self = CC_BACKGROUND_PREVIEW (object);
switch (prop_id)
{
case PROP_IS_LOCK_SCREEN:
g_value_set_boolean (value, self->is_lock_screen);
break;
case PROP_ITEM:
g_value_set_object (value, self->item);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
cc_background_preview_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
CcBackgroundPreview *self = CC_BACKGROUND_PREVIEW (object);
switch (prop_id)
{
case PROP_IS_LOCK_SCREEN:
self->is_lock_screen = g_value_get_boolean (value);
gtk_stack_set_visible_child_name (self->stack,
self->is_lock_screen ? "lock" : "desktop");
if (self->is_lock_screen)
start_monitor_time (self);
else
stop_monitor_time (self);
break;
case PROP_ITEM:
cc_background_preview_set_item (self, g_value_get_object (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
static void
cc_background_preview_class_init (CcBackgroundPreviewClass *klass)
{
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
object_class->finalize = cc_background_preview_finalize;
object_class->get_property = cc_background_preview_get_property;
object_class->set_property = cc_background_preview_set_property;
properties[PROP_IS_LOCK_SCREEN] = g_param_spec_boolean ("is-lock-screen",
"Lock screen",
"Whether the preview is of the lock screen",
FALSE,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
properties[PROP_ITEM] = g_param_spec_object ("item",
"Item",
"Background item",
CC_TYPE_BACKGROUND_ITEM,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_properties (object_class, N_PROPS, properties);
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/control-center/background/cc-background-preview.ui");
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, desktop_clock_label);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, drawing_area);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, lock_screen_label);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, stack);
gtk_widget_class_bind_template_callback (widget_class, on_preview_draw_cb);
}
static void
cc_background_preview_init (CcBackgroundPreview *self)
{
gtk_widget_init_template (GTK_WIDGET (self));
self->thumbnail_factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
self->desktop_settings = g_settings_new ("org.gnome.desktop.interface");
g_signal_connect_object (self->desktop_settings,
"changed::clock-format",
G_CALLBACK (update_clock_format),
self,
G_CONNECT_SWAPPED);
update_clock_format (self);
load_custom_css (self);
}
CcBackgroundItem*
cc_background_preview_get_item (CcBackgroundPreview *self)
{
g_return_val_if_fail (CC_IS_BACKGROUND_PREVIEW (self), NULL);
return self->item;
}
void
cc_background_preview_set_item (CcBackgroundPreview *self,
CcBackgroundItem *item)
{
g_return_if_fail (CC_IS_BACKGROUND_PREVIEW (self));
g_return_if_fail (CC_IS_BACKGROUND_ITEM (item));
if (!g_set_object (&self->item, item))
return;
gtk_widget_queue_draw (self->drawing_area);
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ITEM]);
}

View file

@ -0,0 +1,36 @@
/* cc-background-preview.h
*
* Copyright 2019 Georges Basile Stavracas Neto <georges.stavracas@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*/
#pragma once
#include <gtk/gtk.h>
#include "cc-background-item.h"
G_BEGIN_DECLS
#define CC_TYPE_BACKGROUND_PREVIEW (cc_background_preview_get_type())
G_DECLARE_FINAL_TYPE (CcBackgroundPreview, cc_background_preview, CC, BACKGROUND_PREVIEW, GtkBox)
CcBackgroundItem* cc_background_preview_get_item (CcBackgroundPreview *self);
void cc_background_preview_set_item (CcBackgroundPreview *self,
CcBackgroundItem *item);
G_END_DECLS

View file

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
<template class="CcBackgroundPreview" parent="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="expand">False</property>
<property name="width-request">384</property>
<property name="height-request">208</property>
<style>
<class name="frame" />
</style>
<child>
<object class="GtkOverlay">
<property name="visible">True</property>
<property name="can-focus">False</property>
<!-- Wallpaper -->
<child>
<object class="GtkDrawingArea" id="drawing_area">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="expand">True</property>
<signal name="draw" handler="on_preview_draw_cb" object="CcBackgroundPreview" swapped="no" />
</object>
</child>
<!-- Desktop / Lock Screen widgets -->
<child type="overlay">
<object class="GtkStack" id="stack">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="expand">True</property>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="shadow-type">none</property>
<property name="valign">start</property>
<style>
<class name="desktop-preview" />
</style>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Activities</property>
</object>
</child>
<child type="center">
<object class="GtkLabel" id="desktop_clock_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
</object>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">4</property>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">network-wireless-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">audio-volume-high-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
<child>
<object class="GtkImage">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="icon-name">battery-low-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
</object>
<packing>
<property name="pack-type">end</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="name">desktop</property>
</packing>
</child>
<child>
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="shadow-type">none</property>
<child>
<object class="GtkLabel" id="lock_screen_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="expand">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
</object>
</child>
<style>
<class name="lock-screen-preview" />
</style>
</object>
<packing>
<property name="name">lock</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</template>
</interface>

View file

@ -62,6 +62,8 @@ common_sources += gnome.mkenums(
resource_data = files( resource_data = files(
'cc-background-chooser.ui', 'cc-background-chooser.ui',
'cc-background-panel.ui', 'cc-background-panel.ui',
'cc-background-preview.ui',
'preview.css',
) )
common_sources += gnome.compile_resources( common_sources += gnome.compile_resources(
@ -81,6 +83,7 @@ sources = common_sources + files(
'cc-background-grilo-miner.c', 'cc-background-grilo-miner.c',
'cc-background-item.c', 'cc-background-item.c',
'cc-background-panel.c', 'cc-background-panel.c',
'cc-background-preview.c',
'cc-background-xml.c', 'cc-background-xml.c',
) )

View file

@ -0,0 +1,27 @@
frame.desktop-preview {
min-height: 10px;
padding: 0 4px;
background-color: black;
}
frame.desktop-preview image {
color: white;
}
frame.desktop-preview label {
color: white;
font-weight: bold;
font-size: 6px;
}
frame.lock-screen-preview {
border: solid rgba(0, 0, 0, 0.33);
border-width: 10px 0 0 0;
}
frame.lock-screen-preview label {
color: white;
font-weight: bold;
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);
font-size: 1.2em;
}