Every time I go to take a screenshot I pause at this menu and have to think - “which am I doing”? Can we move “include shadows in window shots” to a configuration somewhere and return to a single menu item?
Just a thought, Andy On Sat, 4 Nov 2017 at 00:45, Carsten Haitzler <[email protected]> wrote: > On Fri, 03 Nov 2017 14:10:28 +0000 Mike Blumenkrantz > <[email protected]> said: > > > On Fri, Nov 3, 2017 at 9:50 AM Carsten Haitzler <[email protected]> > > wrote: > > > > > On Fri, 03 Nov 2017 11:28:28 +0000 Mike Blumenkrantz > > > <[email protected]> said: > > > > > > > I see what you are going for here based on the theme that you have > been > > > > working on, and I think it would be a nice improvement overall to > have > > > this > > > > > > actually it applies to default too.. :) > > > > > > > Nobody cares about the shadows in a theme which has been the default for > > over 5 years :) :) :) :) :) > > > > > > > > > > > sort of feature, but I think that this is not the best way to go > about > > > > it--specifically adding it to the window menu since there are now two > > > > screenshot items, though the general implementation also seems to be > > > > something that would only be used by you since it either adds a large > > > > amount of padding by default or requires the user to trial+error in > order > > > > to achieve the desired results. > > > > > > i just kind of thought i chose a pretty good default that would "do the > > > job 99% > > > of the time anyway"... if that's what you wanted. it does make for much > > > nicer > > > screenshots of specific windows. :) > > > > > > the problem here is we don't actually know the dimensions of the > shadow. > > > it's > > > done outside the object bounds, thus just taking some value is about as > > > good as > > > it gets at this point. well in x11. in wayland we do. but if we > calculated > > > it > > > given current shadows the top padding would be less, bottom more etc. > so > > > you'd > > > want to take the max anyway. > > > > > > > Using edje_object_parts_extends_calc() would yield correct dimensions for > > server-side shadows, and there are themes which have used this to have > > resize trigger based on pointer interaction with the shadow region in > x11. > > i didn't know that had been added. > > > > > I think the better solution for reliably capturing shadows on windows > > > would > > > > be to do something like add a feature for snapshot objects where > setting > > > > the clip to an object under it will restrict it to only being a > snapshot > > > > from image data resulting from that object. Then all window-based > > > > screenshots could automatically be made to capture shadows and do it > > > > accurately. > > > > > > i did indeed try proxies... they ended up blank with no content... > > > (creates an > > > image set src to ec->frame etc. etc.) and that still has the above > "shadow > > > is > > > done outside of object bounds" thing where you can't grab it via a > proxy > > > this > > > way anyway... :( > > > > Snapshot object, not proxy. I've created a task for it. > > https://phab.enlightenment.org/T6312 > > sure. but proxies would be the only way to capture a specific object and > not > everything below it too at this point. :) > > > > > Alternatively, dynamic cropping from e.g., emprint or ephoto could be > > > added > > > > to the base screenshot gui which would be a useful feature for many > > > cases. > > > > > > that was on a list of things to "add later" as it would take more work. > > > also > > > if it were just simply "draw a rect to crop" it's lead to inconsistent > > > padding > > > around windows. to do it well it'd be a bit like the screen select but > you > > > can > > > click on windows, then click and drag handles outside of the window, > maybe > > > with > > > a "add std padding" button with some field with the padding amount to > add > > > around the bounds etc. - definitely more work by a good chunk. > > > > > > what i have done is a very quick and simple solution to having window > shots > > > actually look "nice" with their surrounding decorations and shadow ... > if > > > you > > > want. i kept the non-padded entry because sometimes you don't want > other > > > windows > > > around your to leak into the shot... not the nicest of solutions, but > it's > > > a > > > pretty quick and simple one for now. > > > > > > > I understand why you did it as well as why you did it the way you did, > but > > I disagree with the latter. Having more parameters to an action that only > > extreme power users will ever notice is whatever, but adding extra menu > > items which duplicate the functionality of existing menu items is not > > ideal. The toplevel menu should contain exactly one item for taking > > screenshots of windows, not one for taking screenshots and a second for > > taking slightly larger screenshots. > > wile it doesnt look brilliant my choices are: > > 1. always take a padded screenshot - annoys lots of people who wanted the > window content and ONLY that and they have to now crop in gimp etc. > 2. don't offer padded shots and it's only available to power users who > mess with > bindings and params (effectively the feature may as well not exist then) > 3. offer both options easily and let people choose. > > i don't see an overwhelmingly strong case that people will only want one > or the > other, thus i put in both. i totally see why 2 entries might not be great > ... > but i see few alternatives at this point that are better. > > > > > On Fri, Nov 3, 2017 at 3:18 AM Carsten Haitzler < > [email protected]> > > > > wrote: > > > > > > > > > raster pushed a commit to branch master. > > > > > > > > > > > > > > > > > > > http://git.enlightenment.org/core/enlightenment.git/commit/?id=2be56cd8da7ae656f37f3894c1e5a6f66ff9f4b2 > > > > > > > > > > commit 2be56cd8da7ae656f37f3894c1e5a6f66ff9f4b2 > > > > > Author: Carsten Haitzler (Rasterman) <[email protected]> > > > > > Date: Fri Nov 3 16:16:45 2017 +0900 > > > > > > > > > > shot - add a padded screenshot so it can also grab > > > shadows/surrounds > > > > > > > > > > nice to get a shot that also has the shadows etc. add as menu > and > > > > > param options > > > > > > > > > > @feature > > > > > --- > > > > > src/modules/shot/e_mod_main.c | 89 > > > > > +++++++++++++++++++++++++++++++------------ > > > > > 1 file changed, 65 insertions(+), 24 deletions(-) > > > > > > > > > > diff --git a/src/modules/shot/e_mod_main.c > > > b/src/modules/shot/e_mod_main.c > > > > > index 9929dd6e7..fd0599a25 100644 > > > > > --- a/src/modules/shot/e_mod_main.c > > > > > +++ b/src/modules/shot/e_mod_main.c > > > > > @@ -605,6 +605,7 @@ _save_dialog_show(E_Zone *zone, E_Client *ec, > const > > > > > char *params, void *dst, int > > > > > Evas_Modifier_Mask mask; > > > > > E_Radio_Group *rg; > > > > > int w, h; > > > > > + char smode[128], squal[128], sscreen[128]; > > > > > > > > > > win = elm_win_add(NULL, NULL, ELM_WIN_BASIC); > > > > > > > > > > @@ -768,27 +769,23 @@ _save_dialog_show(E_Zone *zone, E_Client *ec, > > > const > > > > > char *params, void *dst, int > > > > > evas_object_size_hint_min_set(win, w, h); > > > > > evas_object_size_hint_max_set(win, 99999, 99999); > > > > > > > > > > - if (params) > > > > > + if ((params) && > > > > > + (sscanf(params, "%100s %100s %100s", smode, squal, > sscreen) == > > > 3)) > > > > > { > > > > > - char smode[128], squal[128], sscreen[128]; > > > > > - > > > > > - if (sscanf(params, "%100s %100s %100s", smode, squal, > > > sscreen) == > > > > > 3) > > > > > - { > > > > > - screen = -1; > > > > > - if ((zone) && (!strcmp(sscreen, "current"))) screen = > > > > > zone->num; > > > > > - else if (!strcmp(sscreen, "all")) screen = -1; > > > > > - else screen = atoi(sscreen); > > > > > - > > > > > - quality = 90; > > > > > - if (!strcmp(squal, "perfect")) quality = 100; > > > > > - else if (!strcmp(squal, "high")) quality = 90; > > > > > - else if (!strcmp(squal, "medium")) quality = 70; > > > > > - else if (!strcmp(squal, "low")) quality = 50; > > > > > - else quality = atoi(squal); > > > > > - > > > > > - if (!strcmp(smode, "save")) _win_save_cb(NULL, NULL); > > > > > - else if (!strcmp(smode, "share")) > _win_share_cb(NULL, > > > NULL); > > > > > - } > > > > > + screen = -1; > > > > > + if ((zone) && (!strcmp(sscreen, "current"))) screen = > > > zone->num; > > > > > + else if (!strcmp(sscreen, "all")) screen = -1; > > > > > + else screen = atoi(sscreen); > > > > > + > > > > > + quality = 90; > > > > > + if (!strcmp(squal, "perfect")) quality = 100; > > > > > + else if (!strcmp(squal, "high")) quality = 90; > > > > > + else if (!strcmp(squal, "medium")) quality = 70; > > > > > + else if (!strcmp(squal, "low")) quality = 50; > > > > > + else quality = atoi(squal); > > > > > + > > > > > + if (!strcmp(smode, "save")) _win_save_cb(NULL, NULL); > > > > > + else if (!strcmp(smode, "share")) _win_share_cb(NULL, > NULL); > > > > > } > > > > > else > > > > > { > > > > > @@ -832,7 +829,22 @@ _shot_now(E_Zone *zone, E_Client *ec, const > char > > > > > *params) > > > > > } > > > > > else > > > > > { > > > > > - x = ec->x, y = ec->y, w = ec->w, h = ec->h; > > > > > + int pad = 0; > > > > > + > > > > > + if (params) > > > > > + { > > > > > + const char *p = strstr(params, "pad "); > > > > > + > > > > > + if (p) > > > > > + { > > > > > + pad = atoi(p + 4); > > > > > + if (pad < 0) pad = 0; > > > > > + } > > > > > + } > > > > > + x = ec->x - pad; > > > > > + y = ec->y - pad; > > > > > + w = ec->w + (pad * 2); > > > > > + h = ec->h + (pad * 2); > > > > > x = E_CLAMP(x, 0, e_comp->w); > > > > > y = E_CLAMP(y, 0, e_comp->h); > > > > > w = E_CLAMP(w, 1, e_comp->w); > > > > > @@ -876,6 +888,18 @@ _shot_delay_border(void *data) > > > > > return EINA_FALSE; > > > > > } > > > > > > > > > > +static Eina_Bool > > > > > +_shot_delay_border_padded(void *data) > > > > > +{ > > > > > + char buf[128]; > > > > > + > > > > > + border_timer = NULL; > > > > > + snprintf(buf, sizeof(buf), "pad %i", (int)(64 * e_scale)); > > > > > + _shot_now(NULL, data, buf); > > > > > + > > > > > + return EINA_FALSE; > > > > > +} > > > > > + > > > > > static void > > > > > _shot_border(E_Client *ec) > > > > > { > > > > > @@ -884,6 +908,13 @@ _shot_border(E_Client *ec) > > > > > } > > > > > > > > > > static void > > > > > +_shot_border_padded(E_Client *ec) > > > > > +{ > > > > > + if (border_timer) ecore_timer_del(border_timer); > > > > > + border_timer = ecore_timer_loop_add(1.0, > _shot_delay_border_padded, > > > > > ec); > > > > > +} > > > > > + > > > > > +static void > > > > > _shot(E_Zone *zone) > > > > > { > > > > > if (timer) ecore_timer_del(timer); > > > > > @@ -897,13 +928,19 @@ _e_mod_menu_border_cb(void *data, E_Menu *m > > > > > EINA_UNUSED, E_Menu_Item *mi EINA_UN > > > > > } > > > > > > > > > > static void > > > > > +_e_mod_menu_border_padded_cb(void *data, E_Menu *m EINA_UNUSED, > > > > > E_Menu_Item *mi EINA_UNUSED) > > > > > +{ > > > > > + _shot_border_padded(data); > > > > > +} > > > > > + > > > > > +static void > > > > > _e_mod_menu_cb(void *data EINA_UNUSED, E_Menu *m, E_Menu_Item *mi > > > > > EINA_UNUSED) > > > > > { > > > > > if (m->zone) _shot(m->zone); > > > > > } > > > > > > > > > > static void > > > > > -_e_mod_action_border_cb(E_Object *obj EINA_UNUSED, const char > *params > > > > > EINA_UNUSED) > > > > > +_e_mod_action_border_cb(E_Object *obj EINA_UNUSED, const char > *params) > > > > > { > > > > > E_Client *ec; > > > > > > > > > > @@ -914,7 +951,7 @@ _e_mod_action_border_cb(E_Object *obj > EINA_UNUSED, > > > > > const char *params EINA_UNUSE > > > > > ecore_timer_del(border_timer); > > > > > border_timer = NULL; > > > > > } > > > > > - _shot_now(NULL, ec, NULL); > > > > > + _shot_now(NULL, ec, params); > > > > > } > > > > > > > > > > typedef struct > > > > > @@ -985,6 +1022,10 @@ _bd_hook(void *d EINA_UNUSED, E_Client *ec) > > > > > e_menu_item_label_set(mi, _("Take Shot")); > > > > > e_util_menu_item_theme_icon_set(mi, "screenshot"); > > > > > e_menu_item_callback_set(mi, _e_mod_menu_border_cb, ec); > > > > > + mi = e_menu_item_new_relative(m, mi); > > > > > + e_menu_item_label_set(mi, _("Take Padded Shot")); > > > > > + e_util_menu_item_theme_icon_set(mi, "screenshot"); > > > > > + e_menu_item_callback_set(mi, _e_mod_menu_border_padded_cb, ec); > > > > > } > > > > > > > > > > static void > > > > > @@ -1032,7 +1073,7 @@ e_modapi_init(E_Module *m) > > > > > border_act->func.go = _e_mod_action_border_cb; > > > > > e_action_predef_name_set(N_("Window : Actions"), N_("Take > > > Shot"), > > > > > "border_shot", NULL, > > > > > - "syntax: [share|save > > > > > perfect|high|medium|low|QUALITY all|current]", 1); > > > > > + "syntax: [share|save > > > > > perfect|high|medium|low|QUALITY all|current] [pad N]", 1); > > > > > } > > > > > maug = e_int_menus_menu_augmentation_add_sorted > > > > > ("main/2", _("Take Screenshot"), _e_mod_menu_add, NULL, > NULL, > > > NULL); > > > > > > > > > > -- > > > > > > > > > > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > > Check out the vibrant tech community on one of the world's most > > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > > > _______________________________________________ > > > > enlightenment-devel mailing list > > > > [email protected] > > > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > > > > > > > > > > > -- > > > ------------- Codito, ergo sum - "I code, therefore I am" > -------------- > > > Carsten Haitzler - [email protected] > > > > > > > > > -- > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > Carsten Haitzler - [email protected] > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > enlightenment-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > -- http://andywilliams.me http://ajwillia.ms ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
