CompoundFont.st
author Michael Beyl <mb@exept.de>
Tue, 23 Jul 2002 21:33:48 +0200
changeset 3660 30c7ab561a68
parent 3659 26bd2ef5f0ed
child 3663 d40999d6cd1e
permissions -rw-r--r--
various fixes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2547
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     1
"
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     2
 COPYRIGHT (c) 1999 by eXept Software AG
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     3
              All Rights Reserved
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     4
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     5
 This software is furnished under a license and may be used
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     6
 only in accordance with the terms of that license and with the
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     8
 be provided or otherwise made available to, or used by, any
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
     9
 other person.  No title to or ownership of the software is
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    10
 hereby transferred.
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    11
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    12
 This is a demo example:
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    13
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    14
 THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    15
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    16
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    17
 ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    18
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    19
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    20
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    21
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    22
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    23
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    24
 SUCH DAMAGE.
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    25
"
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    26
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    27
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
    28
"{ Package: 'stx:libview' }"
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
    29
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
FontDescription subclass:#CompoundFont
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
    31
        instanceVariableNames:'baseFont characterToFontMapping maxAscent maxDescent maxHeight
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
    32
                device'
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
    33
        classVariableNames:''
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
    34
        poolDictionaries:''
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
    35
        category:'Graphics-Support'
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
!CompoundFont class methodsFor:'documentation'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
2547
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    40
copyright
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    41
"
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    42
 COPYRIGHT (c) 1999 by eXept Software AG
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    43
              All Rights Reserved
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    44
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    45
 This software is furnished under a license and may be used
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    46
 only in accordance with the terms of that license and with the
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    47
 inclusion of the above copyright notice.   This software may not
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    48
 be provided or otherwise made available to, or used by, any
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    49
 other person.  No title to or ownership of the software is
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    50
 hereby transferred.
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    51
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    52
 This is a demo example:
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    53
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    54
 THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    55
 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    56
 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    57
 ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    58
 FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    59
 DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    60
 OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    61
 HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    62
 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    63
 OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    64
 SUCH DAMAGE.
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    65
"
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    66
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    67
!
7d6695ce3833 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2546
diff changeset
    68
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
documentation
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    a CompountFont is a font which consists of character glyphs from multiple
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    other (base-)fonts; for each character code, an individual font may be given.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
    This has been mostly added to allow for non-EURO fonts to be used with ST/X,
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
    by defining a mixedFont, which has an EURO-glyph at the desired character
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
    position.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    Do not hardCode usage of MixedFonts into your application, since they
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
    might disappear in the future (when Unicode support has been fully 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
    implemented in ST/X, and Unicode fonts are generally available under X).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
    I.e. to use these fonts, add appropriate setup to the styleSheet,
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    or private.rc and use those fonts transparently.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
    [Instance variables:]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
      baseFont                  <Font>          fallback (default-) font
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
      characterToFontMapping    <Dictionary>    maps characters to a fonts
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
    [class variables:]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
    [see also:]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
        Font BitmapFont
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
        DeviceDrawable GraphicsContext
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    [author:]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
        Claus Gittinger
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
examples
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    a mixed font; all vowels are displayed in times;
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    the rest in helvetica.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
                                                                        [exBegin]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    |font top list|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   108
    font := CompoundFont basedOn:(Font family:'courier' size:18).
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    #($a $e $i $o $u) do:[:char |
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   110
        font glyphAt:char putFont:(Font family:'times' size:18).
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
    top := ScrollableView forView:(list := EditTextView new).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    list font:font.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    list list:#('a' 'z' 'aaa' 'zzz' 'azaz' 'zaza' 'aa' 'az' 'za' 'hello' 'abcdef' 'xyz').
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    top extent:200@200.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    top open.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
                                                                        [exEnd]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
    a mixed font; the dollar character is replaced by the european
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
    EURO symbol; the rest is helvetica
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    (this is a hack - we really need a resizable font for this):
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
                                                                        [exBegin]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
    |font baseFont euroGlyph glyphs euroFont top list|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    baseFont := Font family:'helvetica' size:12.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
    baseFont := baseFont onDevice:Display.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    glyphs := Array new:256.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
    euroGlyph := Form 
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   131
                    width:12 
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
                    height:16 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
                    fromArray:#( 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
                                2r00000000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
                                2r00000000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
                                2r00000000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
                                2r00000111 2r11000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
                                2r00001000 2r00100000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
                                2r00010000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
                                2r01111111 2r10000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
                                2r00010000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
                                2r01111111 2r10000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
                                2r00010000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
                                2r00001000 2r00100000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
                                2r00000111 2r11000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
                                2r00000000 2r00000000
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
                                2r00000000 2r00000000
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   148
                                2r00000000 2r00000000
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   149
                                2r00000000 2r00000000
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
                               ).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
    glyphs at:($$ asciiValue+1) put:euroGlyph.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    euroFont := BitmapFont new glyphs:glyphs.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
    euroFont setAscent:(baseFont ascent).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
    euroFont setDescent:(baseFont descent).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    font := CompoundFont basedOn:baseFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    font glyphAt:$$ putFont:euroFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
    top := ScrollableView forView:(list := EditTextView new).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
    list font:font.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
    list list:#('100 $' '193 DM').
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
    top extent:200@200.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
    top open.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
                                                                        [exEnd]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!CompoundFont class methodsFor:'instance creation'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
basedOn:aRealFont
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    ^ self new baseFont:aRealFont
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
!CompoundFont methodsFor:'accessing'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
baseFont
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    "return the value of the instance variable 'baseFont' (automatically generated)"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   180
    ^ baseFont
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   181
!
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
baseFont:something
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
    "set the value of the instance variable 'baseFont' (automatically generated)"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
    baseFont := something.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
    maxAscent := maxDescent := nil.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
glyphAt:char putFont:aFont
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    characterToFontMapping isNil ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
        characterToFontMapping := Dictionary new.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
    characterToFontMapping at:char put:aFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    maxAscent := maxDescent := nil.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   198
!
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   199
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   200
graphicsDevice
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   201
    "return the device I am on"
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   202
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   203
    ^ device
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
!CompoundFont methodsFor:'displaying'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
displayOpaqueString:aString from:index1 to:index2 x:x0 y:y0 in:aGC
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    "this is only called for fonts which have a nil fontId,
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
     and therefore use the replacementFont. Should never be called
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
     for non-replacement fonts."
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
    |x y|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
    x := x0.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
    y := y0.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    self 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
        substringPartsOf:aString from:index1 to:index2 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
        do:[:s :i1 :i2 :font |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
            font displayOpaqueString:s from:i1 to:i2 x:x y:y in:aGC.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
            x := x + (font widthOf:aString from:i1 to:i2).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
        ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
displayString:aString from:index1 to:index2 x:x0 y:y0 in:aGC
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
    "this is only called for fonts which have a nil fontId,
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
     and therefore use the replacementFont. Should never be called
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
     for non-replacement fonts."
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
    |x y|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
    x := x0.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    y := y0.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    self 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
        substringPartsOf:aString from:index1 to:index2 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
        do:[:s :i1 :i2 :font |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
            font displayString:s from:i1 to:i2 x:x y:y in:aGC.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
            x := x + (font widthOf:aString from:i1 to:i2).
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   244
        ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   245
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   246
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   247
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   248
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   249
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   250
!CompoundFont methodsFor:'private'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   251
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
computeMaxBounds
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
    maxAscent := baseFont ascent.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
    maxDescent := baseFont descent.
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   255
    maxHeight := baseFont height.
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
    characterToFontMapping notNil ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
        characterToFontMapping keysAndValuesDo:[:char :aFont |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
            maxAscent := maxAscent max:aFont ascent.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
            maxDescent := maxDescent max:aFont descent.
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   260
            maxHeight := maxHeight max:aFont height.
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
        ]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
substringPartsOf:aString from:index1 to:index2 do:aBlock
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
    "helper - evaluate aBlock for parts of a string, which use the same font.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
     aBlock is invoked for consecutive substrings, passing the string,
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
     the startIndex, endIndex and the font as arguments."
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
    |i1 i2 fn char currentFont|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
    index2 < index1 ifTrue:[^ self].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
    i1 := index1.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    currentFont := characterToFontMapping at:(aString at:i1) ifAbsent:baseFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
    i2 := i1 + 1.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
    [i2 <= index2] whileTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
        char := aString at:i2.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
        fn := characterToFontMapping at:char ifAbsent:baseFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
        fn ~~ currentFont ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
            aBlock value:aString value:i1 value:(i2-1) value:currentFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
            currentFont := fn.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
            i1 := i2.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
        ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
        i2 := i2 + 1.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    i1 < i2 ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
        aBlock value:aString value:i1 value:(i2-1) value:currentFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
    "
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
     |f|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
     f := self new.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
     f baseFont:#baseFont.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
     f fontAt:$$ put:#font2.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   299
     f substringPartsOf:'ae$a' from:1 to:8 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
       do:[:s :i1 :i2 :f |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
             Transcript 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
                     show:i1; space;
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
                     show:i2; space;
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
                     showCR:f
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
          ]
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
    "
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
!CompoundFont methodsFor:'queries'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
ascent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
    maxAscent isNil ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
        self computeMaxBounds
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
    ^ maxAscent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
descent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
    maxDescent isNil ifTrue:[
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
        self computeMaxBounds
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
    ^ maxDescent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   325
height
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   326
    maxHeight isNil ifTrue:[
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   327
        self computeMaxBounds
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   328
    ].
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   329
    ^ maxHeight.
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   330
!
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   331
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
isFixedWidth
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    "return true, if this is a fixed pitch font (i.e. all characters
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
     are of the same width)"
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
    baseFont isFixedWidth ifFalse:[^ false].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   337
    characterToFontMapping keysAndValuesDo:[:char :font |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
        font isFixedWidth ifFalse:[^ false].    
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
    ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   340
    ^ true
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   341
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
maxAscent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
    ^ self ascent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
maxDescent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    ^ self descent
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
3659
26bd2ef5f0ed on -> onDevice
Michael Beyl <mb@exept.de>
parents: 2547
diff changeset
   352
onDevice:aDevice
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
    "return a device representation of the receiver.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
     Since I am device independent, return the receiver."
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   356
    |newFonts lastFont lastDeviceFont newFont|
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   357
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   358
    aDevice == device ifTrue:[ ^ self ].
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
    baseFont := baseFont onDevice:aDevice.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   361
    newFonts := Dictionary new.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
    characterToFontMapping keysAndValuesDo:[:char :font |
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   363
        font == lastFont ifTrue:[
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   364
            newFont := lastDeviceFont
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   365
        ] ifFalse:[
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   366
            newFont := font onDevice:aDevice.
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   367
            lastFont := font.
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   368
            lastDeviceFont := newFont.
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   369
        ].
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   370
        newFonts at:char put:newFont
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
    ].
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   372
    characterToFontMapping := newFonts.
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   373
    device := aDevice.
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
widthOf:aString from:index1 to:index2
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
    |w|
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
    w := 0.
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
    self 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
        substringPartsOf:aString from:index1 to:index2 
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
        do:[:s :i1 :i2 :f |
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
             w := w + (f widthOf:s from:i1 to:i2)
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
           ].
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
    ^ w
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
! !
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
!CompoundFont class methodsFor:'documentation'!
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
version
3660
30c7ab561a68 various fixes
Michael Beyl <mb@exept.de>
parents: 3659
diff changeset
   392
    ^ '$Header: /cvs/stx/stx/libview/CompoundFont.st,v 1.4 2002-07-23 19:33:48 mb Exp $'
2546
6443abc93415 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
! !