diff --git a/bar.lua b/bar.lua
index 8eab9b1..76f4bca 100644
--- a/bar.lua
+++ b/bar.lua
@@ -25,13 +25,12 @@ local function set_position(self)
end
-- Draw the menu background
-local function bg_draw(self, w, cr, width, height)
+local function bg_draw(self, context, cr, width, height)--w, cr, width, height)
cr:save()
cr:set_source(color(self._data.bg))
cr:rectangle(0,0,width,height)
cr:fill()
cr:restore()
- self._draw(self, w, cr, width, height)
end
local function proxy_draw(_,...)
@@ -49,8 +48,9 @@ local function setup_drawable(data)
local private_data = internal.private_data
internal.layout = internal.layout_func or wibox.layout.fixed.horizontal()
- internal.layout._draw = internal.layout.draw
- internal.layout.draw = bg_draw
+
+ --internal.layout.draw = bg_draw --TODO Dead code?
+
internal.layout._data = data
if internal.layout.set_spacing and data.spacing then
diff --git a/base.lua b/base.lua
index 54c9d9e..d653015 100644
--- a/base.lua
+++ b/base.lua
@@ -213,8 +213,8 @@ local function add_widget(data,widget,args)
args = args or {}
data._internal.has_widget = true
widget._fit = widget.fit
- widget.fit = function(self,width,height)
- local w,h = widget._fit(self,width or 1, height or 1)
+ widget.fit = function(self,context,width,height)
+ local w,h = widget._fit(self, context, width or 1, height or 1)
return args.width or w,args.height or h
end
@@ -239,7 +239,7 @@ local function add_widget(data,widget,args)
data._internal.items[#data._internal.items+1] = item
data:emit_signal("widget::added",item,widget)
if data.visible then
- local fit_w,fit_h = data._internal.layout:fit(9999,9999)
+ local fit_w,fit_h = data._internal.layout:fit({dpi=96}, 9999,9999)
data.width = data._internal.width or fit_w
data.height = fit_h
end
@@ -262,18 +262,21 @@ end
-- Sum all widgets height and width
local function get_widget_fit_sum(data)
local h,w = 0,0
+ -- TODO query this from the layout itself
for k,v in ipairs(data._internal.widgets) do
- local fw,fh = v.widget:fit(9999,9999)
+ local fw,fh = v.widget:fit({dpi=96},9999,9999)
w,h = w + fw,h + fh
end
return w,h
end
local function get_widget_fit_width_sum(data)
+ -- TODO query this from the layout itself
return get_widget_fit_sum(data)
end
local function get_widget_fit_height_sum(data)
+ -- TODO query this from the layout itself
local w,h = get_widget_fit_sum(data)
return h
end
@@ -406,7 +409,7 @@ print(beautiful.menu_border_color)
data.set_visible = function(_,value)
private_data.visible = value
if value then
- local fit_w,fit_h = data._internal.layout:fit(9999,9999)
+ local fit_w,fit_h = data._internal.layout:fit({dpi=96}, 9999,9999)
data.width = internal.width or fit_w
data.height = fit_h
elseif data._tmp_menu and data._current_item then
diff --git a/box.lua b/box.lua
index a001a0e..edbafb2 100644
--- a/box.lua
+++ b/box.lua
@@ -7,8 +7,8 @@ local function set_position(data)
local s = data.screen or capi.mouse.screen
s = s > capi.screen.count() and 1 or s
local geom = capi.screen[s].geometry
- data.wibox.x = geom.x + (geom.width/2) - data.width/2
- data.wibox.y = geom.y + (geom.height/2) - data.height/2
+ data.wibox.x = math.ceil(geom.x + (geom.width/2) - data.width/2)
+ data.wibox.y = math.ceil(geom.y + (geom.height/2) - data.height/2)
end
local function new(args)
diff --git a/context.lua b/context.lua
index 448f53d..07e81d0 100644
--- a/context.lua
+++ b/context.lua
@@ -43,7 +43,7 @@ local function set_geometry_real(data)
local geo = data._internal._next_geometry
if geo then
for k,v in pairs(geo) do
- data.wibox[k] = v
+ data.wibox[k] = math.ceil(v)
end
end
data._internal._next_geometry = nil
diff --git a/dock.lua b/dock.lua
index 5e469f2..69d9967 100644
--- a/dock.lua
+++ b/dock.lua
@@ -78,7 +78,9 @@ local function mask(rotate,width,height,radius,offset,anti,bg,fg)
end
-- Do not draw over the boder, ever
-local function dock_draw(self, w, cr, width, height)
+local function dock_draw(self, context, cr, width, height)
+
+ local w = context.wibox
-- Generate the border surface
if not self.mask or self.mask_hash ~= width*1000+height then
@@ -89,7 +91,7 @@ local function dock_draw(self, w, cr, width, height)
cr:save()
--Draw the border
- self.__draw(self, w, cr, width, height)
+ --self.__draw(self, context, cr, width, height)
cr:set_source_surface(self.mask)
cr:paint()
cr:restore()
@@ -103,15 +105,15 @@ local function align_wibox(w,direction,screen)
local src_geom = capi.screen[screen].geometry
local scr_size = src_geom[offset] + (src_geom[axis] - w[axis]) /2
- w[offset] = scr_size
+ w[offset] = math.ceil(scr_size)
if direction == "left" then
- w.x = src_geom.x
+ w.x = math.ceil(src_geom.x)
elseif direction == "right" then
- w.x = src_geom.x + src_geom.width - w.width
+ w.x = math.ceil(src_geom.x + src_geom.width - w.width)
elseif direction == "bottom" then
- w.y = src_geom.y+src_geom.height-w.height
+ w.y = math.ceil(src_geom.y+src_geom.height-w.height)
else
- w.y = src_geom.y
+ w.y = math.ceil(src_geom.y)
end
end
@@ -163,7 +165,7 @@ local function adapt_size(data,w,h,screen)
local max = get_max_size(data,screen)
-- Get the current size, then compare and ajust
- local fit_w,fit_h = data._internal.layout:fit(20,9999,true)
+ local fit_w,fit_h = data._internal.layout:fit({dpi=96},20,9999,true)
-- Get the number of items minus the number of widgets
-- This can be used to approximate the number of pixel to remove
@@ -323,13 +325,13 @@ local function setup_drawable(data)
data.get_x = function() return 0 end
data.get_y = function() return 0 end
data.get_width = function()
- return internal.w and internal.w.width or data._internal.layout:fit(9999,9999,true)
+ return internal.w and internal.w.width or data._internal.layout:fit({dpi=96},9999,9999,true)
end
data.get_height = function()
if internal.orientation == "horizontal" then
return beautiful.default_height
else
- local w,h = internal.layout.fit(internal.layout,9999,9999)
+ local w,h = internal.layout.fit(internal.layout,{dpi=96},9999,9999)
return h
end
end
@@ -355,7 +357,7 @@ end
local function setup_item(data,item,args)
-- Add widgets
- local f = (data._internal.layout.setup_item) or (layout.vertical.setup_item)
+ local f = (data._internal.layout.setup_item) or (vertical.setup_item)
f(data._internal.layout,data,item,args)
-- Buttons
@@ -397,7 +399,7 @@ local function new(args)
args.internal.layout_func = orientation == "vertical" and vertical or horizontal
args.layout = args.layout or args.internal.layout_func
args.item_style = args.item_style or item.style
- args.item_layout = args.item_layout or item_layout
+-- args.item_layout = args.item_layout or item_layout
args[length_inv] = args[length_inv] or 40
-- Create the dock
diff --git a/impl/alttab/init.lua b/impl/alttab/init.lua
index 7926264..7677f62 100644
--- a/impl/alttab/init.lua
+++ b/impl/alttab/init.lua
@@ -126,8 +126,8 @@ local function new(args)
if not auto_release then
local pref_bg = wibox.widget.background()
local pref_l = wibox.layout.align.horizontal()
- pref_bg.fit = function(s,w,h)
- local w2,h2 = wibox.widget.background.fit(s,w,h)
+ pref_bg.fit = function(s,c,w,h)
+ local w2,h2 = wibox.widget.background.fit(s,c,w,h)
return w2,currentMenu.item_height
end
pref_bg:set_bg(currentMenu.bg_alternate)
@@ -136,13 +136,13 @@ local function new(args)
pref_l:set_first(tb2)
pref_bg:set_widget(pref_l)
local pref_menu,pref_menu_l = radical.bar{item_style=radical.item.style.basic}
- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
+-- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
pref_menu:add_item{text="Exclusive"}
- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
+-- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
pref_menu:add_item{text="12 clients"}
- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
+-- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
pref_menu:add_item{text="All Screens"}
- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
+-- pref_menu:add_widget(radical.widgets.separator(pref_menu,radical.widgets.separator.VERTICAL))
pref_l:set_third(pref_menu_l)
currentMenu:add_prefix_widget(pref_bg)
@@ -186,7 +186,7 @@ local function new(args)
l:add( button_group({client = v, field = "sticky" , focus = false, checked = function() return v.sticky end, onclick = function() v.sticky = not v.sticky end }))
l:add( button_group({client = v, field = "ontop" , focus = false, checked = function() return v.ontop end, onclick = function() v.ontop = not v.ontop end }))
l:add( button_group({client = v, field = "close" , focus = false, checked = function() return false end, onclick = function() v:kill() end }))
- l.fit = function (s,w,h) return 5*h,h end
+ l.fit = function (s,c,w,h) return 5*h,h end
end
local underlays = reload_underlay(v)
diff --git a/impl/taglist/init.lua b/impl/taglist/init.lua
index 59cd04d..35b486d 100644
--- a/impl/taglist/init.lua
+++ b/impl/taglist/init.lua
@@ -50,11 +50,13 @@ module.buttons = { [1] = awful.tag.viewonly,
-local function index_draw(self,w, cr, width, height)
+local function index_draw(self, context, cr, width, height)
cr:save()
cr:set_source(color(self._color or beautiful.taglist_fg_prefix or beautiful.fg_normal))
local d = wibox.widget.textbox._draw or wibox.widget.textbox.draw
- d(self,wibox, cr, width, height)
+ if d then
+ d(self,context, cr, width, height)
+ end
cr:restore()
end
diff --git a/init.lua b/init.lua
index ffa91f2..1557002 100644
--- a/init.lua
+++ b/init.lua
@@ -35,13 +35,13 @@ local function set_menu(self,menu,button)
return bt
end
-local function _underlay_draw(self,w, cr, width, height)
+local function _underlay_draw(self, context, cr, width, height)
cr:save()
local udl = underlay.draw(self._underlay,{height=height,style = self._underlay_style,bg=self._underlay_color})
cr:set_source_surface(udl,width-udl:get_width()-3)
cr:paint_with_alpha(self._underlay_alpha or beautiful.underlay_alpha or 0.7)
cr:restore()
- self._draw_underlay(self,w, cr, width, height)
+ self._draw_underlay(self, context, cr, width, height)
end
local function set_underlay(self,udl,args)
diff --git a/item/layout/horizontal.lua b/item/layout/horizontal.lua
index cf46662..23262bb 100644
--- a/item/layout/horizontal.lua
+++ b/item/layout/horizontal.lua
@@ -100,7 +100,7 @@ function module:setup_sub_menu_arrow(item,data)
if (item._private_data.sub_menu_f or item._private_data.sub_menu_m) and not data.disable_submenu_icon then
if not sub_arrow then
sub_arrow = wibox.widget.imagebox() --TODO, make global
- sub_arrow.fit = function(box, w, h) return (sub_arrow._image and sub_arrow._image:get_width() or 0),item.height end
+ sub_arrow.fit = function(box, context,w, h) return (sub_arrow._image and sub_arrow._image:get_width() or 0),item.height end
sub_arrow:set_image( beautiful.menu_submenu_icon )
end
return sub_arrow
@@ -157,15 +157,15 @@ function module.setup_event(data,item,widget)
end
-- Use all the space, let "align_fit" compute the right size
-local function textbox_fit(box,w,h)
+local function textbox_fit(box,context,w,h)
return w,h
end
-- Force the width or compute the minimum space
-local function align_fit(box,w,h)
+local function align_fit(box,context,w,h)
local mar = util.table.join(box._data.item_style.margins,box._data.default_item_margins)
if box._item.width then return box._item.width - box._data.item_style.margins.LEFT - box._data.item_style.margins.RIGHT,h end
- return box.first:fit(w,h)+wibox.widget.textbox.fit(box.second,w,h)+box.third:fit(w,h),h
+ return box.first:fit(context,w,h)+wibox.widget.textbox.fit(box.second,context,w,h)+box.third:fit(context,w,h),h
end
-- Create the actual widget
@@ -217,11 +217,11 @@ local function create_item(item,data,args)
-- Text
local tb = wibox.widget.textbox()
tb.fit = data._internal.text_fit or textbox_fit
- tb.draw = function(self,w, cr, width, height)
+ tb.draw = function(self, context, cr, width, height)
if item.underlay then
module.paint_underlay(data,item,cr,width,height)
end
- wibox.widget.textbox.draw(self,w, cr, width, height)
+ wibox.widget.textbox.draw(self, context, cr, width, height)
end
tb:set_text(item.text)
item.set_text = function (_,value)
diff --git a/item/layout/icon.lua b/item/layout/icon.lua
index ecdd510..1366ec8 100644
--- a/item/layout/icon.lua
+++ b/item/layout/icon.lua
@@ -22,11 +22,11 @@ local function icon_fit(data,...)
end
-local function icon_draw(self,w, cr, width, height)
- local w,h = wibox.widget.imagebox.fit(self,width,height)
+local function icon_draw(self, context, cr, width, height)
+ local w,h = wibox.widget.imagebox.fit(self,context,width,height)
cr:save()
cr:translate((width-w)/2,0)
- wibox.widget.imagebox.draw(self,w, cr, width, height)
+ wibox.widget.imagebox.draw(self, context, cr, width, height)
cr:restore()
end
@@ -57,10 +57,10 @@ local function create_item(item,data,args)
if data.fkeys_prefix == true then
local pref = wibox.widget.textbox()
- pref.draw = function(self,w, cr, width, height)
+ pref.draw = function(self, context, cr, width, height)
cr:set_source(color(beautiful.fg_normal))
cr:paint()
- wibox.widget.textbox.draw(self,w, cr, width, height)
+ wibox.widget.textbox.draw(self, context, cr, width, height)
end
l:add(pref)
m:set_left ( 0 )
@@ -78,16 +78,16 @@ local function create_item(item,data,args)
l:add(text_w)
if item._private_data.sub_menu_f or item._private_data.sub_menu_m then
local subArrow = wibox.widget.imagebox() --TODO, make global
- subArrow.fit = function(box, w, h) return subArrow._image:get_width(),item.height end
+ subArrow.fit = function(box, context, w, h) return subArrow._image:get_width(),item.height end
subArrow:set_image( beautiful.menu_submenu_icon )
lr:add(subArrow)
end
- bg.fit = function(box,w,h)
+ bg.fit = function(box, context, w,h)
-- args.y = data.height-h-data.margins.top --TODO dead code?
if data._internal.layout.item_fit then
- return data._internal.layout.item_fit(data,item,box,w,h)
+ return data._internal.layout.item_fit(data,item,box,contextw,h)
else
- return wibox.widget.background.fit(box,w,h)
+ return wibox.widget.background.fit(box,context, w,h)
end
return 0,0
end
diff --git a/item/layout/notification.lua b/item/layout/notification.lua
index f45fd22..b47a91a 100644
--- a/item/layout/notification.lua
+++ b/item/layout/notification.lua
@@ -75,7 +75,7 @@ function module:setup_sub_menu_arrow(item,data)
if item._private_data.sub_menu_f or item._private_data.sub_menu_m then
if not sub_arrow then
sub_arrow = wibox.widget.imagebox() --TODO, make global
- sub_arrow.fit = function(box, w, h) return sub_arrow._image:get_width(),item.height end
+ sub_arrow.fit = function(box, context, w, h) return sub_arrow._image:get_width(),item.height end
sub_arrow:set_image( beautiful.menu_submenu_icon )
end
return sub_arrow
@@ -132,15 +132,15 @@ function module.setup_event(data,item,widget)
end
-- Use all the space, let "align_fit" compute the right size
-local function textbox_fit(box,w,h)
- local w2,h2 = wibox.widget.textbox.fit(box,w,h)
+local function textbox_fit(box,context,w,h)
+ local w2,h2 = wibox.widget.textbox.fit(box,context,w,h)
return w,h2
end
-- Force the width or compute the minimum space
-local function align_fit(box,w,h)
+local function align_fit(box,context,w,h)
if box._item.width then return box._item.width - box._data.item_style.margins.LEFT - box._data.item_style.margins.RIGHT,h end
- return box.first:fit(w,h)+wibox.widget.textbox.fit(box.second,w,h)+box.third:fit(w,h),h
+ return box.first:fit(context,w,h)+wibox.widget.textbox.fit(box.second,context,w,h)+box.third:fit(context,w,h),h
end
-- Create the actual widget
@@ -207,11 +207,11 @@ local function create_item(item,data,args)
-- Text
local tb4 = wibox.widget.textbox()
- tb4.draw = function(self,w, cr, width, height)
+ tb4.draw = function(self, context, cr, width, height)
if item.underlay then
module.paint_underlay(data,item,cr,width,height)
end
- wibox.widget.textbox.draw(self,w, cr, width, height)
+ wibox.widget.textbox.draw(self, context, cr, width, height)
end
item.set_text = function (_,value)
@@ -225,7 +225,7 @@ local function create_item(item,data,args)
item:set_text(item.text or "")
local tb2 = wibox.widget.textbox()
tb2:set_text("alternate")
- tb2.fit = function(s,w,h)
+ tb2.fit = function(s,context,w,h)
return w,h
end
diff --git a/item/style/arrow_3d.lua b/item/style/arrow_3d.lua
index 123e904..b9b6723 100644
--- a/item/style/arrow_3d.lua
+++ b/item/style/arrow_3d.lua
@@ -28,7 +28,7 @@ local c4 = color("#3b4249dd")
local padding = 1
local p2 = 2
-local function widget_draw23(self, w, cr, width, height)
+local function widget_draw23(self, context, cr, width, height)
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
@@ -62,7 +62,10 @@ local function widget_draw23(self, w, cr, width, height)
create_path(cr,1,height,1)
cr:stroke()
cr:restore()
- self.__drawbasic(self,w, cr, width, height)
+
+ if self.__drawbasic then
+ self.__drawbasic(self, context, cr, width, height)
+ end
end
local function new_set_bg(self,bg)
diff --git a/item/style/arrow_alt.lua b/item/style/arrow_alt.lua
index f36b175..f53c073 100644
--- a/item/style/arrow_alt.lua
+++ b/item/style/arrow_alt.lua
@@ -76,8 +76,8 @@ module.get_beg_arrow = function(args)
return img
end
-local function draw_real(self, w, cr, width, height)
--- wibox.widget.background.draw(self, w, cr, width, height)
+local function draw_real(self, context, cr, width, height)
+-- wibox.widget.background.draw(self, context, cr, width, height)
cr:save()
-- This item style require negative padding, this is a little dangerous to
@@ -94,9 +94,15 @@ local function draw_real(self, w, cr, width, height)
cr:reset_clip()
cr:fill()
cr:restore()
- self._draw(self, w, cr, width, height)
- self.widget:draw(w, cr, width, height)
+ if self._draw then
+ self._draw(self, context, cr, width, height)
+ end
+
+ if self.widget.draw then
+ self.widget:draw(context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/item/style/arrow_prefix.lua b/item/style/arrow_prefix.lua
index adddf22..481a249 100644
--- a/item/style/arrow_prefix.lua
+++ b/item/style/arrow_prefix.lua
@@ -15,7 +15,7 @@ local module = {
}
}
-local function prefix_draw(self, w, cr, width, height)
+local function prefix_draw(self, context, cr, width, height)
cr:save()
-- This item style require negative padding, this is a little dangerous to
@@ -32,21 +32,23 @@ local function prefix_draw(self, w, cr, width, height)
cr:reset_clip()
cr:fill()
cr:restore()
- self._draw(self, w, cr, width, height)
+ if self._draw then
+ self._draw(self, context, cr, width, height)
+ end
end
-local function prefix_fit(box,w,h)
- local width,height = box._fit(box,w,h)
+local function prefix_fit(box,context,w,h)
+ local width,height = box._fit(box,context,w,h)
return width + h/2 + h/6,height
end
-local function suffix_fit(box,w,h)
- local width,height = box._fit(box,w,h)
+local function suffix_fit(box,context,w,h)
+ local width,height = box._fit(box,context,w,h)
return width + h/2 + h/6,height
end
-local function widget_draw(self, w, cr, width, height)
- self:_drawprefix(w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
+ self:_drawprefix(context, cr, width, height)
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/item/style/arrow_single.lua b/item/style/arrow_single.lua
index 475efb4..686841e 100644
--- a/item/style/arrow_single.lua
+++ b/item/style/arrow_single.lua
@@ -16,7 +16,7 @@ local module = {
}
-local function suffix_draw(self, w, cr, width, height)
+local function suffix_draw(self, context, cr, width, height)
cr:save()
cr:move_to(height/2,0)
cr:line_to(width-height/2,0)
@@ -27,7 +27,11 @@ local function suffix_draw(self, w, cr, width, height)
cr:line_to(height/2,0)
cr:close_path()
cr:clip()
- wibox.widget.background.draw(self, w, cr, width, height)
+
+ if wibox.widget.background.draw then
+ wibox.widget.background.draw(self, context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/item/style/basic.lua b/item/style/basic.lua
index 62973bb..e411fd7 100644
--- a/item/style/basic.lua
+++ b/item/style/basic.lua
@@ -2,6 +2,7 @@ local setmetatable = setmetatable
local print = print
local pairs=pairs
local base = require( "radical.base" )
+local wibox = require("wibox" )
local module = {
margins = {
@@ -12,8 +13,11 @@ local module = {
}
}
-local function widget_draw23(self, w, cr, width, height)
- self.__drawbasic(self,w, cr, width, height)
+local function widget_draw23(self, context, cr, width, height)
+ if wibox.widget.background.draw then
+ wibox.widget.background.draw(self, context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
@@ -23,11 +27,7 @@ end
local function draw(item,args)
local args = args or {}
- if not item.widget._overlay_init and not item.widget._draw then
- item.widget.__drawbasic = item.widget.draw
- item.widget.draw = widget_draw23
- item.widget._overlay_init = true
- end
+ item.widget.draw = widget_draw23
local state = item.state or {}
local current_state = state._current_key or nil
diff --git a/item/style/classic.lua b/item/style/classic.lua
index a13261e..c5422c8 100644
--- a/item/style/classic.lua
+++ b/item/style/classic.lua
@@ -3,6 +3,7 @@ local base = require( "radical.base" )
local color = require( "gears.color" )
local cairo = require( "lgi" ).cairo
local beautiful = require( "beautiful" )
+local wibox = require("wibox" )
local print = print
local module = {
@@ -27,8 +28,12 @@ local function gen(item_height,bg_color,border_color)
return cairo.Pattern.create_for_surface(img)
end
-local function widget_draw(self, w, cr, width, height)
- self:_draw2(w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
+
+ if wibox.widget.background.draw then
+ wibox.widget.background.draw(self, context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
@@ -39,11 +44,7 @@ local function draw(item,args)
local args = args or {}
local col = args.color
- if not item.widget._overlay_init then
- item.widget._draw2 = item.widget.draw
- item.widget.draw = widget_draw
- item.widget._overlay_init = true
- end
+ item.widget.draw = widget_draw
local ih = item.height or 1
if not focussed or not focussed[ih] then
diff --git a/item/style/holo.lua b/item/style/holo.lua
index 7071258..0b8de9b 100644
--- a/item/style/holo.lua
+++ b/item/style/holo.lua
@@ -32,7 +32,7 @@ local function gen(width,height,bg_color,border_color, pos)
return cairo.Pattern.create_for_surface(img)
end
-local function widget_draw(self, w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
local state = self._item.state or {}
local current_state = state._current_key or ""
@@ -56,7 +56,10 @@ local function widget_draw(self, w, cr, width, height)
self._last_state = current_state
end
- self:_drawrounded(w, cr, width, height)
+ if self._drawrounded then
+ self:_drawrounded(context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/item/style/init.lua b/item/style/init.lua
index 7b1abda..b087b73 100644
--- a/item/style/init.lua
+++ b/item/style/init.lua
@@ -15,4 +15,4 @@ return {
arrow_3d = require("radical.item.style.arrow_3d" ),
slice_prefix = require("radical.item.style.slice_prefix" ),
line_3d = require("radical.item.style.line_3d" ),
-}
\ No newline at end of file
+}
diff --git a/item/style/line_3d.lua b/item/style/line_3d.lua
index 987b710..eec359b 100644
--- a/item/style/line_3d.lua
+++ b/item/style/line_3d.lua
@@ -15,8 +15,8 @@ local module = {
}
}
-local function widget_draw(self, w, cr, width, height)
- self.__drawbasic(self,w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
+ self.__drawbasic(self,context, cr, width, height)
cr:set_source(self.col1)
cr:rectangle(0,3,1,height-6)
cr:fill()
@@ -37,7 +37,7 @@ local function draw(item,args)
item.widget.draw = widget_draw
item.widget._overlay_init = true
item.widget._item = item
-
+
-- Build the 2 item border colors, this item_style doesn't support gradient
-- or patterns
item.widget.col1 = color(item.item_border_color or item.border_color or beautiful.border_color)
diff --git a/item/style/rounded.lua b/item/style/rounded.lua
index 0694de6..e651dcc 100644
--- a/item/style/rounded.lua
+++ b/item/style/rounded.lua
@@ -3,6 +3,7 @@ local math = math
local base = require( "radical.base" )
local color = require( "gears.color" )
local cairo = require( "lgi" ).cairo
+local wibox = require("wibox" )
local print = print
local module = {
@@ -45,7 +46,7 @@ local function gen(width,height,bg_color,border_color,item,shadow)
return cairo.Pattern.create_for_surface(img)
end
-local function widget_draw(self, w, cr, width, height,shadow)
+local function widget_draw(self, context, cr, width, height,shadow)
local item = self._item
local state = item.state or {}
local current_state = state._current_key or ""
@@ -69,14 +70,17 @@ local function widget_draw(self, w, cr, width, height,shadow)
self._last_state = current_state
end
- self:_drawrounded(w, cr, width, height)
+ if wibox.widget.background.draw then
+ wibox.widget.background.draw(self, context, cr, width, height)
+ end
+
local overlay = item and item.overlay
if overlay then
overlay(item._menu,item,cr,width,height)
end
end
-local function draw_width_shadow(self, w, cr, width, height)
+local function draw_width_shadow(self, context, cr, width, height)
cr:save()
cr:reset_clip()
@@ -90,7 +94,7 @@ local function draw_width_shadow(self, w, cr, width, height)
end
cr:restore()
- widget_draw(self, w, cr, width, height,true)
+ widget_draw(self, context, cr, width, height,true)
end
local function common(item,args)
@@ -110,9 +114,9 @@ end
local function draw(item,args)
local args = args or {}
+ item.widget.draw = widget_draw
+
if not item.widget._overlay_init then
- item.widget._drawrounded = item.widget.draw
- item.widget.draw = widget_draw
item.widget._overlay_init = true
item.widget._item = item
end
@@ -124,9 +128,9 @@ end
local function shadow(item,args)
local args = args or {}
+ item.widget.draw = draw_width_shadow
+
if not item.widget._overlay_init then
- item.widget._drawrounded = item.widget.draw
- item.widget.draw = draw_width_shadow
item.widget._overlay_init = true
item.widget._item = item
end
diff --git a/item/style/slice_prefix.lua b/item/style/slice_prefix.lua
index f219077..e3342d4 100644
--- a/item/style/slice_prefix.lua
+++ b/item/style/slice_prefix.lua
@@ -15,7 +15,7 @@ local module = {
}
}
-local function prefix_draw(self, w, cr, width, height)
+local function prefix_draw(self, context, cr, width, height)
cr:save()
-- This item style require negative padding, this is a little dangerous to
@@ -30,21 +30,27 @@ local function prefix_draw(self, w, cr, width, height)
cr:reset_clip()
cr:fill()
cr:restore()
- self._draw(self, w, cr, width, height)
+
+ if self._draw then
+ self._draw(self, context, cr, width, height)
+ end
end
-local function prefix_fit(box,w,h)
- local width,height = box._fit(box,w,h)
+local function prefix_fit(box,context,w,h)
+ local width,height = box._fit(box,context,w,h)
return width + h/2,height
end
-local function suffix_fit(box,w,h)
- local width,height = box._fit(box,w,h)
+local function suffix_fit(box,context,w,h)
+ local width,height = box._fit(box,context,w,h)
return width + h/2 + h/6,height
end
-local function widget_draw(self, w, cr, width, height)
- self:_drawprefix(w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
+ if self._drawprefix then
+ self:_drawprefix(context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/item/style/subtle.lua b/item/style/subtle.lua
index d4326b4..970411b 100644
--- a/item/style/subtle.lua
+++ b/item/style/subtle.lua
@@ -39,7 +39,7 @@ local function gen(w,h,bg_color,border_color)
return cairo.Pattern.create_for_surface(img)
end
-local function widget_draw(self, w, cr, width, height)
+local function widget_draw(self, context, cr, width, height)
local state = self._item.state or {}
local current_state = state._current_key or ""
@@ -63,7 +63,10 @@ local function widget_draw(self, w, cr, width, height)
self._last_state = current_state
end
- self:_drawrounded(w, cr, width, height)
+ if self._drawrounded then
+ self:_drawrounded(context, cr, width, height)
+ end
+
local overlay = self._item and self._item.overlay
if overlay then
overlay(self._item._menu,self._item,cr,width,height)
diff --git a/layout/horizontal.lua b/layout/horizontal.lua
index 0f90481..c4f9efb 100644
--- a/layout/horizontal.lua
+++ b/layout/horizontal.lua
@@ -109,7 +109,7 @@ function module:setup_item(data,item,args)
text_w:set_markup(value)
end
if data.auto_resize then
- local fit_w,fit_h = text_w:fit(999,9999)
+ local fit_w,fit_h = text_w:fit({dpi=96},999,9999)
local is_largest = item == data._internal.largest_item_h
--TODO find new largest is item is smaller
if not data._internal.largest_item_h_v or data._internal.largest_item_h_v < fit_h then
@@ -144,8 +144,8 @@ local function new(data)
base = require( "radical.base" )
end
local l = wibox.layout.fixed.horizontal()
- l.fit = function(a1,a2,a3,force_values)
- local result,r2 = wibox.layout.fixed.fit(a1,force_values and a2 or 99999,force_values and a3 or 99999)
+ l.fit = function(self,context,w,h,force_values) --TODO use the context instead of extra argument
+ local result,r2 = wibox.layout.fixed.fit(self,context,force_values and w or 99999,force_values and h or 99999)
local w,h
if data.auto_resize and data._internal.largest_item_h then
w,h = data.rowcount*(data.item_width or data.default_width),data._internal.largest_item_h_v > data.item_height and data._internal.largest_item_h_v or data.item_height
diff --git a/layout/vertical.lua b/layout/vertical.lua
index 1e1189d..ab85cd2 100644
--- a/layout/vertical.lua
+++ b/layout/vertical.lua
@@ -55,7 +55,7 @@ end
local function item_fit(data,item,self,width,height)
local w, h = 0,0--item._internal.cache_w or 1,item._internal.cache_h or 1
if data.visible then
- w, h = item._private_data._fit(self,width,height)
+ w, h = item._private_data._fit({},self,{},width,height)
item._internal.pix_cache = {} --Clear the pimap cache
end
@@ -67,7 +67,7 @@ end
local function cache_pixmap(item)
item._internal.pix_cache = {}
item.widget._draw = item.widget.draw
- item.widget.draw = function(self,w, cr, width, height)
+ item.widget.draw = function(self, context, cr, width, height)
if not w.visible or item._hidden then return end
if item._internal.pix_cache[10*width+7*height+(item.selected and 8888 or 999)] then
cr:set_source_surface(item._internal.pix_cache[10*width+7*height+(item.selected and 8888 or 999)])
@@ -75,7 +75,7 @@ local function cache_pixmap(item)
else
local img5 = cairo.ImageSurface.create(cairo.Format.ARGB32, width, height)
local cr5 = cairo.Context(img5)
- item.widget._draw(self,w, cr5, width, height)
+ item.widget._draw(self, context, cr5, width, height)
cr:set_source_surface(img5)
cr:paint()
item._internal.pix_cache[10*width+7*height+(item.selected and 8888 or 999)] = img5
@@ -87,13 +87,13 @@ end
function module:setup_text(item,data,text_w)
local text_w = item._internal.text_w
- text_w.draw = function(self,w, cr, width, height)
+ text_w.draw = function(self,context, cr, width, height)
if item.underlay then
horizontal_item_layout.paint_underlay(data,item,cr,width,height)
end
- wibox.widget.textbox.draw(self,w, cr, width, height)
+ wibox.widget.textbox.draw(self, context, cr, width, height)
end
- text_w.fit = function(self,width,height) return width,height end
+ text_w.fit = function(self,context,width,height) return width,height end
item.set_text = function (_,value)
if data.disable_markup then
@@ -183,7 +183,7 @@ function module:setup_item(data,item,args)
-- Compute the minimum width
if data.auto_resize and item._internal.margin_w then
- local fit_w,fit_h = wibox.layout.margin.fit(item._internal.margin_w,9999,9999)
+ local fit_w = wibox.layout.margin.fit(item._internal.margin_w,{},9999,9999)
local is_largest = item == data._internal.largest_item_w
if fit_w < 1000 and (not data._internal.largest_item_w_v or data._internal.largest_item_w_v < fit_w) then
data._internal.largest_item_w = item
@@ -202,8 +202,8 @@ local function compute_geo(data,width,height,force_values)
local visblerow = data.visible_row_count
- local sw,sh = data._internal.suf_l:fit(9999,9999)
- local pw,ph = data._internal.pref_l:fit(9999,9999)
+ local sw,sh = data._internal.suf_l:fit({dpi=96},9999,9999)
+ local pw,ph = data._internal.pref_l:fit({dpi=96},9999,9999)
if not data._internal.has_widget then
return w,(total and total > 0 and total or visblerow*data.item_height) + ph + sh
else
@@ -217,8 +217,8 @@ local function new(data)
if not base then
base = require( "radical.base" )
end
- local l,real_l = wibox.layout.fixed.vertical(),nil
- real_l = wibox.layout.fixed.vertical()
+ local l = wibox.layout.fixed.vertical()
+ local real_l = wibox.layout.fixed.vertical()
local pref_l,suf_l = wibox.layout.fixed.vertical(),wibox.layout.fixed.vertical()
real_l:add(pref_l)
if data.max_items then
@@ -239,9 +239,9 @@ local function new(data)
suf_l:add(data._internal.scroll_w["down"])
end
end
- real_l.fit = function(a1,a2,a3,force_values)
+ real_l.fit = function(self,context,o_w,o_h,force_values)
if not data.visible then return 1,1 end
- local w,h = compute_geo(data,a2,a3,force_values)
+ local w,h = compute_geo(data,o_w,o_h,force_values)
data:emit_signal("layout_size",w,h)
return w,h
end
@@ -287,7 +287,7 @@ local function new(data)
data:connect_signal("suffix_widget::added",function(_,widget,args)
suf_l:add(widget)
end)
- data._internal.text_fit = function(self,width,height) return width,height end
+ data._internal.text_fit = function(self,context,width,height) return width,height end
return real_l
end
diff --git a/style/arrow.lua b/style/arrow.lua
index a760f68..4e9347e 100644
--- a/style/arrow.lua
+++ b/style/arrow.lua
@@ -189,10 +189,10 @@ local function get_arrow_x(data)
return data._arrow_x
end
--- Draw the border on top of items, prevent sharp corners from messing with the border
-local function draw_border(self,w, cr, width, height)
- -- Draw the widget content
- self.__draw(self,w, cr, width, height)
+-- As the menus have a rounded border, rectangle elements will draw over the
+-- corner border. To fix this, this method re-draw the border on top of the
+-- content
+local function after_draw_children(self, context, cr, width, height)
local data = self._data
-- Create a matrix to rotate the border
@@ -217,7 +217,7 @@ local function draw(data,args)
-- Prevent sharp corners from being over the border
if data._internal.margin then
data._internal.margin.__draw = data._internal.margin.draw
- data._internal.margin.draw = draw_border
+ data._internal.margin.after_draw_children = after_draw_children
if not data._internal.margin._data then
data._internal.margin._data = data
end
diff --git a/style/grouped_3d.lua b/style/grouped_3d.lua
index d38856a..0c36ff0 100644
--- a/style/grouped_3d.lua
+++ b/style/grouped_3d.lua
@@ -23,20 +23,25 @@ local function rounded_rect(cr,x,y,w,h,radius)
cr:restore()
end
-local function draw2(self,w, cr, width, height)
+local function draw2(self, context, cr, width, height)
cr:save()
local mx,my = self.left or 0, self.top or 0
local mw,mh = width - mx - (self.right or 0), height - my - (self.bottom or 0)
rounded_rect(cr,mx,my,mw,mh,6)
local path = cr:copy_path()
cr:clip()
- self.___draw(self,w, cr, width, height)
+
+ if self.___draw then
+ self.___draw(self, context, cr, width, height)
+ end
+
cr:append_path(path)
cr:set_source(color(self.data.border_color))
cr:stroke()
cr:restore()
end
+--TODO unported
local function draw(data)
if not data._internal then return end
diff --git a/tooltip.lua b/tooltip.lua
index c2732d6..e6676c9 100644
--- a/tooltip.lua
+++ b/tooltip.lua
@@ -152,8 +152,8 @@ local function new(widget,text, args)
data.wibox:connect_signal("mouse::leave",hide_tooltip)
local relative_to_parent = rel_parent(data.wibox,args2,args)
- data.wibox.x = args2.x or args.x or relative_to_parent.x or capi.mouse.coords().x - data.wibox.width/2 -5
- data.wibox.y = args2.y or args.y or relative_to_parent.y or ((not vertical) and capi.screen[capi.mouse.screen].geometry.height - 16 - 25 or 16)
+ data.wibox.x = math.floor(args2.x or args.x or relative_to_parent.x or capi.mouse.coords().x - data.wibox.width/2 -5)
+ data.wibox.y = math.floor(args2.y or args.y or relative_to_parent.y or ((not vertical) and capi.screen[capi.mouse.screen].geometry.height - 16 - 25 or 16))
data.wibox.visible = true
if args2.parent and args2.parent.drawable and data.drawable ~= args2.parent.drawable then
data.drawable = args2.parent.drawable
diff --git a/widgets/filter.lua b/widgets/filter.lua
index d87e46f..dd9f750 100644
--- a/widgets/filter.lua
+++ b/widgets/filter.lua
@@ -14,7 +14,7 @@ local function new(data)
bg:set_bg(data.bg_highlight)
bg:set_widget(filter_tb)
filter_tb:set_markup(" ".. data.filter_prefix .." "..data.filter_placeholder)
- filter_tb.fit = function(tb,width,height)
+ filter_tb.fit = function(tb,context,width,height)
return width,data.item_height
end
filter_tb:set_underlay(data.filter_underlay,{alpha=data.filter_underlay_alpha,color=data.filter_underlay_color})
diff --git a/widgets/fkey.lua b/widgets/fkey.lua
index 8bae5e5..0d75497 100644
--- a/widgets/fkey.lua
+++ b/widgets/fkey.lua
@@ -24,7 +24,7 @@ end
local function new(data,item)
local pref = wibox.widget.textbox()
- pref.draw = function(self,w, cr, width, height)
+ pref.draw = function(self, context, cr, width, height)
local padding = height/4
local key = item._internal.f_key
if not keys[height] then
@@ -55,7 +55,7 @@ local function new(data,item)
cr:set_source_surface((key and key > 12 and keys[height][0]) and keys[height][0] or keys[height][key])
cr:paint()
end
- pref.fit = function(self,width,height)
+ pref.fit = function(self,context,width,height)
return max_width,data.item_height
end
pref:set_markup("F11")
diff --git a/widgets/piechart.lua b/widgets/piechart.lua
index a646774..aeadfee 100644
--- a/widgets/piechart.lua
+++ b/widgets/piechart.lua
@@ -38,7 +38,7 @@ local function compute_sum(data)
return ret
end
-local function draw(self, w, cr, width, height)
+local function draw(self, context, cr, width, height)
if not self._data then return end
-- Load from cache
diff --git a/widgets/scroll.lua b/widgets/scroll.lua
index 40b7618..be38c9f 100644
--- a/widgets/scroll.lua
+++ b/widgets/scroll.lua
@@ -50,13 +50,13 @@ local function new(data)
for k,v in ipairs({"up","down"}) do
local ib = wibox.widget.imagebox()
ib:set_image(module[v]())
- ib.fit = function(tb,width,height)
+ ib.fit = function(tb,context,width,height)
if scroll_w.visible == false then
return 0,0
end
return width,data.item_height
end
- ib.draw = function(self,wibox, cr, width, height)
+ ib.draw = function(self, context, cr, width, height)
if width > 0 and height > 0 then
cr:set_source_surface(self._image, width/2 - self._image:get_width()/2, 0)
end
diff --git a/widgets/separator.lua b/widgets/separator.lua
index 6726af0..8d06302 100644
--- a/widgets/separator.lua
+++ b/widgets/separator.lua
@@ -7,7 +7,7 @@ local beautiful = require( "beautiful" )
local module = {HORIZONTAL=1,VERTICAL=2}
-local function draw(self, w, cr, width, height)
+local function draw(self, context, cr, width, height)
cr:save()
cr:set_source(self._color)
if self.direction == module.VERTICAL then
@@ -19,7 +19,7 @@ local function draw(self, w, cr, width, height)
cr:restore()
end
-local function fit(box, w, h)
+local function fit(box, context, w, h)
local direction = box.direction or w > h and module.HORIZONTAL or module.VERTICAL
return direction == module.VERTICAL and 5 or w,direction == module.VERTICAL and h or 5
end
diff --git a/widgets/table.lua b/widgets/table.lua
index dfacf9a..d9642eb 100644
--- a/widgets/table.lua
+++ b/widgets/table.lua
@@ -4,7 +4,7 @@ local color = require("gears.color")
local ipairs = ipairs
local print = print
-local function textbox_draw(self, w, cr, width, height)
+local function textbox_draw(self, context, cr, width, height)
cr:save()
cr:set_source(color(beautiful.menu_border_color or beautiful.border_normal or beautiful.border_color))
cr:rectangle(0,0,width,1)
@@ -12,14 +12,14 @@ local function textbox_draw(self, w, cr, width, height)
cr:stroke()
cr:restore()
cr:set_source(color(beautiful.menu_fg_normal or beautiful.fg_normal))
- wibox.widget.textbox.draw(self, w, cr, width, height)
+ wibox.widget.textbox.draw(self, context, cr, width, height)
end
-local function create_textbox(w,col_c,col,has_v_header,row_height)
+local function create_textbox(context,col_c,col,has_v_header,row_height)
local t = wibox.widget.textbox()
- t.fit = function(s,w2,h)
- local fw,fh = wibox.widget.textbox.fit(s,w2,h)
+ t.fit = function(s,context,w2,h)
+ local fw,fh = wibox.widget.textbox.fit(s,context,w2,h)
return (w2/(col_c+2 - col)),row_height or fh
end
t.draw = textbox_draw
@@ -27,19 +27,19 @@ local function create_textbox(w,col_c,col,has_v_header,row_height)
return t
end
-local function create_h_header(main_l,cols,w,args)
+local function create_h_header(main_l,cols,context,args)
if args.h_header then
local bg = wibox.widget.background()
local row_l = wibox.layout.fixed.horizontal()
bg:set_bg(beautiful.menu_table_bg_header or beautiful.menu_bg_header or beautiful.fg_normal)
bg:set_widget(row_l)
if args.v_header then
- local t = create_textbox(w,cols,1,args.v_header ~= nil,args.row_height)
+ local t = create_textbox(context,cols,1,args.v_header ~= nil,args.row_height)
t:set_markup("--")
row_l:add(t)
end
for i=1,cols do
- local t = create_textbox(w,cols,i+1,args.v_header ~= nil,args.row_height)
+ local t = create_textbox(context,cols,i+1,args.v_header ~= nil,args.row_height)
t:set_markup("".. (args.h_header[i] or "-") .."")
row_l:add(t)
end
@@ -58,9 +58,9 @@ local function new(content,args)
end
local main_l = wibox.layout.fixed.vertical()
local w =200
- main_l.fit = function(self,width,height)
+ main_l.fit = function(self,context,width,height)
w = width
- return wibox.layout.fixed.fit(self,width,height)
+ return wibox.layout.fixed.fit(self,context,width,height)
end
create_h_header(main_l,cols,w,args)