Creare una libreria grafica da zero - pagina 2

 
Алексей Барбашин:

Sono sicuro che non vale la pena farlo da zero.

Persone molto intelligenti hanno speso molto tempo e conoscenze per fare la stessa libreria standard o la libreria Anatoli.

La gente ha investito tempo e conoscenze e sarebbe sciocco non usarle.

Dovremmo semplicemente prendere il meglio, dal nostro punto di vista, in entrambi e costruirne uno nuovo.

Dobbiamo imparare dagli errori degli altri. Faremo il nostro).

Solo per!

 
L'obiettivo finale della biblioteca non è chiaro.
Quali svantaggi di altre biblioteche dovrebbe risolvere o ampliare? O dovrebbe diventare uno strumento fondamentalmente nuovo? Dovrebbe essere qualcosa orientato alla GUI o all'utente?
Per esempio, la mia libreria iCanvas era una continuazione logica della libreria CCanvas per migliorare l'usabilità della grafica utente, codice più breve e intuitivo durante la codifica, aumentare la velocità evitando le funzioni asincrone, collegamento a un sistema di coordinate prezzo-tempo, non solo le coordinate dello schermo XU.
 
Nikolai Semko:
L'obiettivo finale della biblioteca non è chiaro.

E questo è un problema comune a tutte le librerie grafiche, per quanto posso vedere.

Tutti i progetti offerti sul forum devono risolvere uno dei due problemi: o aumentare il reddito dell'utente, o aumentare l'efficienza di ottenere lo stesso reddito.

Non ricordo un solo autore di progetti che si sia preoccupato di mostrare esempi che illustrino come risolvere uno di questi problemi.

L'esempio più eclatante, ricordo nel thread "Canvas is cool", era la presentazione di una grafica semplicemente ipnotizzante... Tuttavia, come ha aumentato il reddito dell'utente (almeno dell'autore), o come ha aumentato l'efficacia di ottenerlo - non ho mai capito.

Lo stesso vale per la biblioteca di Anatoly. Grande struttura, ben pensata, ma... Sono sicuro che nemmeno l'autore stesso usa tutte le caratteristiche di questa libreria. Per quanto riguarda gli utenti, penso che possiamo dimenticarli.

Un altro esempio è il progetto di Peter Konov. Per le persone che non possono (non vogliono) capire OOP è una soluzione abbastanza funzionante con buone caratteristiche, ma... Di nuovo - non un solo esempio che mostri un aumento dell'efficienza nella generazione di entrate.


Per come la vedo io, la maggior parte di questi progetti sono più necessari per nutrire la presunzione dei loro autori. In generale, è una cosa necessaria. Ma non ci si deve aspettare alcun "obiettivo finale". È come aspettarsi che la mia Lega TS (che è solo una collezione di tutti i tipi di semplici esperti) controlli, profitti, graal... Anche se è solo un indicatore di vari principi di TS che lavorano su diversi simboli.

 
Georgiy Merts:

E questo è un problema comune a tutte le librerie grafiche, per quanto posso vedere.

Tutti i progetti offerti sul forum devono risolvere uno dei due problemi: o aumentare il reddito dell'utente, o aumentare l'efficienza di ottenere lo stesso reddito.

Non ricordo che almeno un autore di progetti si sia preoccupato di mostrare esempi che illustrano come risolvere uno di questi compiti.

Infatti, questa è una sezione del forum dei programmatori ..... Non si dovrebbe cercare il senso finanziario qui))) Io stesso preferisco risolvere questi problemi separatamente da questo forum.

Nikolai Semko:
Lo scopo finale della biblioteca non è chiaro.
Quali svantaggi di altre biblioteche dovrebbe risolvere o ampliare le possibilità? O dovrebbe diventare uno strumento fondamentalmente nuovo? Dovrebbe essere qualcosa orientato alla GUI o all'utente?
Per esempio, la mia libreria iCanvas era una continuazione logica della libreria CCanvas al fine di aumentare l'usabilità della grafica personalizzata, codice più breve e intuitivo durante la codifica, aumentare la velocità evitando funzioni asincrone, collegamento a un sistema di coordinate prezzo-tempo, non solo coordinate XU dello schermo.

Ho iniziato con la tua libreria, grazie a te, poi l'ho raffinata un po', poi un po' di più)))) infine ho cambiato tutto, comprese le funzioni riscritte delle linee, anche la funzione linea larga dal canvas di origine, rimosso le funzioni false, messo lo stub sull'evento. non ho ancora abbandonato completamente la struttura W, anche se anche lì è rimasto poco. Ho aggiunto il calcolo della barra a sinistra e a destra tramite la ricerca binaria tra altri elementi e ho anche aggiunto la ricerca binaria stessa con la possibilità di scegliere un valore maggiore o minore. Aggiunta anche la possibilità di costruire da matrici di qualsiasi tipo (serie temporali/comuni) E si è giunti alla conclusione che è necessario cambiare il costrutto))))))

 

Sto chiudendo il cerchio.

Capisco la gerarchia.

Devo fare il controllo ancora una volta, ma ci sono ancora alcune coordinate che vorrei mettere separatamente. Vorrei metterli in un cerchio. Penso che il kotrol andrà dalle coordinate, così sarà più vero e semplificherà notevolmente il sistema. Naturalmente, potrei sbagliarmi nelle mie argomentazioni - ma finora sembra una soluzione ingenua.

E kotrol - questo non è altro che un elemento di base degli stili - che in teoria dovrebbe essere dopo le coordinate.

Logica - possiamo avere un elemento senza stili, ma non senza coordinate

 
Alexandr Andreev:

Questa è in realtà una sezione del forum dei programmatori ..... Non si dovrebbe cercare il senso finanziario qui))) Io stesso preferisco trattare queste questioni separatamente da questo forum.

Molto divertente.

C'è un thread qui accanto dove ci sono accese battaglie che "nessuno lavorerà gratis" - tu dici, "non vale la pena cercare il senso economico" ??

 
Georgiy Merts:

Molto divertente.

Accanto all'argomento in cui ci sono battaglie accese che "nessuno lavorerà gratis" - tu dici, "non cercare il senso finanziario"?

Non sto nemmeno rivendicando la paternità della libreria che ho ricevuto.... Per non parlare della sua componente finanziaria.

Volevo solo sapere come dovrebbe essere fatto - correttamente.

Se c'è una piccola necessità, si può anche raccogliere il codice sul rottame.

Anche se idealmente mi piacerebbe fare una versione mini di questa corretta. Per il minimo codice e la massima utilità.

 
Nikolai Semko:
L' obiettivo finale della biblioteca non è chiaro .
Quali carenze di altre biblioteche dovrebbe risolvere o espandere? O dovrebbe diventare uno strumento fondamentalmente nuovo? Dovrebbe essere qualcosa orientato alla GUI o all'utente?
Per esempio, la mia libreria iCanvas era una continuazione logica della libreria CCanvas al fine di aumentare l'usabilità della grafica personalizzata, codice più breve e intuitivo durante la codifica, aumentare la velocità evitando funzioni asincrone, e collegarsi a un sistema di coordinate prezzo-tempo invece che solo alle coordinate dello schermo XU.

Nikolai, benvenuto.

L'obiettivo finale è quello di cercare di affrontare le carenze degli strumenti che sono già in atto al momento.

Suppongo che molto probabilmente sarà una continuazione dello sviluppo della libreria standard per migliorare la facilità di connessione ai progetti e per migliorare la componente grafica, lasciando gli oggetti grafici e passando al canvas.

Ma nel complesso, non speculiamo su quale sarà il risultato.

 
Алексей Барбашин:

Nikolai, benvenuto.

L'obiettivo finale è quello di cercare di affrontare le carenze degli strumenti che sono già in atto al momento.

Suppongo che molto probabilmente sarà una continuazione dello sviluppo della libreria standard per migliorare la facilità di connessione ai progetti e per migliorare la componente grafica, lasciando gli oggetti grafico e il passaggio al canvas.

Ma, in generale, non ci scervelliamo su ciò che accadrà.

Brevemente, sull'ingegneria:

Se si ha l'impulso di migliorare qualche "A" con la reingegnerizzazione, bisogna specificare i suoi difetti critici. Basta elencarli e spiegare perché è impossibile eliminarli nel processo di sviluppo evolutivo di "A".

D'altra parte, nessuno lo proibisce. Se ti piace scrivere codice, scrivilo... Riscrivi "A", ma a modo tuo, ma sarà nuovo

 
Alexandr Andreev:

Sto chiudendo il cerchio.

Capisco la gerarchia.

Devo fare il controllo ancora una volta, ma ci sono ancora alcune coordinate che vorrei mettere separatamente. Vorrei metterli in un cerchio. Penso che il kotrol andrà dalle coordinate, così sarà più vero e semplificherà notevolmente il sistema. Naturalmente, potrei sbagliarmi nelle mie argomentazioni - ma finora sembra una soluzione ingenua.

E kotrol - questo non è altro che un elemento di base degli stili - che in teoria dovrebbe essere dopo le coordinate.

Logica - possiamo avere un elemento senza stili, ma non senza coordinate.

Non c'è nemmeno bisogno di discutere su questo, è vero )))

Stili, temi - è tutto possibile da avvitare in seguito, se si prevede inizialmente una tale aggiunta. In realtà, tutto questo dovrebbe avvenire in un controllo di base e quindi l'aumento di funzionalità andrà anche in questa classe.

Per quanto riguarda le coordinate, vedo due tipi - coordinate assolute, che sono calcolate rispetto al grafico e coordinate locali, che sono calcolate rispetto al genitore.

Se, per esempio, un modulo è reso, il suo posizionamento in un grafico è gestito da coordinate assolute. Se un pulsante è posizionato in un modulo, deve essere posizionato relativamente al contenitore in cui è inserito, cioè, relativamente al modulo.

Quando gli eventi di spostamento del mouse vengono ricevuti, otteniamo le coordinate assolute del punto del cursore relative al grafico nel gestore. Quando si verifica che il cursore colpisce la forma o uno qualsiasi degli elementi, dobbiamo confrontare la coordinata assoluta del cursore con la posizione attuale dell'elemento, tenendo conto del suo posizionamento. Cioè, per un modulo sarà semplicemente un confronto con le sue coordinate e dimensioni attuali, ma per un pulsante calcolerà la posizione assoluta del pulsante nel sistema di coordinate. Cioè, la coordinata X per il confronto sarà calcolata come segue X = (Parent==null)?X():(X()+Parent.X()), dove X() è una funzione di classe che restituisce la posizione X dell'elemento. Tuttavia, il controllo della presenza del genitore stesso può essere eseguito all'interno di questa funzione stessa. Come risultato, se un elemento ha un genitore, allora la coordinata sarà restituita come aggiunta della coordinata del genitore alla propria coordinata nel genitore. Infatti, il numero di elementi annidati può essere arbitrario e ognuno di essi è posizionato rispetto all'elemento su cui si trova, non rispetto al grafico, quindi la coordinata assoluta può essere calcolata ricorsivamente.