diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-06-26 19:32:47 +0000 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-06-27 17:21:34 +0000 |
commit | 8fcb4a0344c67cfad95c78fef7b8ddedfc66cff5 (patch) | |
tree | 393018c584909021f65a74f53e7718c4c028a770 | |
parent | 170ce886c924cb901a35b512611a27f73d96e1da (diff) | |
download | gtk+-constraints-grid.tar.gz |
Add a larger constraints democonstraints-grid
Currently, this mainly demonstrates the scalability
limits of the constraints solver. For comparison,
the same demo can be run with the grid layout.
-rw-r--r-- | demos/gtk-demo/constraints3.c | 355 | ||||
-rw-r--r-- | demos/gtk-demo/demo.gresource.xml | 4 | ||||
-rw-r--r-- | demos/gtk-demo/meson.build | 1 | ||||
-rw-r--r-- | demos/gtk-demo/words | 1315 |
4 files changed, 1675 insertions, 0 deletions
diff --git a/demos/gtk-demo/constraints3.c b/demos/gtk-demo/constraints3.c new file mode 100644 index 0000000000..d88110b96f --- /dev/null +++ b/demos/gtk-demo/constraints3.c @@ -0,0 +1,355 @@ +/* Constraints/Words + * + * GtkConstraintLayout lets you define big grids. + */ + +#include <glib/gi18n.h> +#include <gtk/gtk.h> + +#define WORDS_TYPE_BASE (words_base_get_type ()) +#define WORDS_TYPE_GRID (words_grid_get_type ()) +#define WORDS_TYPE_CONSTRAINT (words_constraint_get_type ()) + +typedef struct +{ + GtkWidget parent_instance; +} WordsBase; + +typedef WordsBase WordsGrid; +typedef WordsBase WordsConstraint; + +typedef GtkWidgetClass WordsBaseClass; +typedef GtkWidgetClass WordsGridClass; +typedef GtkWidgetClass WordsConstraintClass; + +G_DEFINE_TYPE (WordsBase, words_base, GTK_TYPE_WIDGET) +G_DEFINE_TYPE (WordsGrid, words_grid, WORDS_TYPE_BASE) +G_DEFINE_TYPE (WordsConstraint, words_constraint, WORDS_TYPE_BASE) + +static void +words_grid_init (WordsGrid *words) +{ +} + +static void +words_grid_class_init (WordsGridClass *class) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_GRID_LAYOUT); +} + +static void +words_constraint_init (WordsGrid *words) +{ +} + +static void +words_constraint_class_init (WordsConstraintClass *class) +{ + GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class); + + gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_CONSTRAINT_LAYOUT); +} + +static void +word_base_dispose (GObject *object) +{ + GtkWidget *self = GTK_WIDGET (object); + GtkWidget *child; + + while ((child = gtk_widget_get_first_child (self)) != NULL) + gtk_widget_unparent (child); + + G_OBJECT_CLASS (words_base_parent_class)->dispose (object); +} + +static void +words_base_class_init (WordsBaseClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = word_base_dispose; +} + +static int num_words = 100; +static gboolean use_constraints = FALSE; + +static void +read_words (WordsBase *self) +{ + GBytes *data; + const char *words; + int left, top; + GtkWidget *child = NULL; + GtkLayoutManager *layout = gtk_widget_get_layout_manager (GTK_WIDGET (self)); + GtkGridConstraint *grid; + GtkConstraint *constraint; + int count; + int rightmost; + GtkWidget *right_child = NULL; + gboolean use_constraint = GTK_IS_CONSTRAINT_LAYOUT (layout); + + if (use_constraint) + { + grid = gtk_grid_constraint_new (); + g_object_set (grid, + "row-homogeneous", TRUE, + "column-homogeneous", FALSE, + NULL); + } + else + { + gtk_grid_layout_set_row_homogeneous (GTK_GRID_LAYOUT (layout), TRUE); + gtk_grid_layout_set_column_homogeneous (GTK_GRID_LAYOUT (layout), FALSE); + } + + data = g_resources_lookup_data ("/constraints3/words", 0, NULL); + words = g_bytes_get_data (data, NULL); + count = 0; + + rightmost = 0; + left = 0; + top = 0; + while (words && words[0]) + { + char *p = strchr (words, '\n'); + char *word; + int len; + + if (p) + { + word = strndup (words, p - words); + words = p + 1; + } + else + { + word = strdup (words); + words = NULL; + } + + len = strlen (word); + child = gtk_button_new_with_label (word); + + if (left + len > 50) + { + top++; + left = 0; + } + + gtk_widget_set_parent (child, GTK_WIDGET (self)); + + if (left + len > rightmost) + { + rightmost = left + len; + right_child = child; + } + + if (use_constraint) + { + gtk_grid_constraint_add (grid, child, + left, left + len, + top, top + 1); + if (left == 0 && top == 0) + { + constraint = gtk_constraint_new (NULL, + GTK_CONSTRAINT_ATTRIBUTE_TOP, + GTK_CONSTRAINT_RELATION_EQ, + child, + GTK_CONSTRAINT_ATTRIBUTE_TOP, + 1.0, + 0.0, + GTK_CONSTRAINT_STRENGTH_REQUIRED); + gtk_constraint_layout_add_constraint (GTK_CONSTRAINT_LAYOUT (layout), + constraint); + constraint = gtk_constraint_new (NULL, + GTK_CONSTRAINT_ATTRIBUTE_LEFT, + GTK_CONSTRAINT_RELATION_EQ, + child, + GTK_CONSTRAINT_ATTRIBUTE_LEFT, + 1.0, + 0.0, + GTK_CONSTRAINT_STRENGTH_REQUIRED); + gtk_constraint_layout_add_constraint (GTK_CONSTRAINT_LAYOUT (layout), + constraint); + } + } + else + { + GtkGridLayoutChild *grid_child = GTK_GRID_LAYOUT_CHILD (gtk_layout_manager_get_layout_child (layout, child)); + + g_object_set (grid_child, + "left-attach", left, + "top-attach", top, + "column-span", len, + "row-span", 1, + NULL); + } + + left = left + len; + count++; + + if (count >= num_words) + break; + } + + if (use_constraint) + { + constraint = gtk_constraint_new (NULL, + GTK_CONSTRAINT_ATTRIBUTE_RIGHT, + GTK_CONSTRAINT_RELATION_EQ, + right_child, + GTK_CONSTRAINT_ATTRIBUTE_RIGHT, + 1.0, + 0.0, + GTK_CONSTRAINT_STRENGTH_REQUIRED); + gtk_constraint_layout_add_constraint (GTK_CONSTRAINT_LAYOUT (layout), + constraint); + constraint = gtk_constraint_new (NULL, + GTK_CONSTRAINT_ATTRIBUTE_BOTTOM, + GTK_CONSTRAINT_RELATION_EQ, + child, + GTK_CONSTRAINT_ATTRIBUTE_BOTTOM, + 1.0, + 0.0, + GTK_CONSTRAINT_STRENGTH_REQUIRED); + gtk_constraint_layout_add_constraint (GTK_CONSTRAINT_LAYOUT (layout), + constraint); + + gtk_constraint_layout_add_grid_constraint (GTK_CONSTRAINT_LAYOUT (layout), + grid); + } + + g_bytes_unref (data); +} + +static void +words_base_init (WordsBase *self) +{ + read_words (self); +} + +static void +show_words (GtkWidget *parent) +{ + GtkWidget *window; + GtkWidget *header, *box, *grid, *button; + GtkWidget *swin; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + gtk_window_set_transient_for (GTK_WINDOW (window), + GTK_WINDOW (gtk_widget_get_root (parent))); + gtk_window_set_modal (GTK_WINDOW (window), TRUE); + + header = gtk_header_bar_new (); + gtk_header_bar_set_title (GTK_HEADER_BAR (header), use_constraints ? "Constraints" : "Grid"); + gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), FALSE); + gtk_window_set_titlebar (GTK_WINDOW (window), header); + gtk_window_set_resizable (GTK_WINDOW (window), TRUE); + gtk_window_set_default_size (GTK_WINDOW (window), 600, 400); + + box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); + gtk_container_add (GTK_CONTAINER (window), box); + + swin = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (swin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_propagate_natural_width (GTK_SCROLLED_WINDOW (swin), TRUE); + gtk_scrolled_window_set_propagate_natural_height (GTK_SCROLLED_WINDOW (swin), TRUE); + gtk_widget_set_hexpand (swin, TRUE); + gtk_widget_set_vexpand (swin, TRUE); + gtk_widget_set_halign (swin, GTK_ALIGN_FILL); + gtk_widget_set_valign (swin, GTK_ALIGN_FILL); + gtk_container_add (GTK_CONTAINER (box), swin); + + if (use_constraints) + grid = g_object_new (WORDS_TYPE_CONSTRAINT, NULL); + else + grid = g_object_new (WORDS_TYPE_GRID, NULL); + + gtk_widget_set_halign (swin, GTK_ALIGN_START); + gtk_widget_set_valign (swin, GTK_ALIGN_START); + + gtk_container_add (GTK_CONTAINER (swin), grid); + + button = gtk_button_new_with_label ("Close"); + gtk_container_add (GTK_CONTAINER (box), button); + g_signal_connect_swapped (button, "clicked", + G_CALLBACK (gtk_widget_destroy), window); + + gtk_widget_show (window); +} + +static void +use_constraints_cb (GtkButton *button) +{ + use_constraints = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (button)); +} + +static void +word_count_cb (GtkSpinButton *button) +{ + num_words = gtk_spin_button_get_value_as_int (button); +} + +GtkWidget * +do_constraints3 (GtkWidget *do_widget) +{ + static GtkWidget *window; + + if (!window) + { + GtkWidget *header, *grid, *button, *label; + + window = gtk_window_new (GTK_WINDOW_TOPLEVEL); + + header = gtk_header_bar_new (); + gtk_header_bar_set_title (GTK_HEADER_BAR (header), "Words"); + gtk_header_bar_set_show_title_buttons (GTK_HEADER_BAR (header), TRUE); + gtk_window_set_titlebar (GTK_WINDOW (window), header); + gtk_window_set_resizable (GTK_WINDOW (window), FALSE); + g_signal_connect (window, "destroy", + G_CALLBACK (gtk_widget_destroyed), &window); + + grid = gtk_grid_new (); + g_object_set (grid, + "margin", 12, + "row-spacing", 12, + "column-spacing", 6, + "halign", GTK_ALIGN_FILL, + "valign", GTK_ALIGN_FILL, + "hexpand", TRUE, + "vexpand", TRUE, + NULL); + gtk_container_add (GTK_CONTAINER (window), grid); + + label = gtk_label_new ("Constraints:"); + gtk_label_set_xalign (GTK_LABEL (label), 1.0); + gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1); + button = gtk_check_button_new (); + g_signal_connect (button, "clicked", G_CALLBACK (use_constraints_cb), NULL); + gtk_grid_attach (GTK_GRID (grid), button, 1, 0, 1, 1); + label = gtk_label_new ("Words:"); + gtk_label_set_xalign (GTK_LABEL (label), 1.0); + gtk_grid_attach (GTK_GRID (grid), label, 0, 1, 1, 1); + button = gtk_spin_button_new_with_range (0, 1300, 1); + g_signal_connect (button, "value-changed", G_CALLBACK (word_count_cb), NULL); + gtk_spin_button_set_value (GTK_SPIN_BUTTON (button), 10); + gtk_grid_attach (GTK_GRID (grid), button, 1, 1, 1, 1); + + button = gtk_button_new_with_label ("Show"); + gtk_widget_set_halign (button, GTK_ALIGN_END); + gtk_widget_set_valign (button, GTK_ALIGN_END); + g_signal_connect_swapped (button, "clicked", + G_CALLBACK (show_words), window); + gtk_grid_attach (GTK_GRID (grid), button, 0, 2, 2, 1); + } + + if (!gtk_widget_get_visible (window)) + gtk_widget_show (window); + else + gtk_widget_destroy (window); + + return window; +} diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml index f3d400bba3..14e3a5ce99 100644 --- a/demos/gtk-demo/demo.gresource.xml +++ b/demos/gtk-demo/demo.gresource.xml @@ -12,6 +12,9 @@ <gresource prefix="/builder"> <file>demo.ui</file> </gresource> + <gresource prefix="/constraints3"> + <file>words</file> + </gresource> <gresource prefix="/css_accordion"> <file>css_accordion.css</file> <file>reset.css</file> @@ -152,6 +155,7 @@ <file>combobox.c</file> <file>constraints.c</file> <file>constraints2.c</file> + <file>constraints3.c</file> <file>css_accordion.c</file> <file>css_basics.c</file> <file>css_blendmodes.c</file> diff --git a/demos/gtk-demo/meson.build b/demos/gtk-demo/meson.build index 6d4bd03fad..b6f52cb25c 100644 --- a/demos/gtk-demo/meson.build +++ b/demos/gtk-demo/meson.build @@ -10,6 +10,7 @@ demos = files([ 'combobox.c', 'constraints.c', 'constraints2.c', + 'constraints3.c', 'css_accordion.c', 'css_basics.c', 'css_blendmodes.c', diff --git a/demos/gtk-demo/words b/demos/gtk-demo/words new file mode 100644 index 0000000000..719d0bd5bb --- /dev/null +++ b/demos/gtk-demo/words @@ -0,0 +1,1315 @@ +a +abandon +abominate +aboriginal +about +absent-minded +account +act +activity +adventurous +affghanistan +after +afternoon +afterwards +again +against +ago +a-going +ah +aint +air +all +alleys +almost +aloft +along +already +always +am +amazingly +american +among +amount +an +and +angel +another +answer +anxious +any +anything +archangel +are +arm +around +arrived +artist +as +ash-box +ashes +asphaltic +assure +astern +at +athirst +atmosphere +attending +attract +avenues +away +awe +a-whaling +backing +bag +bake-houses +ball +barbarous +barques +bathed +battery +battle +be +beach +bear +beating +became +because +bed +bedford +been +before +begin +behind +being +believe +belted +benches +besides +best +better +between +beyond +bill +bit +bitingly +black +black-letter +blackness +bleak +blocks +bloody +blubbering +blue +body +boisterous +book +boots +both +bound +bowsprit +boy +boys +breathes +breezes +brief +bright +brigs +bringing +broad +broiled +broiling +broom +brother +brought +building +bulk +bulwarks +burnt +business +but +but +buttered +buy +by +cajoling +call +called +came +can +candidates +candle +cannot +canoes +cape +captain +caravan +care +careless +carpet-bag +carries +carted +carthage +cataract +cato +cattle +charm +chase +chattering +cheap +cheapest +cheerfully +cheeriest +cheerless +cherish +chief +china +chinks +chips +choice +choked +church +circulation +circumambulate +circumstances +city +climes +clinched +coals +coasts +coat +cobble-stones +coenties +coffee +coffin +coffin +cold +come +comedies +commodore +common +commonalty +compare +comparing +compasses +conceits +concernment +conclude +confess +congealed +connected +connexion +conscious +conservatories +considerable +considering +consign +constant +content +contested +contrary +cook +cooled +copestone +copy +coral +corlears +corn-cob +corner +cottage +could +counters +country +craft +crannies +crazy +creak +creaking +creatures +crossed +crowds +crucifix +cunningly +curbstone +curiosity +czar +dale +damp +dark +darkness +day +days +dead +dear +death +december +deck +decks +decoction +deep +deeper +deepest +degree +deity +deliberate +deliberately +delusion +desert +deserted +desires +desks +destined +destroyed +did +didn't +difference +dilapidated +dim +disappointed +discover +discriminating +disguises +dismal +distant +distinction +district +dive +dives +do +do +docks +does +dogs +doing +don't +don't +doom +door +dotings +doubtless +down +down-town +drawn +dreamiest +dreamy +dreary +drinks +driving +drizzly +drop +drowned +dubious-looking +duly +each +earnestly +ears +earthly +east +easy +eat +egyptians +either +election +element +else +embark +emigrant +employs +enable +enchanting +endless +enjoy +enough +entailed +enter +entering +entertainment +equator +ere +especially +established +euroclydon +euroclydon +even +ever +everlasting +every +everybody +everything +everywhere +exactly +exercise +expensive +experiment +extant +extensive +extreme +extremest +eye +eyes +faces +faintly +falling +family +famous +fancied +far +farces +fates +feel +feelings +feet +fervent +few +fields +fiery +finally +find +fine +finished +first +fixed +flinty +floated +flood-gates +flourish +flying +followed +following +foot +for +forbidden +forecastle +forlorn +formed +forth +fountain +fowl +fowls +freewill +friendly +from +frost +frost +frosted +frosty +frozen +funeral +further +gable-ended +gabriel +general +genteel +get +gets +give +glare +glass +glasses +glasses +glazier +glitters +gloom +glory +go +gods +goes +going +gomorrah +gone +good +gradually +grand +grapnels +grasp +grasshopper +great +greeks +green +grim +grin +grow +grow +growing +ha +ha +habit +had +halting +hand +handfuls +hands +happen +hard +hardicanutes +harpoon +harpoons +has +hats +have +having +having +hazy +he +he +he +head +healthy +hear +hear +heard +hearing +heaven +helped +her +here +here +hermit +high +hill +hill-side +him +himself +his +hob +hold +holding +hollow +holy +honor +honorable +hooded +hook +horn +horror +horse +hour +hours +house +houses +how +however +howling +huge +hundred +hunks +hypos +i +ibis +ice +iceberg +idea +idolatrous +if +ignoring +ills +image +imported +improvements +in +inches +indian +indignity +in-doors +induced +inducements +infallibly +inferred +infliction +influences +inlanders +inmates +inmost +inn +inns +inquire +instance +instinct +insular +interest +interior +interlude +into +invest +invisible +invitingly +involuntarily +is +ishmael +island +isles +it +it +itch +it's +its +itself +it +would +jet +jolly +jove +judging +judgmatically +judgment +judiciously +jump +june +just +keen +keep +kept +key +kind +knee-deep +knew +knocking +knowing +knows +laden +lakes +land +land +landscape +landsmen +lanes +last +late +lath +lay +lazarus +lazarus +lead +leaders +leaning +learning +leaves +lee +left +legs +lengthwise +less +let +leviathan +lie +lies +life +light +lights +lights +like +limit +line +lint +little +lives +lodge +lodges +lodgings +loitering +long +look +look +looked +lookest +looking +lording +loud +love +low +lungs +made +magic +magnetic +magnificent +make +maketh +making +man +managers +manhatto +manhattoes +many +marvellous +marvels +mast +mast-head +matter +maxim +may +mazy +me +meadow +mean +meaning +meant +meanwhile +meditation +meet +melted +men +merchant +metaphysical +methodically +mid +middle +might +mighty +mild +miles +million +mind +mine +miserable +misty +mole +moluccas +moment +monday +money +monied +monopolizing +monster +moored +moral +more +mortal +most +motives +mountains +mouth +moving +much +mummies +must +muttered +my +myself +mysterious +mystical +nailed +name +nameless +nantucket +narcissus +nay +nearly +needed +needles +needs +negro +never +nevertheless +new +niagara +nigh +night +nights +no +no +noble +nor +north +north +northern +northward +not +nothing +november +now +obey +observest +occurred +ocean +oceans +of +of +off +offer +officer +offices +off +then +old +old +ominous +on +once +one +one's +only +open +opened +or +orchard +order +orders +oriental +original +orion +orphans +other +other's +others +our +ourselves +out +outside +over +overlapping +overwhelming +own +paced +pacific +pacing +packed +packet +paid +pains +paint +painting +palace +palsied +parliament +part +particles +particular +particularly +partly +parts +passage +passed +passenger +passengers +patagonian +patched +path +paul's +pausing +pavement +pay +paying +pea +pedestrian +peep +peer +penalties +penny +pent +people's +peppered +perceive +perdition +performances +performing +perhaps +perils +persians +peter +peter +phantom +philosophical +physical +picked +picture +pieces +pier-heads +pillow +pine-tree +pistol +pit +pity +place +plaster +tied +pleasant +please +pleased +plenty +plight +plug +plumb +plunged +pocket +poet +point +police +pooh +pooh +pool +poor +porch +port +portentous +possess +possibly +poverty-stricken +prairies +preacher's +precisely +presented +presently +presidency +president +prevalent +prevent +previous +price +principle +privilege +proceeding +processions +professor +programme +projections +promptly +proved +providence +public +pulpit +punch +pure +purpose +purse +pushed +put +putting +pyramids +pythagorean +quarrelsome +quarter +quarter-deck +queer +quick +quiet +quietest +quietly +quite +quitting +rag +rags +randolphs +rather +rather +rays +reaching +really +rear +reason +reasonest +recall +receives +receiving +red +redder +red-men +reefs +commerce +region +regulating +related +remorseless +remote +rensselaers +repeatedly +representing +requires +respectable +respectfully +resulting +reverentially +reveries +reveries +stand +rigging +right +risk +river +rivers +roasted +robust +rockaway +rolled +romantic +root +round +roused +rows +royal +rub +ruins +run +sabbath +saco +sadly +said +sail +sailed +sailor +sailors +sally +salt +salted +same +sand +sashless +satisfaction +saturday +saw +say +says +scales +schoolmaster +schooners +scores +scrape +sea +sea +sea-captain +sea-captains +seas +sea-sick +seated +seaward +second +secretly +see +seemed +seemingly +see +posted +seneca +sense +sentinels +separate +served +service +set +shabby +shadiest +shady +shakes +shaking +sharp +shepherd's +ship +ship-board +ships +shirt +shiverings +shore +short +should +shoulder-blades +shouldering +side +sides +sighs +sight +sights +sign +silent +silken +silver +simple +since +single +sitting +slave +sleep +sleeps +sleepy +slip +sloop +smelt +smoke +smoky +snow +so +so +social +society +soles +solo +some +somehow +something +soon +sort +soul +sounded +sounds +south +spar +speak +spiles +spleen +spot +spouter +spouter +spouter-inn +spray +springs +spurs +stage +stand +stand +miles +started +states +stepping +steps +still +stoics +stood +stop +stopping +story +straight +stranded +strange +stream +street +streets +streets +striving +strong +struck +stuffed +stumble +substitute +such +suddenly +suffice +sumatra +summer +supplied +suppose +sure +surely +surf +surprising +surrounds +surveillance +suspect +sway +swayed +sweep +swinging +sword +sword-fish +sword-fish +swung +take +taking +talk +tall +tallest +tar-pot +tatters +tears +teeth +teeth-gnashing +tell +temperance +tempestuous +ten +tennessee +tepid +terms +testament +text +than +that +the +the +their +them +them +leagues +themselves +then +thence +there +there +there +these +they +thick +thieves +thing +things +think +thinks +this +this +this: +this +thither +those +thou +though +though +thought +thousand +thousands +throw +throws +thrust +thump +thus +tiger-lilies +what +till +time +tinkling +to +to +toasting +toils +told +tomb +too +took +tophet +tormented +tormenting +tossed +touches +towards +town +tragedies +tranced +transition +trap +trap +travel +trees +trials +tribulations +trip +trouble +true +trunk +try +tucked +turned +two +tyre +unaccountable +unbiased +uncomfortable +undeliverable +under +underneath +ungraspable +unite +united +universal +universe +unless +unpleasant +up +upon +upper +urbane +us +uses +vain +valley +van +various +very +vibration +view +violate +virtue +visit +voice +voyage +wade +wailing +wanting +warehouses +warm +was +washed +watch +water +water-gazers +waterward +watery +waves +way +we +wears +weary +wedded +week +weeping +weighed +welcome +well +went +were +west +whale +whalemen +whales +whaling +wharves +what +what +whatsoever +when +whenever +where +whereas +wherefore +wherever +wherever +whether +which +white +whitehall +who +wholesome +whose +why +wide +wight +wild +will +wind +window +windows +winds +wisdom +wish +with +within +without +wonderful +wonder-world +wooden +woodlands +words +works +world +worse +would +wrapper +wretched +writer +ye +yea +years +yes +yet +yet +yonder +you +young +your +yourself +zephyr |