Font.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Wed, 06 Sep 2017 10:04:18 +0200
branchjv
changeset 8180 25149dfd68e0
parent 7710 1d2a2971ee34
child 7871 4a0de452b262
permissions -rw-r--r--
Build files: removed a bunch of make rules for long-dead unsupported systems ...in order to unify and simplify the build. If a need to support this ancient systems arose, these hacks may ni longer be needed (due to new versions of tools) or the hacks would have to be written again (better) or retrieved from SCM (worse). Time will show.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     1
"
6
7ee0cfde237d *** empty log message ***
claus
parents: 5
diff changeset
     2
 COPYRIGHT (c) 1992 by Claus Gittinger
71
6a42b2b115f8 *** empty log message ***
claus
parents: 54
diff changeset
     3
	      All Rights Reserved
0
48194c26a46c Initial revision
claus
parents:
diff changeset
     4
48194c26a46c Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
48194c26a46c Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
48194c26a46c Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
48194c26a46c Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
48194c26a46c Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
48194c26a46c Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
48194c26a46c Initial revision
claus
parents:
diff changeset
    11
"
3213
78add46c0f4b only init once
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
    12
"{ Package: 'stx:libview' }"
78add46c0f4b only init once
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
    13
6932
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
    14
"{ NameSpace: Smalltalk }"
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
    15
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
    16
FontDescription subclass:#Font
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
    17
	instanceVariableNames:'device fontId replacementFont ascent descent width isFixedWidth
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
    18
		minWidth maxWidth maxAscent maxDescent minCode maxCode direction'
1372
2b55617a712f keep deviceFonts in display device.
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
    19
	classVariableNames:'Replacements'
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
    20
	poolDictionaries:''
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
    21
	category:'Graphics-Support'
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    22
!
48194c26a46c Initial revision
claus
parents:
diff changeset
    23
2433
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    24
Object subclass:#DeviceFontHandle
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    25
	instanceVariableNames:'device fontId'
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    26
	classVariableNames:''
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    27
	poolDictionaries:''
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    28
	privateIn:Font
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    29
!
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
    30
1087
1e5a93e03d7f handle text-argument in withOf:
Claus Gittinger <cg@exept.de>
parents: 1067
diff changeset
    31
!Font class methodsFor:'documentation'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    32
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    33
copyright
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    34
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    35
 COPYRIGHT (c) 1992 by Claus Gittinger
71
6a42b2b115f8 *** empty log message ***
claus
parents: 54
diff changeset
    36
	      All Rights Reserved
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    37
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    38
 This software is furnished under a license and may be used
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    39
 only in accordance with the terms of that license and with the
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    40
 inclusion of the above copyright notice.   This software may not
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    41
 be provided or otherwise made available to, or used by, any
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    42
 other person.  No title to or ownership of the software is
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    43
 hereby transferred.
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    44
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    45
!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    46
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    47
documentation
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    48
"
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    49
    Font represents fonts in a device independent manner; after being
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    50
    created using 'Font family:family face:face style:style size:size',
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    51
    the returned font is not associated to a specific device.
157
claus
parents: 151
diff changeset
    52
    (therefore, those fonts can be used to draw on any GC)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    53
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    54
    To get a device font, any font can be sent the message
7431
c6769fccedff #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7346
diff changeset
    55
    'aFont onDevice:aDevice' which returns an instance of Font which is
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    56
    associated to a device (it returns the receiver, if that is already
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    57
    associated to that device).
0
48194c26a46c Initial revision
claus
parents:
diff changeset
    58
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    59
    For proper operation, each graphics operation working with fonts
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    60
    must get a device font before doing the draw.
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    61
    Most draw methods in DeviceDrawable do that automatically for you,
157
claus
parents: 151
diff changeset
    62
    before doing the draw; so you do not have to care.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
    63
81
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    64
    However, some operations require explicit conversion to a device font
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
    65
    before being allowed. For example, a query for a font's height (in device
81
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    66
    units) can only be done if the font being asked is associated to
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    67
    a device (which should be clear, since a 'courier-roman-12' font may
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    68
    have a different number of pixels on a 75dpi vs. a 120dpi display. And
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    69
    a totally different number of device units on a 600dpi laser printer.
81
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    70
    Thus, to query a font for its height (or ascent, or descent, or width),
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    71
    use something like:
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    72
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    73
        myFont := Font family:'courier' ... size:12.
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    74
            ...
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    75
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    76
        'want to know its height on the Display'
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    77
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    78
        h := (myFont on:Display) height.
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    79
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    80
        'want to know its height on a printer'
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    81
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
    82
        h := (myFont on:aPrinter) height.
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    83
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    84
    there are alternative shortcuts for these operations:
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    85
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    86
        h := myFont heightOn:Display.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    87
        h := myFont heightOn:Printer.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    88
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    89
        or:
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    90
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    91
        a := myFont ascentOn:Display.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
    92
81
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    93
    Keep in mind, that each device is free to think in whatever units it
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    94
    likes - a display may return units of pixels, a postscript printer may
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    95
    think in (fractions of) inches, a dot matrix printer may think in dots.
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    96
    Also, notice that currently only graphic displays are really supported;
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
    97
    printer devices are being developed and may or may not be in the current
81
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    98
    system.
4ba554473294 *** empty log message ***
claus
parents: 71
diff changeset
    99
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   100
    If a font cannot be represented on a device, a replacement
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
   101
    font is chosen and kept in the replacementFont instance variable.
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   102
    This is done to preserve the original font information, in case the image
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   103
    is restarted later on another display which has that font available.
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   104
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   105
601
2c4c1e797909 commentary
Claus Gittinger <cg@exept.de>
parents: 578
diff changeset
   106
    [Instance variables:]
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   107
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   108
      family          <String>        the font's family ('courier', 'helvetica' etc)
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   109
      face            <String>        the font's face ('bold', 'medium' etc)
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   110
      style           <String>        the font's style ('roman', 'italic', 'oblique')
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
   111
      size            <String>        the font's size (not in pixels)
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   112
      encoding        <Symbol>        the font's encoding (usually #iso8859)
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   113
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   114
      device          <Object>        the device the font is associated to, or nil
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   115
      fontId          <Object>        the id of the font on that device, or nil
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   116
      replacement     <Font>          the replacement font or nil
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   117
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   118
      ascent          <Integer>       the font's ascent in device units on device
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   119
      descent         <Integer>       the font's descent in device units on device
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   120
      width           <Integer>       the character width in device units on device
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   121
                                      (for variable fonts, its the width of a space)
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   122
      isFixedWidth    <Boolean>       true if font is a fixed width font
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   123
      minWidth        <Integer>       width of the smallest-width character in
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   124
                                      in device units on device
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   125
      maxWidth        <Integer>       width of the largest-width character in
564
3ddccbec4ee7 commentary
Claus Gittinger <cg@exept.de>
parents: 456
diff changeset
   126
                                      in device units on device
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   127
601
2c4c1e797909 commentary
Claus Gittinger <cg@exept.de>
parents: 578
diff changeset
   128
    [class variables:]
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   129
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   130
      Replacements    <Dictionary>    replacement fonts
601
2c4c1e797909 commentary
Claus Gittinger <cg@exept.de>
parents: 578
diff changeset
   131
2c4c1e797909 commentary
Claus Gittinger <cg@exept.de>
parents: 578
diff changeset
   132
    [see also:]
7577
81657d05b6ef #OTHER by mawalch
mawalch
parents: 7443
diff changeset
   133
        DeviceWorkstation
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   134
        DeviceDrawable GraphicsContext
601
2c4c1e797909 commentary
Claus Gittinger <cg@exept.de>
parents: 578
diff changeset
   135
        Cursor Color
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   136
        ( introduction to view programming :html: programming/viewintro.html#FONTS )
611
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
   137
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
   138
    [author:]
e0442439a3c6 documentation
Claus Gittinger <cg@exept.de>
parents: 601
diff changeset
   139
        Claus Gittinger
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   140
"
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   141
!
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   142
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   143
examples
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   144
"
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   145
    standard fonts:
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   146
5170
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   147
        Font family:'courier' size:12
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   148
5170
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   149
        Font 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   150
             family:'helvetica' 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   151
             face:'roman' 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   152
             style:'bold' 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   153
             size:16
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   154
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   155
        Font 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   156
             family:'helvetica' 
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   157
             pixelSize:20
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   158
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   159
5170
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   160
    special (non-portable displayType specific) fonts (typically: old X11 fonts):
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   161
5170
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   162
        Font name:'6x10'
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   163
5170
4646aa850bf2 pixelSized font preps
Claus Gittinger <cg@exept.de>
parents: 5167
diff changeset
   164
        Font name:'k14'
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   165
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   166
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   167
    setting the font of a button:
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   168
                                                                        [exBegin]
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   169
        |b|
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   170
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   171
        b := Button new.
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   172
        b label:'hello'.
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   173
        b font:(Font family:'helvetica' 
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   174
                     face:'medium' 
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   175
                     style:'roman' 
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   176
                     size:16).
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   177
        b open
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   178
                                                                        [exEnd]
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   179
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   180
    asking a font about a strings size in pixels, 
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   181
    if it was used on some device:
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   182
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   183
        aFont widthOf:'hello' on:Display
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   184
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   185
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   186
    asking about the ascent, if used on some device:
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   187
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   188
        aFont ascentOn:Display
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   189
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   190
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   191
    if the font has been associated to a device, the following are 
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   192
    a bit faster:
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   193
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   194
        |aFont|
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   195
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   196
        ...
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   197
7431
c6769fccedff #DOCUMENTATION by stefan
Stefan Vogel <sv@exept.de>
parents: 7346
diff changeset
   198
        aFont := aFont onDevice:aDevice.
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   199
        ...
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   200
        aFont widthOf:'hello'
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   201
        ...
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   202
        aFont ascent
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   203
        ...
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   204
"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   205
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   206
1087
1e5a93e03d7f handle text-argument in withOf:
Claus Gittinger <cg@exept.de>
parents: 1067
diff changeset
   207
!Font class methodsFor:'initialization'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   208
48194c26a46c Initial revision
claus
parents:
diff changeset
   209
initialize
48194c26a46c Initial revision
claus
parents:
diff changeset
   210
    "initialize the font tracking array"
48194c26a46c Initial revision
claus
parents:
diff changeset
   211
3213
78add46c0f4b only init once
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
   212
    Replacements isNil ifTrue:[
78add46c0f4b only init once
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
   213
        Replacements := Dictionary new.
71
6a42b2b115f8 *** empty log message ***
claus
parents: 54
diff changeset
   214
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   215
        Replacements 
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   216
            at:'serif'                  put:#('times' 'times new roman' 'palatino' 'bookman');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   217
            at:'sans-serif'             put:#('arial' 'lucida' 'helvetica');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   218
            at:'monospace'              put:#('courier new' 'courier' 'andale mono' 'lucidatypewriter' 'fixed').
5145
bad0795c0e71 *** empty log message ***
sr
parents: 5041
diff changeset
   219
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   220
        Replacements 
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   221
            at:'clean'                  put:#('courier new' 'courier');
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   222
            at:'fixed'                  put:#('courier new' 'courier');
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   223
            at:'new century schoolbook' put:#('times' 'times new roman');
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   224
            at:'arial'                  put:#('helvetica' 'lucida');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   225
            at:'lucida'                 put:#('arial' 'helvetica');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   226
            at:'lucidabright'           put:#('arial' 'helvetica');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   227
            at:'lucidatypewriter'       put:#('courier' 'courier new');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   228
            at:'courier'                put:#('courier new');
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   229
            at:'courier new'            put:#('courier');
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   230
            at:'charter'                put:#('times' 'times new roman');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   231
            at:'times new roman'        put:#('times');
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   232
            at:'times'                  put:#('times new roman');
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   233
            at:'terminal'               put:#('courier' 'courier new');
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   234
            at:'helvetica'              put:#('arial' 'lucida').
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   235
    ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   236
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   237
1087
1e5a93e03d7f handle text-argument in withOf:
Claus Gittinger <cg@exept.de>
parents: 1067
diff changeset
   238
!Font class methodsFor:'instance creation'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   239
5186
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   240
family:familyString face:faceString style:styleString size:sizeArgOrNil sizeUnit:sizeUnitArg encoding:encodingSym
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   241
    "returns a font for given family, face, style, size and encoding. 
5225
d5786752d508 fixes for pixel-sized fonts
Stefan Vogel <sv@exept.de>
parents: 5222
diff changeset
   242
     The returned font is not associated to a specific device."
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   243
54
29a6b2f8e042 *** empty log message ***
claus
parents: 46
diff changeset
   244
    |family newFont|
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   245
48194c26a46c Initial revision
claus
parents:
diff changeset
   246
    (familyString at:1) isUppercase ifTrue:[
2925
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   247
        family := familyString asLowercase
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   248
    ] ifFalse:[
2925
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   249
        family := familyString
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   250
    ].
48194c26a46c Initial revision
claus
parents:
diff changeset
   251
1372
2b55617a712f keep deviceFonts in display device.
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   252
    newFont := self basicNew 
2925
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   253
                    setFamily:familyString
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   254
                    face:faceString
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   255
                    style:styleString
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   256
                    size:sizeArgOrNil
5186
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   257
                    sizeUnit:sizeUnitArg
2925
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   258
                    encoding:encodingSym
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   259
                    device:nil.
1372
2b55617a712f keep deviceFonts in display device.
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   260
6539
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   261
"/    "look if this font is already known on the default device (the most common case)"
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   262
"/ don't do this!!
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   263
"/ is incompatible with Xft fonts. If reenabled, check printing in document viewer with XFT fonts enabled.
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   264
"/
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   265
"/    Display notNil ifTrue:[
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   266
"/        Display deviceFonts do:[:aFont |
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   267
"/            (newFont sameDeviceFontAs:aFont) ifTrue:[
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   268
"/                "/ self assert:(aFont encoding = newFont encoding).
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   269
"/                ^ aFont
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   270
"/            ]
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   271
"/        ]
a9f4cadf30a0 class: Font
Claus Gittinger <cg@exept.de>
parents: 6471
diff changeset
   272
"/    ].
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   273
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   274
    ^ newFont
2925
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   275
fadcf27b8f99 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2848
diff changeset
   276
    "Modified: / 26.9.1999 / 13:49:45 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   277
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   278
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   279
!Font methodsFor:'accessing'!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   280
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   281
device
4146
4c46ae30bd64 Use #graphicsDevice
Stefan Vogel <sv@exept.de>
parents: 4116
diff changeset
   282
    "return the device I am on.
4c46ae30bd64 Use #graphicsDevice
Stefan Vogel <sv@exept.de>
parents: 4116
diff changeset
   283
     Obsolete - use #graphicsDevice"
4c46ae30bd64 Use #graphicsDevice
Stefan Vogel <sv@exept.de>
parents: 4116
diff changeset
   284
4c46ae30bd64 Use #graphicsDevice
Stefan Vogel <sv@exept.de>
parents: 4116
diff changeset
   285
    <resource:#obsolete>
7269
4254121eadd0 device access
Claus Gittinger <cg@exept.de>
parents: 6932
diff changeset
   286
    self obsoleteMethodWarning:'use #graphicsDevice (2013-07-25)'.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   287
    ^ device
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   288
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   289
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   290
fontId
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   291
    "return the device-dependent font-id"
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   292
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   293
    replacementFont notNil ifTrue:[
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   294
        ^ replacementFont fontId
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   295
    ].
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   296
    ^ fontId
731
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   297
!
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   298
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   299
graphicsDevice
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   300
    "same as #device, for ST-80 compatibility naming.
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   301
     Return the device I am associated with."
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   302
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   303
    ^ device
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   304
8cac3347e13a added #graphicsDevice
Claus Gittinger <cg@exept.de>
parents: 710
diff changeset
   305
    "Created: 28.5.1996 / 18:39:53 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   306
! !
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   307
5145
bad0795c0e71 *** empty log message ***
sr
parents: 5041
diff changeset
   308
5559
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   309
!Font methodsFor:'converting'!
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   310
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   311
asFontDescription
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   312
    ^ FontDescription 
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   313
        family:family
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   314
        face:face
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   315
        style:style
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   316
        size:size
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   317
        sizeUnit:(sizeUnit ? #pt)
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   318
        encoding:encoding
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   319
! !
7fb05191247a added: #asFontDescription
Claus Gittinger <cg@exept.de>
parents: 5526
diff changeset
   320
3027
efb7b0c760f5 blocked deepCopying of fonts
Claus Gittinger <cg@exept.de>
parents: 2980
diff changeset
   321
!Font methodsFor:'copying'!
efb7b0c760f5 blocked deepCopying of fonts
Claus Gittinger <cg@exept.de>
parents: 2980
diff changeset
   322
4934
d715eb782001 deepCopy change
ab
parents: 4852
diff changeset
   323
deepCopyUsing:aDictionary postCopySelector:postCopySelector
3027
efb7b0c760f5 blocked deepCopying of fonts
Claus Gittinger <cg@exept.de>
parents: 2980
diff changeset
   324
    ^ self
efb7b0c760f5 blocked deepCopying of fonts
Claus Gittinger <cg@exept.de>
parents: 2980
diff changeset
   325
! !
efb7b0c760f5 blocked deepCopying of fonts
Claus Gittinger <cg@exept.de>
parents: 2980
diff changeset
   326
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   327
!Font methodsFor:'displaying'!
71
6a42b2b115f8 *** empty log message ***
claus
parents: 54
diff changeset
   328
3663
d40999d6cd1e refactored
Michael Beyl <mb@exept.de>
parents: 3658
diff changeset
   329
displayString:aString from:index1 to:index2 x:x y:y in:aGC opaque:opaque
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   330
    "this is only called for fonts which have a nil fontId,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   331
     and therefore use the replacementFont. Should never be called
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   332
     for non-replacement fonts."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   333
441
91c3ba82098f replacementFont fixes
Claus Gittinger <cg@exept.de>
parents: 438
diff changeset
   334
    |prevFont|
91c3ba82098f replacementFont fixes
Claus Gittinger <cg@exept.de>
parents: 438
diff changeset
   335
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   336
    prevFont := aGC font.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   337
    replacementFont isNil ifTrue:[
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   338
        fontId notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   339
            aGC basicFont:self.
3663
d40999d6cd1e refactored
Michael Beyl <mb@exept.de>
parents: 3658
diff changeset
   340
            aGC displayString:aString from:index1 to:index2 x:x y:y opaque:opaque.
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   341
        ] ifFalse:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   342
            'Font: [warning]: no replacementFont. should not happen' errorPrintCR.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   343
        ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   344
    ] ifFalse:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   345
        aGC basicFont:replacementFont.
3663
d40999d6cd1e refactored
Michael Beyl <mb@exept.de>
parents: 3658
diff changeset
   346
        aGC displayString:aString from:index1 to:index2 x:x y:y opaque:opaque.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   347
    ].
442
eb4ee58f5f0a use #basicFont:
Claus Gittinger <cg@exept.de>
parents: 441
diff changeset
   348
    aGC basicFont:prevFont.
441
91c3ba82098f replacementFont fixes
Claus Gittinger <cg@exept.de>
parents: 438
diff changeset
   349
1176
e0e2c8cbb3c8 newStyle info & error messages
Claus Gittinger <cg@exept.de>
parents: 1166
diff changeset
   350
    "Modified: 10.1.1997 / 17:51:17 / cg"
6471
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   351
!
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   352
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   353
displayString:aString from:index1 to:index2 x:x y:y in:aGC opaque:opaque maxWidth:maxWindowWidth
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   354
    "this is only called for fonts which have a nil fontId,
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   355
     and therefore use the replacementFont. Should never be called
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   356
     for non-replacement fonts."
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   357
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   358
    |prevFont|
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   359
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   360
    prevFont := aGC font.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   361
    replacementFont isNil ifTrue:[
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   362
        fontId notNil ifTrue:[
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   363
            aGC basicFont:self.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   364
            aGC displayString:aString from:index1 to:index2 x:x y:y opaque:opaque maxWidth:maxWindowWidth.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   365
        ] ifFalse:[
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   366
            'Font: [warning]: no replacementFont. should not happen' errorPrintCR.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   367
        ].
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   368
    ] ifFalse:[
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   369
        aGC basicFont:replacementFont.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   370
        aGC displayString:aString from:index1 to:index2 x:x y:y opaque:opaque maxWidth:maxWindowWidth.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   371
    ].
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   372
    aGC basicFont:prevFont.
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   373
613282ad19f0 class: Font
Stefan Vogel <sv@exept.de>
parents: 6204
diff changeset
   374
    "Modified: 10.1.1997 / 17:51:17 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   375
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   376
48194c26a46c Initial revision
claus
parents:
diff changeset
   377
!Font methodsFor:'getting a device font'!
48194c26a46c Initial revision
claus
parents:
diff changeset
   378
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   379
onDevice:aDevice
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   380
    "create a new Font representing the same font as
48194c26a46c Initial revision
claus
parents:
diff changeset
   381
     myself on aDevice; if one already exists, return the one."
48194c26a46c Initial revision
claus
parents:
diff changeset
   382
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   383
    |newFont rep|
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   384
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   385
    "if I am already assigned to that device ..."
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   386
    (device == aDevice) ifTrue:[^ self].
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   387
5222
09fb6ebff525 changed #onDevice: - formatting
Stefan Vogel <sv@exept.de>
parents: 5197
diff changeset
   388
    (aDevice isNil and:[device notNil]) ifTrue:[
09fb6ebff525 changed #onDevice: - formatting
Stefan Vogel <sv@exept.de>
parents: 5197
diff changeset
   389
        ^ self
5174
1bc656582c8b pixel size support
Claus Gittinger <cg@exept.de>
parents: 5170
diff changeset
   390
    ].
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   391
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   392
    aDevice deviceFonts do:[:aFont |
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   393
        (self sameDeviceFontAs:aFont) ifTrue:[
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   394
            ^ aFont
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   395
        ].
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   396
    ].
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   397
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   398
    newFont := self onDevice:aDevice ifAbsent:nil.
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   399
    newFont isNil ifTrue:[
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   400
        "oops did not work - (device has no such font)"
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   401
        aDevice isOpen ifFalse:[
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   402
            "/ the display device is not connected
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   403
            "/ (or has a broken connection).
3739
909fefa92b5a Raise #drawingOnClosedDeviceSignal instead of #error
Stefan Vogel <sv@exept.de>
parents: 3663
diff changeset
   404
            aDevice class drawingOnClosedDeviceSignal raiseRequestWith:aDevice.
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   405
            ^ self.
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   406
        ].
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   407
5040
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   408
        "/ look for a replacement font
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   409
        rep := self replacementFontOnDevice:aDevice.
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   410
        device isNil ifTrue:[
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   411
            device := aDevice.
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   412
            replacementFont := rep.
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   413
            newFont := self.
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   414
        ] ifFalse:[
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   415
            newFont := self class basicNew.
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   416
            newFont
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   417
                setFamily:family 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   418
                face:face 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   419
                style:style 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   420
                size:(sizeUnit == #px ifTrue:[pixelSize] ifFalse:[size]) 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   421
                sizeUnit:sizeUnit 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   422
                encoding:encoding 
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   423
                device:aDevice;
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   424
                isGenericFont:self isGenericFont;
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   425
                setReplacementFont:rep.
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   426
        ].
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   427
        aDevice registerFont:newFont.
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   428
    ].
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   429
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   430
    ^ newFont
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   431
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   432
    "
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   433
     (Font family:'fooXXXXXX' size:17) onDevice:Screen current
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   434
    "
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   435
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   436
    "Modified: 14.4.1997 / 18:22:31 / cg"
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   437
!
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   438
7701
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   439
onDevice:aDevice xFontsOnly:xFontsOnly xftFontsOnly:xftFontsOnly ifAbsent:exceptionBlock 
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   440
    "create a new Font representing the same font as myself on aDevice. 
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   441
     The xFontsOnly/xftFontsOnly are only relevant for XWindow devices;
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   442
     xFontsOnly will suppress xft fonts, whereas xftFontsOnly will suppress x fonts
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   443
     (the first is useful if ST/X has a slow remote X connection for display,
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   444
      on which xft fonts are very slow. Yes, this is actually a reasonable setup
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   445
      in use at one of our customers)
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   446
     This does NOT try to look for existing
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   447
     or replacement fonts (i.e. can be used to get physical fonts)."
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   448
7624
b49d1f99b8dd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7577
diff changeset
   449
    |id xftFont|
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   450
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   451
    "receiver was not associated - do it now"
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   452
    device isNil ifTrue:[
7701
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   453
        aDevice supportsXftFonts ifTrue:[
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   454
            xFontsOnly ifFalse:[
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   455
                xftFont := (XftFontDescription for:self) onDevice:aDevice ifAbsent:[nil].
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   456
                xftFont notNil ifTrue:[^ xftFont].
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   457
                xftFontsOnly ifTrue:[^ nil].
8ec4585fa762 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 7624
diff changeset
   458
            ].    
7624
b49d1f99b8dd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7577
diff changeset
   459
        ].    
b49d1f99b8dd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 7577
diff changeset
   460
        
3785
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   461
        "ask that device for the font"
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   462
        id := aDevice 
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   463
                getFontWithFamily:family 
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   464
                face:face 
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   465
                style:style 
5186
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   466
                size:(sizeUnit == #px ifTrue:[pixelSize] ifFalse:[size])  
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   467
                sizeUnit:sizeUnit  
6158
17d06f1e4ca6 class: Font
Stefan Vogel <sv@exept.de>
parents: 6109
diff changeset
   468
                encoding:encoding ? '*'.
3785
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   469
        id isNil ifTrue:[
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   470
            "oops did not work - (device has no such font)"
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   471
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   472
            ^ exceptionBlock value
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   473
        ].
045a05c6abbe onDevice:ifAbsent:
Claus Gittinger <cg@exept.de>
parents: 3739
diff changeset
   474
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   475
        device := aDevice.
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   476
        fontId := id.
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   477
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   478
        self getFontInfos.
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   479
        aDevice registerFont:self.
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   480
        ^ self
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   481
    ].
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   482
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   483
    "receiver was already associated to another device - need a new font"
7710
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   484
    ^ super 
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   485
        onDevice:aDevice 
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   486
        xFontsOnly:xFontsOnly xftFontsOnly:xftFontsOnly 
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   487
        ifAbsent:exceptionBlock
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   488
1d2a2971ee34 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 7701
diff changeset
   489
    "Modified: / 24-11-2016 / 16:53:36 / cg"
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   490
!
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   491
3628
ddeeaa203e86 Fix obsolete methods
Stefan Vogel <sv@exept.de>
parents: 3623
diff changeset
   492
replacementFontOnDevice:aDevice
12
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   493
    "return a replacement font for the receiver - this is needed, if
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   494
     an image is restored on another type of display, or one which has
9f0995fac1fa *** empty log message ***
claus
parents: 6
diff changeset
   495
     a different set of fonts."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   496
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   497
    |id f trySize alternatives alternateFamilyName useEncoding|
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   498
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   499
    "try font with smaller size - 
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   500
     but do not try this on scaled fonts (they have size == 0)"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   501
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   502
    useEncoding := encoding ? #'iso10646-1'.
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   503
    alternateFamilyName := family.
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   504
    self isGenericFont ifFalse:[
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   505
        trySize := (sizeUnit == #px ifTrue:[pixelSize] ifFalse:[size]) ? 0.
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   506
        [id isNil and:[trySize := trySize - 1. trySize > 4]] whileTrue:[
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   507
            id := aDevice 
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   508
                    getFontWithFamily:family
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   509
                    face:face
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   510
                    style:style 
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   511
                    size:trySize  
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   512
                    sizeUnit:sizeUnit  
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   513
                    encoding:useEncoding.
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   514
        ].
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   515
    ].
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   516
144
claus
parents: 127
diff changeset
   517
    id notNil ifTrue:[
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   518
        ('Font [info]: use alternative size ', trySize printString, ' for ' , (self userFriendlyName)) infoPrintCR.
144
claus
parents: 127
diff changeset
   519
    ] ifFalse:[
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   520
        alternatives := Replacements at:family asLowercase ifAbsent:nil.
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   521
        alternatives notNil ifTrue:[
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   522
            alternatives detect:[:eachAlternateFamilyName|
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   523
                trySize := (sizeUnit == #px ifTrue:[pixelSize] ifFalse:[size]) ? 0.
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   524
                [
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   525
                    id := aDevice 
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   526
                            getFontWithFamily:eachAlternateFamilyName
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   527
                            face:face
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   528
                            style:style 
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   529
                            size:trySize  
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   530
                            sizeUnit:sizeUnit  
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   531
                            encoding:useEncoding.
5990
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   532
                ] doWhile:[id isNil and:[trySize := trySize - 1. trySize > 4. false]].
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   533
                alternateFamilyName := eachAlternateFamilyName.
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   534
                id notNil.
5526
2eb1df09a195 changed: #replacementFontOnDevice:
Stefan Vogel <sv@exept.de>
parents: 5512
diff changeset
   535
            ] ifNone:[].
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   536
        ].
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   537
        id notNil ifTrue:[
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   538
            ('Font [info]: use alternative: ', alternateFamilyName , ' for: ' , (self userFriendlyName)) infoPrintCR.
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   539
        ] ifFalse:[
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   540
            useEncoding = #'iso10646-1' ifTrue:[
5990
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   541
                "/ try latin1 (for osx-X11)
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   542
                id := aDevice 
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   543
                        getFontWithFamily:family
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   544
                        face:face
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   545
                        style:style 
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   546
                        size:(sizeUnit == #px ifTrue:[pixelSize] ifFalse:[size ? 0])  
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   547
                        sizeUnit:sizeUnit  
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   548
                        encoding:#'iso8859-1'.
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   549
                id notNil ifTrue:[
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   550
                    ('Font [info]: use latin1 encoding for: ' , (self userFriendlyName)) infoPrintCR.
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   551
                ].
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   552
            ].
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   553
            id isNil ifTrue:[
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   554
                id := aDevice getDefaultFontWithEncoding:useEncoding.
5990
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   555
                ('Font [info]: use default for ' , (self userFriendlyName)) infoPrintCR.
13498d2ba36b class: Font
Claus Gittinger <cg@exept.de>
parents: 5981
diff changeset
   556
            ].
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   557
        ].
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   558
        id isNil ifTrue:[
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   559
            "oops did not work - this is a serious an error"
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   560
            self error:'cannot get default font' mayProceed:true.
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   561
            ^ nil
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   562
        ].
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   563
    ].
4163
27ad8e90c647 When a font with a given size does not exist, try smaller fonts as replacement.
Stefan Vogel <sv@exept.de>
parents: 4146
diff changeset
   564
5040
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   565
    "/ if there already is a device font for that replacement, return that one
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   566
    "/ to avoid allocating multiple replacements for the same font
5512
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   567
    aDevice deviceFonts do:[:eachDeviceFont |
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   568
        (self sameDeviceFontAs:eachDeviceFont) ifTrue:[
e4ede40d58ee Support a list of replacement fonts and try each in order
Stefan Vogel <sv@exept.de>
parents: 5493
diff changeset
   569
            ^ eachDeviceFont
5040
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   570
        ]
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   571
    ].
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   572
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   573
    f := self class basicNew.
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   574
    f 
6204
56abbbb55591 Replace references to Diplay with "Screen current" - where appropriate
Stefan Vogel <sv@exept.de>
parents: 6163
diff changeset
   575
        setFamily:alternateFamilyName face:face style:style size:trySize sizeUnit:sizeUnit encoding:useEncoding device:aDevice;
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   576
        setDevice:aDevice fontId:id;
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   577
        getFontInfos.
5040
b28c261dd543 replacement font handling did not remember font in the registry,
Claus Gittinger <cg@exept.de>
parents: 4934
diff changeset
   578
1372
2b55617a712f keep deviceFonts in display device.
Claus Gittinger <cg@exept.de>
parents: 1229
diff changeset
   579
    aDevice registerFont:f.
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   580
    ^ f
454
b31d0a7e5530 nicer infoMessage when replacementFont is used
Claus Gittinger <cg@exept.de>
parents: 453
diff changeset
   581
1166
a3bd26b25dc3 new infoMessage scheme
Claus Gittinger <cg@exept.de>
parents: 1087
diff changeset
   582
    "Modified: 10.1.1997 / 15:40:21 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   583
! !
48194c26a46c Initial revision
claus
parents:
diff changeset
   584
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   585
!Font methodsFor:'instance release'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   586
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   587
executor
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   588
    "redefined to return a lightweight copy 
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   589
     - all we need is the device handle"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   590
2848
93cb416c82b2 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2846
diff changeset
   591
    ^ DeviceFontHandle basicNew setDevice:device fontId:fontId.
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   592
2433
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
   593
    "Modified: / 20.4.1996 / 23:23:04 / cg"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
   594
    "Modified: / 3.2.1999 / 16:13:10 / stefan"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   595
! !
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   596
4852
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   597
!Font methodsFor:'object persistency'!
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   598
4207
9e70f7998f66 elementDescriptorFor: instead of encodingVectorFor:
penk
parents: 4205
diff changeset
   599
elementDescriptorFor:aspect
4852
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   600
    "support for persistency:
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   601
     answer the elements to be made persistent with an ObjectCoder"
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   602
4006
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   603
    "binary storage encoding vector"
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   604
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   605
    ^ Array 
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   606
        with:(#family->self family) 
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   607
        with:(#face->self face) 
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   608
        with:(#style->self style) 
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   609
        with:(#size->self size)
8af191725687 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3934
diff changeset
   610
        with:(#encoding->self encoding)
4852
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   611
! !
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   612
60af6ad07a3c category change
Claus Gittinger <cg@exept.de>
parents: 4803
diff changeset
   613
!Font methodsFor:'printing & storing'!
3934
9226f49c99d5 encodingVectorFor:aspect (XMLStandardCoder)
tm
parents: 3785
diff changeset
   614
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   615
printOn:aStream
2805
2efe543c9788 comment
Claus Gittinger <cg@exept.de>
parents: 2767
diff changeset
   616
    "append a user printed representation of the receiver to aStream.
2efe543c9788 comment
Claus Gittinger <cg@exept.de>
parents: 2767
diff changeset
   617
     The format is suitable for a human - not meant to be read back.
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   618
     Redefined to print more about the font's name"
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   619
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   620
    face isNil ifTrue:[
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   621
        family isNil ifTrue:[
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   622
            aStream nextPutAll:('a replacement-Font').
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   623
            ^ self
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   624
        ].
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   625
        aStream nextPutAll:('a ' , family , '-Font').
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   626
        ^ self.
46
7b331e9012fd *** empty log message ***
claus
parents: 35
diff changeset
   627
    ].
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   628
    aStream nextPutAll:('a ' , family , '-' , 
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   629
                               face , '-' , 
4803
71f3f3c09cf7 changed #printOn:
sr
parents: 4751
diff changeset
   630
                               style printString , '-' , 
4007
f6f734115906 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4006
diff changeset
   631
                               size printString , 
f6f734115906 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4006
diff changeset
   632
                               ' (' , encoding printString , ')' ,
f6f734115906 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4006
diff changeset
   633
                               '-Font')
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   634
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   635
    "Modified: 20.4.1996 / 23:25:11 / cg"
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   636
!
48194c26a46c Initial revision
claus
parents:
diff changeset
   637
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   638
storeOn:aStream
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   639
    "append a character sequence to the argument, aStream from which the
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   640
     receiver can be reconstructed using readFrom:."
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   641
109
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   642
    aStream nextPutAll:'(Font family:'. family storeOn:aStream.
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   643
    aStream nextPutAll:' face:'.        face storeOn:aStream.
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   644
    aStream nextPutAll:' style:'.       style storeOn:aStream.
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   645
    aStream nextPutAll:' size:'.        size storeOn:aStream.
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   646
    aStream nextPutAll:' encoding:'.    encoding storeOn:aStream.
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   647
    aStream nextPut:$)
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   648
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   649
    "
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   650
     (Font family:'helvetica' size:10) storeString
ba47d9d6bda8 *** empty log message ***
claus
parents: 99
diff changeset
   651
    "
0
48194c26a46c Initial revision
claus
parents:
diff changeset
   652
! !
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
   653
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   654
!Font methodsFor:'private'!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   655
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   656
getFontInfos
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   657
    "ask the device about all of my actual attributes"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   658
5578
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   659
    |info fetchedEncoding|
991
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   660
3479
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   661
    replacementFont notNil ifTrue:[
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   662
        replacementFont getFontInfos.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   663
        ^ self
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   664
    ].
991
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   665
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   666
    info := self getFontMetrics.
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   667
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   668
    minCode := info minCode.
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   669
    maxCode := info maxCode.
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   670
    direction := info direction.
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   671
5578
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   672
    fetchedEncoding := info encoding.
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   673
    fetchedEncoding isNil ifTrue:[
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   674
        fetchedEncoding := device encodingOf:fontId.
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   675
    ].
6078
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   676
5578
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   677
    encoding notNil ifTrue:[
6078
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   678
        (encoding ~= fetchedEncoding) ifTrue:[
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   679
            (( #( #'iso10646-1' #'ms-default' #'ms-ansi' #'ms-oem' ) includes:encoding)
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   680
            and:[ ( #( #'iso10646-1' #'ms-default' #'ms-ansi' #'ms-oem' ) includes:fetchedEncoding)]) ifFalse:[
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   681
                encoding ~= #* ifTrue:[
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   682
                    ('Font [warning]: encoding for "%1" should be %2; is %3 '
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   683
                        bindWith:self with: encoding with: fetchedEncoding) infoPrintCR.
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   684
                ].
929a4443cb7c class: Font
Claus Gittinger <cg@exept.de>
parents: 6076
diff changeset
   685
            ].
5582
c9401d8e2207 changed: #getFontInfos
Stefan Vogel <sv@exept.de>
parents: 5579
diff changeset
   686
        ].
5578
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   687
    ] ifFalse:[
8b4715d3c62d getFontInfos: do NOT overwrite my current encosing,
ca
parents: 5559
diff changeset
   688
        encoding := fetchedEncoding.
3527
cac44b80270e ps font fixes
Claus Gittinger <cg@exept.de>
parents: 3483
diff changeset
   689
    ].
3479
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   690
    ascent := info ascent.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   691
    descent := info descent.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   692
    maxAscent := info maxAscent.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   693
    maxDescent := info maxDescent.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   694
    minWidth := info minWidth.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   695
    maxWidth := info maxWidth.
e647bc300eba fontMetric stuff changed
Claus Gittinger <cg@exept.de>
parents: 3415
diff changeset
   696
    width := info averageWidth.
991
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   697
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   698
    width < minWidth ifTrue:[
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   699
        "/ some systems/fonts return a wrong value (0) as width of a space
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   700
        "/ - at least with X11 ...
b3a0b903bd7f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 927
diff changeset
   701
        width := minWidth
994
7e720b29c838 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 991
diff changeset
   702
    ].
5647
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   703
    isFixedWidth := minWidth == maxWidth.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   704
5647
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   705
    "/ a temporary hack for the vista-cleartype font redraw problem
5668
7c7c6df62b22 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5647
diff changeset
   706
    false "isFixedWidth" ifFalse:[
5647
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   707
        UserPreferences current workAroundRenderingBugOnVista ifTrue:[
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   708
            self hasOverlappingCharacters:true.
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   709
        ]
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   710
    ].
137a4b4eb652 changed: #getFontInfos
Claus Gittinger <cg@exept.de>
parents: 5585
diff changeset
   711
    "Modified: / 09-11-2010 / 12:58:56 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   712
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   713
3658
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   714
getFontMetrics
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   715
    "ask the device about all of my actual attributes"
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   716
6163
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   717
    |metrics|
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   718
3658
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   719
    replacementFont notNil ifTrue:[
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
   720
        ^ replacementFont getFontMetrics
3658
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   721
    ].
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   722
6163
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   723
    metrics := device fontMetricsOf:fontId.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   724
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   725
    "the MS TrueType unicode core fonts in Linux have way to large ascent
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   726
     and descent values, so the line spacing is too wide.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   727
     Take them from the latin-1 equivalent"
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   728
    (device platformName == #X11
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   729
     and:[encoding = #'iso10646-1'
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   730
     and:[metrics ascent = metrics maxAscent 
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   731
     and:[metrics descent == metrics maxDescent]]]) ifTrue:[
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   732
        |latinFont latinMetrics|
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   733
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   734
        latinFont := self asEncoding:'iso8859-1'.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   735
        latinFont notNil ifTrue:[
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   736
            latinMetrics := latinFont getFontMetrics.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   737
            metrics ascent:latinMetrics ascent descent:latinMetrics descent.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   738
        ].
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   739
    ].
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   740
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   741
    ^ metrics.
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   742
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   743
    "
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   744
         (View defaultFont onDevice:Screen current) getFontMetrics
f5e0de280f35 class: Font
Stefan Vogel <sv@exept.de>
parents: 6158
diff changeset
   745
     "
3658
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   746
!
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   747
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   748
getFontResolution
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   749
    "ask the device about all of my actual attributes"
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   750
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   751
    |f|
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   752
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   753
    f := fontId.
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   754
    replacementFont notNil ifTrue:[
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   755
        f := replacementFont fontId.
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   756
    ].
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   757
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   758
    ^ device fontResolutionOf:f.
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   759
!
8932bb6311ef #getFontMetrics and #getFontResolution
Stefan Vogel <sv@exept.de>
parents: 3628
diff changeset
   760
7443
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   761
installInDeviceForGCId:aGCId
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   762
    "install the font for aGCId"
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   763
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   764
    (device isNil or:[fontId isNil]) ifTrue:[
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   765
        "this should not happen, since #onDevice tries replacement fonts"
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   766
        Logger error:'no device font for: %1' with:self.
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   767
        ^ nil.
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   768
    ].
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   769
    device setFont:fontId in:aGCId.
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   770
!
e2d05b756727 Use devices registry
Stefan Vogel <sv@exept.de>
parents: 7431
diff changeset
   771
2846
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   772
releaseFromDevice
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   773
    "I am no longer available on the device"
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   774
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   775
    device := nil.
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   776
    fontId := nil.
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   777
    replacementFont := nil
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   778
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   779
    "Modified: 20.4.1996 / 23:26:26 / cg"
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   780
!
05c5fdd17641 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 2833
diff changeset
   781
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   782
restored
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   783
    "flush device handles when restored"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   784
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   785
    device := nil.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   786
    fontId := nil.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   787
    replacementFont := nil
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   788
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   789
    "Modified: 20.4.1996 / 23:26:26 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   790
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   791
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   792
setDevice:aDevice
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   793
    "set the device handle"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   794
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   795
    device := aDevice
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   796
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   797
    "Modified: 20.4.1996 / 23:26:35 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   798
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   799
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   800
setDevice:aDevice fontId:aFontId
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   801
    "set the device and font handles"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   802
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   803
    device := aDevice.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   804
    fontId := aFontId
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   805
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   806
    "Modified: 20.4.1996 / 23:26:43 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   807
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   808
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   809
setFamily:familyString face:faceString style:styleString size:sizeNum encoding:encodingSym device:aDevice
5186
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   810
    <resource: #obsolete>
6109
e35961f7892a class: Font
Stefan Vogel <sv@exept.de>
parents: 6104
diff changeset
   811
    self obsoleteMethodWarning:'2013-07-25'.
5186
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   812
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   813
    self 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   814
        setFamily:familyString 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   815
        face:faceString 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   816
        style:styleString 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   817
        size:sizeNum 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   818
        sizeUnit:#pt
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   819
        encoding:encodingSym 
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   820
        device:aDevice
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   821
!
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   822
adffd6f387e7 pixelSize stuff
Claus Gittinger <cg@exept.de>
parents: 5174
diff changeset
   823
setFamily:familyString face:faceString style:styleString size:sizeArg sizeUnit:sizeUnitArg encoding:encodingSym device:aDevice
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   824
    "set my instance attributes"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   825
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   826
    family := familyString.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   827
    face := faceString.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   828
    style := styleString.
5253
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   829
    sizeUnit := (sizeUnitArg ? #pt).
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   830
    sizeUnit == #pt ifTrue:[ 
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   831
        size := sizeArg 
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   832
    ] ifFalse:[
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   833
        sizeUnit == #px ifTrue:[ 
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   834
            pixelSize := sizeArg 
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   835
        ] ifFalse:[
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   836
            self error:'invalid sizeUnit' mayProceed:true.
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   837
            size := 12.
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   838
            sizeUnit := #pt
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   839
        ].
da138ae76b05 care for nil sizeUnit
Claus Gittinger <cg@exept.de>
parents: 5225
diff changeset
   840
    ].
5167
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   841
    encoding := encodingSym.
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   842
    device := aDevice
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   843
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   844
    "Modified: 20.4.1996 / 23:26:56 / cg"
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   845
!
39ac1126dc6b preps for pixelSized fonts
Claus Gittinger <cg@exept.de>
parents: 5146
diff changeset
   846
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   847
setFontId:aFontId
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   848
    "set my font handle"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   849
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   850
    fontId := aFontId
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   851
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   852
    "Modified: 20.4.1996 / 23:27:05 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   853
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   854
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   855
setReplacementFont:aFont
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   856
    "set my replacement font"
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   857
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   858
    replacementFont := aFont
578
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   859
69373a884165 commentary
Claus Gittinger <cg@exept.de>
parents: 564
diff changeset
   860
    "Modified: 20.4.1996 / 23:27:16 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   861
! !
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   862
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   863
!Font methodsFor:'queries-deviceFonts'!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   864
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   865
fullName
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   866
    "return the full (device specific) name of the receiver.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   867
     This is query only valid if the receiver is associated to a device"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   868
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   869
    device isNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   870
        ^ nil
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   871
    ].
3415
5318d7f58d35 Rename #fullNameOf: to #fullFontNameOf:
Stefan Vogel <sv@exept.de>
parents: 3213
diff changeset
   872
    ^ device fullFontNameOf:fontId.
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   873
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   874
    "
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   875
     ((Font name:'6x10') on:Display) fullName  
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   876
    "
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   877
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   878
    "Modified: 30.4.1996 / 17:30:10 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   879
!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   880
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   881
isFixedWidth
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   882
    "return true, if all characters have same width (as in courier).
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   883
     The receiver must be associated to a device,
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   884
     for this query to be legal."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   885
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   886
    device isNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   887
	self errorNoDevice.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   888
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   889
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   890
	^ replacementFont isFixedWidth
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   891
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   892
    ^ isFixedWidth
6932
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   893
!
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   894
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   895
maxWidth
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   896
    "return the width of the widest character;
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   897
     if the receiver is a fixed width font its the width of every character.
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   898
     The receiver must be associated to a device,
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   899
     for this query to be legal."
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   900
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   901
    device isNil ifTrue:[
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   902
	self errorNoDevice
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   903
    ].
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   904
    replacementFont notNil ifTrue:[
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   905
	^ replacementFont maxWidth
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   906
    ].
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
   907
    ^ maxWidth
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   908
! !
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   909
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   910
!Font methodsFor:'queries-dimensions'!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   911
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   912
ascent
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   913
    "return the font-ascent (i.e. the normal average of all characters);
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   914
     That is the number of units (usually pixels) above the baseline.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   915
     The receiver must be associated to a device,
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   916
     for this query to be legal."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   917
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   918
    device isNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   919
	self errorNoDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   920
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   921
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   922
	^ replacementFont ascent
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   923
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   924
    ^ ascent
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   925
!
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   926
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   927
ascentOn:aDevice
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   928
    "return the font's ascent (average), if used on aDevice."
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   929
2321
75a179c343cf try replacement forn first if nonnil in queries
Claus Gittinger <cg@exept.de>
parents: 2096
diff changeset
   930
    replacementFont notNil ifTrue:[
75a179c343cf try replacement forn first if nonnil in queries
Claus Gittinger <cg@exept.de>
parents: 2096
diff changeset
   931
        ^ replacementFont ascentOn:aDevice
75a179c343cf try replacement forn first if nonnil in queries
Claus Gittinger <cg@exept.de>
parents: 2096
diff changeset
   932
    ].
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   933
    device == aDevice ifTrue:[
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   934
        ^ ascent
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   935
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   936
    ^ (self onDevice:aDevice) ascent
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   937
2321
75a179c343cf try replacement forn first if nonnil in queries
Claus Gittinger <cg@exept.de>
parents: 2096
diff changeset
   938
    "Created: / 30.4.1996 / 16:41:32 / cg"
75a179c343cf try replacement forn first if nonnil in queries
Claus Gittinger <cg@exept.de>
parents: 2096
diff changeset
   939
    "Modified: / 10.9.1998 / 12:09:06 / cg"
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   940
!
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
   941
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   942
descent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   943
    "return the font-descent (i.e. the normal average of all characters);
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   944
     That is the number of units (usually pixels) below the baseline.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   945
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   946
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   947
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   948
    device isNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   949
	self errorNoDevice
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   950
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   951
    replacementFont notNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   952
	^ replacementFont descent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   953
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   954
    ^ descent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   955
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   956
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   957
descentOn:aDevice
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   958
    "return the font's descent (average), if used on aDevice."
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   959
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   960
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   961
        ^ replacementFont descentOn:aDevice
438
03e433e2be99 return encoding & fullNames
Claus Gittinger <cg@exept.de>
parents: 435
diff changeset
   962
    ].
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   963
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   964
        ^ descent
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   965
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
   966
    ^ (self onDevice:aDevice) descent
438
03e433e2be99 return encoding & fullNames
Claus Gittinger <cg@exept.de>
parents: 435
diff changeset
   967
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   968
    "Created: / 30.4.1996 / 16:41:43 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
   969
    "Modified: / 10.9.1998 / 12:09:30 / cg"
438
03e433e2be99 return encoding & fullNames
Claus Gittinger <cg@exept.de>
parents: 435
diff changeset
   970
!
03e433e2be99 return encoding & fullNames
Claus Gittinger <cg@exept.de>
parents: 435
diff changeset
   971
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   972
height
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   973
    "return the font's characters normal (average) height;
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   974
     That is the number of units (usually pixels) on the device.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   975
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   976
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   977
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   978
    device isNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   979
        self errorNoDevice.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   980
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   981
    replacementFont notNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
   982
        ^ replacementFont height
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   983
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   984
    ^ descent + ascent.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   985
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
   986
667
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   987
heightOf:textOrString
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   988
    "return the height (device specific) of the argument;
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   989
     the argument must be a String.
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   990
     CAVEAT:
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   991
        currently only constant height fonts are supported."
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   992
5981
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
   993
    |sum|
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
   994
667
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   995
    device isNil ifTrue:[
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   996
        self errorNoDevice.
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   997
        ^ 0
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   998
    ].
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
   999
    replacementFont notNil ifTrue:[
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1000
        ^ replacementFont heightOf:textOrString
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1001
    ].
5981
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1002
    device supportsVariableHeightFonts ifFalse:[
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1003
        ^ descent + ascent
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1004
    ].
667
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1005
5981
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1006
    (textOrString isString) ifTrue:[
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1007
        ^ device heightOf:textOrString string inFont:fontId
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1008
    ].
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1009
    (textOrString isCharacter) ifTrue:[
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1010
        ^ device heightOf:textOrString asString inFont:fontId
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1011
    ].
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1012
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1013
    sum := 0.
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1014
    textOrString do:[:lineString |
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1015
        lineString isString ifTrue:[
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1016
            sum := sum + (device heightOf:lineString asString inFont:fontId).
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1017
        ]
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1018
    ].
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1019
    ^ sum
667
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1020
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1021
    "Created: 12.5.1996 / 11:05:00 / cg"
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1022
!
091cc1707848 height queries (prepare for non-constant heights)
Claus Gittinger <cg@exept.de>
parents: 628
diff changeset
  1023
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1024
heightOf:aString on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1025
    "return the height of aString, if displayed on aDevice.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1026
     The argument must be a string-like object."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1027
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1028
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1029
        ^ replacementFont heightOf:aString on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1030
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1031
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1032
        ^ self heightOf:aString
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1033
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1034
    ^ (self onDevice:aDevice) heightOf:aString
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1035
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1036
    "Created: / 30.4.1996 / 17:14:18 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1037
    "Modified: / 10.9.1998 / 12:09:47 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1038
!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1039
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1040
heightOn:aDevice
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1041
    "return the font's height (average), if used on aDevice."
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1042
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1043
    replacementFont notNil ifTrue:[
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1044
        ^ replacementFont heightOn:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1045
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1046
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1047
        ^ descent + ascent
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1048
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1049
    ^ (self onDevice:aDevice) height
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1050
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1051
    "Created: / 30.4.1996 / 16:41:59 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1052
    "Modified: / 10.9.1998 / 12:08:18 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1053
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1054
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1055
maxAscent
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1056
    "return the font's maximum-ascent (i.e. the maximum of all characters);
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1057
     That is the number of units (usually pixels) above the baseline.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1058
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1059
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1060
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1061
    device isNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1062
        self errorNoDevice
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1063
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1064
    replacementFont notNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1065
        ^ replacementFont maxAscent
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1066
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1067
    ^ maxAscent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1068
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1069
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1070
maxDescent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1071
    "return the font-descent (i.e. the maximum of all characters);
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1072
     That is the number of units (usually pixels) below the baseline.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1073
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1074
     for this query to be legal."
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1075
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1076
    device isNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1077
	self errorNoDevice
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1078
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1079
    replacementFont notNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1080
	^ replacementFont maxDescent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1081
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1082
    ^ maxDescent
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1083
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1084
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1085
maxHeight
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1086
    "return the font's characters maximum height;
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1087
     That is the number of units (usually pixels) on the device.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1088
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1089
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1090
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1091
    device isNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1092
        self errorNoDevice.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1093
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1094
    replacementFont notNil ifTrue:[
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1095
        ^ replacementFont maxHeight
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1096
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1097
    ^ maxDescent + maxAscent.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1098
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1099
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1100
minWidth
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1101
    "return the width of the smallest character;
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1102
     if the receiver is a fixed width font its the width of every character.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1103
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1104
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1105
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1106
    device isNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1107
	self errorNoDevice
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1108
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1109
    replacementFont notNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1110
	^ replacementFont minWidth
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1111
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1112
    ^ minWidth
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1113
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1114
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1115
width
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1116
    "return the font's characters width;
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1117
     That is the number of units (usually pixels) on the device.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1118
     For variable pitch fonts, the width of the space character is returned.
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
  1119
     For fixed fonts, this is the same as minWidth or maxWidth (or any character).
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1120
     The receiver must be associated to a device, for this query to be legal."
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1121
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1122
    device isNil ifTrue:[
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
  1123
        self errorNoDevice.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1124
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1125
    replacementFont notNil ifTrue:[
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
  1126
        ^ replacementFont width
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1127
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1128
    ^ width
628
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
  1129
4ac28f9d9c7b added queries a-la #widthOn:aDevice
Claus Gittinger <cg@exept.de>
parents: 611
diff changeset
  1130
    "Modified: 30.4.1996 / 16:43:45 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1131
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1132
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1133
widthOf:textOrString
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1134
    "return the width (device specific) of the argument;
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1135
     the argument may be a Character, String or some Text;
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1136
     in the last case the width of the longest line in the text is returned.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1137
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1138
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1139
3483
b5f133131653 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3479
diff changeset
  1140
    |this max string|
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1141
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1142
    device isNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1143
        self errorNoDevice.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1144
        ^ 0
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1145
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1146
    replacementFont notNil ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1147
        ^ replacementFont widthOf:textOrString
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1148
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1149
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1150
    (textOrString isString) ifTrue:[
3483
b5f133131653 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3479
diff changeset
  1151
        string := textOrString string.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1152
        isFixedWidth ifFalse:[
3483
b5f133131653 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3479
diff changeset
  1153
            ^ device widthOf:string inFont:fontId
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1154
        ].
3483
b5f133131653 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3479
diff changeset
  1155
        ^ width * string size
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1156
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1157
    (textOrString isCharacter) ifTrue:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1158
        isFixedWidth ifFalse:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1159
            ^ device widthOf:textOrString asString inFont:fontId
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1160
        ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1161
        ^ width
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1162
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1163
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1164
    max := 0.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1165
    isFixedWidth ifFalse:[
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1166
        textOrString do:[:line |
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1167
            line notNil ifTrue:[
435
5288c637512e care for nonStrings when asked for the size
Claus Gittinger <cg@exept.de>
parents: 434
diff changeset
  1168
                this := device widthOf:line asString inFont:fontId.
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1169
                (this > max) ifTrue:[max := this]
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1170
            ]
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1171
        ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1172
        ^ max
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1173
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1174
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1175
    textOrString do:[:lineString |
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1176
        this := lineString size.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1177
        (this > max) ifTrue:[max := this]
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1178
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1179
    ^ max * width
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1180
1087
1e5a93e03d7f handle text-argument in withOf:
Claus Gittinger <cg@exept.de>
parents: 1067
diff changeset
  1181
    "Modified: 22.10.1996 / 17:11:14 / cg"
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1182
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1183
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1184
widthOf:aString from:start to:stop
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1185
    "return the width of a substring.
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1186
     The receiver must be associated to a device,
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1187
     for this query to be legal."
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1188
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1189
    device isNil ifTrue:[
4513
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1190
        self errorNoDevice.
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1191
        ^ 0
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1192
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1193
    replacementFont notNil ifTrue:[
4513
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1194
        ^ replacementFont widthOf:aString from:start to:stop
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1195
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1196
    (stop < start) ifTrue:[^ 0].
4513
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1197
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1198
    isFixedWidth ifFalse:[
4513
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1199
        stop-start > 10000 ifTrue:[
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1200
            ^ (stop - start + 1) * width
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1201
        ].
29b4151e98cf average size bail out out for very long lines when asking for a strings width.
Claus Gittinger <cg@exept.de>
parents: 4207
diff changeset
  1202
        ^ device widthOf:aString from:start to:stop inFont:fontId
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1203
    ].
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1204
    ^ (stop - start + 1) * width
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1205
!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1206
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1207
widthOf:aString from:startIndex to:endIndex on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1208
    "return the width of substring, if displayed on aDevice.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1209
     The argument may be a Character, String or some Text;
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1210
     in the last case the width of the longest line in the text is returned."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1211
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1212
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1213
        ^ replacementFont widthOf:aString from:startIndex to:endIndex on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1214
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1215
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1216
        ^ self widthOf:aString from:startIndex to:endIndex
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1217
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1218
    ^ (self onDevice:aDevice) widthOf:aString from:startIndex to:endIndex
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1219
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1220
    "Created: / 30.4.1996 / 17:15:20 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1221
    "Modified: / 10.9.1998 / 12:10:11 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1222
!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1223
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1224
widthOf:aString on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1225
    "return the width of aString, if displayed on aDevice.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1226
     The argument may be a Character, String or some Text;
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1227
     in the last case the width of the longest line in the text is returned."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1228
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1229
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1230
        ^ replacementFont widthOf:aString on:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1231
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1232
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1233
        ^ self widthOf:aString
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1234
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1235
    ^ (self onDevice:aDevice) widthOf:aString
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1236
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1237
    "Created: / 30.4.1996 / 17:14:18 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1238
    "Modified: / 10.9.1998 / 12:10:26 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1239
!
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1240
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1241
widthOn:aDevice
7346
a95e98332e78 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 7269
diff changeset
  1242
    "return the font's width, if used on aDevice.
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1243
     For variable pitch fonts, the width of the space character is returned.
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1244
     For fixed fonts, this is the same as minWidth or maxWidth (or any character)."
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1245
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1246
    replacementFont notNil ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1247
        ^ replacementFont widthOn:aDevice
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1248
    ].
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1249
    device == aDevice ifTrue:[
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1250
        ^ self width
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1251
    ].
2833
90f9a9f6a05d #on: -> #onDevice:
Claus Gittinger <cg@exept.de>
parents: 2805
diff changeset
  1252
    ^ (self onDevice:aDevice) width
2545
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1253
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1254
    "Created: / 30.4.1996 / 16:42:28 / cg"
829790f194cc code refactoring & cleanup
Claus Gittinger <cg@exept.de>
parents: 2433
diff changeset
  1255
    "Modified: / 10.9.1998 / 12:11:33 / cg"
2
b35336ab0de3 *** empty log message ***
claus
parents: 0
diff changeset
  1256
! !
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1257
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1258
!Font methodsFor:'queries-misc'!
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1259
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1260
direction
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1261
    device isNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1262
        self errorNoDevice
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1263
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1264
    replacementFont notNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1265
        ^ replacementFont direction
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1266
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1267
    ^ direction
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1268
!
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1269
4205
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1270
maxAscii
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1271
    "squeak compatibility"
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1272
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1273
    ^ self maxCode
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1274
!
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1275
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1276
maxCode
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1277
    device isNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1278
        self errorNoDevice
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1279
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1280
    replacementFont notNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1281
        ^ replacementFont maxCode
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1282
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1283
    ^ maxCode
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1284
!
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1285
4205
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1286
minAscii
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1287
    "squeak compatibility"
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1288
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1289
    ^ self minCode
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1290
!
e22cf28fc87a squeak stuff
Claus Gittinger <cg@exept.de>
parents: 4163
diff changeset
  1291
4023
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1292
minCode 
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1293
    device isNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1294
        self errorNoDevice
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1295
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1296
    replacementFont notNil ifTrue:[
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1297
        ^ replacementFont minCode
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1298
    ].
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1299
    ^ minCode
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1300
! !
b60e9d3335d3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4007
diff changeset
  1301
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1302
!Font methodsFor:'st-80 queries'!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1303
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1304
fixedWidth
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1305
    "return true, if this font is a fixed width font -
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1306
     for st-80 compatibility"
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1307
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1308
    ^ self isFixedWidth
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1309
!
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1310
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1311
pixelSize
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1312
    "return the height of the font in pixels -
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1313
     for st-80 compatibility"
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1314
5197
326a73815dbc changed #pixelSize
Claus Gittinger <cg@exept.de>
parents: 5186
diff changeset
  1315
    ^ pixelSize ? self height
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1316
! !
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1317
6104
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1318
!Font methodsFor:'testing'!
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1319
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1320
isAlienFont
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1321
    "answer true, if this is an alien font which does not have a device representation"
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1322
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1323
    ^ false
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1324
! !
2afb79acfffd class: Font
Stefan Vogel <sv@exept.de>
parents: 6078
diff changeset
  1325
2433
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1326
!Font::DeviceFontHandle class methodsFor:'documentation'!
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1327
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1328
documentation
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1329
"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1330
    This is used as a finalization handle for fonts.
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1331
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1332
    [author:]
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1333
        Stefan Vogel (stefan@nilpferd)
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1334
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1335
    [see also:]
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1336
        Font
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1337
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1338
    [instance variables:]
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1339
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1340
    [class variables:]
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1341
"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1342
! !
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1343
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1344
!Font::DeviceFontHandle methodsFor:'accessing'!
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1345
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1346
setDevice:aDevice fontId:anId
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1347
    "set the handles contents"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1348
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1349
    device := aDevice.
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1350
    fontId := anId.
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1351
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1352
    "Created: / 3.2.1999 / 16:08:31 / stefan"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1353
! !
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1354
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1355
!Font::DeviceFontHandle methodsFor:'finalization'!
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1356
3611
8b4384c9e660 Use #finalize instead of #disposed
Stefan Vogel <sv@exept.de>
parents: 3527
diff changeset
  1357
finalize
2433
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1358
    "some Font has been collected - tell it to the x-server"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1359
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1360
    |id|
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1361
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1362
    (id := fontId) notNil ifTrue:[
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1363
        fontId := nil.
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1364
        device releaseFont:id.
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1365
    ]
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1366
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1367
    "Created: / 3.2.1999 / 16:09:25 / stefan"
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1368
! !
b2d7a24db748 New private class DeviceFontHandle for finalization.
Stefan Vogel <sv@exept.de>
parents: 2321
diff changeset
  1369
1087
1e5a93e03d7f handle text-argument in withOf:
Claus Gittinger <cg@exept.de>
parents: 1067
diff changeset
  1370
!Font class methodsFor:'documentation'!
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1371
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1372
version
6932
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
  1373
    ^ '$Header$'
5442
218a6ae3e112 changed: #family:face:style:size:sizeUnit:encoding:
Claus Gittinger <cg@exept.de>
parents: 5253
diff changeset
  1374
!
218a6ae3e112 changed: #family:face:style:size:sizeUnit:encoding:
Claus Gittinger <cg@exept.de>
parents: 5253
diff changeset
  1375
218a6ae3e112 changed: #family:face:style:size:sizeUnit:encoding:
Claus Gittinger <cg@exept.de>
parents: 5253
diff changeset
  1376
version_CVS
6932
ab9546b8b707 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 6539
diff changeset
  1377
    ^ '$Header$'
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1378
! !
3739
909fefa92b5a Raise #drawingOnClosedDeviceSignal instead of #error
Stefan Vogel <sv@exept.de>
parents: 3663
diff changeset
  1379
5981
100d92bb2b39 class: Font
Stefan Vogel <sv@exept.de>
parents: 5907
diff changeset
  1380
434
d1697f2ff1ec care for wrong info returned by server (width < minWidth) and fix this
Claus Gittinger <cg@exept.de>
parents: 414
diff changeset
  1381
Font initialize!