summaryrefslogtreecommitdiff
path: root/dash
diff options
authorMarco Trevisan (Treviño) <mail@3v1n0.net>2014-03-20 04:24:26 +0100
committerMarco Trevisan (Treviño) <mail@3v1n0.net>2014-03-20 04:24:26 +0100
commit7f2517160f6154a2fb650c50f7de311d68d2dc7d (patch)
tree4bd616c8878bcaf21256252fa254572fa1fc4c5d /dash
parent120f4fa0185db4f5339f8a01773013f077d3d307 (diff)
ResultRendererTile: use cairo device scaling for scaling elements
(bzr r3725.6.1)
Diffstat (limited to 'dash')
-rw-r--r--dash/ResultRendererHorizontalTile.cpp45
-rw-r--r--dash/ResultRendererTile.cpp31
2 files changed, 38 insertions, 38 deletions
diff --git a/dash/ResultRendererHorizontalTile.cpp b/dash/ResultRendererHorizontalTile.cpp
index 12068f929..77f6a8624 100644
--- a/dash/ResultRendererHorizontalTile.cpp
+++ b/dash/ResultRendererHorizontalTile.cpp
@@ -37,14 +37,14 @@ namespace unity
{
namespace
{
-RawPixel const CARD_VIEW_PADDING = 4_em;
-RawPixel const CARD_VIEW_ICON_SIZE = 64_em;
-RawPixel const CARD_VIEW_ICON_TEXT_GAP = 10_em;
-RawPixel const CARD_VIEW_WIDTH = 277_em;
-RawPixel const CARD_VIEW_HEIGHT = 74_em;
-RawPixel const CARD_VIEW_HIGHLIGHT_CORNER_RADIUS = 2_em;
-RawPixel const CARD_VIEW_ICON_OUTLINE_WIDTH = 1_em;
-RawPixel const CARD_VIEW_TEXT_LINE_SPACING = 0_em;
+const RawPixel CARD_VIEW_PADDING = 4_em;
+const RawPixel CARD_VIEW_ICON_SIZE = 64_em;
+const RawPixel CARD_VIEW_ICON_TEXT_GAP = 10_em;
+const RawPixel CARD_VIEW_WIDTH = 277_em;
+const RawPixel CARD_VIEW_HEIGHT = 74_em;
+const RawPixel CARD_VIEW_ICON_OUTLINE_WIDTH = 1_em;
+const int CARD_VIEW_HIGHLIGHT_CORNER_RADIUS = 2;
+const int CARD_VIEW_TEXT_LINE_SPACING = 0;
void RenderTexture(nux::GraphicsEngine& GfxContext,
int x,
@@ -234,6 +234,7 @@ nux::BaseTexture* ResultRendererHorizontalTile::DrawHighlight(std::string const&
int width, int height)
{
nux::CairoGraphics cairo_graphics(CAIRO_FORMAT_ARGB32, width, height);
+ cairo_surface_set_device_scale(cairo_graphics.GetSurface(), scale_, scale_);
cairo_t* cr = cairo_graphics.GetInternalContext();
cairo_scale(cr, 1.0f, 1.0f);
@@ -249,7 +250,7 @@ nux::BaseTexture* ResultRendererHorizontalTile::DrawHighlight(std::string const&
1.0f,
0.0f,
0.0f,
- CARD_VIEW_HIGHLIGHT_CORNER_RADIUS.CP(scale_),
+ CARD_VIEW_HIGHLIGHT_CORNER_RADIUS,
width,
height,
false);
@@ -262,6 +263,7 @@ nux::BaseTexture* ResultRendererHorizontalTile::DrawNormal(std::string const& te
int width, int height)
{
nux::CairoGraphics cairo_graphics(CAIRO_FORMAT_ARGB32, width, height);
+ cairo_surface_set_device_scale(cairo_graphics.GetSurface(), scale_, scale_);
cairo_t* cr = cairo_graphics.GetInternalContext();
cairo_scale(cr, 1.0f, 1.0f);
@@ -277,9 +279,9 @@ nux::BaseTexture* ResultRendererHorizontalTile::DrawNormal(std::string const& te
1.0f,
0.0f,
0.0f,
- CARD_VIEW_HIGHLIGHT_CORNER_RADIUS.CP(scale_),
- width,
- height,
+ CARD_VIEW_HIGHLIGHT_CORNER_RADIUS,
+ width/scale_,
+ height/scale_,
false);
cairo_fill(cr);
@@ -308,8 +310,9 @@ void ResultRendererHorizontalTile::LoadText(Result const& row)
CARD_VIEW_ICON_TEXT_GAP.CP(scale_),
CARD_VIEW_HEIGHT.CP(scale_) -
2 * CARD_VIEW_PADDING.CP(scale_));
+ cairo_surface_set_device_scale(_cairoGraphics.GetSurface(), scale_, scale_);
- cairo_t* cr = _cairoGraphics.GetContext();
+ cairo_t* cr = _cairoGraphics.GetInternalContext();
PangoLayout* layout = NULL;
PangoFontDescription* desc = NULL;
@@ -328,12 +331,12 @@ void ResultRendererHorizontalTile::LoadText(Result const& row)
pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_END);
- pango_layout_set_spacing(layout, CARD_VIEW_TEXT_LINE_SPACING.CP(scale_) * PANGO_SCALE);
- pango_layout_set_width(layout, (CARD_VIEW_WIDTH.CP(scale_) -
- CARD_VIEW_ICON_SIZE.CP(scale_) -
- 2 * CARD_VIEW_ICON_OUTLINE_WIDTH.CP(scale_) -
- 2 * CARD_VIEW_PADDING.CP(scale_) -
- CARD_VIEW_ICON_TEXT_GAP.CP(scale_)) * PANGO_SCALE);
+ pango_layout_set_spacing(layout, CARD_VIEW_TEXT_LINE_SPACING * PANGO_SCALE);
+ pango_layout_set_width(layout, (CARD_VIEW_WIDTH -
+ CARD_VIEW_ICON_SIZE -
+ 2 * CARD_VIEW_ICON_OUTLINE_WIDTH -
+ 2 * CARD_VIEW_PADDING -
+ CARD_VIEW_ICON_TEXT_GAP) * PANGO_SCALE);
pango_layout_set_height(layout, -4);
@@ -356,7 +359,7 @@ void ResultRendererHorizontalTile::LoadText(Result const& row)
PangoRectangle logRect = {0, 0, 0, 0};
pango_layout_get_extents(layout, NULL, &logRect);
if (pango_layout_get_line_count(layout) < 4)
- offset = ((CARD_VIEW_HEIGHT.CP(scale_) - 2 * CARD_VIEW_PADDING.CP(scale_)) - (logRect.height / PANGO_SCALE)) / 2.0;
+ offset = ((CARD_VIEW_HEIGHT - 2 * CARD_VIEW_PADDING) - (logRect.height / PANGO_SCALE)) / 2.0;
cairo_move_to(cr, 0.0f, offset);
pango_cairo_show_layout(cr, layout);
@@ -364,8 +367,6 @@ void ResultRendererHorizontalTile::LoadText(Result const& row)
pango_font_description_free(desc);
g_object_unref(layout);
- cairo_destroy(cr);
-
TextureContainer *container = row.renderer<TextureContainer*>();
if (container)
container->text = texture_ptr_from_cairo_graphics(_cairoGraphics);
diff --git a/dash/ResultRendererTile.cpp b/dash/ResultRendererTile.cpp
index 5075565df..b6181edcf 100644
--- a/dash/ResultRendererTile.cpp
+++ b/dash/ResultRendererTile.cpp
@@ -39,12 +39,11 @@ DECLARE_LOGGER(logger, "unity.dash.results");
namespace
{
-
-std::string const DEFAULT_GICON = ". GThemedIcon text-x-preview";
-RawPixel const PADDING = 6_em;
-RawPixel const SPACING = 10_em;
-RawPixel const FONT_SIZE = 10_em;
-int const FONT_MULTIPLIER = 1024;
+const std::string DEFAULT_GICON = ". GThemedIcon text-x-preview";
+const RawPixel PADDING = 6_em;
+const RawPixel SPACING = 10_em;
+const int FONT_SIZE = 10;
+const int FONT_MULTIPLIER = 1024;
char const REPLACEMENT_CHAR = '?';
float const CORNER_HIGHTLIGHT_RADIUS = 2.0f;
@@ -198,6 +197,7 @@ void ResultRendererTile::Render(nux::GraphicsEngine& GfxContext,
nux::BaseTexture* ResultRendererTile::DrawHighlight(std::string const& texid, int width, int height)
{
nux::CairoGraphics cairo_graphics(CAIRO_FORMAT_ARGB32, width, height);
+ cairo_surface_set_device_scale(cairo_graphics.GetSurface(), scale_, scale_);
cairo_t* cr = cairo_graphics.GetInternalContext();
cairo_scale(cr, 1.0f, 1.0f);
@@ -214,8 +214,8 @@ nux::BaseTexture* ResultRendererTile::DrawHighlight(std::string const& texid, in
0.0f,
0.0f,
CORNER_HIGHTLIGHT_RADIUS,
- width,
- height,
+ width/scale_,
+ height/scale_,
false);
cairo_fill(cr);
@@ -282,9 +282,8 @@ void ResultRendererTile::LoadIcon(Result const& row)
RawPixel const tile_highlight_width = style.GetTileIconHightlightWidth();
RawPixel const tile_highlight_height = style.GetTileIconHightlightHeight();
- std::string icon_hint(row.icon_hint);
- std::string icon_name;
- icon_name = !icon_hint.empty() ? icon_hint : DEFAULT_GICON;
+ std::string const& icon_hint = row.icon_hint;
+ std::string const& icon_name = !icon_hint.empty() ? icon_hint : DEFAULT_GICON;
glib::Object<GIcon> icon(g_icon_new_for_string(icon_name.c_str(), NULL));
TextureContainer* container = row.renderer<TextureContainer*>();
@@ -292,7 +291,6 @@ void ResultRendererTile::LoadIcon(Result const& row)
if (container)
{
TextureCache& cache = TextureCache::GetDefault();
-
BaseTexturePtr texture_prelight(cache.FindTexture("resultview_prelight",
tile_highlight_width.CP(scale_),
tile_highlight_height.CP(scale_),
@@ -370,6 +368,7 @@ nux::BaseTexture* ResultRendererTile::CreateTextureCallback(std::string const& t
}
nux::CairoGraphics cairo_graphics(CAIRO_FORMAT_ARGB32, pixbuf_width, pixbuf_height);
+ cairo_surface_set_device_scale(cairo_graphics.GetSurface(), scale_, scale_);
cairo_t* cr = cairo_graphics.GetInternalContext();
cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
@@ -482,8 +481,9 @@ void ResultRendererTile::LoadText(Result const& row)
nux::CairoGraphics _cairoGraphics(CAIRO_FORMAT_ARGB32,
tile_width.CP(scale_) - (PADDING.CP(scale_) * 2),
tile_height.CP(scale_) - tile_size.CP(scale_) - SPACING.CP(scale_));
+ cairo_surface_set_device_scale(_cairoGraphics.GetSurface(), scale_, scale_);
- cairo_t* cr = _cairoGraphics.GetContext();
+ cairo_t* cr = _cairoGraphics.GetInternalContext();
PangoLayout* layout = NULL;
PangoFontDescription* desc = NULL;
@@ -498,14 +498,14 @@ void ResultRendererTile::LoadText(Result const& row)
cairo_set_font_options(cr, gdk_screen_get_font_options(screen));
layout = pango_cairo_create_layout(cr);
desc = pango_font_description_from_string(font.Value());
- pango_font_description_set_size (desc, FONT_SIZE.CP(scale_) * FONT_MULTIPLIER);
+ pango_font_description_set_size (desc, FONT_SIZE * FONT_MULTIPLIER);
pango_layout_set_font_description(layout, desc);
pango_layout_set_alignment(layout, PANGO_ALIGN_CENTER);
pango_layout_set_wrap(layout, PANGO_WRAP_WORD_CHAR);
pango_layout_set_ellipsize(layout, PANGO_ELLIPSIZE_START);
- pango_layout_set_width(layout, (tile_width.CP(scale_) - (PADDING.CP(scale_) * 2))* PANGO_SCALE);
+ pango_layout_set_width(layout, (tile_width - (PADDING * 2))* PANGO_SCALE);
pango_layout_set_height(layout, -2);
// FIXME bug #1239381
@@ -536,7 +536,6 @@ void ResultRendererTile::LoadText(Result const& row)
// clean up
pango_font_description_free(desc);
g_object_unref(layout);
- cairo_destroy(cr);
TextureContainer *container = row.renderer<TextureContainer*>();
if (container)