APPLICATIONSCREATION GRAPHIQUE ★ CHERRY-PAINT (CPC REVUE N°5 -> 9) ★

CHERRY PAINT (CPC Revue n°5)CHERRY PAINT (CPC Revue n°6)CHERRY PAINT (CPC Revue n°7)CHERRY PAINT (CPC Revue n°8)CHERRY PAINT (CPC Revue n°9)
Amis lecteurs, bonjour. Je vous propose aujourd'hui d'étudier le fonctionnement de la main et des menus déroulants : c'est un gros morceau et une partie essentielle de Cherry-Paint...

VOYONS D'ABORD LA MAIN

A quoi peut bien servir cette main ? Comme vous l'avez sans doute remarqué, on ne peut pas accéder à la totalité d'une page d'écran avec le crayon ou le pinceau, par exemple. Effectivement, on ne peut agir que sur la fenêtre de travail pour éviter, bien sûr, d'effacer les icônes, les trames, etc. Pour accéder malgré tout à la page d'écran complète, nous allons utiliser cette fameuse main. Imaginez-vous que la fenêtre de travail est en fait un trou dans "le bureau", (desktop, selon le terme consacré). A tavers ce trou, on voit une partie de la page d'écran complète. Imaginez-vous aussi que la page d'écran complète est une feuille de papier que l'on peut déplacer sous le "trou". Par conséquent, si l'on veut voir une partie de la page écran actuellement cadrée par le bureau, il suffit de "pousser" ou de "tirer" la page à l'aide de la main ; la feuille va alors "glisser" et l'on verra se déplacer la page d'écran à travers le "trou".

Pour utiliser la main, il faut bien sûr la sélectionner en cliquant dans la case contenant la main. En cliquant et en déplaçant simultanément la main, on pousse alors la feuille. Le déplacement de la page est limité par la taille de cette page. En d'autres termes : on ne peut pas sortir de la page d'écran !

Jusqu'à présent nous avons parlé de "trous", de "bureau", de "feuilles de papier". Tous ces termes sont en fait des représentations imagées et n'ont évidemment aucune réalité physique (vous avez des trous dans votre AMSTRAD, vous ?).

Nous allons donc voir maintenant comment la main fonctionne en réalité.

Lorsqu'un déplacement est effectué à l'aide de la main, la partie de l'image qui sort (c'est-à-dire qui n'est plus en face du trou dans le bureau) ne doit pas purement et simplement disparaître de la mémoire, car si l'on déplace l'image dans l'autre sens, ce morceau d'image doit évidemment réapparaître. Il faut donc l'avoir sauvegardé quelque part en mémoire. Cherry-Paint réserve à cet effet une zone de mémoire débutant en # 100 et finissant en #4100. Cette zone a, par conséquent, une largeur de #4000, c'est-à-dire 16 k-octets ; elle est donc capable de contenir une page d'écran complète. Cette solution peut sembler contestable. Effectivement, il serait suffisant de conserver la partie indivisible de la page d'écran, alors que dans Cherry-Paint, la fenêtre de travail existe en double ; dans la mémoire d'écran et dans la zone de sauvegarde, en dautres termes : on perd 9 k. Donc, si je pousse mon raisonnement jusqu'au bout, le gugusse qui a écrit Cherry-Paint s'est complètement planté !

Eh bien non, pas du tout ! Premièrement, parce que le gugusse qui a écrit Cherry-Paint, c'est moi, et deuxièmement, parce que la double représentation en mémoire de la zone de travail permet d'obtenir un effet très intéressant.
Lorsqu'on dessine, il n'y a que la plage visible qui est altérée, donc il est possible, en cas de fausse manœuvre, de récupérer l'ancien contenu de la fenêtre de travail, mais nous verrons cette fonction plus en détail dans un prochain article. Une précision encore : la zone de stockage débute en # 100 et non pas en #0, parce que le moniteur se réserve la mémoire de #0 à #3F pour la gestion des interruptions, la commutation ROM-RAM, etc, et de plus, il était nécessaire que la zone de stockage commence au début d'une page (256 octets) pour une sombre histoire de calcul d'une position dans la page. Pour déplacer la page d'écran dans la fenêtre de travail, on recopie donc une portion de la page d'écran complète dans la fenêtre de travail. En décalant successivement la portion à afficher dans la page complète, on obtient une impression de mouvement (figure 1 ).

Dans Cherry-Paint, le déplacement avec la main ne se fait pas point par point pour des raisons de vitesse. Par exemple, pour le déplacement latéral, il est intéressant de décaler l'image d'un octet à la fois pour éviter de faire des décalages de bits très gourmands en temps de calcul : pour un décalage de 4 bits à droite, le temps de calcul est 6 fois plus grand !

VOYONS MAINTENANT LES MENUS DEROULANTS

En haut de l'écran de Cherry-Paint se trouve la barre de menus. Cette barre contient plusieurs options : Fichier, Outils, Facilités, Caractères, Taille, Style.

En cliquant par exemple sur l'option Fichier, on voit apparaître un menu déroulant qui contient : Sauver une image, Charger une image, Nouvelle page, etc.

Si, à ce moment là, on arrête de cliquer, le menu déroulant se referme et aucune action rï'est entreprise. Par contre, si on déplace le pointeur vers le bas, on observe alors que l'option sur laquelle se trouve la flèche passe en vidéo inverse. Si l'on arrête alors de cliquer, l'option en vidéo inverse est exécutée. Par exemple, si on relâche lorsque la flèche se trouve sur "Nouvelle page", la page est effacée... à condition que le programme correspondant existe, ce qui n'est pas le cas actuellement (nous le créerons dans le prochain épisode) !

Les menus déroulants permettent donc d'augmenter largement les possibilités du programme (gestion du lecteur de disque, des caractères, etc...), d'autant plus que dans Cherry-Paint, ces menus déroulants sont conçus de manière à être totalement extensibles : le gestionnaire de menus déroulants contient une table qui contient les indications suivantes pour chaque menu déroulant :

  • position horizontale dans la barre de menus,
  • largeur dans la barre de menus,
  • largeur du menu déroulant,
  • largeur du menu déroulant (nombre de lignes),
  • pointeur sur une table d'adresses des routines,
  • pointeur sur une table d'adresses des titres.
Cette table d'adresses des titres contient les adresses des débuts des zones mémoire où sont placées les différentes lignes du menu déroulant. Lorsque, lors de l'exécution du programme, une ligne est sélectionnée, le gestionnaire de menus déroulants appelle le programme correspondant en extrayant son adresse de la table des adresses des routines.
De cette manière, si je veux ajouter un élément à mon menu déroulant, il suffit que j'ajoute 1 à la largeur du menu déroulant, que j'ajoute l'adresse de mon sous-programme dans la première table et l'adresse de mon titre dans la seconde table. C'est tout.

Voyons maintenant le fonctionnement du gestionnaire de menus déroulants un peu plus en détails. Il se décompose en trois phases essentielles :

  • l'ouverture du menu,
  • la sélection de l'option,
  • la fermeture.
Lors de l'ouverture du menu, on crée d'abord un cadre vide tout en prenant soin de sauvegarder le fond (qui sera récupéré lors de la fermeture du menu déroulant) puis dans ce cadre, on écrit les différents titres.

Dans Cherry-Paint, le gestionnaire de menus déroulants est très rapide : il est impossible de discerner l'ouverture du cadre de l'écriture des titres (ce qui n'est pas le cas de tous les logiciels utilisant des menus déroulants !). Pour que l'ouverture d'un menu soit réalisée à une vitesse satisfaisante, il est impensable d'utiliser les routines du moniteur pour afficher une chaîne de caractères. La routine que je vous propose est nettement plus rapide que celle du moniteur : la différence de vitesse provient du fait que pour chaque caractère à afficher, le moniteur calcule l'adresse dans la page d'écran après avoir testé la légalité de la position, puis transforme les 8 octets de la matrice pour les adapter au mode courant, et masque chaque octet avec le masque de la couleur actuelle (voir listing source)...

Pour saisir le code du programme, nous allons procéder de la manière habituelle :

  • Tapez le listing 1 qui contient un chargeur hexa. Sauvez-le puis lancez-le.
  • A l'aide de ce chargeur, tapez le listing 2 qui contient le code. Chaque ligne contient 8 octets et une somme de contrôle, si une erreur est commise dans une ligne, le chargeur vous le signale et redemande la même ligne.
  • Tapez le listing 3. C'est le lanceur, il charge les différentes parties du code, puis lance le programme.
Je tiens également à m'excuser auprès des lecteurs du CPC n° 8. Le listing publié était incomplet : le listing 4 reprend le code complet du numéro 8.

ADAPTATION JOYSTICK

Pour faire l'adaptation complète au joystick, il faut faire :

POKE &8233,72
POKE &824B,73
POKE &8269,75
POKE &8281,74
POKE &8016,76
POKE &8669,76
POKE &874C,76
POKE &88B5,76
POKE &8807,76
POKE &8A2C,76
POKE &8B82,76
POKE &8BFD,76

CPC

★ PUBLISHERS: CPC Revue
★ ANNÉE: 1986
★ CONFIG: AMSDOS + 64K
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: Pascal HIGELIN
    


Page précédente : Cherry-Paint
★ AMSTRAD CPC ★ DOWNLOAD ★

Aucun fichier de disponible:
» Vous avez des fichiers que nous ne possédons pas concernent cette page ?
★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Attrb
» Applications » CPC Infos Cliparts volume 1
» Applications » Colorys
» Applications » Fractais CPC (Amstrad Magazine)
» Applications » Profi Painter
» Applications » Graphic City Manual
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Dump, Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 110 millisecondes et consultée 4609 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.