On Sat, 20 Jan 2018 00:09:51 +0000 Andrew Williams <[email protected]> said:
> 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? When I want something to "look right" as it does to me, I choose padded, because a window with the shadows on top of a wallpaper just looks correct because that's how it looks in real life. When I have a busy screen and a shot is purely functional and I don't want to "leak" other content of other windows, then I chose the regular one. That's why I switch often as it's 2 very different cases. Anything that's like screenshots for documentation, or websites or anything where looking good does matter, padded is IMHO the best choice, otherwise non-padded. > 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. Well see the above. I would say that shots to show off or put in "public facing documents" vs. shots just for pure utility value would be an evenly split thing. By evenly I mean NOT 90/10. maybe 70:30, 60:40, 50:50 etc. ... thus why I think it should be fast and efficient to choose either path. FYI you can bind a specific shot to a key binding and not use the menu if you do this often enough... > Andy > On Fri, 19 Jan 2018 at 13:23, Carsten Haitzler <[email protected]> wrote: > > > On Fri, 19 Jan 2018 09:36:44 +0000 Andrew Williams <[email protected]> > > 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 <[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 > > > > > > -- > > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > > Carsten Haitzler - [email protected] > > > > -- > http://andywilliams.me > http://ajwillia.ms -- ------------- 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
