Hi, No I don’t have an alternative proposal. It’s really have the cognitive load on the menu or move the choice to a config. I’m really surprised this is something you choose between very often - I’m curious, what is the reason for one vs the other when you take your shot?
I’d genuinely be very surprised if > 10% of our users use both of these option regularly - I had imagined that most people prefer either one or the other. Andy On Fri, 19 Jan 2018 at 13:23, Carsten Haitzler <ras...@rasterman.com> wrote: > On Fri, 19 Jan 2018 09:36:44 +0000 Andrew Williams <a...@andywilliams.me> > said: > > > 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? > > that would force me to very regularly keep switching this config back and > forth > then take a shot. maybe you only ever use one, but i use both very often. > > so to save you ... maybe 0.5s of thought each time, you'd cause others > like me > 10-20 seconds of work to switch a setting back and forth very possibly each > time. i don't see this as an even trade at all. > > do you have a better solution? if your other option is "make a config > option to > enable or disable this menu item" then i think from a user-interface > usability > standpoint things become really bad as you have a feature that is > essentially > undiscoverable as you have to switch a checkbox somewhere else to enable > another option here. that should only be done in drastic cases such as > security > or safety cases where selecting the wrong item can have drastic > consequences > and so you must hide things to avoid these even despite the extra effort. > > it could be one item and then a dialog to select amount of padding, but > it'd > then be an extra 2 or 3 clicks (a slider, or drag a box around, then hit > ok) > which would address something like "it's a fixed amount - please make it > variable so i can avoid the effort of cropping again in gimp" which would > make > sense to me, so this would in fact do the opposite of addressing your > issue and > make you spend even more time. > > do you have a solution that removes this 0.5 seconds of thought (which is > probably what it takes, at least i'm in the ballpark i think), and doesn't > cost > others as much ore more time, or doesn't just remove cost in the menu but > add > it elsewhere later (in a dialog)? > > > Just a thought, > > Andy > > On Sat, 4 Nov 2017 at 00:45, Carsten Haitzler <ras...@rasterman.com> > wrote: > > > > > On Fri, 03 Nov 2017 14:10:28 +0000 Mike Blumenkrantz > > > <michael.blumenkra...@gmail.com> said: > > > > > > > On Fri, Nov 3, 2017 at 9:50 AM Carsten Haitzler < > ras...@rasterman.com> > > > > wrote: > > > > > > > > > On Fri, 03 Nov 2017 11:28:28 +0000 Mike Blumenkrantz > > > > > <michael.blumenkra...@gmail.com> 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 < > > > ras...@rasterman.com> > > > > > > wrote: > > > > > > > > > > > > > raster pushed a commit to branch master. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > http://git.enlightenment.org/core/enlightenment.git/commit/?id=2be56cd8da7ae656f37f3894c1e5a6f66ff9f4b2 > > > > > > > > > > > > > > commit 2be56cd8da7ae656f37f3894c1e5a6f66ff9f4b2 > > > > > > > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> > > > > > > > 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 > > > > > > enlightenment-devel@lists.sourceforge.net > > > > > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > > > > > > > > > > > > > > > > > > > -- > > > > > ------------- Codito, ergo sum - "I code, therefore I am" > > > -------------- > > > > > Carsten Haitzler - ras...@rasterman.com > > > > > > > > > > > > > > > > > > > -- > > > ------------- Codito, ergo sum - "I code, therefore I am" > -------------- > > > Carsten Haitzler - ras...@rasterman.com > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > > 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 > > > enlightenment-devel@lists.sourceforge.net > > > 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 > > enlightenment-devel@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel > > > -- > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > Carsten Haitzler - ras...@rasterman.com > > -- 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 enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel