What is the best way to deal with fonts in a multi-platform distributed system? If I want to use a common font across all systems to show to the user, what's the best way to do this. From the little I've been reading each platform looks to have fonts that are of the same family (ie serif, sans-serif) but with different names. CSS looks to have the functionality baked in where it will make the best selection it can of font on the users machine. Is there similar functionality either in system libraries or external libraries for Windows & Linux. I'm using C++ mainly?
Can someone point me in the right direction for documentation as well?
Thanks
fontconfig is a cross-platform library for finding fonts by either direct name (Times Roman) or common aliases like serif - it's what most modern Linux software, like the GNOME & KDE desktops, use to find fonts, and is used in conjunction with libraries like Pango for text layout and FreeType for font rasterizing.
I'd try Pango. AFAIK it is used by GTK+, Mozilla and Google Chrome (not sure about the latter).
Related
In our Qt5 application we bundle a custom font as a resource. We use only this font in the application, and rely on no other fonts.
The font we use has a whooping 128 variations (regular, bold, black, extrabold, extrabold italic, semibold, thin, condensed etc). and we have naturally decided to only bundle the tiny subset of those variations that we actually use.
To make matters more complex, the font we use exists in several versions with small changes between them.
On my development computer I have installed all the 128 variations of one version of the font in the OS itself while on the clients that run the software we can't really tell if the fonts are present or not in their OS, and if present, in which version.
We have experienced cases where the fonts looks severely different between my development computer and on the end clients. We use the font in a virtual keyboard widget and some symbols on the keys show up OK on my computer while they are missing (showing the empty box character) on the client.
So my question is, can we somehow restrain the font system in Qt to only use the fonts provided by the resources bundled with the program? That would mean that any reference to system default fonts such as Arial would simply result in our font to be used instead, or simply denied with an error.
Any insights and tips are warmly welcomed.
Thanks!
I am searching for a framework(preferably c++, but i can learn other languages too) for my application. I will write what i need:
Borderless window(no buttons,frames etc.)
Real time 3d model rendering(or at least easy way to show 2d animation made from 3d model)
Cross-platform support(not mandatory)
If there is any other details you need to know, please tell me.
Thanks in advance.
Xojo will also do what you want. It creates Windows, OS X and Linux desktop apps and has built-in support for OpenGL.
http://www.xojo.com
One of the best cross-platform Gui-Frameworks for C++ is Qt. It can do 3d-stuff using OpenGL too. However, if you only need a plain window without any controls you may want to look into the next OpenGL tutorial for some infos.
I recommend Unity.
It works in Windows, Mac, Linux, iOS, and Android. (Furthermore in some game consoles.)
Its support languages are C#, boo and js.
C# is like C++ and easy to learn.
I am trying to create a simple popup box that appears when my C++ program starts that will allow the user to enter the width, height, and length of a cube that will then be displayed in a separate window. I have been searching for a very long time, and I have yet to find a solution that will allow me to do this. Can this be done using C++, OpenGL, and GLUT? Or do I need another library to allow me to do this.
Thank you.
Jordan
Edit: I am programming a cross-platform program and cannot use Win32 to accomplish this, nor any other Window-specific function.
What are you are looking for is a graphical user interface.
There are many libraries available that interface with various input methods (for keyboard and mouse) and provide graphical output. Each one has it's own model.
There are various models, but the most common one is hierarchical.
If you are looking for a learning experience, I suggest you do some Googling on how to make your own GUI.
If you are simply looking for a convenient library that does the hard-yards for you, I strongly recommended AntTweakBar:
AntTweakBar is a small and easy-to-use C/C++ library that allows programmers to quickly add a light and intuitive graphical user interface into graphic applications based on OpenGL, DirectX 9, DirectX 10 or DirectX 11 to interactively tweak parameters on-screen....AntTweakBar works with GNU/Linux, Windows and OSX
It was designed not as a monolithic batteries-included do-all library (such as Qt, another alternative), but as a simple and lightweight tweaking interface (hence the name).
There are several examples available and it's API is quite simple, so it should be reasonably easy to pick up.
There's also GWEN. It is not a well known library, but I find it extremely versatile and easy to use.
Facts- Coded in C++- Fully Namespaced- All standard window controls- Behaves like you'd expect- Lightweight (No XML readers, no font loaders/renderers, no texture loaders - your engine should be doing all this stuff!)- Easy to integrate (comes with renderers for Windows GDI, Allegro, OpenGL, DirectX and SFML)- Totally portable & cross platform- Doesn't need RTTI- Released under a "do whatever you want" MIT license.
Opinionated note: I prefer GLFW over GLUT. It provides a nicer model, and is still in active development (unlike GLUT which has not been updated in a significantly long time). At least use freeGLUT
You need to use another external gui library to do it. If you're doing it for windows, MFC is a good option. Or check library OpenGL User Interface Library.It's cross platform.
Here some libraries
Maybe this link helps you
Your statement saying that you wish to have a popup box implies your wish to use the underlying windowing system, regardless of the OS.
If you want to be cross-platform, there are quite a few libraries you can use that either emulate or actually use the underlying windowing system, such as wxWidgets.
If using such a library is not an option, you can always use the OpenGL window to draw text and emulate your popup yourself, but that's a bit more work, imo.
To provide a Windows Explorer-like view of the user's system, we have been using the shell controls from LogicNP (formerly Sky Software), but these have deficiencies, e.g., no support for Win7 libraries. The vendor has not responded to our inquiries about updates, so we're looking to replace the package.
Requirements:
ActiveX (no managed code or MFC)
Tree and list views of the system
Per-item checkboxes
32- and 64-bit versions
Any recommendations for a replacement product?
TIA.
Based on the fact that you said you need to support Windows XP:
I accomplished this by using the Shell API to enumerate files & folders and then I used custom drawing to draw the correct icons for each shell item in a standard listview control. It was a fair bit of work and I don't know exactly what you need your shell view to accomplish, but this may be the best option.
This might be a good place to start reading:
http://msdn.microsoft.com/en-us/library/bb776889.aspx
What is a cross-platform C++ GUI framework that has good skinning ability?
So I could (and give the users) the ability to customise the GUI.
The Qt framework allows for changing the appearance of widgets using style sheets (using css). See: http://qt-project.org/doc/qt-5.0/qtwidgets/stylesheet.html.
EDIT: As you're looking for something like wxSkin, first why not use it in the first place?
Then, if you don't want to use wxSkin, have a look at Juce. Qt's goal is definitely not themeable GUIs although windows masks and stylesheets are a way to implement them. There is the QSkingObject project on Qt-Apps.org but last time I checked it I found that the quality of the code was poor (of course this is subjective and argumentative).
You can have a look at Juce which has a dual license: GPL and commercial.
Qt (LGPL) has stylesheets to style the widgets, but it still let the operating system draw the windows decorations unless you instruct it to draw frameless windows and draw the decorations by yourself.
However, think twice before going the skinned application route. A typical example is Songbird (written in XUL) which used frameless windows and painted its own titlebar and windows buttons. Then they back-pedaled and switch back to system windows decorations after many users complained.
Qt has convenient support for that with Qt style sheets et al. The Qt labs blog had an example post that might give you an idea.
As other say, Qt's stylesheets work well.
You also have the option to customize the drawing in Qt by overriding QStyle. You could allow users to use plugins (exporting a QStyle implementation) to make it super-customizable.
(Then, I don't know if your users are C++ coders or not...)
I've used Juce (compatible with Windows, Linux and Mac OS X) in the past and it has a LookAndFeel class (gotta love the name) that allows you to do that.
I'd have to vote for XULRunner because it's extremely skinnable. However, it's not pure C++: application code is written in JavaScript while extensions can be implemented as C++ XPCOM components.