Correto uso de constantes no namespace Gtk
Com o PHP 7, a linguagem já deu um salto incrível em recursos, e fortaleceu mais ainda a ideia de se ter padrões, como o PSR. Esses padrões devem estar em conformidade, não todo, ele mesmo diz isso, mas deve se ter o conhecimento destes padrões, para um desenvolvimento limpo e claro para futuras manutenções. Dito isso, como fica o PHP-GTK 3?
Dia 04 de Julho deste ano foi feita uma pesquisa no Twitter, com 226 votos, dando o resultado do uso do Gtk como uma namespace. Assim, conseguiremos atingir um patar de outras linguagens para desktop. Imagine a situação:
Dai entra o namespace.
Neste mesmo exemplo, poderíamos dividir as tarefas, de forma que tudo fique organizado dentro do mesmo namespace. Poderiamos trabalhar da forma como está, algo assim:
Manter da forma como está
https://twitter.com/ScornInPC/status/1151946275924979713
Dia 04 de Julho deste ano foi feita uma pesquisa no Twitter, com 226 votos, dando o resultado do uso do Gtk como uma namespace. Assim, conseguiremos atingir um patar de outras linguagens para desktop. Imagine a situação:
<?php
// Create a css provider
$css_provider = new GtkCssProvider();
$ret = $css_provider->load_from_data("
stackswitcher button {
border-radius: 0;
background: #ffffff;
border: none;
border-bottom: 1px #dfdfdf solid;
padding: 10px 0;
}
stackswitcher button:checked {
background: #DADBFF;
}
stackswitcher button:focus {
border: none;
outline: none;
}
scrollbar,
scrollbar * {
min-width: 8px;
min-height: 8px;
padding: 0;
margin: 0;
border: 0;
border-radius: 0;
}
scrollbar slider {
background: #B3B5E0;
}
");
if(!$ret) {
die("Css Error\n");
}
$style = new GtkStyleContext();
$style->add_provider_for_screen($css_provider, 600);
//
$win = new GtkWindow();
$switcher = new GtkStackSwitcher();
$scroll = new GtkScrolledWindow();
$scroll->add($switcher);
$scroll->set_policy(GtkPolicyType::AUTOMATIC, GtkPolicyType::AUTOMATIC);
$stack = new GtkStack();
$switcher->set_stack($stack);
$switcher->set_can_focus(FALSE);
$switcher->set_can_default(FALSE);
$switcher->set_orientation(GtkOrientation::VERTICAL);
$paned = new GtkPaned(GtkOrientation::HORIZONTAL);
$paned->add1($scroll);
$paned->add2($stack);
$stack->add_titled(new GtkLabel("teste1"), "teste1", "teste1");
$win->add($paned);
$win->connect("destroy", ["Gtk", "main_quit"]);
$win->set_size_request(800, 500);
$win->show_all();
$paned->set_position(240);
Gtk::main();
Complexo compreender tudo isso né? Claro que você pode pensar que não, que é simples entender, mas isso pode ocorrer por que talvez você já esteja habituado com o código, ou você consegue prestar mais atenção nos detalhes.Dai entra o namespace.
Neste mesmo exemplo, poderíamos dividir as tarefas, de forma que tudo fique organizado dentro do mesmo namespace. Poderiamos trabalhar da forma como está, algo assim:
<?php
namespace myapp;
//
$win = new \GtkWindow();
$switcher = new \GtkStackSwitcher();
$scroll = new \GtkScrolledWindow();
$scroll->add($switcher);
$stack = new \GtkStack();
$switcher->set_stack($stack);
$paned = new \GtkPaned(\GtkOrientation::HORIZONTAL);
$paned->add1($scroll);
$paned->add2($stack);
$stack->add_titled(new GtkLabel("teste1"), "teste1", "teste1");
$win->add($paned);
$win->connect("destroy", ["Gtk", "main_quit"]);
$win->set_size_request(800, 500);
$win->show_all();
$paned->set_position(240);
\Gtk::main();
Mas isso não faz parte do conceito de namespaces. Então ficou definida na pesquisa que trabalharemos algo assim:<?php
namespace myapp;
//
$win = new \Gtk\Window();
$switcher = new \Gtk\StackSwitcher();
$scroll = new \Gtk\ScrolledWindow();
$scroll->add($switcher);
$stack = new \Gtk\Stack();
$switcher->set_stack($stack);
$paned = new \Gtk\Paned(\GtkOrientation::HORIZONTAL);
$paned->add1($scroll);
$paned->add2($stack);
$stack->add_titled(new \Gtk\Label("teste1"), "teste1", "teste1");
$win->add($paned);
$win->connect("destroy", ["Gtk", "main_quit"]);
$win->set_size_request(800, 500);
$win->show_all();
$paned->set_position(240);
\Gtk::main();
Notou como a organização é limpa? Window do namespace Gtk. Isso abre porta para novas libs como Fabula, que poderia trabalhar sem nenhum conflito:$win = new \Fabula\Window();
A duvida agora é com relação às constantes. No PHP-GTK 1 e 2, as constantes ficavam todas referenciadas na classe Gtk e Gdk. Já o PHP-GTK 3 foi escrito o mais proximo do GTK++, fazendo com que as contanstantes estejam dentro de suas proprias estruturas, como por exemplo GtkOrientationGtkOrientation::VERTICAL
GtkOrientation::HORIZONTAL
Quando trabalharmos com namespace, qual seria mais conveniente:Manter da forma como está
\GtkOrientation::VERTICAL
\GtkOrientation::HORIZONTAL
Adicionar tudo dentro do Gtk\Gtk::ORIENTATION_VERTICAL
\Gtk::ORIENTATION_HORIZONTAL
Manter uma unica constante\GTK_ORIENTATION_VERTICAL
\GTK_ORIENTATION_HORIZONTAL
Ou criar classes separadas como o PSR dita\Gtk\Orientation::VERTICAL
\Gtk\Orientation::HORIZONTAL
Responde lá, você faz parte dissohttps://twitter.com/ScornInPC/status/1151946275924979713