From fcc3d0b59005c76707a36704d483c7da7bd4f58b Mon Sep 17 00:00:00 2001 From: Aire-One Date: Tue, 26 Nov 2019 16:39:50 +0100 Subject: [PATCH] Add an option to draw clients. Change how wibox are drawn to build a more flexible function reusable in the context of clients. Add `clients` option to the template. This new option needs an associative table `{ ['label'] = client }` to work. Where label will be a text rendered on the middle of the client area. Add a new example: `texts/examples/screen/tiled_clients.lua`. --- lib/awful/screen.lua | 2 + tests/examples/screen/template.lua | 31 ++++++++++----- tests/examples/screen/tiled_clients.lua | 53 +++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 tests/examples/screen/tiled_clients.lua diff --git a/lib/awful/screen.lua b/lib/awful/screen.lua index 2684a231..d423ef48 100644 --- a/lib/awful/screen.lua +++ b/lib/awful/screen.lua @@ -483,6 +483,8 @@ end -- * maximized clients -- * floating clients -- +-- @DOC_screen_tiled_clients_EXAMPLE@ +-- -- @property tiled_clients -- @param table The clients list, ordered from top to bottom. diff --git a/tests/examples/screen/template.lua b/tests/examples/screen/template.lua index af9fc2ac..655fbb20 100644 --- a/tests/examples/screen/template.lua +++ b/tests/examples/screen/template.lua @@ -81,6 +81,7 @@ local colors = { tiling_area = "#ff0000", padding_area= "#ff0000", wibar = "#000000", + tiling_client = "#ff0000", } local function draw_area(_, rect, name, offset, highlight) @@ -123,26 +124,29 @@ local function draw_solid_area(_, rect, name, offset, alpha) cr:stroke() end -local function draw_wibar(_, wibar, offset) - draw_solid_area(_, wibar, 'wibar', offset) - - -- Prepare to write on the wibar area +local function write_on_area_middle(rect, text, offset) + -- Prepare to write on the rect area local pctx = PangoCairo.font_map_get_default():create_context() local playout = Pango.Layout.new(pctx) local pdesc = Pango.FontDescription() pdesc:set_absolute_size(11 * Pango.SCALE) playout:set_font_description(pdesc) - -- Write wibar on the bar area - playout.attributes, playout.text = Pango.parse_markup('Wibar', -1, 0) + -- Write 'text' on the rect area + playout.attributes, playout.text = Pango.parse_markup(text, -1, 0) local _, logical = playout:get_pixel_extents() - local dx = (wibar.width*factor - logical.width) / 2 - local dy = (wibar.height*factor - logical.height) / 2 + local dx = (rect.x*factor+offset) + (rect.width*factor - logical.width) / 2 + local dy = (rect.y*factor+offset) + (rect.height*factor - logical.height) / 2 cr:set_source_rgb(0, 0, 0) cr:move_to(dx, dy) cr:show_layout(playout) +end - +local function draw_struct(_, struct, name, offset, label) + draw_solid_area(_, struct, name, offset) + if type(label) == 'string' then + write_on_area_middle(struct, label, offset) + end end local function compute_ruler(_, rect, name) @@ -374,7 +378,14 @@ for k=1, screen.count() do -- Draw the wibar. if args.draw_wibar then - draw_wibar(s, args.draw_wibar, (k-1)*10) + draw_struct(s, args.draw_wibar, 'wibar', (k-1)*10, 'Wibar') + end + + -- Draw clients. + if args.draw_clients then + for label,c in pairs(args.draw_clients) do + draw_struct(s, c, 'tiling_client', (k-1)*10, label) + end end -- Draw the informations. diff --git a/tests/examples/screen/tiled_clients.lua b/tests/examples/screen/tiled_clients.lua new file mode 100644 index 00000000..dceff347 --- /dev/null +++ b/tests/examples/screen/tiled_clients.lua @@ -0,0 +1,53 @@ +--DOC_GEN_IMAGE --DOC_NO_USAGE --DOC_HIDE_ALL + +screen[1]._resize {x = 0, width = 640, height = 480} + + +local awful = { + wibar = require("awful.wibar"), + tag = require("awful.tag"), + tag_layout = require("awful.layout.suit.tile") +} + +function awful.spawn(_, args) + local c = client.gen_fake{} + c:tags({args.tag}) + assert(#c:tags() == 1) + assert(c:tags()[1] == args.tag) +end + +screen[1].padding = { + left = 40, + right = 40, + top = 20, + bottom = 20, +} + +local wibar = awful.wibar { + position = "top", + height = 24, +} + +awful.tag.add("1", { + screen = screen[1], + selected = true, + layout = awful.tag_layout.right, + gap = 5 +}) + +local clients = { + ['client #1'] = client.gen_fake{}, + ['client #2'] = client.gen_fake{}, + ['client #3'] = client.gen_fake{} +} +for _,c in ipairs(clients) do + c:tags{"1"} +end + +return { + factor = 2 , + show_boxes = true, + draw_wibar = wibar, + draw_clients = clients, + display_screen_info = false, +}