;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

'Matrix' foi inspirado por opressão de pessoas trans, diz Wachowski

Lilly Wachowski em premiação em Beverly Hills - Getty Images
Lilly Wachowski em premiação em Beverly Hills Imagem: Getty Images

Do UOL, em São Paulo

03/06/2020 11h46

Lilly Wachowski se abriu sobre a inspiração para "Matrix", trilogia de ficção científica que criou ao lado de Lana Wachowski. A cineasta e roteirista disse ao The Hollywood Reporter que a raiva que sentia em relação à sociedade e a forma como ela oprime pessoas transgênero deu origem à história.

Tanto Lilly quanto Lana trabalharam na trilogia "Matrix" antes de falarem publicamente sobre suas identidades trans. "Nós sentíamos raiva do capitalismo e de sua estrutura corporativista de opressão", contou.

"Esta raiva que borbulhava dentro de mim tinha a ver com a opressão que eu mesma sofria, porque estava me forçando a permanecer no armário", disse.

Exemplo

Hoje em dia, as coisas são diferentes para Lilly. "Agora que eu sou assumida, e um exemplo vivo de alguém que pode envelhecer como uma mulher trans, as outras pessoas trans podem ver meus filmes sob este prisma", argumentou.

"Muitas pessoas entraram em contato comigo dizendo: 'Meu Deus, estes filmes foram tão importantes na minha jornada para sair do armário'. Eu me sinto muito grata de poder oferecer isso às pessoas", contou.

'Sem espaço para ambiguidades'

Lily ainda se enfurece quando o seu trabalho é mal interpretado. Lilly recentemente virou manchete ao xingar políticos e celebridades (incluindo Abraham Weintraub, ministro da Educação no Brasil) por usar cenas e frases de "Matrix" para argumentar contra medidas de distanciamento social.

Por isso, em suas novas obras, a cineasta busca não deixar espaço para dúvidas. "Eu sempre fiz coisas que queria assistir, mas agora aqui estou, assumida e orgulhosa de mim mesma, e não preciso esconder nada no subtexto. Isso é muito satisfatório", comentou.

Além de "Matrix", Lilly trabalhou com Lana em filmes como "A Viagem" e na série "Sense8". Sozinha, lançou recentemente a série de comédia "Work in Progress", protagonizada por uma mulher lésbica que se apaixona por um homem trans.